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

从零搭建 LNMP 环境(含 Redis 与系统调优)

零散的笔记容易漏步骤,这一篇把「初始化 → 装组件 → 调优 → 守护」串成一条可照抄执行的流水线。每个环节都给出可点开的细分文档。

阶段一:系统初始化

# 主机名与时区
hostnamectl set-hostname your-host
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
systemctl restart rsyslog
systemctl restart crond

数据盘挂载(云主机一般都有一块未挂载的数据盘):

fdisk -l
fdisk /dev/vdb        # 依次输入 n, p, 1, w
mkfs -t ext4 /dev/vdb1
mkdir /data
mount /dev/vdb1 /data/
echo '/dev/vdb1  /data ext4    defaults    0  0' >> /etc/fstab

关闭或放行防火墙端口:

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

细分文档:挂载新数据盘、修改时区、firewalld 配置。

阶段二:安装组件

组件推荐方式文档
Git源码编译(替换自带 1.8)install-git
Node.js二进制包 / nvminstall-nodejs
Nginx源码编译(需自定义模块)lnmp-source-build
PHPyum(remi)或源码install-php
PHP 扩展pecl / 源码install-php-extensions
MySQLyum(官方仓库)../database/mysql-install.md
Redis源码编译../database/redis-install.md

想省事可以用 LNMP 一键包;维护老项目参考 旧版本归档。

阶段三:Nginx 与 php-fpm 打通

server {
    listen 80;
    server_name www.foo.com;
    root /data/wwwroot/www.foo.com;
    index index.html index.php;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;   # 连不上时可改用 unix:/tmp/php-cgi.sock
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ {
        expires 30d;
    }

    location ~ .*\.(js|css)?$ {
        expires 12h;
    }
}

php-fpm 侧要确认 listen = 127.0.0.1:9000 与上面一致,并统一运行用户:

user = www
group = www
pm = dynamic
pm.max_children = 120

验证:

nginx -t && nginx -s reload
echo '<?php phpinfo(); ?>' > /data/wwwroot/www.foo.com/test.php
curl http://127.0.0.1/test.php

阶段四:系统参数调优

文件描述符与进程限制:

echo "655350" > /proc/sys/fs/file-max

vi /etc/security/limits.conf
# 追加:
# * soft nofile 655350
# * hard nofile 655350

TCP 相关内核参数(/etc/sysctl.conf):

net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_conntrack_max = 10240

ip_conntrack_max 应尽量的小,以节省内核内存占用。修改后执行 sysctl -p 生效。

阶段五:进程守护与开机自启

自建服务用 systemd 托管;老脚本可以用 rc.local(记得 chmod +x /etc/rc.d/rc.local)。

下面是轻量级的「挂了就拉起来」监控脚本,配合 crontab 每分钟执行:

# /root/check/nginx.sh
#!/bin/sh
pgrep nginx
if [ $? -ne 0 ]; then /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf; fi

# /root/check/php.sh
#!/bin/sh
pgrep php-fpm
if [ $? -ne 0 ]; then /etc/init.d/php-fpm start; fi

# /root/check/mysql.sh
#!/bin/sh
pgrep mysql
if [ $? -ne 0 ]; then /usr/local/mysql/bin/mysqld_safe \
  --datadir=/data/mydata/database \
  --pid-file=/data/mydata/database/mysql.pid \
  --socket=/data/mydata/database/mysql.sock; fi

# /root/check/redis.sh
#!/bin/sh
pgrep redis
if [ $? -ne 0 ]; then /usr/local/redis/etc/run.sh start; fi
chmod +x /root/check/*.sh
echo '* * * * * /root/check/nginx.sh' >> /var/spool/cron/root

验收清单


分享这篇文章:

上一篇
LNMP 环境搭建(旧版本归档)
下一篇
CentOS 7.9 升级内核(3.10 → 5.4)