Amazon LightsailでPocketBase + NGINX を設置(Lightsail の Networking 設定を忘れて SSL 設定に失敗した私の最大のミス談つき)
Photo by Jordan Harrison on Unsplash
PocketBase は軽量かつリアルタイム対応のバックエンドとして非常に便利ですが、SSL 証明書のセットアップ時に Lightsail の Networking 設定を見落とし、ブラウザからアクセスできなくなった経験があります。以下の手順ではそのミスを踏まえつつ、Docker Compose、NGINX、Let’s Encrypt(Certbot)を使って Ubuntu(例:22.04 または 24.04)上に PocketBase を公開するまでを解説します。
事前準備
- VPS(Lightsail インスタンス)
- Ubuntu 22.04/24.04 を想定
- SSH で
sudo実行可能なアカウントがあること
- ドメイン名
pb.yourdomain.comなど、Lightsail のスタティック IP に向けて DNS が設定済み
- ローカル開発環境(任意)
- PocketBase をローカルで動かしながら確認できれば安心
- Docker & Git の基礎知識
- コマンドライン操作、Docker イメージのビルド・実行の経験があるとスムーズ
大きなミスの先出し:Lightsail の Networking タブ
Lightsail のインスタンス作成後、SSL(443番ポート)の設定を行う前に
Lightsail コンソール → 対象インスタンス → Networking タブ → 「インスタンスファイアウォール」で必ず HTTPS (443) を許可してください。これを忘れると、Certbot を使って証明書を取得してもブラウザでアクセスできません。
Tip: HTTP (80) → HTTPS (443) へのリダイレクトも同じく Networking タブで開放を忘れずに。
0. GitHub リポジトリの準備(ローカル推奨)
実際に VPS 上で直接作業しても構いませんが、私はローカル環境でコードを管理・動作確認したあとに VPS にプッシュしています。
- GitHub(または任意の Git リポジトリ)を作成しておく
- ローカルにクローンしてフォルダを用意
mkdir pocketbase-deploy
cd pocketbase-deploy
git init
git remote add origin git@github.com:あなた/リポジトリ名.git
1. Lightsail インスタンスで Git をセットアップ
- SSH で Lightsail に接続
ssh -i ~/.ssh/your-key.pem ubuntu@<インスタンスのIP> - Git インストール & ユーザー情報設定
sudo apt update
sudo apt install -y git
git config --global user.name "Your Name"
git config --global user.email "you@example.com" - SSH キーペア生成(ローカル or VPS どちらか)
ssh-keygen -t ed25519 -C "you@example.com"
# デフォルトのファイル名とパス(~/.ssh/id_ed25519)をそのまま使い、必要ならパスフレーズを設定 - 公開鍵をコピーして Git プロバイダに登録
cat ~/.ssh/id_ed25519.pub
# 出力されたキー文字列を GitHub/GitLab/Bitbucket の SSH Keys 設定に貼り付け - SSH 接続テスト
ssh -T git@github.com
# "Hi <username>! You've successfully authenticated..." と返ってくれば OK
2. Lightsail インスタンスで Docker をセットアップ
- 古い Docker 関連パッケージを削除
sudo apt remove -y docker docker-engine docker.io containerd runc - 依存パッケージをインストール
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release - Docker 公式 GPG キーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - Docker リポジトリを登録
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - Docker Engine・CLI をインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io - Docker デーモンを自動起動
sudo systemctl enable --now docker - 動作確認
docker version
# Client と Server のバージョン表示を確認
docker compose version
# "Docker Compose version v2.x.x" のように表示されれば Compose V2 が有効
3. プロジェクト構成と Docker Compose ファイル作成
- ローカルリポジトリ or VPS 上の作業ディレクトリに移動
cd ~/pocketbase-deploy - 環境変数ファイル
.envを作成cat <<EOF > .env
PB_VERSION=0.28.2 # PocketBase のバージョン
PORT=8090 # PocketBase がリッスンするポート
SERVER_NAME=pb.yourdomain.com
EOF docker-compose.ymlを作成cat <<'EOF' > docker-compose.yml
version: '3.8'
services:
pocketbase:
build:
context: .
args:
PB_VERSION: ${PB_VERSION}
ports:
- '127.0.0.1:${PORT}:8090'
volumes:
- ./pb_data:/pb/pb_data
- ./pb_hooks:/pb/pb_hooks
- ./pb_migrations:/pb/pb_migrations
restart: unless-stopped
healthcheck:
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
test: ['CMD', 'wget', '--spider', '-q', 'http://localhost:${PORT}/api/health']
EOF- ポイント:
127.0.0.1:${PORT}:8090としているため、外部から直接 PocketBase の 8090 番ポートにはアクセスできません。- 後述の NGINX がリバースプロキシとして受け取り、内向きにアクセスします。
- 必要なディレクトリを作成
mkdir -p pb_data pb_hooks pb_migrations - ローカルでビルド&テスト(任意)
docker compose up -d --build
# 数秒待ってから Health チェック
curl http://localhost:8090/api/health
# {"code":200,"message":"PocketBase is running.","data":{}} が返れば OK
# 終了する場合:
docker compose down
4. VPS にコードをデプロイし、Docker Compose を実行
- ローカルリポジトリで変更をコミット&プッシュ
git add .
git commit -m "Add PocketBase Docker Compose setup"
git push origin main - VPS 上でクローン or プル
cd ~
git clone git@github.com:あなた/リポジトリ名.git
cd リポジトリ名 .envの内容を VPS で再度確認・修正nano .env
# (必要なら IP やドメインを修正)- Docker Compose を起動
docker compose up -d --build - 動作確認(VPS 内部)
curl http://localhost:8090/api/health - 正常に {"code":200,...} が返ってくれば PocketBase がバックグラウンドで動いています。
5. NGINX をリバースプロキシとして設定
PocketBase の管理 UI は https://pb.yourdomain.com/_/ のようなパスでブラウザからアクセスしたいので、NGINX を使ってリバースプロキシを構築します。
- NGINX インストール
sudo apt update
sudo apt install -y nginx - Web ルートディレクトリを準備
sudo mkdir -p /var/www/certbot
sudo chown -R ubuntu:ubuntu /var/www/certbot - NGINX サイト設定ファイル作成
sudo tee /etc/nginx/sites-available/pb.yourdomain.com > /dev/null <<'EOF'
server {
listen 80;
server_name pb.yourdomain.com www.pb.yourdomain.com;
# Let’s Encrypt 用のチャレンジフォルダを指定
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# HTTP → HTTPS リダイレクト
location / {
return 301 https://$host$request_uri;
}
}
EOF - 有効化(シンボリックリンク作成)
sudo ln -s /etc/nginx/sites-available/pb.yourdomain.com /etc/nginx/sites-enabled/ - NGINX 設定テスト & リロード
sudo nginx -t
sudo systemctl reload nginx
6. Let’s Encrypt(Certbot)で SSL 証明書を取得
- Certbot をインストール
sudo apt update
sudo apt install -y certbot python3-certbot-nginx - 証明書の取得 & NGINX 自動設定
sudo certbot --nginx -d pb.yourdomain.com -d www.pb.yourdomain.com - プロンプトに従いメールアドレスを入力し、利用規約に同意。
- 「HTTP を HTTPS に自動リダイレクトするか?」という選択肢が出たら「2: Redirect (推奨)」を選ぶと、既存の
listen 80設定に加えて HTTPS 用の設定が自動追記されます。
- 自動更新の確認
sudo systemctl status certbot.timer - Certbot が定期的に(90日ごと)証明書を更新するようタイマーが有効になっていることを確認します。
7. Lightsail Networking 設定を忘れずに
最大のミス要点: Certbot で SSL 証明書をインストールしても、Lightsail のファイアウォールで 443 番ポートを開放していないと外部から HTTPS アクセスできません。
- Lightsail コンソール → 対象インスタンス → Networking タブ
- インスタンスファイアウォールの項目で、次を許可する:
- HTTP (80)
- HTTPS (443)
注意:
- HTTP(80)は Let’s Encrypt の認証に必須です。
- HTTPS(443)が開いていないとブラウザで
https://pb.yourdomain.comに接続できません。
8. 最終動作確認
- VPS 内部 → PocketBase 健康チェック
curl http://localhost:8090/api/health
# {"code":200,"message":"PocketBase is running.","data":{}} が返る - ブラウザ → HTTPS でアクセス
- https://pb.yourdomain.com/api/health
- https://pb.yourdomain.com/_/ で管理画面にログイン可能か確認
- HTTP → HTTPS リダイレクト確認
- http://pb.yourdomain.com にアクセスすると、自動的に https://pb.yourdomain.com にリダイレクトされるか
- 証明書の有効性チェック
- ブラウザの鍵マークをクリックして Certbot が発行した Let’s Encrypt 証明書が正しくインストールされているか確認
まとめ
- Git & Docker のセットアップ を済ませてから PocketBase コンテナを起動
- NGINX をリバースプロキシ として HTTP→HTTPS リダイレクト設定
- Certbot で Let’s Encrypt SSL 証明書を取得し、NGINX 設定を自動更新
- Lightsail の Networking タブで 80/443 を開放するのを絶対に忘れない!
これで、Lightsail 上で PocketBase を Docker Compose 経由で動かしつつ、NGINX + Let’s Encrypt による HTTPS 化が完了します。
もし途中で問題が発生したり、手順に改善案があればコメントください!