CI/CD

reghao 0b8170a5ec 添加 OssConfig, 将 aliyun-oss 相关配置存储到数据库, 避免敏感数据出现在配置文件中 11 months ago
agent 8b7fde268f update agent module 11 months ago
common 860e6ffd26 PackType 添加一个 staticFiles 值, 表示前端静态文件打包, 并添加相应的 StaticPack 实现 11 months ago
deployer f27fd1c3aa 1.调整 Sftp#exec 方法中获取结果和错误的代码 1 year ago
logstash 3247ed7946 全局替换 bnt 为 devops 1 year ago
mgr 0b8170a5ec 添加 OssConfig, 将 aliyun-oss 相关配置存储到数据库, 避免敏感数据出现在配置文件中 11 months ago
zzz 0496ce75ca 更新脚本和 README.md 1 year ago
.gitignore 3247ed7946 全局替换 bnt 为 devops 1 year ago
README.md 0496ce75ca 更新脚本和 README.md 1 year ago
pom.xml ba5b978d7a web 模块更名为 mgr 1 year ago

README.md

devops

后台使用的 layui 模板来自这个项目 master 分支的 a806fd0a 版本

依赖

  • os:Linux
  • jdk:11
  • maven:3.9
  • mysql:5.7

模块

devops 项目模块:

  • agent > 监听 127.0.0.1:60001 端口 > > 监听这个端口的目的是防止系统中同时运行多个 agent 实例 > > 代理节点, 用于管理机器, 部署应用, 管理应用状态等
  • common > 公共依赖
  • deployer > 用来部署 mgr 和 agent 的工具
  • logstash > 日志收集器
  • mgr > 监听 4020 端口 > > 通过这个端口对外提供 HTTP 服务 > > 管理节点, 用于管理 agent 节点, 构建部署应用等

mgr 和 agent

devops-mgr 和 devops-agent 之间的关系如下图所示:

agent 和 mgr 之间使用 websocket 进行通信

每台被管理的机器上都需要且只能一个部署 agent 实例

在 agent 的配置文件中指定 mgr 的地址

agent 使用 Linux /etc/machine-id 文件中的字符串作为 machineId 在 mgr 中唯一地标识一台机器

如果 VirtualBox 中使用的 vdisk 是通过 clonehd 得到, 那么多台 VM 中 /etc/machine-id 文件的内容是相同的, 此时需要在 VM 中执行 devops/zzz/reset_machine_id.sh 脚本来重置 machine-id

只能部署一个 mgr 实例

可以在一个节点上同时部署 mgr 和 agent 实例

构建部署

pull 项目源码

cd ~/Downloads
git clone https://git.reghao.cn/reghao/devops.git

初始化 MySQL

cd ~/Downloads/devops/zzz
bash db_init.sh

执行 db_init.sh 会自动创建 devops 项目需要的数据库并初始化数据库表

需要自行指定 db_init.sh 脚本中的 host, username, password 等变量值

构建并运行

cd ~/Downloads/devops/zzz
bash build_jar.sh

执行 db_init.sh 会自动构建 devops 各应用 jar 包, 并运行 devops-mgr 应用

build_jar.sh 脚本中的 proj_dir 变量默认是 ~/Downloads/devops

mvn 构建默认使用 dev 环境, 所以需要修改 web 模块 resources/application-dev.yml 配置文件中的第三方服务配置

运行 devops-mgr 应用前需要根据环境修改 devops/mgr/bin/devopsmgr.yml 文件中的配置

mysql 配置

app.baseDir 指定 mgr 产生的数据存放的位置

默认执行 devops/mgr/bin 目录中的 start.sh 脚本, 此时使用 devopsmgr.yml 配置文件

如果要使用 resources/application-dev.yml 配置文件, 则执行 start1.sh 脚本

停止应用

cd ~/Downloads/devops/web/bin
bash shutdown.sh

执行 shutdown.sh 会结束 devops-mgr 应用

部署 devops-agent

  • 1.修改 devops/agent/bin/devopsagent.json 文件中的配置 > mgrAddress 可以是 IP 地址, 也可以是域名 > > 如果使用域名, 那么 mgrPort 应使用 Nginx 中的配置
  • 2.使用 cd 命令切换到 devops/agent/bin 目录
  • 3.执行 start.sh 脚本

部署多节点

如果要将 devops-mgr 和 devops-agent 部署到多个节点(注意, devops-mgr 只能部署到多个节点中的某个节点), 可以使用 devops-deployer 工具, 它本质上是一个 SFTP/SSH 客户端, 在和节点建立 SSH 连接后, 执行相应的 Shell 命令.

  • 1.使用 devops/zzz/servers2.csv 模板文件 > 在该文件中填写节点的相应信息, 必须指定密码或私钥文件绝对路径
  • 2.然后根据需要执行 devops/zzz/deploy_mgr.sh 或 devops/zzz/deploy_agent.sh 脚本 > 首先要设置脚本中 proj_dir, remote_dir 和 server_file 这三个变量的值

Nginx 配置

devops-mgr 应用通常是经由 Nginx 反向带来来访问, 并且 Nginx 还需要提供对 websocket 的支持.

支持 websocket

nginx.conf 文件中配置 websocket:

map $http_connection $connection_upgrade {
        "~*Upgrade" $http_connection;
        default keep-alive;
    }

代理配置

Nginx 代理配置示例:

server {
   listen 80;
   server_name devops.reghao.cn;
   access_log off;

   location / {
      proxy_set_header HOST $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_pass http://127.0.0.1:4020;
   }
   location /ws {
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_cache off;
      proxy_http_version 1.1;
      proxy_buffering off;
      proxy_read_timeout 100s;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_pass http://127.0.0.1:4020;
   }
}

使用

至此, devops 系统已部署并处于运行状态, 你可通过自己域名或直接通过 IP:PORT 访问系统.

devops-mgr 中默认只有一个 admin 用户, 帐号和密码分别为 admin 和 123456

强烈建议首次登录后修改 admin 用户密码