内网部署文档Nginx + PHP-FPM + Supervisor + Redis 集群(统一运行用户)
内网部署文档
适用于 无外网 / 受限内网环境,所有组件以 同一业务用户 运行,适合银行、金融、政企内网部署场景。
一、部署目标与原则
1.1 目标
Web:Nginx
运行时:PHP 7.3 + PHP-FPM
后台任务:Supervisor
缓存 / 队列:Redis 集群
运行用户:统一非 root 业务用户(示例:
appuser)
1.2 统一用户原则(非常重要)
❌ 不使用 root 跑服务
❌ 不混用 nginx / nobody / redis 用户
✅ 所有进程同一用户启动,避免权限地狱
二、系统与用户准备
2.1 创建统一业务用户
useradd appuser
passwd appuser
目录规划:
/data/
├─ app/ # 代码目录
├─ logs/ # 所有服务日志
├─ run/ # socket / pid
└─ redis/ # redis 数据
mkdir -p /data/{app,logs,run,redis}
chown -R appuser:appuser /data
三、内网安装方式说明
3.1 安装包准备(外网机器完成)
在一台 可联网机器 上:
nginx rpm / deb
php 7.3 rpm(remi 源)
redis 源码包
supervisor rpm
统一打包后拷贝进内网服务器。
四、Nginx 安装与配置(同一用户)
4.1 安装
rpm -ivh nginx-*.rpm
4.2 修改运行用户
编辑:/etc/nginx/nginx.conf
user appuser;
pid /data/run/nginx.pid;
error_log /data/logs/nginx/error.log;
4.3 站点目录
mkdir -p /data/app/web
chown -R appuser:appuser /data/app
五、PHP 7.3 + PHP-FPM(统一用户)
5.1 安装 PHP
rpm -ivh php-7.3*.rpm
5.2 PHP-FPM 配置
编辑:/etc/php-fpm.d/www.conf
user = appuser
group = appuser
listen = /data/run/php-fpm.sock
listen.owner = appuser
listen.group = appuser
listen.mode = 0660
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 15
编辑:/etc/php-fpm.conf
pid = /data/run/php-fpm.pid
error_log = /data/logs/php-fpm/error.log
六、Supervisor(同一用户任务管理)
6.1 安装
rpm -ivh supervisor-*.rpm
6.2 主配置
编辑:/etc/supervisord.conf
[supervisord]
logfile=/data/logs/supervisor/supervisord.log
pidfile=/data/run/supervisord.pid
user=appuser
[unix_http_server]
file=/data/run/supervisor.sock
chmod=0700
[supervisorctl]
serverurl=unix:///data/run/supervisor.sock
6.3 PHP 队列示例
[program:queue]
command=/usr/bin/php /data/app/artisan queue:work
user=appuser
autostart=true
autorestart=true
stdout_logfile=/data/logs/queue.log
stderr_logfile=/data/logs/queue.err
七、Redis 集群(内网部署)
7.1 Redis 安装(源码方式)
tar zxvf redis-6*.tar.gz
cd redis-6*
make && make install
7.2 单节点配置模板
bind 0.0.0.0
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
dir /data/redis/7001
pidfile /data/run/redis-7001.pid
logfile /data/logs/redis-7001.log
mkdir -p /data/redis/7001
chown -R appuser:appuser /data/redis
7.3 启动多个节点
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
7.4 创建集群
redis-cli --cluster create
10.0.0.1:7001 10.0.0.1:7002 10.0.0.1:7003
--cluster-replicas 0
八、服务启动顺序(内网标准)
1\. Redis 集群
2. PHP-FPM
3. Nginx
4. Supervisor
九、权限与安全检查
ps aux | grep nginx
ps aux | grep php-fpm
ps aux | grep redis
确认:
所有进程均为
appuser无 root / nobody
十、内网部署检查清单
所有服务统一用户
Socket / pid / log 在 /data
Redis cluster 正常
PHP CLI / FPM 版本一致
Supervisor 可控
十一、经验建议(银行内网踩坑总结)
内网机器 不要依赖 systemd 自启动,统一 supervisor / 脚本
Redis 集群端口需提前开白名单
日志必须集中目录,方便审计
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
内网机器 不要依赖 systemd 自启动,统一 supervisor / 脚本
为什么会有这个建议?是有什么故事么