この記事では、Docker と Docker Compose を使って Super Homework Manager を本番環境にデプロイする方法を初心者向けに解説します。

Super Homework Manager とは

Super Homework Managerは私が開発した課題管理Webアプリです。

課題の重要度に応じて鬼のような督促を行う機能などを設けており(!)提出物を遅れがちな学生、遅れたくない学生にとっておきのアプリとなっています。

詳細についてはこちらのGitリポジトリをご覧ください。


必要なもの

  • サーバー: VPSまたは自宅サーバー(Debian13推奨)
    • 本WebアプリはRAM1GB/CPU1コア/ディスク10GBもあれば十分動作します。
    • 海外の格安VPSなら年10ドル程度で入手可能です。
    • とにかく予算を抑えたいならRackNerdのRAM1GBプランがおすすめですが、今後色んなものを動かしたい場合はスペックもよく大手のOVH VPSがおすすめです。
  • ドメイン: 独自ドメインが必要です。ない場合Cloudflare Registrarで取得するのがおすすめです。
    • それでも予算がない場合GitHub Student Developer Packで.meドメインが1年無料なのでご自身で確認してください。

事前準備

1. Dockerのインストール

サーバーにSSHで接続し、以下のコマンドを実行します。

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

インストールが完了したら、一度ログアウトして再度ログインしてください。

2. インストールの確認

docker --version
docker compose version

上記コマンドでDockerとDocker Composeのバージョンが表示されれば成功です。


設定ファイルの準備

1. リポジトリのクローン

git clone https://git.watanabebashi.net/furu04/Super-HomeworkManager
cd Super-HomeworkManager

以上のコマンドで私のGitサービスからリポジトリをクローンし、ディレクトリに移動します。

2. Telegram Botの作成(任意)

本アプリには課題作成時や期限が近づいた時のリマインダーをTelegram/LINEで受け取る機能があります。

任意ではありますが大変便利なので作成することをおすすめします。

本記事では簡単に作成できるTelegram Botの方で進めていきます。

Telegram Botの作成手順

  1. Telegramアプリを開き、@BotFatherというゴッドファーザーみたいな名前のやつにアクセスします。(まだTelegramアカウントを持っていない場合は作成してください)
  2. /start コマンドを送信します。
  3. /newbot コマンドを送信し、Bot の名前とユーザー名を設定します。
  4. Bot が作成されると、API トークンが表示されます。これをメモしておいてください。

BotFatherは英語ですが、/newbotと送信したあとは自分が決めたBotの名前、ユーザ名(最後に必ずBotとつける必要あり)をそれぞれ順に送信すればOKです。

User IDの取得手順

  1. Telegramアプリで@userinfobot にアクセスします。
  2. /start コマンドを送信します。
  3. Bot があなたの User ID を返信します。これをメモしておいてください。
  4. 先ほど作成したBotのユーザー名をTelegramで検索し、/startコマンドを送信してください。

特に、Telegramの仕様上先にBotに/startコマンドを送信しないと後ほどの手順でUser IDやBotのAPIトークンを設定しようがメッセージが届かないので注意してください。

3. 設定ファイルの作成

サンプルファイルをコピーして、設定ファイルを作成します。

cp config.ini.docker.example config.ini

4. 設定ファイルの編集

config.ini を開いて、以下の項目を 必ず 変更してください。

nano config.ini
[session]
; ランダムな文字列に変更(32文字以上推奨)
secret = 

[security]
; ランダムな文字列に変更(32文字以上推奨)
csrf_secret = 

[notification]
; 先ほど作成した Telegram Bot のトークンを設定。User IDではないので注意!
telegram_bot_token =

もし本アプリをローカル環境でテストしたい場合、[security] セクションの httpsfalse に変更してください。

[security]
https = false

ドメインの設定

1. DNS の設定

お使いのドメイン管理サービスで、レコードを自分のサーバーのグローバルIPアドレスに向けてください。

ドメイン管理サービスによって設定方法が異なるため、各サービスのドキュメントを参照してください。

2. Caddyfile の編集

Caddyfile を開いてexample.com を実際のドメインに変更します。

nano Caddyfile
# example.com を実際のドメインに変更
homework.example.com {
    reverse_proxy app:8080

    # ... 以下そのまま
}

ローカル環境でテストしたい場合以下のようにしてください。

:80 {
    reverse_proxy app:8080

    # ... 以下そのまま
}

アプリケーションの起動

1. Docker イメージのビルドと起動

以下のコマンドを実行すると、すべてのコンテナが起動します。

docker compose up -d --build

初回はイメージのビルドに多少時間がかかります。

RAM512MB1コアのVPSを借りてみましたが20分程度かかりました…本アプリは軽量なのですが依存関係すべてをビルドするため時間がかかります。

2. 起動状態の確認

docker compose ps

すべてのコンテナが Up になっていれば成功です。

NAME               IMAGE                  COMMAND                   SERVICE   CREATED          STATUS                    PORTS
homework-caddy     caddy:2-alpine         "caddy run --config …"   caddy     15 seconds ago   Up 7 seconds              0.0.0.0:80->80/tcp, [::]:80->80/tcp
homework-db        mysql:8.0              "docker-entrypoint.s…"   db        15 seconds ago   Up 14 seconds (healthy)   3306/tcp, 33060/tcp
homework-manager   homework-manager-app   "./server"                app       15 seconds ago   Up 8 seconds (healthy)    8080/tcp

3. ブラウザでアクセス

これでインストールは完了です!ブラウザで設定したドメインにアクセスしてください。


初期設定

1. 管理者アカウントの作成

初めてアクセスすると、ログイン画面が表示されます。「新規登録」をクリックして、最初のユーザーを作成してください。

最初に登録したユーザーが自動的に管理者になります。

新規登録画面

2. 新規登録の無効化(推奨)

管理者アカウントを作成したら、セキュリティのために新規登録を無効化することを推奨します。

nano config.ini
[auth]
allow_registration = false

設定を反映するため、コンテナを再起動します。

再起動しないと設定が反映されないので必ず再起動してください。

docker compose restart app

3. Telegram 通知の設定(任意)

先ほどの手順でTelegram Botを作成した場合、管理者アカウントでログイン後、設定画面からTelegram通知を有効化できます。

ダッシュボード

ダッシュボードの右上のユーザーアイコンをクリックし、「プロフィール」を選択します。

プロフィール設定

するとこのような画面になるので通知設定→Telegram通知を有効化にチェックを入れ、先ほどメモしたUser IDを入力してください。

テストで課題を作成し、リマインダーや督促通知を有効化すれば動作確認できます。


アップデート方法

新しいバージョンがリリースされたら、以下の手順でアップデートできます。

cd Super-HomeworkManager
git pull
docker compose up -d --build

以上です。

本アプリのユースケース上学生の方が多いと思います。もしインストールや運用で困ったことがあれば遠慮なく質問してください!