自研CMS系统 测试服务器开发环境搭建教程

服务器

自研CMS系统 测试服务器开发环境搭建教程

一、服务器规划

本轮使用的服务器环境为:

系统:Debian 12
面板:宝塔 V11.7
Web:Nginx 1.31
PHP:8.2
MySQL:8.4
Redis:8.4
Docker:用于隔离测试环境
GitHub:代码备份与版本管理
Codex:服务器端 AI 开发分析工具
本地连接工具:1Remote

自研CMS系统 测试服务器开发环境搭建教程

建议服务器目录统一规划为:

/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即可;

进入宝塔面板,找到对应的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在Debian服务器登录配置参数

如果看到:

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,会提示安装。

OpenAI Codex 文档说明

十九、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 分析日志

允许 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 测试服务器的标准初始化手册。


【SEO业务合作】=》面向成长型与成熟品牌,提供全职SEO与兼职SEO灵活配置,支持远程办公,高效衔接内容、技术与外链;配套SEO经费支持,以可量化目标推进,表现优秀享提成奖金与长期激励。我们聚焦关键词策略、站点结构优化、内容集群、外链生态与转化提升,覆盖站内外全流程与数据跟踪,兼顾中文搜索场景与国际引擎需求,适配电商、资讯、SaaS与本地服务等多类型网站。欢迎企业、团队与个人洽谈SEO业务合作,打造稳健、可持续的自然流量增长路径。点击查看详细合作说明
服务器

评论

标题和URL已复制