内网部署文档Nginx + PHP-FPM + Supervisor + Redis 集群(统一运行用户)

AI摘要
本文是一份针对银行、金融、政企等无外网或受限内网环境的服务器部署技术指南,属于【知识分享】。内容详细阐述了以统一非root业务用户(如appuser)为核心原则,部署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 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 1

内网机器 不要依赖 systemd 自启动,统一 supervisor / 脚本

为什么会有这个建议?是有什么故事么

1天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!