LNMP 部署禅道 15.7.1 全流程:Nginx、MySQL、PHP

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

chandao01

环境准备

设主机名:

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
chandao02

系统自带 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';
chandao03
chandao04

部署 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
chandao05
chandao06

配置 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)进入安装向导。

chandao07
chandao08
chandao09

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

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容