Docker Compose实战:用一台VPS部署个人全栈云服务

还在为VPS到手后不知道装什么而发愁?本文手把手教你使用Docker Compose在一台VPS上部署WordPress博客、Nextcloud云盘、Uptime Kuma监控和Nginx反向代理,零成本打造个人私有云生态,配置模板直接复制使用。

你还在手动编译Nginx、装PHP、配MySQL,折腾半天才发现依赖冲突?90%的个人站长拿着一台VPS,却把时间浪费在环境配置上,结果换个服务器就得从头再来。实测数据显示,用Docker Compose书写一个YAML文件、一行命令就能启动WordPress+Nextcloud+Redis+MongoDB+Uptime Kuma全套服务,环境完全隔离、可复现、可迁移。

为什么选择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的年付促销机都能很好地胜任这个负载,价格也相当亲民。

对于追求极致性价比的用户,CloudConeHostDare的洛杉矶机房VPS也是不错的选择,年付方案低至十几美元。操作系统建议选择Ubuntu 22.04 LTS或Debian 12,这两个发行版的Docker支持最为成熟,社区资源也最丰富。购买VPS后,记下IP地址和root密码,接下来我们将通过SSH连入服务器进行配置。

Docker Compose服务架构图

第一步: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的无缝同步体验。

Docker Compose一键部署流程

第六步:安全加固要点

容器化部署虽然已经比传统方式更安全,但仍然有几个关键点需要特别注意。首先是非root用户运行——在Dockerfile中通过 USER 指令指定非root用户,或者在docker-compose.yml中设置 user: 参数,可以防止容器被攻破后攻击者获得宿主机root权限。其次是定期更新镜像——建议每周执行一次 docker compose pull 拉取最新镜像,然后 docker compose up -d 重启服务,及时修复已知漏洞。

数据备份是重中之重。所有容器的重要数据都应该通过 volumes 挂载到宿主机指定目录,然后使用crontab定时执行备份脚本。对于WordPress的wp-content和Nextcloud的文件目录,建议设置每日增量备份,数据库则通过 mysqldumppg_dump 导出SQL文件后压缩保存。备份可以存储在VPS的另一块磁盘上,或者使用rclone同步到Google Drive或OneDrive实现异地容灾。

一张表看明白:各服务端口与配置速查

服务容器端口对外端口数据卷目录
Nginx Proxy Manager80/443/8180/443/81./data, ./letsencrypt
WordPress80通过NPM代理./wp-content
MySQL3306内部-only./db_data
Uptime Kuma30013001./uptime-kuma
Nextcloud808081*./nc_data, ./pg_data
Redis6379内部-only

*Nextcloud的8081端口仅用于直接访问测试,正式使用应通过NPM反向代理配置为子域名访问。

总结:用Docker Compose构建你的私有云生态

通过以上六个步骤,我们在一台普通的VPS上成功部署了博客系统、网站监控、私人云盘和缓存加速四大核心服务,所有服务共享同一个反向代理入口,统一管理SSL证书,并且通过容器隔离确保各服务互不干扰。整个过程没有使用任何付费面板或商业订阅,所有组件都是免费开源的。

这套方案的总成本仅为一台VPS的年费——如果选择高性价比的RackNerdCloudCone年付方案,每年的服务器开销不到200元人民币,却可以拥有完全自主可控的私有云服务。后续你还可以在这个架构上继续扩展——添加MinIO对象存储、安装ntfy推送服务、部署FreshRSS订阅阅读器,甚至跑一个AI推理服务。Docker Compose的扩展性远超你的想象,一台VPS就是一个数据中心。

原创文章,作者:kp51,如若转载,请注明出处:https://www.kepu51.com/instant-messaging/823.html

(0)
上一篇 2026年6月14日 01:13
下一篇 2026年6月18日 01:23

