准备工作
- 打包生成.next目录
yarn build
- 确保BUILD_ID 的版本号和server static一致
docker化node应用
生成Dockerfile & .dockerignore文件
touch Dockerfile//生成docker文件
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是一个坑,要注意
购买服务器
阿里云自行选择服务器
- 创建实例
- ssh root@公网ip //登陆服务器
- ssh-copy-id root@公网ip //上传私钥
- 修改host文件
公网ip 变量名
//下次登陆就很简单啦,直接使用ssh root@变量名 就好啦
- 创建单独的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
- 安装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
- 服务器内部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
- 阿里云安全策略组添加要访问的端口
使用部署脚本
添加bin/deploy.sh 文件
chmod +x bin/deploy.sh //添加可执行权限
ssh xiong@nextjs "sh /home/。。。" //执行服务器的脚本
或者
ssh xiong@nextjs 'bash -s' < bin/deploy.sh//执行本地的脚本
- 使用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