本篇是历史归档,针对 PHP 5.6 / MySQL 5.7 / Redis 3.2 这类老版本环境。新项目请直接看 从零搭建 LNMP 环境 与 源码编译 Nginx 与 PHP。
准备:/usr/local/src 下的源码包
amqp-1.9.3.tgz
boost_1_59_0.tar.gz
mysql-5.7.26.tar.gz
nacos-server-2.0.3.tar.gz
nginx-1.13.1.tar.gz
otp_src_22.0.tar.gz
php-5.6.30.tar.gz
phpredis-2.2.8.tar.gz
rabbitmq-c-0.8.0.tar.gz
rabbitmq-server-generic-unix-3.7.15.tar
一、初始化系统
# 修改主机名
hostnamectl set-hostname 主机名
# 修改系统时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 重启日志收集与定时任务
systemctl restart rsyslog
systemctl restart crond
二、安装 Nginx 1.13.1
yum install gcc -y
yum install pcre pcre-devel -y
yum install zlib zlib-devel -y
yum install openssl openssl-devel -y
useradd www
cd /usr/local/src
tar -xzvf nginx-1.13.1.tar.gz
cd nginx-1.13.1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-stream
make && make install
mkdir -p /var/tmp/nginx/client
echo "export PATH=$PATH:/usr/local/nginx/sbin" >> /etc/profile
source /etc/profile
验证:
netstat -lpntu | grep 80
curl http://localhost
三、安装 Redis 3.2.9
yum install tcl -y
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -xzvf redis-3.2.9.tar.gz
cd redis-3.2.9/
make PREFIX=/usr/local/redis install
make test
echo "export PATH=$PATH:/usr/local/redis/bin" >> /etc/profile
source /etc/profile
mkdir /usr/local/redis/etc
cp /usr/local/src/redis-3.2.9/redis.conf /usr/local/redis/etc/redis.conf
生产配置片段:
port 6001
pidfile /usr/local/redis/run/redis_6001.pid
dir /data/redis_databases/6001
logfile /data/logs/redis_6001.log
bind 127.0.0.1
daemonize yes
loglevel notice
databases 1
requirepass ****
maxmemory 1gb
maxmemory-policy allkeys-lru
protected-mode no
四、安装 MySQL 5.7.26
cd /usr/local/src
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26.tar.gz
tar -xzvf mysql-5.7.26.tar.gz
useradd mysql
groupadd mysql
mkdir /data/mydata/database
mkdir /data/mydata/binlog
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/mydata
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mydata/database \
-DMYSQL_UNIX_ADDR=/data/mydata/database/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DWITH_BOOST=/usr/local/boost \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
make && make install
cp -rp support-files/mysql.server /etc/init.d/
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
初始化与启动:
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql --datadir=/data/mydata/database
/usr/local/mysql/bin/mysqld_safe --datadir=/data/mydata/database \
--pid-file=/data/mydata/database/mysql.pid \
--socket=/data/mydata/database/mysql.sock
/etc/my.cnf:
[mysqld]
port=2688
basedir=/usr/local/mysql
datadir=/data/mydata/database
socket=/data/mydata/database/mysql.sock
user=mysql
log_error=/data/mydata/database/mysql_error.log
skip_name_resolve
log_bin=/data/mydata/binlog/mysql-bin
log_bin_index=/data/mydata/binlog/mysql-bin.index
server_id=1
注册 systemd 服务:
cat > /usr/lib/systemd/system/mysql.service << EOF
[Unit]
Description=MySQL Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize
LimitNOFILE = 65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
EOF
chmod 755 /usr/lib/systemd/system/mysql.service
systemctl enable mysql.service
systemctl start mysql
账号初始化:
ALTER USER 'root'@'localhost' IDENTIFIED BY '****';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '****';
flush privileges;
五、安装 PHP 5.6.30
yum -y install libxml2 libxml2-devel
yum -y install epel-release
yum -y install bzip2 bzip2-devel
yum -y install curl curl-devel
yum -y install libmcrypt libmcrypt-devel
yum -y install libjpeg libjpeg-devel
yum -y install libpng libpng-devel
yum -y install iconv
# 解决 iconv 库缺失
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/iconv
make && make install
CentOS 7 编译 libiconv 会遇到
./stdio.h:1010:1: 错误:'gets'未声明,先执行:cd srclib && sed -i -e '/gets is a security/d' ./stdio.in.h
tar -xzvf php-5.6.30.tar.gz
cd php-5.6.30
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
--enable-fpm --with-mcrypt --with-mhash --with-openssl --with-bz2 --with-zlib \
--with-pcre-dir --with-curl --with-gettext --with-pcre-regex --with-mysql \
--with-mysqli --with-jpeg-dir --with-png-dir --with-libxml-dir --with-xmlrpc \
--with-gd --with-iconv-dir=/usr/local/libiconv --without-pear --enable-zip \
--enable-mbstring --enable-exif --enable-inline-optimization --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-pdo \
--disable-debug --disable-rpath --enable-opcache=no
make && make install
cp ./php.ini-production /usr/local/php/etc/php.ini
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
php-fpm 关键参数:
pid = run/php-fpm.pid
error_log = log/php-fpm_error.log
log_level = warning
rlimit_files = 65536
user = www
group = www
listen = 127.0.0.1:9000
pm = static
pm.max_children = 120
六、安装 PHP 扩展
# redis
yum -y install autoconf
tar -xzvf phpredis-2.2.8.tar.gz
cd phpredis-2.2.8
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
# pdo_mysql
cd /usr/local/src/php-5.6.30/ext/pdo_mysql/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql/
make && make install
# rabbitmq-c
wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gz
tar zxf rabbitmq-c-0.8.0.tar.gz
cd rabbitmq-c-0.8.0
./configure --prefix=/usr/local/rabbitmq-c-0.8.0
make && make install
# amqp
wget -c http://pecl.php.net/get/amqp-1.9.3.tgz
tar zxf amqp-1.9.3.tgz
cd amqp-1.9.3
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp \
--with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0
make && make install
php.ini 中加载:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/redis.so
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/amqp.so
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/gd.so
七、Game Server 依赖环境
# libev
yum install libev libev-devel
# iconv / hiredis
wget https://github.com/redis/hiredis/archive/refs/tags/v0.13.3.tar.gz
tar -xzvf v0.13.3.tar.gz
cd hiredis-0.13.3
make && make install
# jsoncpp
yum -y install scons
wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.7.3.tar.gz
tar -xzvf 1.7.3.tar.gz
cd jsoncpp-1.7.3
scons platform=linux-gcc
cp libs/linux-gcc-4.8.5/libjson_linux-gcc-4.8.5_libmt.* /lib
cp -Rf include/json /usr/include/
ldconfig