相关推荐

  • One API 开源 AI 模型聚合平台:自托管部署指南、配额管理与风险防范

    One API 开源 AI 模型聚合平台:自托管部署指南、配额管理与风险防范 在 AI 应用开发过程中,你可能遇到过这样的烦恼:不同的 AI 模型提供商有各自的 API 接口格式、Key 管理方式和计费规则,切换起来繁琐又容易出错。如果有一个统一的平台,能把 OpenAI、Anthropic、Google、Mistral 等多家大模型 API 聚合到一起,并…

    2026年7月4日
  • 磊科 N60 Pro 可能是最便宜的OpenWrt双 2.5G 路由器

    升级千兆宽带后,我希望充分利用光猫自带的2.5G端口。理想的方案是更换一台支持OpenWrt且具备双2.5G网口的路由器,预算控制在两三百元。 然而,在这个价位上,能刷OpenWrt的路由器大多只提供一个2.5G口,而配备双2.5G口的又多为不支持OpenWrt的中兴、海思方案。虽然“单臂路由”加2.5G交换机是种备选,但我嫌其配置过于繁琐。 最终,符合“两…

    2025年10月22日 Linux运维
  • IEPL 与 IPLC 专线:技术特性与场景应用深度解析

    引言 在全球化企业网络架构中,国际专线已成为跨国数据传输的核心基础设施。IEPL(International Ethernet Private Line)与IPLC(International Private Leased Circuit)作为两类主流专线技术,常因概念混淆导致企业选型困难。本文将从技术原理、性能指标、应用场景等多个维度进行系统性对比,为企业…

    2025年12月1日
  • 弹性IP VPS vs 固定IP VPS:核心区别、测试迁移场景与选购指南(2026)

    弹性IP VPS vs 固定IP VPS:核心区别、测试迁移场景与选购指南(2026) 做过网站搭建或服务器测试的朋友都知道,IP地址是云服务器最基础也最容易忽略的配置项。传统固定IP VPS一旦购买,IP就和实例绑定,想换机房或临时切换项目往往需要重装系统甚至重新下单。而弹性IP(Elastic IP)的出现,让IP管理变得像“搬家”一样方便——你可以随时…

    6天前
  • LightNode VPS 评测:CN2 GIA 线路、亚太优化与高性价比实测,2026 年值得入手吗?

    你是否在为选择一台亚太优化的VPS而反复纠结?既想要CN2 GIA等优化线路,又担心价格过高;既希望有多个亚太机房可选,又不想为复杂的配置而头疼。这种在选VPS时的纠结实在太常见了。当你需要面向国内用户提供稳定、快速的访问体验时,亚太优化的VPS往往是最佳选择,但高端CN2 GIA服务商的价格通常让人望而却步。你开始思考:有没有一个既能提供CN2 GIA线路…

    2026年2月1日
  • DedicatedCore VPS 值不值得入手:外贸建站、机房网络和性价比评测

    DedicatedCore VPS 值不值得入手:外贸建站、机房网络和性价比评测 做外贸独立站的朋友,对服务器最头疼的问题无非两个:一是国内访问慢,客户打开页面要等好几秒;二是国外机房的线路乱七八糟,价格看着便宜,实际用起来丢包率高得离谱。最近后台一直有人问 DedicatedCore 这个品牌,说看到它们家的 VPS 价格低得吓人,配置看起来也还行,就是不…

    2天前
  • 2026 年 InterServer VPS 主机测评:价格、适合人群与购买避坑指南

    InterServer VPS 主机深度测评:从定价逻辑、退款规则到机房选择、国内延迟表现,全面拆解这台月付 3 美元起步的美国 VPS 的真实表现。适合博客建站、企业官网、外贸站选购指南。

    2026年4月13日
  • 搭建 Postfix SMTP 中继隐藏源站 IP,保护服务器隐私

    SMTP 发件时邮件头会暴露源站真实 IP。本文教你搭建 Postfix SMTP 中继,丢弃 IP 痕迹,使邮件头只显示中继服务器 IP,保护服务器隐私安全。

    2026年6月8日
  • 适合 VPS 自托管的开源工具推荐:AI、自动化、部署面板、监控与个人云(2026年版)

    适合 VPS 自托管的开源工具推荐(2026年版) 拥有一台 VPS 后,除了搭建网站和代理之外,你还可以把它变成全栈个人云:部署 AI 模型聚合网关、自动化工作流、代码仓库、监控面板、文件管理甚至个人知识库。2026 年的开源生态空前繁荣,大量高质量的自托管项目可以运行在低至 1C1G 的 VPS 上。本文按使用场景分类,为你梳理最值得部署的开源工具,并给…

    3天前
  • Docker镜像加速完全指南:从拉取困境到自建仓库全方案

    Docker Hub在中国大陆的访问越来越不稳定,本文从配置镜像加速器、搭建Registry缓存、部署Harbor企业仓库到使用Zot轻量方案,系统性梳理多种Docker镜像加速方案,帮你彻底解决镜像拉取难题。

    2026年6月18日