EQVPS

VPS に Docker Compose スタックをデプロイする方法

Docker Compose で VPS にマルチコンテナのスタックをデプロイする:docker-compose.yml を書き、シークレットを .env に保管し、再起動後に自動で立ち上がるように起動し、意図したポートだけを公開する。Web アプリ、データベース、リバースプロキシを含むコピペ例。

Docker Compose はマルチコンテナのスタックを1つのファイルで記述し、1コマンドで実行します。これはデプロイのハウツーです。まだなら先に Docker をインストール。AI エージェント向けのスタック(エージェント + ベクトル DB + 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 ファイアウォール と組み合わせてください。

1つの IP の背後にスタック全体を置くなら 複数サービスをセルフホスト を参照。約1分で root、NVMe、KYC なし、暗号資産で支払い。

よくある質問

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 経由で公開するので、うっかり書いた ports: 行は閉じたつもりの UFW の背後でもインターネットから到達できます。

身分証やカードは要りますか?

いいえ。登録にメール、支払いは USDC または USDT——書類なし、カードなし。約1分で root。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。