2025年12月10日
デプロイメントガイド
このガイドでは、Roxを様々な環境にデプロイする方法を説明します。
デプロイメントオプション
Roxは複数の方法でデプロイ可能:
- ベアメタル - 直接インストール(推奨)
- Docker Compose - コンテナベースのデプロイメント
ベアメタルデプロイメント
前提条件
- Ubuntu 22.04または同等のOS
- Bunがインストール済み
- PostgreSQLがインストール済み
- NginxまたはCaddyがインストール済み
ステップ1: 依存関係をインストール
# Bunをインストール
curl -fsSL https://bun.sh/install | bash
# PostgreSQLをインストール
sudo apt update
sudo apt install postgresql postgresql-contrib
# Nginxをインストール
sudo apt install nginx
ステップ2: データベースをセットアップ
sudo -u postgres psql
CREATE DATABASE rox;
CREATE USER rox WITH ENCRYPTED PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE rox TO rox;
\q
ステップ3: クローンとビルド
git clone https://github.com/Love-Rox/rox.git
cd rox
bun install
bun run build
ステップ4: 環境設定
cp .env.example .env
.envを本番環境の設定で編集:
# データベース
DB_TYPE=postgres
DATABASE_URL=postgresql://rox:secure_password@localhost:5432/rox
# ストレージ
STORAGE_TYPE=s3
S3_ENDPOINT=https://your-account.r2.cloudflarestorage.com
S3_BUCKET_NAME=rox-media
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
# サーバー
NODE_ENV=production
PORT=3000
FRONTEND_URL=https://your-domain.com
BACKEND_URL=https://api.your-domain.com
# セキュリティ
JWT_SECRET=your-very-secure-random-string
SESSION_SECRET=another-secure-random-string
ステップ5: マイグレーション実行
bun run db:migrate
ステップ6: Systemdサービスをセットアップ
/etc/systemd/system/rox-backend.serviceを作成:
[Unit]
Description=Rox Backend
After=network.target postgresql.service
[Service]
Type=simple
User=rox
WorkingDirectory=/home/rox/rox/packages/backend
ExecStart=/home/rox/.bun/bin/bun run start
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
/etc/systemd/system/rox-frontend.serviceを作成:
[Unit]
Description=Rox Frontend
After=network.target
[Service]
Type=simple
User=rox
WorkingDirectory=/home/rox/rox/packages/frontend
ExecStart=/home/rox/.bun/bin/bun run start
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
サービスを有効化して起動:
sudo systemctl enable rox-backend rox-frontend
sudo systemctl start rox-backend rox-frontend
ステップ7: リバースプロキシ設定
Nginxの例
# バックエンドAPI
server {
listen 443 ssl http2;
server_name api.your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# フロントエンド
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
}
}
Docker Composeデプロイメント
前提条件
- DockerとDocker Composeがインストール済み
- DNS設定済みのドメイン名
- SSL証明書(Let's Encrypt推奨)
ステップ1: リポジトリをクローン
git clone https://github.com/Love-Rox/rox.git
cd rox
ステップ2: 環境設定
cp .env.example .env
.envを本番環境の設定で編集:
# データベース
DB_TYPE=postgres
DATABASE_URL=postgresql://rox:secure_password@postgres:5432/rox
# ストレージ
STORAGE_TYPE=s3
S3_ENDPOINT=https://your-account.r2.cloudflarestorage.com
S3_BUCKET_NAME=rox-media
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
# サーバー
NODE_ENV=production
PORT=3000
FRONTEND_URL=https://your-domain.com
BACKEND_URL=https://api.your-domain.com
# セキュリティ
JWT_SECRET=your-very-secure-random-string
SESSION_SECRET=another-secure-random-string
ステップ3: ビルドと起動
# イメージをビルド
docker compose -f docker/compose.yml build
# サービスを起動
docker compose -f docker/compose.yml up -d
# ステータス確認
docker compose -f docker/compose.yml ps
ステップ4: マイグレーション実行
docker compose -f docker/compose.yml exec backend bun run db:migrate
ステップ5: リバースプロキシ設定
Nginxの例
# バックエンドAPI
server {
listen 443 ssl http2;
server_name api.your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# フロントエンド
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
}
}
データベースバックアップ
PostgreSQLバックアップ
# バックアップ
pg_dump -U rox rox > backup.sql
# リストア
psql -U rox rox < backup.sql
自動バックアップ
#!/bin/bash
BACKUP_DIR="/var/backups/rox"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
pg_dump -U rox rox | gzip > $BACKUP_DIR/rox_$DATE.sql.gz
# 7日以上古いバックアップを削除
find $BACKUP_DIR -name "rox_*.sql.gz" -mtime +7 -delete
監視
ヘルスチェック
# バックエンドヘルス
curl https://api.your-domain.com/health
# データベースヘルス
curl https://api.your-domain.com/health/db
セキュリティチェックリスト
- データベースに強力なパスワードを使用
- ファイアウォールを設定(UFW推奨)
- SSL/TLS証明書を有効化
- JWT_SECRETとSESSION_SECRETを安全に設定
- レート制限を設定
- 定期的にバックアップ
- ログを監視
パフォーマンス最適化
データベース最適化
-- 一般的なクエリ用のインデックスを追加
CREATE INDEX idx_notes_user_id ON notes(user_id);
CREATE INDEX idx_notes_created_at ON notes(created_at DESC);
キャッシング
Redis/Dragonflyをキャッシング用に設定:
REDIS_URL=redis://localhost:6379
CACHE_TTL=3600
トラブルシューティング
データベース接続問題
# PostgreSQLステータス確認
sudo systemctl status postgresql
# 接続テスト
psql -U rox -h localhost -d rox
ポート競合
# ポート3000を使用しているプロセスを確認
sudo lsof -i :3000
# 必要に応じてプロセスを終了
sudo kill -9 <PID>
次のステップ
更新履歴
| 日付 | 変更内容 |
|---|---|
| 2025-12-12 | Docker Composeコマンドのパスを docker/compose.yml に修正 |
| 2025-12-10 | Cloudflare Workersデプロイメントオプションを削除(開発中止) |