为什么选择Docker Compose管理云服务?
对于拥有一台VPS但又不想把大量时间花在运维上的站长来说,Docker Compose堪称神器。传统的服务部署方式需要在服务器上逐一手动安装环境——先编译Nginx、再装PHP、然后配置MySQL,每一个环节都可能因为操作系统版本差异、依赖冲突、配置文件错误而耗费数小时。而Docker Compose的出现彻底改变了这一局面:你只需编写一个YAML格式的配置文件,把所有服务的镜像、端口映射、环境变量、数据卷和网络关联定义清楚,一行命令就能启动整个服务栈,而且环境完全隔离、可复现、可迁移。
具体来说,Docker Compose为个人站长带来了以下几个核心优势。首先是可重复部署——你在本地测试好的配置,上传到任何一台VPS上都能完美运行,不会出现”我这台机器编译不过”的尴尬。其次是环境隔离——每个服务运行在自己的容器中,WordPress依赖的PHP版本不会和Nextcloud需要的PHP版本打架。最后是一键启停——一条docker compose up -d启动所有服务,一条docker compose down干净地停止并清理资源,无需逐一管理进程。
准备工作:选购一台合适的VPS
在开始部署之前,首先要选择一台配置足够的VPS。根据我们即将部署的服务组合(Nginx反向代理 + WordPress博客 + MySQL数据库 + Uptime Kuma监控 + Nextcloud云盘 + Redis缓存),建议至少选择2GB内存、2核CPU、40GB SSD存储的配置。如果预算允许,DigitalOcean的4GB内存方案或者RackNerd的年付促销机都能很好地胜任这个负载,价格也相当亲民。
对于追求极致性价比的用户,CloudCone和HostDare的洛杉矶机房VPS也是不错的选择,年付方案低至十几美元。操作系统建议选择Ubuntu 22.04 LTS或Debian 12,这两个发行版的Docker支持最为成熟,社区资源也最丰富。购买VPS后,记下IP地址和root密码,接下来我们将通过SSH连入服务器进行配置。

第一步:VPS基础环境配置
拿到VPS后的第一件事不是急着装面板,而是做好基础安全加固和环境准备。首先通过SSH登录到你的服务器(推荐使用SSH密钥认证而非密码登录),然后执行系统更新。Ubuntu/Debian系统执行 apt update && apt upgrade -y 即可将所有软件包更新到最新版本。
接下来安装Docker。Docker官方提供了一键安装脚本,执行 curl -fsSL https://get.docker.com | bash 就会自动完成Docker Engine和containerd的安装。安装完成后,执行 docker --version 确认安装成功。Docker Compose v2已经以Docker插件的形式内置在Docker中,通过 docker compose version 即可验证。如果你的系统没有自带Compose插件,也可以通过 apt install docker-compose-plugin 单独安装。
最后配置防火墙。Ubuntu默认使用UFW,执行以下命令放行必要端口:ufw allow 22/tcp(SSH)、ufw allow 80/tcp(HTTP)、ufw allow 443/tcp(HTTPS),然后 ufw enable 启用防火墙。如果你用云服务商的控制面板自带的防火墙规则,也请确保放行了这3个端口。
第二步:Nginx Proxy Manager反向代理
在正式部署业务服务之前,我们首先架设一个统一的入口网关——Nginx Proxy Manager。这是一个基于Nginx的Web管理面板,提供了图形化的反向代理配置和Let’s Encrypt自动SSL证书申请功能,让你无需手动编辑Nginx配置文件就能管理所有域名和HTTPS证书。
创建一个项目目录并在其中编写 docker-compose.yml:
version: "3.8"
services:
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
restart: always
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
执行 docker compose up -d 启动服务后,浏览器访问 http://你的IP:81,使用默认账号 admin@example.com / changeme 登录,然后立即修改密码。在面板中添加你的域名并申请SSL证书,此后所有流量都将自动通过HTTPS加密传输。
第三步:部署WordPress博客站点
WordPress是全球使用最广泛的CMS系统,占据全球超过40%的网站份额。通过Docker Compose部署WordPress可以让环境完全容器化,不再担心PHP版本升级或MySQL迁移带来的兼容性问题。我们将使用官方的 wordpress:latest 镜像加上 mysql:8.0 数据库,配合Redis缓存加速。
在docker-compose.yml中添加以下服务定义:
wordpress:
image: wordpress:latest
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: 你的密码
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp-content:/var/www/html/wp-content
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: 你的密码
MYSQL_ROOT_PASSWORD: root密码
volumes:
- ./db_data:/var/lib/mysql
redis:
image: redis:alpine
restart: always
启动后回到Nginx Proxy Manager面板,为你的域名创建一个反向代理指向 wordpress:80。访问域名即可进入WordPress安装页面,填入站点信息即可完成博客搭建。安装了Redis Object Cache插件后,页面加载速度可以提升3-5倍。
第四步:Uptime Kuma网站监控
运营网站最怕的是什么?不是流量少,而是网站宕机了自己还不知道。Uptime Kuma是一款开源的网站状态监控工具,提供美观的仪表盘,支持HTTP、Ping、TCP、DNS等多种监控方式,并可以通过Telegram、邮件、Slack等多个渠道发送告警通知。更贴心的是,它内置了状态页面功能,可以生成一个公开的status.yourdomain.com页面展示所有服务的运行状况。
在docker-compose.yml中添加:
uptime-kuma:
image: louislam/uptime-kuma:latest
restart: always
ports:
- "3001:3001"
volumes:
- ./uptime-kuma:/app/data
启动后访问 http://你的IP:3001 设置管理员账号,然后添加你的WordPress域名、Nextcloud域名和NPM管理面板作为监控目标。建议将监控间隔设为60秒,告警触发阈值设为连续3次失败,这样既能及时发现问题,又不会因为偶发网络抖动而收到大量误报。配置Telegram Bot推送告警后,你可以第一时间在手机上收到网站故障通知。
第五步:Nextcloud私人云盘
Nextcloud是功能最完善的自托管云盘方案,支持文件同步与分享、日历、联系人、端到端加密、Office在线编辑等丰富功能。把它部署在你的VPS上,就可以彻底告别百度网盘的限速和隐私顾虑。Nextcloud对数据库的要求较高,我们选择PostgreSQL而非SQLite来获得更好的并发性能。
在docker-compose.yml中追加:
nextcloud:
image: nextcloud:stable
restart: always
ports:
- "8081:80"
environment:
POSTGRES_HOST: db-nc
POSTGRES_DB: nextcloud
POSTGRES_USER: ncuser
POSTGRES_PASSWORD: 你的密码
volumes:
- ./nc_data:/var/www/html
db-nc:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: ncuser
POSTGRES_PASSWORD: 你的密码
volumes:
- ./pg_data:/var/lib/postgresql/data
启动后在NPM面板中为Nextcloud添加反向代理,指向 nextcloud:80。首次访问需要创建管理员账号并配置PostgreSQL数据库连接。Nextcloud的客户端支持Windows、macOS、Linux、Android和iOS全平台覆盖,安装客户端后设置服务器地址,即可实现类似Dropbox的无缝同步体验。

