自研CMS系统 测试服务器开发环境搭建教程
- 一、服务器规划
- 二、创建基础目录
- 三、创建开发用户 dev
- 四、安装基础开发工具
- 五、安装 Docker 与 Docker Compose
- 六、配置 Docker 数据目录
- 七、创建 SEOCMS Docker Compose 测试环境
- 八、安装 Node.js / npm
- 九、安装 Composer
- 十、处理 PHP CLI 禁用函数问题
- 十一、配置 GitHub CLI 和 SSH
- 十二、克隆 SEOCMS 项目
- 十三、配置 SEOCMS .env
- 十四、导入数据库结构
- 十五、运行 SEOCMS 检查脚本
- 十六、宝塔绑定站点
- 十七、1Remote 本地连接配置
- 十八、安装和登录 Codex CLI
- 十九、Codex 推荐使用流程
- 二十、常用维护命令
- 二十一、安全注意事项
- 最终快速流程清单
一、服务器规划
本轮使用的服务器环境为:
系统:Debian 12
面板:宝塔 V11.7
Web:Nginx 1.31
PHP:8.2
MySQL:8.4
Redis:8.4
Docker:用于隔离测试环境
GitHub:代码备份与版本管理
Codex:服务器端 AI 开发分析工具
本地连接工具:1Remote

