# devops 后台使用的 layui 模板来自[这个项目](https://gitee.com/aun/Timo) 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 之间的关系如下图所示: ![](https://blog.reghao.cn/file/e4fc2c65c2f44374a09dbb916499a5bf.png) > 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 用户密码