−25%

Windows 年繳方案適用,至 10 月 31 日。 檢視方案

EQVPS
開始使用

如何在 VPS 上部署 Docker Compose 技術堆疊

用 Docker Compose 在 VPS 上部署多容器技術堆疊:編寫 docker-compose.yml、把機密放在 .env、以重新啟動後自動拉起的方式啟動,只發布您真正想發布的埠。含 Web 應用、資料庫和反向代理的複製貼上範例。

Docker Compose 用一個檔案描述一個多容器技術堆疊,並用一條指令執行它。這是部署指南;如果還沒裝,先安裝 Docker。關於面向 AI 代理的技術堆疊(代理 + 向量資料庫 + Redis),請看 面向 AI 代理的 docker-compose。

1. 一個技術堆疊:應用 + 資料庫 + 反向代理

# /opt/stack/docker-compose.yml
services:
  app:
    image: your/app:latest
    restart: unless-stopped
    env_file: [.env]
    depends_on: [db]
    # no ports: — reached only through the proxy below

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: ["pg:/var/lib/postgresql/data"]   # internal only

  caddy:                                        # HTTPS automatically
    image: caddy:2
    restart: unless-stopped
    ports: ["80:80", "443:443"]                 # the only public entrypoint
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

volumes: { pg: {}, caddy_data: {} }

機密放在 .env 裡,絕不放進 compose 檔案:

# /opt/stack/.env  (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string

一個最小的 Caddyfile 把您的網域代理到應用並自行取得 HTTPS:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. 啟動它

cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app

每個服務上的 restart: unless-stopped + Docker 開機自啟 = 技術堆疊在重新啟動後自行回來。

3. 日常指令

docker compose pull && docker compose up -d   # update images
docker compose down                            # stop the stack
docker compose restart app                     # restart one service

大家常搞錯的部分:暴露的埠

Docker 透過 iptables 發布埠,所以帶 ports: ["5432:5432"] 的容器即便在您以為已關閉的 UFW 防火牆之後,也能從網際網路存取到。只發布公開入口(80/443 上的代理);把資料庫和快取留在 compose 網路裡或綁定到 127.0.0.1。任何對外提供 Web 流量的東西都需要 專用 IP 方案;搭配 UFW 防火牆。

關於一整個技術堆疊在一個 IP 之後,請看 自託管多個服務。大約一分鐘拿到 root,NVMe,無 KYC,用加密貨幣付款。

如何在不弄壞任何東西的前提下釋放 VPS 磁碟空間 →

常見問題

如何在 VPS 上部署 Docker Compose 技術堆疊?

安裝帶 Compose 外掛的 Docker,編寫描述每個服務的 docker-compose.yml,把機密放在被 git 忽略的 .env 裡,然後 docker compose up -d。在每個服務上設定 restart: unless-stopped,並讓 Docker 開機自啟,使技術堆疊能挺過重新啟動。下面的範例執行一個 Web 應用、Postgres 和一個 Caddy 反向代理。

機密放哪裡——放在 compose 檔案裡嗎?

不。把它們放進 .env 檔案(chmod 600、被 git 忽略),在 compose 裡用 ${VAR} 引用,或使用 Docker secrets。絕不要把密碼或 API 金鑰提交進 docker-compose.yml——一個帶有有效憑據的洩露檔案是經典錯誤。

技術堆疊在重新啟動後會回來嗎?

只有您讓它這樣做才會。在每個服務上設定 restart: unless-stopped(或 always),並讓 Docker 開機自啟(systemctl enable docker)。這樣 docker compose up -d 就能挺過重新啟動並重新啟動崩潰的容器。

哪些埠會被暴露?

只有您用 ports: 發布的。把內部服務(資料庫、快取)綁定到 compose 網路或 127.0.0.1,只發布公開入口——通常是 80/443 上的反向代理。Docker 透過 iptables 發布,所以即便在您以為已關閉的 UFW 之後,一行意外的 ports: 也能從網際網路存取到。

您們要身分證件或信用卡嗎?

不要。註冊用電子郵件,用 USDC 或 USDT 付款——無檔案、無卡。大約一分鐘拿到 root。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。