建议服务器目录统一规划为:
/www/wwwroot/ # 前端测试站点目录
/home/projects/ # 后端 CMS 项目源码目录
/home/docker/ # Docker Compose 编排目录
/home/docker-data/ # Docker 数据目录
/home/backups/ # 本地临时备份目录
/home/scripts/ # 自动化脚本目录
/home/logs/ # 自定义日志目录
/home/packages/ # 离线包、第三方工具
/home/repositories/ # 可选 Git 镜像仓库目录
本轮采用的项目路径:
/home/projects/s1.seo.bj # SEOCMS V1 后端管理项目
/home/projects/s2.seo.bj # MYYCMS 模板分析/测试项目,可选
/www/wwwroot/cs1.seo.bj # 前端测试站点
/www/wwwroot/cs1.baidu.com # 前端测试站点
建议后端管理域名:
s1.seo.bj -> /home/projects/s1.seo.bj/public
前端测试站点:
cs1.seo.bj -> /www/wwwroot/cs1.seo.bj
cs2.seo.bj -> /www/wwwroot/cs2.seo.bj
...
cs10.baidu.com -> /www/wwwroot/cs10.baidu.com
二、创建基础目录
用 root 执行:
mkdir -p /home/projects
mkdir -p /home/docker
mkdir -p /home/docker-data
mkdir -p /home/backups/{local,ftp,gdrive,logs}
mkdir -p /home/scripts/{backup,deploy,monitor,maintenance}
mkdir -p /home/logs/{SEOCMS,MYYCMS,backup}
mkdir -p /home/packages
mkdir -p /home/repositories
创建后端项目目录:
mkdir -p /home/projects/s1.seo.bj
mkdir -p /home/projects/s2.seo.bj
创建前端测试站目录:
for i in $(seq 1 10); do
mkdir -p /www/wwwroot/cs${i}.seo.bj
mkdir -p /www/wwwroot/cs${i}.baidu.com
done
三、创建开发用户 dev
不建议长期使用 root 做开发。创建 dev 用户:
adduser dev
加入权限组:
usermod -aG sudo dev
usermod -aG docker dev
usermod -aG www dev
检查:
id dev
给项目目录权限:
chown -R dev:www /home/projects
chmod -R 775 /home/projects
切换测试:
su - dev
whoami
四、安装基础开发工具
用 root 执行:
apt update
apt install -y \
git curl wget unzip zip tar rsync jq tree htop iotop iftop ncdu \
vim nano lsof net-tools dnsutils telnet cron \
ca-certificates gnupg lsb-release software-properties-common \
build-essential make pkg-config acl supervisor logrotate
检查:
git --version
curl --version
tree --version
五、安装 Docker 与 Docker Compose
Docker 官方建议在 Debian 上先移除可能冲突的旧包,然后使用 Docker 官方 apt 仓库安装 Docker Engine。
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
apt-get remove -y $pkg
done
apt-get update
apt-get install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证:
docker version
docker compose version
六、配置 Docker 数据目录
避免 Docker 数据堆积在默认 /var/lib/docker,建议改到:
/home/docker-data
创建配置:
mkdir -p /home/docker-data
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"data-root": "/home/docker-data",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
},
"storage-driver": "overlay2"
}
EOF
重启:
systemctl daemon-reload
systemctl restart docker
docker info | grep -E "Docker Root Dir|Storage Driver"
七、创建 SEOCMS Docker Compose 测试环境
Docker Compose 用于定义和运行多容器应用,适合把 MySQL、Redis、Adminer、Mailpit 组合成独立测试栈。
1. 创建目录
mkdir -p /home/docker/seocms-dev/mysql/{data,conf,init}
mkdir -p /home/docker/seocms-dev/redis/data
mkdir -p /home/docker/seocms-dev/{adminer,logs}
cd /home/docker/seocms-dev
2. 创建 .env
注意:新服务器不要直接复用本轮密码,建议改成新的强密码。
cat > /home/docker/seocms-dev/.env <<'EOF'
COMPOSE_PROJECT_NAME=seocms_dev
MYSQL_ROOT_PASSWORD=ChangeRoot_SeoCMS56789
MYSQL_DATABASE=seocms_v1
MYSQL_USER=seocms
MYSQL_PASSWORD=ChangeUser_SeoCMS56789
MYSQL_HOST_PORT=13306
REDIS_HOST_PORT=16379
ADMINER_HOST_PORT=18081
MAILPIT_WEB_PORT=18025
MAILPIT_SMTP_PORT=11025
EOF
3. 创建 MySQL 配置
cat > /home/docker/seocms-dev/mysql/conf/seocms.cnf <<'EOF'
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone=+00:00
max_connections=500
max_allowed_packet=256M
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=2
slow_query_log=1
long_query_time=2
slow_query_log_file=/var/lib/mysql/slow.log
[client]
default-character-set=utf8mb4
EOF
4. 创建初始化 SQL
cat > /home/docker/seocms-dev/mysql/init/001-init.sql <<'EOF'
SET NAMES utf8mb4;
SET time_zone = '+00:00';
CREATE DATABASE IF NOT EXISTS seocms_v1
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS seocms_test
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS myycms_test
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
EOF
5. 创建安全版 compose.yaml
安全版只监听 127.0.0.1,避免 MySQL、Redis、Adminer、Mailpit 直接暴露公网。
cat > /home/docker/seocms-dev/compose.yaml <<'EOF'
services:
mysql84:
image: mysql:8.4
container_name: seocms_mysql84
restart: unless-stopped
ports:
- "127.0.0.1:${MYSQL_HOST_PORT}:3306"
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
TZ: "UTC"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d:ro
- ./mysql/init:/docker-entrypoint-initdb.d:ro
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
networks:
- seocms_net
redis:
image: redis:8
container_name: seocms_redis
restart: unless-stopped
ports:
- "127.0.0.1:${REDIS_HOST_PORT}:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
networks:
- seocms_net
adminer:
image: adminer:latest
container_name: seocms_adminer
restart: unless-stopped
ports:
- "127.0.0.1:${ADMINER_HOST_PORT}:8080"
depends_on:
- mysql84
networks:
- seocms_net
mailpit:
image: axllent/mailpit:latest
container_name: seocms_mailpit
restart: unless-stopped
ports:
- "127.0.0.1:${MAILPIT_WEB_PORT}:8025"
- "127.0.0.1:${MAILPIT_SMTP_PORT}:1025"
networks:
- seocms_net
networks:
seocms_net:
driver: bridge
EOF
6. 启动和验证
cd /home/docker/seocms-dev
docker compose config
docker compose up -d
docker compose ps
检查端口:
ss -lntp | grep -E '13306|16379|18081|18025|11025'
期望只监听:
127.0.0.1:13306
127.0.0.1:16379
127.0.0.1:18081
127.0.0.1:18025
127.0.0.1:11025
测试 MySQL:
docker exec seocms_mysql84 mysql -useocms -pChangeUser_SeoCMS56789 -e "SHOW DATABASES;"
测试 Redis:
docker exec seocms_redis redis-cli PING
期望:
PONG
八、安装 Node.js / npm
后续 Codex、前端工具、模板构建可能需要 Node.js。
cd /root
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt install -y nodejs
node -v
npm -v
给 dev 用户配置 npm 全局目录:
su - dev
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm config get prefix
九、安装 Composer
Composer 官方说明,composer install 会读取当前目录的 composer.json,如果有 composer.lock 就按锁定版本安装到 vendor。
安装最新 Composer:
cd /tmp
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm -f composer-setup.php
hash -r
which composer
composer --version
如果系统里还有旧 Composer:
which composer
ls -lah /usr/local/bin/composer /usr/bin/composer
如果 /usr/bin/composer 抢优先级,可以备份旧版本:
sudo mv /usr/bin/composer /usr/bin/composer-old.bak
hash -r
which composer
composer --version
本轮遇到过的问题:
Composer 旧版本 2.0.14 在 PHP 8.2 下出现大量 Deprecated。
升级到 Composer 2.10.0 后正常。
十、处理 PHP CLI 禁用函数问题
本轮遇到过 Composer 报错:
Call to undefined function Composer\XdebugHandler\putenv()
原因是 PHP CLI 禁用了 putenv()。PHP 的 disable_functions 可以禁用内置函数;PHP 8 中被禁用的函数会表现为不存在。
检查:
php -i | grep -i "disable_functions"
php -r "var_dump(function_exists('putenv'));"
php -r "var_dump(function_exists('proc_open'));"
php -r "var_dump(function_exists('exec'));"
期望:
bool(true)
bool(true)
bool(true)
查看 CLI 配置:
php --ini
按 Loaded Configuration File 指向的文件修改,例如:
sudo nano /www/server/php/82/etc/php.ini
建议 CLI PHP 至少不要禁用:
putenv
proc_open
proc_close
proc_get_status
popen
exec
shell_exec
如果你担心影响 Web PHP-FPM,可以单独创建 Composer 专用 php.ini。
进入宝塔面板,找到对应的PHP版本,进入PHP管理——禁用函数配置中,移除上面提示的函数,重启php即可;

