部署指南
本文档提供了 ShopeX OMS 系统的完整部署指南,包括生产环境部署、Docker 容器化部署和云平台部署方案。
📋 目录
⚠️ 订单流量说明(商派矩阵收单)
🚨 重要提示:以下订单流量费用
仅在使用商派矩阵收单时产生。如果商家使用自研收单,则不产生订单流量费用。
📦 首次使用赠送
- 首次使用赠送
500条订单流量,超出部分按增量包购买。
💰 订单流量价格(仅商派矩阵收单产生费用)
🏢 部署在商派聚石塔
| 订单量 | 价格 |
|---|---|
1万 订单 | 300 元/年 |
10万 订单 | 2000 元/年 |
100万 订单 | 10000 元/年 |
🌐 非部署在商派聚石塔
| 订单量 | 价格 |
|---|---|
1万 订单 | 1500 元/年 |
10万 订单 | 10000 元/年 |
100万 订单 | 50000 元/年 |
🚨 再次提醒:以上订单流量费用
仅在使用商派矩阵收单时产生。如果商家使用自研收单,则不产生订单流量费用。
🖥️ 生产环境部署
系统要求
服务器环境:
- 操作系统:Linux(推荐 Alibaba Cloud Linux release 3 (Soaring Falcon))
- PHP:8.2(推荐)
- MySQL:8.0(推荐)
- Redis:6.2(推荐)
- Memcached:1.5(推荐)
- Web 服务器:Apache 2.4+ 或 OpenResty 1.21.4.2(推荐)
PHP 扩展:
- 必需:
mysqli、mbstring、gd、curl、json、openssl、redis、xlswriter、swoole - 推荐:
memcached、pdo_mysql(如需 PDO 方式)
部署步骤
1. 准备服务器环境
# 更新系统
sudo apt-get update && sudo apt-get upgrade -y # Ubuntu/Debian
# 或
sudo yum update -y # CentOS/RHEL
# 安装基础工具
sudo apt-get install -y git curl wget unzip # Ubuntu/Debian
# 或
sudo yum install -y git curl wget unzip # CentOS/RHEL2. 安装 PHP 8.2
Ubuntu/Debian:
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring \
php8.2-gd php8.2-curl php8.2-xml php8.2-zip php8.2-redis php8.2-memcachedCentOS/RHEL:
sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php82
sudo yum install -y php php-fpm php-mysql php-mbstring php-gd \
php-curl php-xml php-zip php-redis php-memcached安装必需扩展:
# xlswriter(必需)
pecl install xlswriter
echo "extension=xlswriter.so" >> $(php --ini | grep "Loaded Configuration File" | sed -e "s|.*:\s*||")
# Swoole(必需)
pecl install swoole
echo "extension=swoole.so" >> $(php --ini | grep "Loaded Configuration File" | sed -e "s|.*:\s*||")3. 安装 OpenResty 1.21.4.2
Alibaba Cloud Linux / CentOS / RHEL:
# 添加 OpenResty 仓库
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# 安装 OpenResty
sudo yum install -y openresty openresty-opm
# 启动 OpenResty
sudo systemctl enable openresty
sudo systemctl start openrestyUbuntu/Debian:
# 添加 OpenResty 仓库
sudo apt-get install -y software-properties-common
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
sudo apt-get update
# 安装 OpenResty
sudo apt-get install -y openresty
# 启动 OpenResty
sudo systemctl enable openresty
sudo systemctl start openresty验证安装:
openresty -v
# 应该显示:openresty/1.21.4.24. 部署应用代码
说明:MySQL、Redis、Memcached 等服务:
- 开发环境:使用 Docker Compose 中的本地服务(见 Docker 容器化部署章节)
- 生产环境:使用云PAAS服务(RDS、云Redis、云Memcached),详见"配置数据库和缓存服务"章节
# 克隆项目
cd /var/www
sudo git clone https://github.com/your-org/oms.git
cd oms
# 设置目录权限
sudo chown -R www-data:www-data /var/www/oms # Ubuntu/Debian
# 或
sudo chown -R apache:apache /var/www/oms # CentOS/RHEL
sudo chmod -R 755 /var/www/oms
sudo chmod -R 777 /var/www/oms/data
sudo chmod -R 777 /var/www/oms/config
sudo chmod -R 777 /var/www/oms/public5. 安装 Composer 依赖
cd /var/www/oms
composer install --no-dev --optimize-autoloader6. 配置 Web 服务器
重要:项目根目录提供了 .htaccess.example 和 nginx.conf.example 配置文件示例,建议参考这些文件进行配置。
Apache 配置(/etc/apache2/sites-available/oms.conf,使用 Apache 2.4+ 语法):
<VirtualHost *:80>
DocumentRoot "/var/www/oms"
ServerName your-domain.com
# 禁止访问敏感目录(Apache 2.4+ 语法:Require)
<LocationMatch "^\/(\.git|script|data|config|vendor|cgi-bin|tools|docs|docker|tests|upgrade)\/">
Require all denied
</LocationMatch>
<Directory "/var/www/oms">
Options FollowSymLinks
AllowOverride FileInfo
Require all granted
# 启用 Rewrite 引擎
RewriteEngine On
# 拒绝访问敏感目录(通过 RewriteRule,优先级更高)
RewriteRule ^(\.git|script|data|config|vendor|cgi-bin|tools|docs|docker|tests|upgrade)(/.*)?$ - [F,L]
# 如果文件或目录不存在,重定向到 index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 特殊路由规则
RewriteRule ^m- /index.html [NC,L]
RewriteRule ^home$ /index.html [NC,L]
</Directory>
# 禁止访问 PHP 配置文件(Apache 2.4+ 语法)
<FilesMatch "^(config|secrets|defined_ext)\.php$">
Require all denied
</FilesMatch>
# 禁止访问隐藏文件(以 . 开头,除了 .htaccess)
<FilesMatch "^\.">
Require all denied
</FilesMatch>
# 允许访问 .htaccess 文件本身
<Files ".htaccess">
Require all granted
</Files>
# 安全头设置
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
ErrorLog ${APACHE_LOG_DIR}/oms_error.log
CustomLog ${APACHE_LOG_DIR}/oms_access.log combined
</VirtualHost>启用站点:
# 启用必要的模块
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2ensite oms.conf
sudo systemctl restart apache2使用 .htaccess 文件(可选,如果允许 AllowOverride):
# 复制示例文件
cp .htaccess.example .htaccess
# 根据实际部署路径调整配置
# .htaccess 文件会自动保护敏感目录和配置文件
# 注意:.htaccess.example 使用 Apache 2.4+ 的 Require 语法说明:
.htaccess.example使用 Apache 2.4+ 的Require语法(推荐)- 如果使用 Apache 2.2,文件中也包含了兼容配置(
Order allow,deny) - 建议升级到 Apache 2.4+ 以获得更好的安全性和性能
OpenResty/Nginx 配置(配置文件路径:/usr/local/openresty/nginx/conf/sites-available/oms):
server {
listen 80;
server_name your-domain.com;
root /var/www/oms;
index index.php index.html;
# 将以 'm-' 开头的请求重写到 index.html
location ^~ /m- {
rewrite ^ /index.html break;
}
# 将 '/home' 的请求重写到 index.html
location = /home {
rewrite ^ /index.html break;
}
# 禁止访问敏感目录
location ~ ^/(\.git|script|data|config|vendor|cgi-bin|tools|docs|docker|tests|upgrade)/ {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\. {
deny all;
}
error_page 404 /404.html;
}启用站点:
# 创建配置目录(如果不存在)
sudo mkdir -p /usr/local/openresty/nginx/conf/sites-available
sudo mkdir -p /usr/local/openresty/nginx/conf/sites-enabled
# 创建符号链接
sudo ln -s /usr/local/openresty/nginx/conf/sites-available/oms /usr/local/openresty/nginx/conf/sites-enabled/
# 在 nginx.conf 中引入 sites-enabled
# 编辑 /usr/local/openresty/nginx/conf/nginx.conf,在 http 块中添加:
# include /usr/local/openresty/nginx/conf/sites-enabled/*;
# 测试配置
sudo /usr/local/openresty/nginx/sbin/nginx -t
# 重启 OpenResty
sudo systemctl restart openresty使用 nginx.conf.example(推荐):
# 参考项目根目录的 nginx.conf.example 文件
# 该文件包含了完整的安全配置,包括:
# - 禁止访问敏感目录(config、data、vendor 等)
# - 禁止访问 PHP 配置文件(config.php、secrets.php 等)
# - 安全头设置
# - 静态文件缓存配置6.1. Web 服务器安全配置
保护配置文件:
Web 服务器配置必须禁止直接访问敏感配置文件和目录,防止配置文件泄露。
Apache 配置要点(使用 Apache 2.4+ 的 Require 语法):
- 禁止访问
config/目录:使用<LocationMatch>+Require all denied - 禁止访问
config.php、secrets.php、defined_ext.php等配置文件:使用<FilesMatch>+Require all denied - 禁止访问
.git、vendor、data等敏感目录:使用RewriteRule或<LocationMatch> - 禁止访问隐藏文件:使用
<FilesMatch>+Require all denied - 设置安全响应头(X-Frame-Options、X-XSS-Protection、X-Content-Type-Options 等)
Apache 2.4+ 语法示例:
# 禁止访问目录
<LocationMatch "^/config/">
Require all denied
</LocationMatch>
# 禁止访问文件
<FilesMatch "^(config|secrets)\.php$">
Require all denied
</FilesMatch>Nginx/OpenResty 配置要点:
- 使用
location ~规则禁止访问敏感目录和文件 - 在 PHP 处理块中额外检查敏感配置文件
- 设置安全响应头
- 禁止访问隐藏文件和敏感文件扩展名(.sql、.log、.bak 等)
验证配置:
部署后,请验证以下 URL 是否返回 403 错误:
http://your-domain.com/config/config.phphttp://your-domain.com/config/secrets.phphttp://your-domain.com/config/http://your-domain.com/.git/
文件权限设置:
确保配置文件权限正确:
# 配置文件权限(仅所有者可读写)
chmod 600 config/config.php
chmod 600 config/secrets.php
# 目录权限
chmod 755 config/
chmod 755 data/
chmod 755 public/
# 日志目录权限(仅应用用户可读写)
chmod 750 data/logs/参考文件:
- Apache 配置示例:
.htaccess.example(项目根目录) - Nginx 配置示例:
nginx.conf.example(项目根目录)
7. 初始化系统
方式1:浏览器安装(推荐)
- 访问:
http://your-domain.com/index.php/setup - 按照安装向导完成配置
安装锁定补充:生产或已完成安装的环境可以设置环境变量
ONEX_OMS_INSTALL=LOCK,系统会强制阻止再次进入安装向导(等效于存在正确的config/install.lock.php)。
方式2:命令行安装
cd /var/www/oms
php app/base/cmd install base8. 配置任务服务
# 启动任务服务
cd /var/www/oms
php app/taskmgr/sw.php worker:start -d
# 检查状态
php app/taskmgr/sw.php worker:status🐳 Docker 容器化部署
前置要求
- Docker >= 20.10
- Docker Compose >= 2.0(可选)
快速开始
重要说明:项目已提供完整的 Dockerfile,可以直接使用,无需自己创建。
项目包含以下 Dockerfile:
docker/Dockerfile:主应用服务镜像(基于 Apache + PHP 8.2)docker/supervisor/Dockerfile:任务服务镜像(基于 Supervisor + PHP 8.2)
1. 准备配置文件
环境说明:
- 生产环境:优先推荐使用阿里云聚石塔托管(官方唯一推荐方案);下方 Docker Compose 更适合开发/测试验证,若自管生产请自行评估高可用和运维成本
- 开发环境:可以使用本地服务(Docker中的MySQL、Redis、Memcached),便于本地开发和测试
生产环境推荐(聚石塔):
- 使用聚石塔提供的数据库/Redis/缓存等云服务
- 如需自管,请改用云数据库和云Redis,避免在容器内自建单点
开发环境可选:
- 可以使用Docker Compose中的MySQL、Redis、Memcached服务进行本地开发
创建 docker-compose.yml(可选,也可以直接使用 docker 命令):
注意:下面的配置中,MySQL、Redis、Memcached服务已注释,适用于生产环境使用云PAAS服务。如果是开发环境,可以取消注释使用本地服务。
version: '3.8'
services:
# 主应用服务
oms-app:
build:
context: .
dockerfile: docker/Dockerfile
container_name: oms-app
ports:
- "80:80"
- "443:443"
volumes:
- .:/data/httpd/oms # 开发环境挂载代码目录(容器内路径 /data/httpd/oms)
- ./docker/oms.conf:/etc/apache2/conf.d/oms.conf # Apache 站点配置挂载
- ./app/taskmgr/config/config.php:/data/httpd/oms/app/taskmgr/config/config.php # 任务服务配置可用环境变量或挂载文件
# 数据目录挂载(可选,可以不挂载)
# - ./data:/data/httpd/oms/data
# 日志目录挂载(可选,可以不挂载)
# - ./logs:/var/log/apache2
environment:
- TZ=Asia/Shanghai
# 生产(聚石塔)推荐使用环境变量注入,而不是挂载 config.php
# ONEX_OMS_INSTALL=LOCK
# ONEX_OMS_DB_HOST=rm-xxxxx.mysql.rds.aliyuncs.com
# ONEX_OMS_DB_USER=oms_user
# ONEX_OMS_DB_PASSWORD=your_password
# ONEX_OMS_DB_NAME=oms
# ONEX_OMS_KVSTORE_STORAGE=base_kvstore_redis
# ONEX_OMS_KVSTORE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379
# ONEX_OMS_CACHE_STORAGE=base_cache_redis
# ONEX_OMS_CACHE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379:1
# 如需 Memcached:
# ONEX_OMS_CACHE_STORAGE=base_cache_memcached
# ONEX_OMS_CACHE_MEMCACHED_CONFIG=your-memcached-host:11211
# 开发环境:使用本地服务时,取消下面的注释
# 生产环境:使用云PAAS服务时,注释掉 depends_on,并在 config/config.php 中配置云服务地址
depends_on:
- redis
- memcached
networks:
- oms-network
# 任务服务
oms-worker:
build:
context: .
dockerfile: docker/supervisor/Dockerfile
container_name: oms-worker
volumes:
- .:/data/httpd/oms # 开发环境挂载代码目录(容器内路径 /data/httpd/oms)
- ./app/taskmgr/config/config.php:/data/httpd/oms/app/taskmgr/config/config.php # 任务服务配置需持久化挂载
# 数据目录挂载(可选,可以不挂载)
# - ./data:/data/httpd/oms/data
environment:
- TZ=Asia/Shanghai
# 生产(聚石塔)同样可用环境变量注入
# ONEX_OMS_INSTALL=LOCK
# ONEX_OMS_DB_HOST=rm-xxxxx.mysql.rds.aliyuncs.com
# ONEX_OMS_DB_USER=oms_user
# ONEX_OMS_DB_PASSWORD=your_password
# ONEX_OMS_DB_NAME=oms
# ONEX_OMS_KVSTORE_STORAGE=base_kvstore_redis
# ONEX_OMS_KVSTORE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379
# ONEX_OMS_CACHE_STORAGE=base_cache_redis
# ONEX_OMS_CACHE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379:1
# 如需 Memcached:
# ONEX_OMS_CACHE_STORAGE=base_cache_memcached
# ONEX_OMS_CACHE_MEMCACHED_CONFIG=your-memcached-host:11211
# 开发环境:使用本地服务时,取消下面的注释
# 生产环境:使用云PAAS服务时,注释掉 depends_on,并在 config/config.php 中配置云服务地址
depends_on:
- redis
- memcached
networks:
- oms-network
# Redis 服务(生产环境推荐使用云PAAS服务,开发环境可以使用本地服务)
# 开发环境:取消下面的注释使用本地Redis
# 生产环境:注释掉,使用云Redis服务,并在 config/config.php 中配置
redis:
image: redis:6.2-alpine
container_name: oms-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes
networks:
- oms-network
# Memcached 服务(生产环境推荐使用云PAAS服务,开发环境可以使用本地服务)
# 开发环境:取消下面的注释使用本地Memcached
# 生产环境:注释掉,使用云Memcached或云Redis服务,并在 config/config.php 中配置
memcached:
image: memcached:1.5-alpine
container_name: oms-memcached
ports:
- "11211:11211"
networks:
- oms-network
# MySQL 服务(生产环境强烈推荐使用云PAAS服务,开发环境可以使用本地服务)
# 开发环境:取消下面的注释使用本地MySQL
# 生产环境:注释掉,使用RDS、TencentDB等云数据库,并在 config/config.php 中配置
mysql:
image: mysql:8.0
container_name: oms-mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=oms
- MYSQL_USER=oms_user
- MYSQL_PASSWORD=oms_password
volumes:
- mysql-data:/var/lib/mysql
networks:
- oms-network
volumes:
redis-data:
mysql-data:
networks:
oms-network:
driver: bridge说明:
app/taskmgr/config/config.php已支持环境变量注入(前缀ONEX_OMS_TASKMGR_*),也可继续挂载 config.php(示例已在 volumes 中给出);镜像内包含示例文件,需文件挂载时可在宿主机修改后使用。
2. 构建和启动
# 构建镜像(使用项目提供的 Dockerfile)
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f oms-app
# 查看状态
docker-compose ps3. 初始化系统
# 进入应用容器
docker exec -it oms-app sh
# 初始化数据库
php app/base/cmd install
# 或使用浏览器访问安装向导
# http://your-domain.com/index.php/setup4. 启动任务服务
# 进入任务容器
docker exec -it oms-worker sh
# 启动任务服务
php app/taskmgr/sw.php worker:start -d
# 检查状态
php app/taskmgr/sw.php worker:status配置数据库和缓存服务
环境区分:
- 生产环境:只推荐使用云PAAS(阿里云聚石塔),不要在容器内自建 MySQL/Redis,避免单点和运维成本
- 开发环境:可以使用本地服务(Docker中的MySQL、Redis、Memcached),便于本地开发和测试
开发环境配置(使用本地服务)
如果使用 Docker Compose 中的本地服务,无需额外配置,服务会自动启动。确保 depends_on 配置已启用。
生产环境配置(使用云PAAS服务,聚石塔)
强烈推荐:生产环境全部托管在阿里云聚石塔,不在容器内运行数据库/缓存。
配置云数据库(MySQL,聚石塔 RDS)
两种方式(二选一):
方式1:环境变量注入(推荐,免挂载):
ONEX_OMS_DB_HOST=rm-xxxxx.mysql.rds.aliyuncs.comONEX_OMS_DB_USER=oms_userONEX_OMS_DB_PASSWORD=your_passwordONEX_OMS_DB_NAME=oms
方式2:config.php 内 define(需挂载 config.php):
phpdefine('DB_HOST', 'rm-xxxxx.mysql.rds.aliyuncs.com'); define('DB_USER', 'oms_user'); define('DB_PASSWORD', 'your_password'); define('DB_NAME', 'oms');
配置云 Redis(聚石塔 Redis)
两种方式(二选一):
方式1:环境变量注入(推荐,免挂载):
ONEX_OMS_KVSTORE_STORAGE=base_kvstore_redisONEX_OMS_KVSTORE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379ONEX_OMS_CACHE_STORAGE=base_cache_redisONEX_OMS_CACHE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379:1
方式2:config.php 内 define(需挂载 config.php):
phpdefine('KVSTORE_REDIS_CONFIG', 'r-xxxxx.redis.rds.aliyuncs.com:6379'); define('CACHE_REDIS_CONFIG', 'r-xxxxx.redis.rds.aliyuncs.com:6379:1');
说明
- 如确需 Memcached,可在聚石塔或对应云服务上配置后填入
CACHE_MEMCACHED_CONFIG,但推荐直接使用 Redis。
配置文件挂载说明
重要:以下配置挂载策略按是否使用环境变量区分:
系统配置文件
- 若全部配置通过环境变量注入,则
config/config.php可不挂载(容器内默认文件即可)。 - 如果需要持久化本地配置文件,挂载
config/config.php、config/install.lock.php。
- 若全部配置通过环境变量注入,则
任务管理配置文件
app/taskmgr/config/config.php必须挂载(任务服务不支持环境变量注入该配置)。
数据目录和日志目录(可选,可以不挂载)
data/:数据目录(缓存、日志等)logs/:日志目录- 不挂载则数据在容器内,删除容器会丢失;生产建议至少保留日志或接入外部日志服务。
环境变量示例(聚石塔,推荐)
# 数据库
ONEX_OMS_DB_HOST=rm-xxxxx.mysql.rds.aliyuncs.com
ONEX_OMS_DB_USER=oms_user
ONEX_OMS_DB_PASSWORD=your_password
ONEX_OMS_DB_NAME=oms
# Redis(KV / Cache)
ONEX_OMS_KVSTORE_STORAGE=base_kvstore_redis
ONEX_OMS_KVSTORE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379
ONEX_OMS_CACHE_STORAGE=base_cache_redis
ONEX_OMS_CACHE_REDIS_CONFIG=r-xxxxx.redis.rds.aliyuncs.com:6379:1
# 安装锁定(生产必须)
ONEX_OMS_INSTALL=LOCK说明:
- 使用 env 注入时,可不挂载
config/config.php。 - KV 与 Cache 可共用同一 Redis,也可分库;示例中 Cache 使用 DB=1。
- 如需 Memcached,设置
ONEX_OMS_CACHE_STORAGE=base_cache_memcached与ONEX_OMS_CACHE_MEMCACHED_CONFIG=host:11211。
Compose 使用时,直接将上述 env 项填入对应服务的
environment:段即可,无需重复列出。
☁️ 云平台部署指南
阿里云部署
1. 创建 ECS 实例
- 操作系统:Alibaba Cloud Linux release 3 (Soaring Falcon)(推荐)
- 实例规格:建议 4核8GB 起步
- 网络:配置安全组,开放 80、443、3306、6379、11211 端口
2. 使用 RDS MySQL(强烈推荐)
创建 RDS 实例:
- 登录阿里云控制台,创建 RDS MySQL 实例
- 选择 MySQL 版本(推荐 8.0)
- 配置实例规格和存储空间
- 设置白名单,添加ECS实例的内网IP
配置连接:同上方“方式1:环境变量”或“方式2:config.php define”二选一,无需重复。
3. 使用 Redis 云数据库(强烈推荐)
创建 Redis 实例:
- 登录阿里云控制台,创建 Redis 实例
- 选择 Redis 版本(推荐 6.2)
- 配置实例规格和内存大小
- 设置白名单,添加ECS实例的内网IP
配置连接:同上方“方式1:环境变量”或“方式2:config.php define”二选一,无需重复。
4. 使用 OSS 存储(可选)
如果需要使用 OSS 存储文件,需要配置存储适配器。
5. 使用 SLB 负载均衡
配置应用服务器为后端服务器,实现高可用。
6. 使用容器服务 ACK
# 使用阿里云容器镜像服务构建镜像
# 推送到 ACR
docker tag oms-app:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/oms-app:latest
docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/oms-app:latest
# 在 ACK 中部署
kubectl apply -f k8s-deployment.yaml聚石塔部署建议
核心原则:生产环境全部托管在阿里云聚石塔,不自行在容器/虚机内部署数据库和缓存。使用聚石塔提供的 RDS、Redis、OSS、SLB/ALB 等托管能力,确保高可用与可运维性。
- 数据库:使用聚石塔 RDS(高可用、自动备份、按时间点恢复、故障切换)
- 缓存:使用聚石塔 Redis(持久化、高可用、监控告警、支持集群/读写分离)
- Memcached:如确需可开通聚石塔/阿里云 Memcached;优先直接用 Redis
- 存储:使用 OSS 存储文件,可结合 CDN 加速
- 负载均衡:使用 SLB/ALB 分发流量,启用健康检查与 SSL
- 监控:启用云监控与告警,关注 CPU/内存/磁盘/网络及 APM 指标
- 备份:开启 RDS 自动备份,配置 OSS 版本/生命周期策略;定期备份配置文件
- 安全:最小权限安全组、WAF、HTTPS/SSL、强密码策略,必要时开启访问白名单
⚙️ 部署后配置
PHP 配置优化(php.ini):
; 内存限制,单个脚本可使用的最大内存
memory_limit = 128M
; 脚本最大执行时间(秒),0 表示无限制
max_execution_time = 300
; 单个上传文件的最大大小
upload_max_filesize = 64M
; POST 请求的最大大小(应大于等于 upload_max_filesize)
post_max_size = 50M
; 表单提交的最大变量数量
max_input_vars = 5000
; 同时上传文件的最大数量
max_file_uploads = 20❓ 常见问题
部署问题
Q: 容器启动后无法访问?
A: 检查:
- 容器是否正常运行:
docker ps - 端口映射是否正确:
docker port oms-app - 防火墙是否开放端口
- 查看容器日志:
docker logs oms-app
Q: 配置文件挂载后不生效?
A: 检查:
- 文件路径是否正确
- 文件权限是否正确(容器内用户可读)
- 容器是否重启:
docker restart oms-app
Q: 数据库连接失败?
A: 检查:
- 数据库服务是否运行
- 数据库用户权限是否正确
- 网络是否连通(容器部署时检查网络配置)
- 配置文件中的数据库地址是否正确
Q: Redis/Memcached 连接失败?
A: 检查:
- 服务是否运行
- 端口是否开放
- 配置文件中的地址是否正确(容器部署时使用服务名)
- 网络是否连通
性能问题
Q: 系统响应慢?
A: 优化建议:
- 启用 Memcached 缓存
- 优化数据库查询
- 增加 PHP-FPM 进程数
- 使用 Redis 作为 KV 存储
- 启用 OPcache
Q: 内存占用高?
A: 优化建议:
- 调整 PHP memory_limit
- 优化代码,减少内存使用
- 定期清理缓存和日志
- 增加服务器内存
安全问题
Q: 如何防止未授权访问?
A: 安全措施:
- 配置防火墙,只开放必要端口
- 使用 SSL 证书(HTTPS)
- 配置强密码策略
- 定期更新系统和依赖
- 配置 WAF(Web 应用防火墙)
Q: 如何备份数据?
A: 备份方案:
- 数据库备份:使用 mysqldump 或云数据库备份功能
- 配置文件备份:定期备份 config/ 目录
- 数据目录备份:定期备份 data/ 目录
祝部署顺利! 🚀
最后更新:2025年11月2日
版本:1.0
