dokcer-compose.yml
version: "2"
services:
nginxproxy:
container_name: nginx-proxy
restart: always
image: nginx
ports:
- 443:443
- 80:80
volumes:
- ./Nginx/nginx.conf:/etc/nginx/nginx.conf
- ./Nginx/conf:/etc/nginx/conf.d
- ./Nginx/cert:/etc/nginx/cert
- ./Nginx/log:/var/log/nginx
- ./Projects/basePage:/usr/share/nginx/html
logging:
driver: "json-file"
options:
max-size: "50m"
webviewserver:
container_name: webviewserver
restart: always
build: ./Projects/webview/server
ports:
- "3004:3004"
logging:
driver: "json-file"
options:
max-size: "50m"
volumes:
- ./Projects/webview/server:/server
webview:
container_name: webview
restart: always
image: nginx
ports:
- 10000:80
volumes:
- ./Projects/webview/html:/usr/share/nginx/html
Dockerfile
FROM keymetrics/pm2:latest-alpine
WORKDIR /server
EXPOSE 3000
CMD ["pm2-runtime", "start", "process.json"]
process.json
{
"name": "serverName",
"script": "./app.js",
"exec_mode": "cluster",
"instances": 1,
"wait_ready": true,
"listen_timeout": 10000,
"kill_timeOut": 20000,
"env": {
"NODE_ENV": "pro",
}
}
留意配置中映射的端口及运行的环境
通过git的push tag命令将更新的代码自动更新至服务器,并重启docker使更新生效
main.yml
name: Manage Publish With Dev # 自动部署的名称-云平台
on:
push:
tags: # 当我们提交代码为tag 是以'v'开头的时候才会触发自动部署到服务端 如 git push tag v0.1.0
- 'mv*'
jobs:
#c-server推送
build-and-deploy:
runs-on: ubuntu-latest # 运行环境,告诉它运行在什么环境
steps: # 步骤
# 第一步:下载源码(CI/CD拉取代码到自己的本地)
- name: Checkout
uses: actions/checkout@master
# 对应项目目录,打包静态文件
- name: Build
uses: actions/setup-node@master
- run: cd ./web/canteen && npm install # 安装第三方包
- run: cd ./web/canteen && npm run build:dev # 打包
# 文件传输
- name: Deploy to webView
uses: AEnterprise/rsync-deploy@1.0.1 # 使用别人包装好的步骤镜像
env:
DEPLOY_KEY: ${{ secrets.SSH_PRIVATE_KEY }} # 引用配置,SSH私钥
ARGS: -avz --delete --exclude='*.pyc' # rsync参数,排除.pyc文件
SERVER_PORT: '${{ secrets.PORT }}' # SSH端口
FOLDER: ./web/canteen/dist/* # 要推送的文件夹,路径相对于代码仓库的根目录
SERVER_IP: ${{ secrets.HOST }} # 引用配置,服务器的host名(IP或者域名domain.com)
USERNAME: ${{ secrets.USERNAME }} # 引用配置,服务器登录名
SERVER_DESTINATION: /root/Projects/canteenmid/html/canteen # 部署到目标文件夹
# Server
- name: Deploy to midServer
uses: AEnterprise/rsync-deploy@1.0.1 # 使用别人包装好的步骤镜像
env:
DEPLOY_KEY: ${{ secrets.SSH_PRIVATE_KEY }} # 引用配置,SSH私钥
ARGS: -avz --delete --exclude='*.pyc' # rsync参数,排除.pyc文件
SERVER_PORT: '${{ secrets.PORT }}' # SSH端口
FOLDER: ./web/server/* # 要推送的文件夹,路径相对于代码仓库的根目录
SERVER_IP: ${{ secrets.HOST }} # 引用配置,服务器的host名(IP或者域名domain.com)
USERNAME: ${{ secrets.USERNAME }} # 引用配置,服务器登录名
SERVER_DESTINATION: /root/Projects/canteenmid/server/ # 部署到目标文件夹
# 第四步,重启docker服务
- name: Deploy
uses: appleboy/ssh-action@master # 使用ssh链接服务器
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.PORT }}
script: |
cd /root
./script/update.sh canteenmid
触发方式
git tag // 查询所有版本
git tag mv1.0.0 // 设定新版本版本号为1.0.0
git push origin mv1.0.0 // 提交1.0.0版本
update.sh 脚本文件 需根据自身不同的目录结构更改
作用:进入docker 容器中,平滑重启服务
CNAME=$1
main(){
cd ..
cd Projects
cd $CNAME
cd server
npm install
cd /root
docker exec -i $CNAME"server" /bin/sh -c "pm2 reload all && exit"
}
main