禅道有开源和商业版本,开源版已足够满足大多数项目需求。公司在用的一套禅道跑了多年,计划迁移,于是重新部署一套 LNMP 架构的新环境。网上的教程没有完全对上需求,整个过程重走了一遍,记录如下。

环境准备
设主机名:
hostnamectl set-hostname ZenTaoPMS
关闭防火墙与 NetworkManager:
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager && systemctl status NetworkManager
关闭 SELinux:
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 && getenforce
装齐编译依赖与常用工具:
yum install -y epel-release
yum -y install gcc gcc-c++ libaio make cmake zlib-devel openssl-devel pcre pcre-devel wget git curl lynx lftp mailx mutt rsync ntp net-tools vim lrzsz screen sysstat yum-plugin-security yum-utils createrepo bash-completion zip unzip bzip2 tree tmpwatch pinfo man-pages lshw pciutils gdisk system-storage-manager git gdbm-devel sqlite-devel bind-utils telnet lsof
source /usr/share/bash-completion/bash_completion
组件选型:Nginx 1.20.2(RPM 包)、MySQL 5.7.35(RPM 包)、PHP 7.4+(YUM 源)、禅道 15.7.1(源码包)。

部署 Nginx 与 MySQL
Nginx 直接 rpm 安装,启动并设置开机自启:
[root@zentaopms ~]# rpm -ivh nginx-1.20.2-1.el7.ngx.x86_64.rpm
[root@zentaopms ~]# systemctl start nginx
[root@zentaopms ~]# systemctl enable nginx

系统自带 MariaDB 的话先卸载:
rpm -qa | grep mariadb | xargs rpm -e --nodeps
从华为云镜像下载 MySQL 5.7.35 的六个 RPM 包并安装:
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-common-5.7.35-1.el7.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-libs-5.7.35-1.el7.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-devel-5.7.35-1.el7.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-client-5.7.35-1.el7.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.7/mysql-community-server-5.7.35-1.el7.x86_64.rpm
[root@zentaopms ~]# rpm -ivh mysql-community-*
备份默认 my.cnf 后整体替换:数据目录放 /data/mysql,字符集 utf8mb4,InnoDB,max_allowed_packet 256M,并开启慢查询日志(long_query_time=1):
#备份默认配置
[root@zentaopms ~]# cp /etc/my.cnf{,_bak}
#将下面配置复制到my.cnf中
[root@zentaopms ~]# cat > /etc/my.cnf <<EOF
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
log_output=file
slow_query_log=on
slow_query_log_file =/var/lib/mysql/slowlog
log_queries_not_using_indexes=on
long_query_time=1
explicit_defaults_for_timestamp=1
EOF
#创建数据存储目录
[root@zentaopms ~]# mkdir -p /data/
[root@zentaopms ~]# systemctl start mysqld.service
[root@zentaopms ~]# systemctl enable mysqld.service
初始 root 密码在错误日志里:
[root@zentaopms ~]# cat /var/log/mysqld.log | grep password
MySQL 5.7 的 validate_password 插件会强制密码复杂度,先把各项策略降到最低,再重新设置 root 密码:
mysql> set global validate_password_policy=0; (0或LOW代表低级)
密码至少要包含的小写字母个数和大写字母个数
mysql> set global validate_password_mixed_case_count=0;
密码至少要包含的数字个数。
mysql> set global validate_password_number_count=0;
密码至少要包含的特殊字符数
mysql> set global validate_password_special_char_count=0;
密码长度
mysql> set global validate_password_length=3;
再次设置密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '12345';


部署 PHP
装 remi 源并把仓库地址换成阿里云镜像,重建缓存:
rpm -ivh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
sed -i 's/https*://rpms.remirepo.net/https://mirrors.aliyun.com/remi/g' /etc/yum.repos.d/remi*
sed -i 's/#baseurl/baseurl/g' /etc/yum.repos.d/remi*
sed -i 's|^mirrorlist|#mirrorlist|' /etc/yum.repos.d/remi*
yum makecache
yum repolist
yum -y install yum-utils
清掉已有 PHP,启用 remi-php74 源(安装哪个版本就开哪个源):
yum remove php*
#安装哪个版本就修改对应的源,这里安装的为remi-php74
yum-config-manager --enable remi-php74
安装 PHP7.4 及禅道需要的扩展:
# 安装所需的PHP扩展
yum -y install php-cli php-pear bcmath php-pecl-jsond-devel php-mysqlnd php-gd php-common php-fpm php-intl php-cli php-xml php-opcache php-pecl-apcu php-pdo php-gmp php-process php-pecl-imagick php-devel php-mbstring php-zip php-ldap php-imap php-pecl-mcrypt --skip-broken
两处配置:www.conf 里改 PHP 启动用户;php.ini 里改 session.save_path,重要:修改为禅道解压后的路径。改完重启 php-fpm:
[root@zentaopms ~]# vim /etc/php-fpm.d/www.conf
[root@zentaopms ~]# vim /etc/php.ini
systemctl restart php-fpm.service
systemctl enable php-fpm.service


配置 Nginx 站点并部署禅道
备份默认 default.conf 后重写站点:root 指向 /usr/local/zentaopms/www,client_max_body_size 150m,try_files 统一转给 index.php,fastcgi_pass 指向 127.0.0.1:9000:
备份默认nginx配置
[root@zentaopms ~]# cd /etc/nginx/conf.d/
[root@zentaopms conf.d]# mv default.conf{,_bak}
#将下面的配置复制到配置文件中
[root@zentaopms conf.d]# vim default.conf
server {
listen 80;
server_name localhost;
client_max_body_size 150m;
client_body_timeout 180;
root /usr/local/zentaopms/www;
tcp_nodelay on;
sendfile on;
tcp_nopush on;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
include fastcgi_params;
}
}
禅道源码包解压到 /usr/local/,解压位置要和 Nginx 配置的路径一致;安装前放开 session 目录权限:
[root@zentaopms ~]# unzip ZenTaoPMS.15.7.1.zip -d /usr/local/
chmod o=rwx -R /var/lib/php/session
浏览器访问服务器地址(示例中 http://192.168.66.200)进入安装向导。



两个容易漏的点:session.save_path 没改对,安装自检会报错;nginx 站点路径与解压路径不一致,整站 404。排障顺序建议先看 php-fpm 日志,再对比这两处路径。


















暂无评论内容