十一、配置 GitHub CLI 和 SSH
GitHub CLI 的 gh auth login 默认支持 Web 浏览器认证,完成后会保存 token;如果系统没有凭据存储,会退回到普通文件。
1. 安装 GitHub CLI
apt update
apt install -y gh
gh --version
2. 切换 dev 用户并登录
su - dev
gh auth login
选择:
GitHub.com
SSH
Generate a new SSH key: Yes
Title: Debian12-SEOCMS-dev
Login with a web browser
如果服务器没有浏览器,是正常的。复制设备码,在本地 Windows 浏览器中完成授权。
3. 统一 GitHub 使用 SSH
gh config set git_protocol ssh
gh config set -h github.com git_protocol ssh
gh auth setup-git
gh config get git_protocol
gh config get -h github.com git_protocol
gh auth status
4. 测试 GitHub SSH
ssh -T [email protected]
期望:
Hi wwwseobj! You've successfully authenticated, but GitHub does not provide shell access.
5. 固定 GitHub 使用当前 SSH key
cat > ~/.ssh/config <<'EOF'
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
EOF
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
6. Git 用户信息
git config --global user.name "wwwseobj"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.autocrlf input
git config --global --list
十二、克隆 SEOCMS 项目
如果 /home/projects/s1.seo.bj 已存在空目录,先备份:
cd /home/projects
mv s1.seo.bj s1.seo.bj.bak-$(date +%F-%H%M%S)
git clone [email protected]:wwwseobj/seocms-v1.git s1.seo.bj
进入项目:
cd /home/projects/s1.seo.bj
git status
git remote -v
ls -lah
修正权限:
sudo chown -R dev:www /home/projects/s1.seo.bj
sudo find /home/projects/s1.seo.bj -type d -exec chmod 775 {} \;
sudo find /home/projects/s1.seo.bj -type f -exec chmod 664 {} \;
chmod -R go-rwx /home/projects/s1.seo.bj/.git
sudo chown -R dev:dev /home/projects/s1.seo.bj/.git
创建运行目录:
mkdir -p runtime/{cache,logs,temp,lock}
mkdir -p storage/{content,imports,exports,backups,generated}
mkdir -p storage/{logs,cache,queue}
mkdir -p public/post public/sites
sudo chown -R dev:www runtime storage public/post public/sites
sudo chmod -R 775 runtime storage public/post public/sites
安装依赖:
composer install
composer dump-autoload
修正 vendor 权限:
sudo chown -R dev:www vendor
sudo find vendor -type d -exec chmod 775 {} \;
sudo find vendor -type f -exec chmod 664 {} \;
十三、配置 SEOCMS .env
复制:
cd /home/projects/s1.seo.bj
cp .env.example .env
nano .env
配置为 Docker 测试库:
APP_NAME=SEOCMS V1
APP_ENV=local
APP_DEBUG=true
APP_TIMEZONE=Asia/Shanghai
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=13306
DB_DATABASE=seocms_v1
DB_USERNAME=seocms
DB_PASSWORD=ChangeUser_SeoCMS56789
DB_CHARSET=utf8mb4
REDIS_HOST=127.0.0.1
REDIS_PORT=16379
REDIS_PASSWORD=
REDIS_DB=0
MAIL_HOST=127.0.0.1
MAIL_PORT=11025
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=
设置权限:
sudo chown dev:www .env
chmod 660 .env
确认 .env 不提交:
grep -n "\.env" .gitignore
git status --short
十四、导入数据库结构
查看迁移文件:
find database/migrations -maxdepth 2 -type f -print
sed -n '1,60p' database/migrations/001_create_seocms_v1_tables.sql
导入:
docker exec -i seocms_mysql84 mysql -useocms -pChangeUser_SeoCMS56789 seocms_v1 < database/migrations/001_create_seocms_v1_tables.sql
查看表:
docker exec seocms_mysql84 mysql -useocms -pChangeUser_SeoCMS56789 seocms_v1 -e "SHOW TABLES;"
本轮导入后确认有 20 张核心表,包括:
admin_users
articles
sites
site_domains
content_files
generated_pages
generation_jobs
backup_records
admin_logs
template_modules
template_plans
css_class_maps
十五、运行 SEOCMS 检查脚本
cd /home/projects/s1.seo.bj
php scripts/test_db.php
php scripts/check_install.php
本轮最终健康检查结果:
Summary: pass=10 warn=1 fail=0
剩余警告只有:
opcache 缺失
开发阶段可暂时忽略。OPcache 是 PHP 性能优化项,不影响当前后台登录和功能测试。
创建管理员:
php scripts/create_admin.php
按提示输入:
Username
Email
Password
Role: super_admin
查看管理员:
docker exec seocms_mysql84 mysql -useocms -pChangeUser_SeoCMS56789 seocms_v1 -e "SELECT id, username, role, status, created_at FROM admin_users;"
注意:管理员密码不要在聊天记录、文档、Git、脚本里明文保存。
十六、宝塔绑定站点
宝塔中创建或修改站点:
域名:s1.seo.bj
网站目录:/home/projects/s1.seo.bj/public
运行目录:/
PHP版本:PHP 8.2
后台入口:
https://s1.seo.bj/admin/
根路径 / 建议跳转到后台:
cd /home/projects/s1.seo.bj
cat > public/index.php <<'PHP'
<?php
declare(strict_types=1);
header('Location: /admin/', true, 302);
exit;
PHP
sudo chown dev:www public/index.php
chmod 664 public/index.php
检查:
php scripts/check_install.php
git status --short
提交:
git add public/index.php
git commit -m "set root entry redirect to admin"
git push origin main
十七、1Remote 本地连接配置
SSH 连接
Name:SEOCMS-Dev-8.8.8.242
Protocol:SSH
Host:8.8.8.242
Port:22
Username:dev
Password:dev 用户密码
SFTP 连接
Name:SEOCMS-SFTP-8.8.8.242
Protocol:SFTP
Host:8.8.8.242
Port:22
Username:dev
Password:dev 用户密码
常用目录:
/home/projects/s1.seo.bj
/home/docker/seocms-dev
/www/wwwroot
/home/backups
/home/scripts
SSH 隧道访问 Adminer / Mailpit
由于 Docker 服务只监听 127.0.0.1,本地不能直接访问服务器公网端口。用 Windows PowerShell 建隧道:
ssh -L 18081:127.0.0.1:18081 -L 18025:127.0.0.1:18025 -L 13306:127.0.0.1:13306 -L 16379:127.0.0.1:16379 [email protected]
本地浏览器访问:
http://127.0.0.1:18081 # Adminer

