之前只对照着油管部署过基于VMESS+域名的VPS搭建,因为缺乏网络知识,只能一步一步来,不敢有任何创新,通了之后也不敢再多做多余的操作,VPS就基本单一功能搁置了,真的挺浪费。一直想做个又能有基本功能又能写东西的网站,对照着网上的文章走却经常遇到问题而无法及时解决,就卡住了,现在有了CHATGPT,跟着走,有问题及时反馈,居然就配合成了,记录一下要点。
一、从 0 到可用:我做了什么(过程要点版)
你可以把这一段当成正文主体。
1️⃣ 购买服务器之后,我先做了什么?
目标很清晰:
- 一台海外 VPS
- 同时跑:
- 个人博客(WordPress)
- 自用代理(Reality)
- 只用 一个 443 端口
- 不影响网站正常访问
关键选择:
- 系统:Ubuntu 24.04
- 博客:WordPress(Docker)
- 代理:Xray + Reality(xtls-rprx-vision)
- Web:Nginx(Docker)
2️⃣ SSH 与基础安全(第一个坑)
做了什么
- 使用 SSH Key 登录
- 关闭 root 密码登录
- 新建普通用户
遇到的坑
- cloud-init 会覆盖 sshd 配置
/etc/ssh/sshd_config.d/50-cloud-init.conf优先级很高- 正确做法是:
- 新建
99-local.conf - 不直接改 cloud-init 文件
- 新建
👉 教训:
云厂商环境 ≠ 裸机,配置优先级一定要看清楚。
3️⃣ Docker + WordPress(看似简单,其实坑不少)
做了什么
- Docker Compose 管理:
- nginx
- wordpress (php-fpm)
- mariadb
- WordPress 只跑 PHP
- Nginx 负责 HTTPS 和反代
关键结构
/opt/docker/web
├── docker-compose.yml
├── nginx/
│ └── conf.d/default.conf
├── wordpress/
│ └── html/
├── php/
│ └── php.ini
4️⃣ HTTPS 与证书(第二个坑)
做了什么
- 使用 certbot 申请 Let’s Encrypt
- 证书在宿主机
- 挂载进 Docker nginx
遇到的坑
- certbot 默认用 nginx 插件
- Docker nginx 占用 80 / 443 时:
- certbot 会失败
正确思路
- 使用 webroot 模式
- 明确
.well-known/acme-challenge路径 - 证书续期 ≠ 重启 Docker
👉 教训:
HTTPS 是“宿主机级别”的事,不要和容器混在一起。
5️⃣ Reality + 博客共存(最核心的一步)
最终架构(这是精华)
公网 443
↓
Xray(Reality)
├─ Reality 客户端 → 代理流量
└─ 普通 HTTPS → 转发到 127.0.0.1:8443
↓
Docker Nginx
↓
WordPress
关键点
- Nginx 不再监听公网 443
- Nginx 只监听:
- 80
- 127.0.0.1:8443
- Xray 独占 443
👉 Reality 的“伪装”不是流量大小,而是协议外观。
6️⃣ Reality 身份材料(一个容易想错的地方)
用到的三样东西
- PrivateKey(服务器)
- UUID(用户)
- shortId(Reality 指纹)
正确认知
- 生成 一次
- 固定使用
- 不是每次连接都重新生成
👉 生成多次没问题,用错才有问题。
7️⃣ WordPress 上传 413 / PHP 限制(经典三连坑)
遇到的报错
413 Request Entity Too Large(nginx)upload_max_filesize太小(PHP)- Elementor / 主题解压超时
正确解决方式
- nginx:
client_max_body_size 128M;
- PHP(挂载 php.ini):
upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 256M
max_execution_time = 300
👉 关键坑:
改 php.ini 后,必须
docker compose up -d --force-recreate
