全国オンライン対応受付 平日 9:00-18:00
お問い合わせ

開発記録 / 帳票AI読取制作記 / Vol.36 帳票AI読取制作記 Vol.2

記事 01

HTTPS + Basic認証 + EC2相乗り——本番環境の構築

既存のEC2インスタンス((サーバーのIP))にはDXゲーム、予約システム、入退室管理システムなど複数のサービスが動いている。本システムも同じインスタンスに追加する。インフラコストをゼロで増やしながら本番環境を作る、というのがこのシステムの制約だった。

2026-06-17 公開

新しいサーバーは立てない。

既存のEC2インスタンス((サーバーのIP))にはDXゲーム、予約システム、入退室管理システムなど複数のサービスが動いている。本システムも同じインスタンスに追加する。インフラコストをゼロで増やしながら本番環境を作る、というのがこのシステムの制約だった。


ポートで分離する

nginxが玄関として立っている。ドメインとポートの組み合わせで、どのサービスにリクエストを渡すかを振り分ける。

本システムのFastAPIは9200番ポートで起動する。nginxがorderocr.simplesystem.co.jpへのリクエストを9200番にプロキシする。

server {
    listen 443 ssl;
    server_name orderocr.simplesystem.co.jp;

    ssl_certificate     /etc/letsencrypt/live/simplesystem.co.jp/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/simplesystem.co.jp/privkey.pem;

    location / {
        auth_basic "orderocr";
        auth_basic_user_file /etc/nginx/.htpasswd_orderocr;
        proxy_pass http://127.0.0.1:9200;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

既存サービスのnginx設定ファイルは変えない。本システム用の設定ファイルを/etc/nginx/conf.d/に追加するだけだ。


SSL証明書は共用

simplesystem.co.jpのワイルドカード証明書(*.simplesystem.co.jp)をLet's Encryptで取得していた。サブドメインを追加するだけで、追加費用なしでHTTPS化できる。

certbotが90日ごとに自動更新する設定になっている。証明書の更新が必要なときは、EC2上のタイマーが動く。


Basic認証で十分な理由

外部に公開するシステムだが、使うのは特定の担当者だけだ。

JWTやGoogleアカウント連携を実装するより、Basic認証はシンプルで確実だ。担当者はブラウザが表示するユーザー名・パスワードのダイアログで認証する。HTTPS通信のため、Basic認証でもパスワードは平文で送信されない。

htpasswdコマンドで認証ファイルを生成した。これだけだ。

htpasswd -c /etc/nginx/.htpasswd_orderocr orderocr

systemdで自動起動

本システムのFastAPIは、EC2が再起動しても自動で起動するようにsystemdサービスとして登録した。

[Unit]
Description=Order OCR FastAPI Application
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/orderocr
ExecStart=/home/ubuntu/.venv/bin/uvicorn api.main:app --host 127.0.0.1 --port 9200
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

ANTHROPIC_API_KEYなどの環境変数はsystemdのoverride.confに設定した。APIキーをコードに直書きしない。設定ファイルに書く。


Route 53でDNS設定

simplesystem.co.jpのDNSはAWS Route 53で管理している。サブドメインorderocr.simplesystem.co.jpのAレコードをEC2のElastic IPに向ける。

注意点が1つあった。お名前.comのDNS設定はこのドメインに効かない。NSレコードがRoute 53を指しているため、追加・変更はRoute 53コンソールでしか反映されない。初回設定時に「お名前.comで設定したのに反映されない」という状況に陥った。DNSを変更したい場合の場所を間違えると、なんの反応もなく時間が過ぎる。


PostgreSQLのバックアップ

PostgreSQLのデータはEC2のローカルディスクに保存されている。EC2インスタンスが削除されたらデータが消える。

pg_dumpで定期実行してS3に保存するスクリプトをcrontabに設定した。本格的な本番環境ではRDSに移行することも視野に入れながら、まずはシステムが使われることを優先した。


*次回は「AI帳票読取の現実——なぜプロンプトより確認UIが重要か」*

*シンプルシステム株式会社 代表 伊藤勝彦*