http://127.0.0.1:18025 # Mailpit
Adminer 登录:
系统:MySQL
服务器:mysql84
用户名:root
密码:Docker Root 密码
数据库:seocms_v1
十八、安装和登录 Codex CLI
Codex CLI 是 OpenAI 的终端代码代理,可以在选定目录中读取、修改、运行代码;本轮已验证可以在 /home/projects/s1.seo.bj 中执行项目分析。
安装:
su - dev
curl -fsSL https://chatgpt.com/codex/install.sh | sh
source ~/.bashrc
codex --version
进入项目:
cd /home/projects/s1.seo.bj
codex
首次登录时建议选择:
2. Sign in with Device Code
然后在本地 Windows 浏览器中输入设备码授权。

如果看到:
Codex could not find bubblewrap on PATH
Codex will use the bundled bubblewrap in the meantime
这不是阻断错误。后续可安装:
sudo apt update
sudo apt install -y bubblewrap
which bwrap
bwrap --version
sysctl kernel.unprivileged_userns_clone
OpenAI Codex 文档说明,Linux 沙箱依赖 bubblewrap 和 user namespace;如果系统找不到 bubblewrap,会提示安装。

十九、Codex 推荐使用流程
每次使用 Codex 前,先确认 Git 状态:
cd /home/projects/s1.seo.bj
git status --short
如果有明确需要保存的改动,先提交:
git add public/index.php
git commit -m "set root entry redirect to admin"
git push origin main
启动:
codex
首次分析任务建议:
请只分析当前 SEOCMS V1 项目结构,不要修改文件。
重点检查以下内容:
1. public/admin 的后台功能模块;
2. app 核心服务;
3. config 配置;
4. database/migrations 表结构;
5. scripts 脚本用途;
6. public/index.php 当前首页跳转逻辑;
7. 当前后台登录、站点管理、文章管理、生成任务、备份、日志、sitemap、robots 等模块的完成度。
请输出:
1. 当前已完成的功能;
2. 当前缺失或未完成的功能;
3. 潜在问题和安全风险;
4. 数据库表与后台模块的对应关系;
5. 下一步开发优先级;
6. 不要修改任何文件,不要执行 git commit,不要执行 git push。
本轮 Codex 分析确认:后台已经覆盖登录、站点、内容库、文章、静态生成、sitemap、robots、任务、备份、管理员、日志、导出、系统检查等模块;同时指出分类、标签、作者、单页、多域名、完整 SEO 模板管理、推送、蜘蛛日志等能力尚未落地。

