部署next js项目

3,464 阅读2分钟

准备工作

  1. 打包生成.next目录

截屏2022-04-30 下午5.17.00.png

yarn build
  1. 确保BUILD_ID 的版本号和server static一致

截屏2022-04-30 下午5.15.14.png

docker化node应用

生成Dockerfile & .dockerignore文件

touch Dockerfile//生成docker文件

截屏2021-06-14 下午5.52.29.png Dockerfile配置

FROM node:14
# Create app directory
WORKDIR /usr/src/app
COPY package.json ./
COPY yarn.lock ./
RUN yarn install
COPY . .
EXPOSE 3000
CMD [ "yarn", "start" ]

.dockerignore配置

node_modules
*.log

参考

构建镜像

docker build . -t yourUsername/node-web-app
docker run -p 3000:3000 -d yourUsername/node-web-app
浏览器输入 http://localhost:3000 查看是否成功,如果失败docker logs id 查看

host是一个坑,要注意

截屏2021-06-16 上午12.10.10.png

购买服务器

阿里云自行选择服务器

  1. 创建实例
  2. ssh root@公网ip //登陆服务器
  3. ssh-copy-id root@公网ip //上传私钥
  4. 修改host文件
公网ip 变量名
//下次登陆就很简单啦,直接使用ssh root@变量名  就好啦
  1. 创建单独的user
ssh root@id//登陆
adduser username//添加用户
su - username//切换
ssh username@id//使用用户登陆
ssh-copy-id username@id

6.安装docker
Install on Ubuntu 下面是Ubuntu的代码,如果你的服务器是其他版本,请自行查阅docker官网文档

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
    
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

7.user添加分组 (解决非root用户无法运行docker)

cat /etc/group 查看分组
usermod -a -G docker username 
  1. 安装node && yarn (用来打包)
curl -fsSL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install gcc g++ make
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt-get update && sudo apt-get install yarn
  1. 服务器内部docker化
touch .env.local// 添加local文件,因为项目需要,不需要可不做
//安装依赖性
yarn
//打包代码
yarn build
//创建文件夹
mkdir blog-data
//开启数据库
docker run --network=host -v /home/jingsong/blog-data:/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=blog -e POSTGRES_HOST_AUTH_METHOD=trust -d postgres:12.2
yarn typeorm:build //打包typerom
yarn migration:run//创建表

//生成镜像
docker build -t aslanxiong/node-web-app .
//运行镜像
docker run --network=host -p 3000:3000 -d aslanxiong/node-web-app
  1. 阿里云安全策略组添加要访问的端口

使用部署脚本

添加bin/deploy.sh 文件
chmod +x bin/deploy.sh //添加可执行权限
ssh xiong@nextjs "sh /home/。。。" //执行服务器的脚本
或者
ssh xiong@nextjs 'bash -s' < bin/deploy.sh//执行本地的脚本
  1. 使用nginx
docker run --name nginxNextjs -d nginx:1.19.1

docker run --name nginxNextjs --network=host -v /home/xiong/app/nginx.conf:/etc/nginx/conf.d/default.conf -v /home/xiong/app/.next/static/:/home/xiong/nginx/html/_next/static/ -d nginx:1.19.1