本次项目会用到3个镜像分别是nginx、mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可
目录介绍
cloud # 文件名 +----mysql_db # mysql的挂载目录,挂载到容器 | +----mysqld.cnf # mysql的配置文件,挂载到容器 +----nginx | +----conf.d # nginx服务配置目录,挂载到容器 | +----default.conf # nginx服务配置文件,挂载到容器 | +----log | +----host.access.log # nginx日志文件,挂载到容器 | +----error.log # nginx错误日志文件,挂载到容器 | +----html | +----50x.html # nginx报错50X返回页面 +----zentao # 禅道挂载目录,挂载到容器 +----.env # docker-compose环境变量配置文件 +----docker-compose.yml # docker-compose的运行文件
配置
环境变量 — .env文件
# mysql信息配置 MYSQL_IMAGE=mysql:5.7 MYSQL_ROOT_PASSWORD=password MYSQL_IP=192.110.0.2 # 禅道信息配置 ZENTAO_IMAGE=zentao:latest ZENTAO_IP_BACKEND=192.110.0.10 ZENTAO_IP_FRONTEND=182.120.0.3 # nginx信息配置 NGINX_IMAGE=nginx:mainline-alpine-perl NGINX_IP=182.20.0.2 # network信息配置 BACKEND_SUBNET=192.110.0.0/16 FRONTEND_SUBNET=182.120.0.0/16
docker-compose.yml
version: '3.1' services: mysql: image: ${MYSQL_IMAGE} # mysql镜像 container_name: "mysql_5.7" # 容器名称 volumes: - ./mysql_db/mysqld.cnf:/etc/mysql/mysql.conf.d/ # 挂载mysql配置文件 - ./mysql_db/datadir:/var/lib/mysql/ # 挂载mysql数据文件 restart: always # 开机启动 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # 设置ROOT账号密码 ports: - "3306:3306" networks: my_backend: # 加入网络-my_backend ipv4_address: ${MYSQL_IP} # 指定的IP地址 zentao: image: ${ZENTAO_IMAGE} # 禅道镜像 container_name: "zentao_latest" # 容器名称 volumes: - ./zentao/zentaopms:/app/zentaopms # 挂载禅道源码路径 - ./zentao/mysql:/var/lib/mysql # 禅道自带的mysql挂载到本机 restart: always # 开机启动 environment: - MYSQL_ROOT_PASSWORD=password # 禅道镜像mysql的root账号密码 ports: - "80:8010" # 容器80端口映射宿主机8010端口 networks: my_backend: # 加入网络-my_backend ipv4_address: ${ZENTAO_IP_BACKEND} # 指定IP地址 my_frontend: # 加入网络-my_frontend ipv4_address: ${ZENTAO_IP_FRONTEND} # 指定的IP地址 nginx: image: ${NGINX_IMAGE} # nginx镜像 container_name: "nginx_latest" # 容器名称 volumes: - ./nginx/conf.d:/etc/nginx/conf.d # 挂载nginx配置文件 - ./nginx/log/host.access.log:/var/log/nginx/host.access.log # 挂载nginx日志文件 - ./nginx/html:/usr/share/nginx/html # 挂载nginx首页 restart: always # 开机启动 ports: - "80:80" # 容器80端口映射宿主机80端口 - "443:443" # 容器443端口映射宿主机443端口 networks: my_frontend: # 加入网络-my_frontend ipv4_address: ${NGINX_IP} # 指定的IP地址 networks: my_backend: # 自定义网络-my_backend driver: bridge # 定义的网络模式 ipam: config: - subnet: ${BACKEND_SUBNET} # 定义网段 my_frontend: # 自定义网络-my_frontend driver: bridge # 定义的网络模式 ipam: config: - subnet: ${FRONTEND_SUBNET} # 定义网段
mysql配置文件mysqld.cnf
[mysqld] explicit_defaults_for_timestamp=true character-set-server=utf8 collation-server=utf8_unicode_ci init_connect='SET NAMES utf8;' max_allowed_packet=10M wait_timeout=288000 interactive_timeout = 288000 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' skip-name-resolve pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql/ symbolic-links=0
nginx配置文件default.conf
server { listen 80; server_name localhost/zentaopms; # 日志 access_log /var/log/nginx/host.access.log main; # 错误日志 error_log /var/log/nginx/error.log error; # 二级目录代理禅道 location /zentaopms { proxy_pass http://182.120.0.3/zentaopms; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 首页 location / { root /usr/share/nginx/html; index index.html index.htm; } # 50X错误页 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
部署
sudo docker-compose up -d # 以守护进程模式运行(-d)
查看网络
docker network ls
docker新增了两个网络定义的网络 — filename_my_backend 和 filename_my_frontend,如图:
查看容器的运行情况
docker ps -a
禅道安装配置参考博客:Docker部署安装禅道
容器启动运行成功,如图:
修改禅道源码
通过8010端口访问禅道并安装成功
修改禅道配置文件my.php
sudo vim /app/zentaopms/config/my.php # 将 $config->requestType修改成GET $config->webRoot修改成你的二级目录/zentaopms/ # $config->requestType = 'PATH_INFO'; $config->requestType = 'GET'; # $config->webRoot = getWebRoot(); $config->webRoot = '/zentaopms/';
重启禅道容器后, 访问禅道发现了个问题:禅道的静态资源无法加载(因为二级目录问题,无法正确获取),修改nginx
配置对静态文件做个处理,在配置文件default.conf
加个location
, 如下:
# 静态文件代理到nginx下/usr/share/nginx/html/ location ~*\.(ico|gif|jpg|jpeg|png|bmp|swf|css|js|eot|svg|ttf|woff|woff2|properties|json)$ { root /usr/share/nginx/html/; }
将禅道源代码下的静态复制到/usr/share/nginx/html/zentaopms, nginx的/usr/share/nginx/html/文件和禅道源码源码都挂载到了宿主机,直接宿主机下操作就可以,这样子nginx的html文件储存静态文件,相当于一个cdn的作用,复制结果如下:
如此,客户端浏览器就可通过二级目录访问禅道, 如下图:
不积跬步无以至千里
原文链接:https://blog.csdn.net/weixin_43507959/article/details/105903396
© 版权声明
声明📢本站内容均来自互联网,归原创作者所有,如有侵权必删除。
本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。
THE END