このプロジェクトは、BETAWALLET-DEVのベースAPIを拡張する独立したマイクロサービスです。チケットNFTの画像生成とチェックイン処理を提供します。
- ベースAPI: 変更なし
- 拡張API: ticket_system(このプロジェクト)
- 認証: セッション認証(ベースAPIと共有)
- データベース: SQLite(デフォルト。
.envでUSE_SQLITE=True)。本番・PostgreSQL 連携時はUSE_SQLITEを外して PostgreSQL を利用可能
/mnt/extra/ticket_system/
├── app/ # Djangoアプリケーション
│ ├── Dockerfile # Djangoコンテナ用
│ ├── entrypoint.sh # Gunicorn起動スクリプト
│ ├── manage.py
│ ├── requirements.txt # Python依存関係
│ ├── ticket_service/ # チケットサービスアプリ
│ │ ├── models.py # TicketDesignモデル
│ │ ├── views.py # APIエンドポイント
│ │ ├── admin.py # Django Admin設定
│ │ ├── urls.py # URLルーティング
│ │ └── services/
│ │ ├── base_api_client.py # ベースAPI呼び出しクライアント
│ │ └── ticket_service.py # チケット画像生成ロジック
│ ├── ticket_system/ # Djangoプロジェクト設定
│ │ ├── settings.py # Django設定
│ │ └── urls.py # ルートURL設定
│ ├── static/ # 静的ファイル
│ ├── media/ # メディアファイル
│ └── logs/ # ログファイル
├── nginx/ # Nginx設定
│ ├── Dockerfile # Nginxコンテナ用
│ └── nginx.conf # Nginx設定ファイル
├── docker-compose.yml # Docker Compose設定
├── .env.example # 環境変数テンプレート
└── README.md # このファイル
ticket_web: Djangoアプリケーション(ポート: 8001)。デフォルトでは SQLite(db.sqlite3)を使用ticket_nginx: Nginxリバースプロキシ(ポート: 1338, 5443)(docker-compose ではコメントアウト)ticket_db: PostgreSQL(ポート: 5433)。オプション。USE_SQLITEを無効にした場合に利用(docker-compose ではコメントアウト)
8001: Djangoアプリケーション(BETAWALLET-DEVの8000に対応)1338: Nginx HTTP(BETAWALLET-DEVの1337に対応)5443: Nginx HTTPS(BETAWALLET-DEVの443に対応)5433: PostgreSQL(BETAWALLET-DEVの5432に対応)
Git が未導入の場合は先にインストールしてください(例: Ubuntu なら sudo apt install -y git)。
git clone https://github.com/voyager1708/ticketsystem-start.git
cd ticketsystem-start.env.exampleをコピーして.envを作成し、必要な値を設定してください。
cp .env.example .env主な設定項目:
SECRET_KEY: DjangoのシークレットキーUSE_SQLITE:Trueのとき SQLite を使用(ハンズオン・開発向け)。Falseまたは未設定で PostgreSQL を使用する場合はSQL_*を設定SQL_*: PostgreSQL を使う場合の接続情報(SQL_HOST,SQL_PORT,SQL_DATABASE,SQL_USER,SQL_PASSWORD)BASE_API_URL: ベースAPIのURLHOST_UID,HOST_GID: コンテナ内のユーザーID/GID
Docker Engine が起動していないと docker compose は実行できません。先に動作確認してください。
docker infoエラーになる場合は Docker サービスを起動します(Linux)。
sudo systemctl start docker
sudo systemctl enable dockerWSL2 + Docker Desktop を利用している場合は、Docker Desktop 側を起動してください。
開発環境では docker-compose.dev.yml を併用してください。
(推奨)bin/start-dev を使うと必要な Compose ファイルが自動で指定されます。
./bin/start-dev
# もしくは:
# docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --force-recreate./bin/migrate
# もしくは:
# docker compose -f docker-compose.yml -f docker-compose.dev.yml exec ticket_web python manage.py migratecurl -fsS http://localhost:8001/healthzdocker compose exec ticket_web python manage.py createsuperuser200 が返れば起動成功です。ブラウザで http://localhost:8001/swagger/ を開いて API 仕様を確認できます。
GET /swagger/ # Swagger UI
GET /redoc/ # ReDoc
GET /api/schema/ # OpenAPI 3 スキーマ (YAML/JSON)
GET /api/ext/v1/ticket/image/<nft_origin>
ベースAPIからNFT情報を取得し、チケット画像(PNG)を生成して返却します。
認証: セッション認証が必要
GET /api/ext/v1/ticket/checkin?token=<token>
POST /api/ext/v1/ticket/checkin
QRコードから取得したトークンでチェックインを実行します。
認証: セッション認証が必要
ベースAPIと拡張APIを同じドメインで動作させます。セッションクッキーが自動的に共有されます。
api.example.com/api/v1/ → ベースAPI
api.example.com/api/ext/v1/ → 拡張API
異なるドメインで動作する場合、Redis等の共有セッションストアを使用します。
# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': 'redis://localhost:6379/1',
}
}# 仮想環境の作成(Dockerと共通の依存を使用)
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# または
.venv\Scripts\activate # Windows
# 依存関係のインストール
pip install -r app/requirements.txt
# データベースマイグレーション
python app/manage.py migrate
# 開発サーバーの起動
python app/manage.py runserver 8001Ansible経由で準備する場合は tools/install_django.yml が .venv を作成し、
app/requirements.txt をインストールします。
WSL の Ubuntu で Docker 起動や環境構築、BASE_API_URL 疎通確認の手順は documents/001_Setup_v1_start.md を参照してください。疎通確認には python manage.py check_base_api(オプション: --insecure)を使用します。
- ポート競合: BETAWALLET-DEVと同時に起動する場合、ポート番号が重複しないことを確認してください。
- セッション共有: ベースAPIとセッションを共有する場合、同じドメインまたは共有ストアが必要です。
- データベース: デフォルトは SQLite(
app/db.sqlite3)。.envのUSE_SQLITE=Trueで明示可能。PostgreSQL を使う場合はUSE_SQLITEを無効にし、データディレクトリは/mnt/lib/ticket_postgresql等にマウントできます。 - 環境変数:
.envファイルはgitignoreに追加してください。
- SQLite 利用時(
USE_SQLITE=True):app/db.sqlite3が作成されているか確認。未作成ならpython manage.py migrateを実行。 - PostgreSQL 利用時: PostgreSQL コンテナが起動しているか確認(
docker compose ps)。環境変数SQL_HOSTがticket_db等に設定されているか確認。
- ベースAPIと拡張APIが同じドメインで動作しているか確認
- セッションクッキーが正しく転送されているか確認
- 環境変数
BASE_API_URLが正しく設定されているか確認 - ベースAPIが起動しているか確認
WSL などで Git 2.25 系を使っていると、エディタ経由で git commit を実行したときに --trailer オプションが渡され、エラーになることがあります。
対処法(いずれか):
- ターミナルでコミットするときは、システムの git を直接使う:
/usr/bin/git add -A && /usr/bin/git commit -m "メッセージ"
- 根本対応: Git を 2.29 以上にアップデートする(例:
sudo apt install gitで最新版を入れる)。
このプロジェクトはBETAWALLET-DEVの拡張機能として開発されています。