【部署】Docker + Github Aciton 自动化部署 vue 项目

前言

在网上搜索了很多资料,都是不成功的,,或者说都是打包好再推送过去。
那么我的思路是代码直接推到Github,让它
1、自动帮我打包成镜像,推到我的远端仓库;
2、连接我的服务器,拉取镜像更新,生成容器;

一、安装 Docker

我使用的服务器是 CentOS 7
然后根据官网的教程安装

二、创建配置文件

Docker 需要在项目根目录创建三个文件(Dockerfile、nginx.conf、.dockerignore、)
Github Aciton 也需要一个配置文件(.github\workflows\schedule.yml)

Dockerfile

FROM node:14
COPY ./ /app
WORKDIR /app
RUN npm install -g pnpm
RUN pnpm config set registry https://registry.npm.taobao.org
RUN pnpm install && pnpm run build

FROM nginx
RUN mkdir /app
COPY --from=0 /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

--from=0​​ 参数,从前边的阶段中拷贝文件到当前阶段中,Dockerfile中包含多个FROM语句时,0代表第一个阶段。

.dockerignore

设置 .dockerignore 文件能防止 node_modules 和其他中间构建产物被复制到镜像中导致构建问题。

**/node_modules
**/dist

nginx.conf

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
 worker_connections  1024;
}
http {
 include       /etc/nginx/mime.types;
 default_type  application/octet-stream;
 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';
 access_log  /var/log/nginx/access.log  main;
 sendfile        on;
 keepalive_timeout  65;
 server {
   listen       80;
   server_name  localhost;
   location / {
     root   /app;
     index  index.html;
     try_files $uri $uri/ /index.html;
   }
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
     root   /usr/share/nginx/html;
   }
 }
}

.github\workflows\schedule.yml

这里的配置文件是触发自动化的关键,通过检测 push 代码触发。

schedule.yml

name: CI/CD
# 触发条件为 push
on: [push] # 执行时机
# 任务
jobs:
  test:
    # 运行的环境
    runs-on: ubuntu-latest
    # 步骤
    steps:
      - uses: actions/checkout@v2 # git pull
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14
      - name: 打包镜像, 上传 Docker Hub
        run: |
          docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
          docker build -t bpmn-camunda-image  .
          docker tag bpmn-camunda-image ${{ secrets.DOCKER_REPOSITORY }}
          docker push ${{ secrets.DOCKER_REPOSITORY }}:latest

      - name: 登录服务器, 执行脚本
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          password: ${{ secrets.SSH_PASSWORD }}
          script: |
            docker stop bpmn-camunda
            docker rm bpmn-camunda
            docker rmi ${{ secrets.DOCKER_REPOSITORY }}:latest
            docker pull ${{ secrets.DOCKER_REPOSITORY }}:latest
            docker run -d -p 10001:80 --name bpmn-camunda ${{ secrets.DOCKER_REPOSITORY }}:latest

需要在 Github => Settings => Security => Actions secrets=>New repository secret配置一些变量。
DOCKER_PASSWORD、DOCKER_USERNAME、DOCKER_REPOSITORY需要在 Docker Hub 注册,创建自己的仓库,生成 token。

{
  "DOCKER_PASSWORD":"在 dockerhub 生成的 token",
  "DOCKER_USERNAME":"dockerhub 的用户名:penglianger",
  "DOCKER_REPOSITORY":"仓库:penglianger/main",
  "SSH_HOST":"服务器ip: xxx.xxx.xxx.xxx",
  "SSH_USERNAME":"服务器名称: root",
  "SSH_PASSWORD":"服务器密码: xxxx",
}
第一次执行不设置这三个,或者手动先执行一遍
docker stop bpmn-camunda
docker rm bpmn-camunda
docker rmi ${{ secrets.DOCKER_REPOSITORY }}:latest

三、访问

由于这句命令: docker run -d -p 10001:80 --name bpmn-camunda ${{ secrets.DOCKER_REPOSITORY }}:latest

所以我们可以通过访问服务器+端口号 10001就可以访问了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_pengliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值