第六步:安全加固要点
容器化部署虽然已经比传统方式更安全,但仍然有几个关键点需要特别注意。首先是非root用户运行——在Dockerfile中通过 USER 指令指定非root用户,或者在docker-compose.yml中设置 user: 参数,可以防止容器被攻破后攻击者获得宿主机root权限。其次是定期更新镜像——建议每周执行一次 docker compose pull 拉取最新镜像,然后 docker compose up -d 重启服务,及时修复已知漏洞。
数据备份是重中之重。所有容器的重要数据都应该通过 volumes 挂载到宿主机指定目录,然后使用crontab定时执行备份脚本。对于WordPress的wp-content和Nextcloud的文件目录,建议设置每日增量备份,数据库则通过 mysqldump 或 pg_dump 导出SQL文件后压缩保存。备份可以存储在VPS的另一块磁盘上,或者使用rclone同步到Google Drive或OneDrive实现异地容灾。
一张表看明白:各服务端口与配置速查
| 服务 | 容器端口 | 对外端口 | 数据卷目录 |
|---|---|---|---|
| Nginx Proxy Manager | 80/443/81 | 80/443/81 | ./data, ./letsencrypt |
| WordPress | 80 | 通过NPM代理 | ./wp-content |
| MySQL | 3306 | 内部-only | ./db_data |
| Uptime Kuma | 3001 | 3001 | ./uptime-kuma |
| Nextcloud | 80 | 8081* | ./nc_data, ./pg_data |
| Redis | 6379 | 内部-only | — |
*Nextcloud的8081端口仅用于直接访问测试,正式使用应通过NPM反向代理配置为子域名访问。
总结:用Docker Compose构建你的私有云生态
通过以上六个步骤,我们在一台普通的VPS上成功部署了博客系统、网站监控、私人云盘和缓存加速四大核心服务,所有服务共享同一个反向代理入口,统一管理SSL证书,并且通过容器隔离确保各服务互不干扰。整个过程没有使用任何付费面板或商业订阅,所有组件都是免费开源的。
这套方案的总成本仅为一台VPS的年费——如果选择高性价比的RackNerd或CloudCone年付方案,每年的服务器开销不到200元人民币,却可以拥有完全自主可控的私有云服务。后续你还可以在这个架构上继续扩展——添加MinIO对象存储、安装ntfy推送服务、部署FreshRSS订阅阅读器,甚至跑一个AI推理服务。Docker Compose的扩展性远超你的想象,一台VPS就是一个数据中心。
原创文章,作者:kp51,如若转载,请注明出处:https://www.kepu51.com/instant-messaging/823.html
