> For AI agents: the complete documentation index is available at /ja/llms.txt, the full documentation bundle is available at /ja/llms-full.txt.

# クイックスタート

GZCTF は Docker イメージを通じて提供され、docker-compose を通じて完全に機能する CTF プラットフォームを迅速にデプロイできます。 これが唯一のデプロイ方法ではないことに注意してください。Kubernetes の使用をお勧めします。

:::warning

GZCTF のセキュリティとフロントエンド機能 (クリップボードの操作など) は HTTPS に依存しています。このセクションで説明するデプロイ方法は HTTPS サポートを提供していないため、運用環境での使用には適していません。ローカルテストのためだけに使用してください。

本ドキュメントではHTTPSの設定方法については説明しておりません。nginx、traefik、その他のソフトウェアの設定方法や使用方法についてはご自身でご確認ください。GZCTFのWebSocket機能も別途設定が必要な場合がありますのでご了承ください。ゲーム通知をプッシュできない場合は、まずリバース プロキシの設定を確認してください。

:::

## インストール

:::info

GZCTF の使用をすぐに開始するには、Docker と docker-compose をインストールする必要があります。関連するインストール手順は、[Docker 公式 Web サイト](https://docs.docker.com/engine/install/) を参照してください。

:::

1. 構成を円滑に進められるために、次の初期化パラメータを準備してください。
   - `GZCTF_ADMIN_PASSWORD`：初期管理者パスワード。 データベースが初期化されていない状態で有効となり、初回起動時に `compose.yml` で設定する必要があります。
   - `POSTGRES_PASSWORD`: データベースのパスワード。`compose.yml` と `appsettings.json` で設定する必要があります。
   - `XOR_KEY`: ゲーム秘密鍵の暗号化に使用されるランダムな文字列。`appsettings.json` で設定する必要があります。
   - `PUBLIC_ENTRY`: 外部アクセス アドレス。IP アドレスまたはドメイン名であり、チャレンジコンテナにアクセスするためのアドレスを参加者に提供するために使用されます。`appsettings.json` で設定する必要があります。

2. 次のコンテンツを `appsettings.json` ファイルとして保存し、**初期化パラメーターに置き換えてください**。具体的な構成手順については、[`appsettings.json` 構成](/ja/config/appsettings.md) を参照してください。

   ```json
   {
     "AllowedHosts": "*",
     "ConnectionStrings": {
       "Database": "Host=db:5432;Database=gzctf;Username=postgres;Password=<Your POSTGRES_PASSWORD>"
     },
     "EmailConfig": {
       "SenderAddress": "",
       "SenderName": "",
       "UserName": "",
       "Password": "",
       "Smtp": {
         "Host": "localhost",
         "Port": 587
       }
     },
     "XorKey": "<Your XOR_KEY>",
     "ContainerProvider": {
       "Type": "Docker", // or "Kubernetes"
       "PortMappingType": "Default", // or "PlatformProxy"
       "EnableTrafficCapture": false,
       "PublicEntry": "<Your PUBLIC_ENTRY>", // or "xxx.xxx.xxx.xxx"
       // optional
       "DockerConfig": {
         "Uri": "unix:///var/run/docker.sock"
       }
     },
     "CaptchaConfig": {
       "Provider": "None", // or "CloudflareTurnstile" or "HashPow"
       "SiteKey": "<Your SITE_KEY>",
       "SecretKey": "<Your SECRET_KEY>"
     },
     "ForwardedOptions": {
       "ForwardedHeaders": 7,
       "ForwardLimit": 1,
       "KnownIPNetworks": ["192.168.12.0/24"]
     }
   }
   ```

3. 次のコンテンツを `compose.yml` ファイルとして保存し、**初期化パラメーターに置き換えてください**。利用可能なバックエンド言語は `en-US`, `zh-CN`, `zh-TW`, `ja-JP`, `id-ID`, `ko-KR`, `ru-RU`, `de-DE`, `fr-FR`, `es-ES`, `vi-VN` です。

   ```yaml
   services:
     gzctf:
       image: gztime/gzctf:latest
       restart: always
       environment:
         - "GZCTF_ADMIN_PASSWORD=<Your GZCTF_ADMIN_PASSWORD>"
         # choose your backend language `en_US` / `zh_CN` / `ja_JP` ...
         - "LC_ALL=ja_JP.UTF-8"
       ports:
         - "80:8080"
       volumes:
         - "./data/files:/app/files"
         - "./appsettings.json:/app/appsettings.json:ro"
         # - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment
         - "/var/run/docker.sock:/var/run/docker.sock" # this is required for docker deployment
       depends_on:
         - db

     db:
       image: postgres:alpine
       restart: always
       environment:
         - "POSTGRES_PASSWORD=<Your POSTGRES_PASSWORD>"
       volumes:
         - "./data/db:/var/lib/postgresql"
   ```

:::info

ネットワーク セグメントの競合が発生する可能性があります。その場合は `compose.yml` のサブネット構成
または `/etc/docker/daemon.json` のネットワーク セグメント構成を変更してください。

```yaml
networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.12.0/24
```

:::

4. `docker compose up -d` を実行して GZCTF を起動して、ブラウザから GZCTF にアクセスできるようになります。

## 初期管理者

本番環境にはデフォルトで管理者権限を持つユーザーが存在しないため、初回起動時に環境変数 `GZCTF_ADMIN_PASSWORD` を設定して初期管理者パスワードを設定し、`Admin` アカウントでログインする必要があります。

データベースエントリを手動で変更することで、現在登録されているユーザーを管理者として設定することもできます。管理者アカウントが登録を完了し、正常にログインしたら、選択したデータベース テーブルに入り、次を実行します。

```sql
UPDATE "AspNetUsers" SET "Role"=3 WHERE "UserName"='your_admin_user_name';
```

次のコマンドが使用される場合もあります：

```bash
docker compose exec db psql -U postgres
```

```bash
psql (15.2)
Type "help" for help.

postgres=# \c gzctf
You are now connected to database "gzctf" as user "postgres".
gzctf=# #do your sql query
```

## Garnet/Redisをキャッシュとして使用する

Garnet/Redis をキャッシュとして使用して、よりシームレスなバージョンの切り替えとサーバーの再起動エクスペリエンスを実現する場合は、上記の構成に次のコンテンツを追加してください：

1. ファイル `compose.yml` に

   ```yaml
   services:
     gzctf:
       # ...
       depends_on:
         - db
         - cache

     cache:
       # It is recommended to use garnet, you can also use redis:alpine
       image: ghcr.io/microsoft/garnet-alpine:latest
       command: ["--bind", "0.0.0.0"]
       restart: always

     db:
       # ...
   ```

2. ファイル `appsettings.json` に

   ```json
   {
     "AllowedHosts": "*",
     "ConnectionStrings": {
       // ...
       "RedisCache": "cache:6379,abortConnect=false"
     }
     // ...
   }
   ```

そして、`docker compose up -d` を実行して GZCTF をリスタートすればよいです。

## コンテナイメージ

GZCTF は、Docker イメージとして事前に構築およびパッケージ化されており、[Docker Hub](https://hub.docker.com/r/gztime/gzctf) で見つけることができます。

イメージを取得するには、次の 2 つのコンテナー レジストリを使用してください。

```
gztime/gzctf:latest
ghcr.io/gztimewalker/gzctf/gzctf:latest
```

テスト版と開発版には `develop` イメージタグを使用してください。

## チャレンジ構成

チャレンジの構成と例については、[GZCTF-Challenges](https://github.com/GZTimeWalker/GZCTF-Challenges) をご覧ください。

また、[W4terCTF 2023](https://github.com/W4terDr0p/W4terCTF-2023) の公開チャレンジを参照することもできます。このリポジトリのチャレンジは、チャレンジが正常に動作することを保ちつつ、Docker イメージのサイズを大会中に迅速にデプロイできる程度に十分小さく保つよう設計されています。

チャレンジ コンテナのベース イメージとして [GZCTF Challenge Base](https://github.com/GZCTF/challenge-base) を使用することをお勧めします。これらのベース イメージは可能な限り最小限に抑え、定期的に更新しています。これらを使用することで、チャレンジ コンテナがイメージ レイヤーを最大限に共有できるようになり、ストレージ スペースの使用量とイメージ プル時間を短縮できます。

GZCTF は、`GZCTF_FLAG` 環境変数をコンテナに挿入することで動的なフラッグ配布が実装されています。そのため、この環境変数のテキストがチャレンジの**コンテナ初期化スクリプト**内の適切な場所に配置されていることを確認してください。 この環境変数は、コンテナー イメージのビルド時ではなく、コンテナーの起動時に初期化されることに注意してください。
