docker-compose配置Nginx反向代理禅道

  • 作者:lwj
  • 分类:Docker
  • 发表日期:2020-05-03 12:31:00
  • 阅读(1135)
  • 评论(0)

本次项目会用到3个镜像分别是nginx、mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可

mysql与禅道镜像下载与构建参考:mysql   禅道

目录介绍

cloud                           # 文件名
+----init                       # mysql初始化配置目录,挂载到容器
|    +----init.sql              # mysql初始化脚本,挂载到容器
+----mysql_db                   # mysql的挂载目录,挂载到容器
|    +----mysqld.cnf            # mysql的配置文件,挂载到容器
+----nginx                      
+----conf.d                     # nginx服务配置目录,挂载到容器
     +----default.conf          # nginx服务配置文件,挂载到容器
+----log 
     +----host.access.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

mysql测试脚本init.sql

create database test;
use test;
create table user
(
    id int auto_increment primary key,
    username varchar(64) unique not null,
    email varchar(120) unique not null,
    password_hash varchar(128) not null,
    avatar varchar(128) not null
);
insert into user values(1, "zhangsan","1111@qq.com","passwd","password");
insert into user values(2, "lisi","22222222@qq.com","passwd","password");
insert into user values(3, "wangwu","333333@qq.com","passwd","password");

nginx配置文件default.conf

server {
    listen       80;
    server_name  localhost;
    # 日志
    access_log  /var/log/nginx/host.access.log  main;
    error_page   500 502 503 504  /50x.html;
    # 50X报错页面
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # 反向代理禅道配置
    location / {
	    proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
	    proxy_pass http://182.120.0.3;    
   }
}

部署

sudo docker-compose up -d
# 以守护进程模式(-d)运行

查看网络

docker network ls

docker新增了两个网络定义的网络 — filename_my_backend 和 filename_my_frontend,如图:

查看容器的运行情况

docker ps -a

禅道安装配置参考博客:Docker部署安装禅道

容器启动运行成功,如图:

客户端浏览器通过80端口访问禅道成功,反向代理配置ok

 

不积跬步无以至千里

觉得不错,支持一下!

提交评论

您尚未登录,登录之后方可评论~ 登录 or 注册

评论列表

暂无评论
返回顶部

建议反馈

1. 可在博文底部留言评论

2. 发邮件到i_suichuan@163.com