Skip to content

本番セットアップ

複数ユーザーでの本番アノテーション用にPotatoをデプロイする方法。

本番セットアップ

複数ユーザー、データの永続化、適切なセキュリティを備えた実運用のアノテーションタスクにPotatoをデプロイします。

サーバー設定

基本的な本番設定

yaml
server:
  host: 0.0.0.0
  port: 8000
  workers: 4
  timeout: 120

HTTPSの使用

安全な接続のために(本番推奨):

yaml
server:
  host: 0.0.0.0
  port: 443
  ssl:
    cert: /path/to/cert.pem
    key: /path/to/key.pem

Gunicornでの実行

パフォーマンスと信頼性の向上のために:

bash
gunicorn "potato.server:create_app('config.yaml')" \
  --workers 4 \
  --bind 0.0.0.0:8000 \
  --timeout 120

SSL付き

bash
gunicorn "potato.server:create_app('config.yaml')" \
  --workers 4 \
  --bind 0.0.0.0:443 \
  --certfile /path/to/cert.pem \
  --keyfile /path/to/key.pem

リバースプロキシ設定

Nginx設定

nginx
upstream potato {
    server 127.0.0.1:8000;
}
 
server {
    listen 80;
    server_name annotation.example.com;
    return 301 https://$server_name$request_uri;
}
 
server {
    listen 443 ssl;
    server_name annotation.example.com;
 
    ssl_certificate /etc/letsencrypt/live/annotation.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/annotation.example.com/privkey.pem;
 
    location / {
        proxy_pass http://potato;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
 
    # Increase timeouts for long annotation sessions
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
}

Apache設定

apache
<VirtualHost *:443>
    ServerName annotation.example.com
 
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
 
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
 
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
</VirtualHost>

Dockerデプロイ

Dockerfile

dockerfile
FROM python:3.10-slim
 
WORKDIR /app
 
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
 
COPY . .
 
EXPOSE 8000
 
CMD ["gunicorn", "potato.server:create_app('config.yaml')", \
     "--workers", "4", "--bind", "0.0.0.0:8000"]

Docker Compose

yaml
version: '3.8'
 
services:
  potato:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./data:/app/data
      - ./annotations:/app/annotations
    environment:
      - POTATO_DEBUG=false
    restart: unless-stopped
 
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/ssl/certs
    depends_on:
      - potato
    restart: unless-stopped

ユーザー認証

アクセス制限

yaml
allow_all_users: false
authorized_users:
  - user1@example.com
  - user2@example.com
  - user3@example.com

管理者アクセス

yaml
admin_users:
  - admin@example.com
 
admin_dashboard:
  enabled: true
  path: /admin

セッション管理

yaml
session:
  secret_key: "your-secure-secret-key-here"
  timeout: 3600  # 1 hour
  secure_cookie: true  # Requires HTTPS

データの永続化

ファイルベースストレージ

yaml
output:
  path: /var/potato/annotations/
  format: json
  backup_interval: 3600  # Hourly backups

データベースバックエンド

大規模なデプロイの場合、MySQLを使用する:

yaml
database:
  type: mysql
  host: localhost
  port: 3306
  name: potato_db
  user: potato
  password: ${DB_PASSWORD}  # Use environment variable

詳細はMySQLバックエンドを参照してください。

監視

ヘルスチェックエンドポイント

yaml
monitoring:
  health_check: /health
  metrics: /metrics

ログ設定

yaml
logging:
  level: INFO
  file: /var/log/potato/app.log
  max_size: 100MB
  backup_count: 5
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

Prometheusメトリクス

yaml
monitoring:
  prometheus:
    enabled: true
    port: 9090

スケーリング

水平スケーリング

高トラフィックのデプロイ向け:

yaml
# docker-compose.yml
services:
  potato:
    deploy:
      replicas: 3
    # ... rest of config
 
  nginx:
    # Load balancer
    volumes:
      - ./nginx-lb.conf:/etc/nginx/nginx.conf

ロードバランサー設定

nginx
upstream potato_cluster {
    least_conn;
    server potato_1:8000;
    server potato_2:8000;
    server potato_3:8000;
}

バックアップ戦略

自動バックアップ

bash
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/var/backups/potato
 
# Backup annotations
tar -czf $BACKUP_DIR/annotations_$DATE.tar.gz /var/potato/annotations/
 
# Backup config
cp /var/potato/config.yaml $BACKUP_DIR/config_$DATE.yaml
 
# Keep only last 7 days
find $BACKUP_DIR -mtime +7 -delete

crontabに追加する:

bash
0 2 * * * /var/potato/backup.sh

セキュリティチェックリスト

  • 有効なSSL証明書でHTTPSを使用する
  • 強力なセッションシークレットキーを設定する
  • authorized_usersでユーザーアクセスを制限する
  • Potatoと依存関係を最新の状態に保つ
  • 機密データに環境変数を使用する
  • ファイアウォールルールを設定する
  • ログと監視を有効にする
  • 定期的なバックアップを設定する
  • 本番にはデータベースバックエンドを使用する
  • 管理者アクセスを定期的に確認する

環境変数

bash
# .env file
POTATO_SECRET_KEY=your-super-secret-key
POTATO_DB_PASSWORD=database-password
POTATO_ADMIN_EMAIL=admin@example.com

Docker Composeで読み込む:

yaml
services:
  potato:
    env_file:
      - .env

トラブルシューティング

ログの確認

bash
# Gunicorn logs
journalctl -u potato -f
 
# Docker logs
docker-compose logs -f potato

よくある問題

502 Bad Gateway:Potatoが実行中で正しいポートにバインドされているか確認する

セッションの問題:シークレットキーが再起動後も一貫していることを確認する

パフォーマンスが遅い:ワーカー数を増やすか、データベースバックエンドを追加する

次のステップ