• 基于GitLab CI、Docker的Node.js持续集成部署方案


    理论部分不赘述,一张图说完整个流程,实操以Centos 7和root用户为例

    ci-docker

    GitLab Runner安装和配置

    1、 在部署机器安装CI Runner

    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
    

    2、 注册Runner并绑定到CI

    gitlab-ci-multi-runner register
    #  url和token,在Git项目的 /runners页面可获取,step by step填写
    

    配置信息保存在/etc/gitlab-runner/config.toml

    3、Git根目录配置 .gitlab-ci.yml

    stages:
      - deploy
    
    cache:
      paths:
        - node_modules/ #部分需要重复利用又被gitignore的文件
    
    before_script:
      - npm install
      - npm run static-prod
      - npm run vue
    
    deploy_test:
      stage: deploy
      only:
        - dev
      script:
        - rsync -azp --delete --exclude=.git current_dir deploy_dir    
        - docker exec -d nodejs-xxx-test bash -c “pm2 restart xxx”
    ...other task
    

    Docker安装和配置

    1、安装Docker和启动

    yum update
    curl -fsSL https://get.docker.com/ | sh
    systemctl enable docker.service
    systemctl start docker
    

    2、用阿里云镜像服务器加速

    cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
    sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
    systemctl daemon-reload
    service docker restart
    

    加速器地址,请到容器Hub服务控制台查看

    3、自定义镜像

    # 拉取基础镜像
    docker pull centos:latest
    # 交互模式运行基础镜像
    docker run -i -t centos:latest
    # 安装Node环境和pm2以及app目录等
    $root@xxxx: curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    $root@xxxx: yum -y install nodejs
    $root@xxxx: npm install pm2 -g
    $root@xxxx: mkdir /app/nodejs/
    $root@xxxx: exit
    

    4、提交自定义镜像

    docker commit xxxx(上面$root@部分,容器id) centos/node
    

    5、后台运行镜像

    docker run --name="nodejs-xxx-test" --restart=always -d -p 8081:3131 -v deploy_dir:/data/nodejs/ centos/node /usr/bin/bash -c 'cd /data/nodejs/;pm2 start ua.json --env test --no-daemon'
    

    -- restart=always是让容器随docker开机启动

    bash里启动pm2,需要带上--no-daemon,防止docker后台运行后,pm2退出

    6、把gitlab-runner添加到docker权限组

    usermod -aG docker gitlab-runner
    

    Nginx域名绑定到容器的端口

    server {
        listen  80;
        server_name xxx.xxx.com;
        access_log  /var/log/nginx/xxx.access.log;
        error_log /var/log/nginx/xxx.error.log;
        location / {
            proxy_pass http://127.0.0.1:8082;
        }
    }
    

    过程中可能因为内核设置,会出现502,不能反向代理,需要关闭

     ##如果SELinux status参数为enabled即为开启状态
    /usr/sbin/sestatus -v     
    ...
    SELinux status:                 enabled
    ...
    ##将SELINUX=enforcing改为SELINUX=disabled
    vim /etc/selinux/config
    
    setsebool -P httpd_can_network_connect 1
    
    ## 重启机器
    reboot
  • 相关阅读:
    搭建Flask+Vue及配置Vue 基础路由
    vue dev 环境下的跨域访问
    vue 调用常量的config.js文件
    PyCharm 通过Github和Git上管理代码
    MongoDB 配置服务
    2018年11月12日
    搭建 flask 应用
    Python 错误总结
    搭建 Django 平台
    go实现主线程等待子线程都运行完再退出
  • 原文地址:https://www.cnblogs.com/dillonmei/p/12551906.html
Copyright © 2020-2023  润新知