允许 Codex 执行的只读命令:
ls
find
cat
grep
sed
php -l
php scripts/check_install.php
git status
暂时不要允许:
git add
git commit
git push
rm
mv
chmod -R
chown -R
mysql DROP
docker compose down
除非你明确让它开发或修复。
二十、常用维护命令
Docker 状态
cd /home/docker/seocms-dev
docker compose ps
docker compose logs -f
MySQL 测试
docker exec seocms_mysql84 mysql -useocms -pChangeUser_SeoCMS56789 -e "SHOW DATABASES;"
Redis 测试
docker exec seocms_redis redis-cli PING
SEOCMS 检查
cd /home/projects/s1.seo.bj
php scripts/test_db.php
php scripts/check_install.php
Git 状态
git status --short
git diff
Composer
composer --version
composer install
composer dump-autoload
二十一、安全注意事项
新服务器搭建完成后,建议立即处理:
1. 修改 Docker MySQL root 密码和 seocms 用户密码;
2. 修改后台管理员密码;
3. 不要把 .env 提交到 GitHub;
4. 不要把 GitHub token、OpenAI API Key、SSH 私钥写进项目;
5. Docker MySQL、Redis、Adminer、Mailpit 保持 127.0.0.1 监听;
6. 本地访问 Adminer/Mailpit 走 SSH 隧道;
7. Codex 首轮任务只做只读分析;
8. 每次让 Codex 修改代码前先 git status;
9. 每个开发阶段完成后 git commit + git push;
10. 备份脚本不要在命令行明文写数据库密码,后续应改成专用 option file。
MySQL 官方文档也提醒,在命令行直接写密码可能不安全;开发阶段可以临时使用,自动化脚本建议改为更安全的配置文件方式。
最终快速流程清单
新服务器下次可以按这个顺序执行:
1. 安装 Debian 12 + 宝塔 + Nginx + PHP 8.2 + MySQL + Redis
2. 创建 /home/projects、/home/docker、/home/docker-data、/home/backups
3. 创建 dev 用户并加入 sudo/docker/www
4. 安装基础工具
5. 安装 Docker Engine 和 Docker Compose
6. 配置 Docker data-root 到 /home/docker-data
7. 创建 /home/docker/seocms-dev Docker Compose 测试环境
8. 启动 Docker MySQL、Redis、Adminer、Mailpit
9. 安装 Node.js / npm
10. 安装 Composer 最新版
11. 配置 GitHub CLI 和 SSH Key
12. 克隆 SEOCMS 仓库到 /home/projects/s1.seo.bj
13. composer install
14. 创建 .env,连接 Docker MySQL 13306 / Redis 16379
15. 导入 database/migrations/001_create_seocms_v1_tables.sql
16. 执行 php scripts/check_install.php
17. 执行 php scripts/create_admin.php
18. 宝塔绑定 s1.seo.bj 到 /home/projects/s1.seo.bj/public
19. 访问 https://s1.seo.bj/admin/
20. 安装并登录 Codex
21. 先让 Codex 只读分析,不要直接改代码
这套流程已经在本轮服务器上完整验证过,可以作为以后 CMS 测试服务器的标准初始化手册。


评论