欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Docker 部署 Zendo 和 Nginx 反向代理设置

最编程 2024-04-18 11:49:43
...

简单介绍

禅道作为项目管理软件,提供了多样化的一键安装包,可以减少很多工作,这次也是因为在之前都是源码部署,这次就想着使用 docker 的形式部署。

Docker 版的 禅道内置了数据库、 Apache 和 PHP 等运行环境,可以拿来就能用。

这次也是趁着这个机会,记录自己部署的经过,以便自己或看这篇文章的你有用到的时候能够提供一点点帮助。

获取禅道 Docker 版

在计算机上已经安装了Docker 的话,可以直接使用命令行拉取禅道的 Docker 镜像:

格式为 docker pull easysoft/zentao:[标签]

例如拉取开源15.7.1版:

docker pull easysoft/zentao:15.7.1

运行禅道

等待下载完成就可以运行镜像,下面的内容参考禅道的中文指南,请根据自身实际情况修改。

docker run --name [容器名] -p [主机端口]:80 -v [主机禅道目录]:/www/zentaopms \
       -v [主机mysql目录]:/var/lib/mysql \
       -e MYSQL_ROOT_PASSWORD=[数据库密码] -d easysoft/zentao:[镜像标签]

容器名:启动的容器名字,可随意指定;

主机端口:主机端口为web访问端口;

主机禅道目录:可以不指定,但是为了方便禅道代码、附件等数据的持久化,强烈建议指定。非升级情况需指定空目录;

主机mysql目录:可以不指定,但是为了方便禅道数据持久化,强烈建议指定。非升级情况需指定空目录;

数据库密码: 容器内置 MySQL 用户名为 root,默认密码 123456,如果不修改可以不指定该变量,如果想更改密码可以设置 MYSQL_ROOT_PASSWORD 变量来更改密码;

镜像标签:禅道版本。

如果服务器只运行一个禅道项目,也没有反向代理的需求的话,可以选择直接纯 Docker 的方式运行,不需要再往下看 Nginx 的相关配置了。

纯 Docker 的方式运行可以通过 IP 加端口号的形式访问,IP 即为服务器的 IP,端口号即为运行镜像时设置的主机端口。

如果想要通过域名的形式访问,先在域名商处配置域名指向,接着在服务器上运行禅道镜像时将 主机端口 设置为 80 端口,接着进入容器配置一下 Apache 的域名,应用设置后就可以通过域名的形式访问了。

配置 Nginx

因为我自己的还有其他项目在服务器上运行,所以我继续使用了 Nginx 的反向代理,有一说一是真的方便(_)。

这里提供简单的 Nginx 配置示例,将数据转发到 docker 对应的端口上,这里指定的是 10086,实际情况根据你自己设置的修改。

注意要设置转发的请求头信息,否则禅道无法获取这些信息,无法进行安装,无限重复跳转到第一步安装上。

server {
    listen        80;
    server_name  localhost;

    location / {
        proxy_pass   http://127.0.0.1:10086;
        proxy_set_header Host $host;
    }
}

问题及解决方案

Q:无法安装,配置数据库信息后无法进入下一步,无限跳转到第一步安装步骤页面。

发现这个问题的时候,一开始是直接在容器中查看,发现没有日志、没有写入文件,导致无法排查问题。

后来在本地直接运行容器,居然一路畅通无阻的完成了安装,至此判断了问题是在 Nginx 的转发上。

从源码上看,是因为 $_POST 获取的参数为空,所以直接跳转了安装页,也证实了 Nginx 的配置需要调整。

找到问题的原因之后,开始解决问题。

解决方法很简单,在 Nginx 的端口转发配置里面加上 proxy_set_header Host $host;,将请求的参数一并转发给 Docker 就好了。

大功告成~