跳到主要内容
方的代码随记
返回

LNMP 环境搭建(旧版本归档)

更新于:

本篇是历史归档,针对 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

分享这篇文章:

上一篇
LNMP 一键安装包部署
下一篇
从零搭建 LNMP 环境(含 Redis 与系统调优)