本記事の執筆背景
筆者はstreamableを用いてゲームのクリップをよくDiscordで共有する。しかし、無料版だと250MB以内や7日で削除されてしまうという制約がある。そこで今回はChibisafeをDocker+Caddy+Cloudflareでデプロイする。
動作環境
筆者の動作環境は以下の通りである。
Caddyをインストールする
CaddyとはGoLangで作成されたWebサーバーである。(詳しくはこちらを参照)
インストール方法は公式ドキュメントと一緒だ。
特につまづくポイントはないので普通に実行する。
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Dockerをインストールする
特に難しくないのでこちらの記事を参考にインストール。
https://qiita.com/tf63/items/c21549ba44224722f301
Chibisafeをインストールする
Chibisafeのインストールは少し特殊で、docker pull
を利用しない。
-
docker-compose.yml
とCaddyfile
を作成する
今回はわかりやすくchibisafeというディレクトリを作成する。
mkdir chibisafe
docker-compose.yml
を以下のように設定する。
services:
chibisafe:
image: chibisafe/chibisafe:latest
environment:
- BASE_API_URL=http://chibisafe_server:8000
expose:
- 8001
restart: unless-stopped
chibisafe_server:
image: chibisafe/chibisafe-server:latest
volumes:
- ./database:/app/database:rw
- ./uploads:/app/uploads:rw
- ./logs:/app/logs:rw
expose:
- 8000
restart: unless-stopped
caddy:
image: caddy:2-alpine
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./uploads:/app/uploads:ro
ports:
- 24424:80
environment:
- BASE_URL=":80"
restart: unless-stopped
Caddyfileを以下のように設定する
{$BASE_URL} {
route {
file_server * {
root /app/uploads
pass_thru
}
@api path /api/*
reverse_proxy @api http://chibisafe_server:8000 {
header_up Host {http.reverse_proxy.upstream.hostport}
header_up X-Real-IP {http.request.header.X-Real-IP}
}
@docs path /docs*
reverse_proxy @docs http://chibisafe_server:8000 {
header_up Host {http.reverse_proxy.upstream.hostport}
header_up X-Real-IP {http.request.header.X-Real-IP}
}
reverse_proxy http://chibisafe:8001 {
header_up Host {http.reverse_proxy.upstream.hostport}
header_up X-Real-IP {http.request.header.X-Real-IP}
}
}
}
Dockerのコンテナを起動する
いたってシンプルでdocker compose up
を実行するだけだ。
特に問題がなければ、localhost:24424
でchibisafeが起動する。
Caddyfileをさらに編集する
個人で見るだけなら起動で終わりだが、今回は共有をするためにリバースプロキシを設定する。
/etc/caddy/Caddyfile
を編集していく。
chibisafe.example.com {
tls internal
reverse_proxy localhost:24424 {
trusted_proxies 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32
header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}
}
}
Cloudflareを使用しない場合は、
chibisafe.example.com {
reverse_proxy localhost:24424
}
でよい。
ポートを開放する
今回は簡単なufwを使用する。
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
Chibisafeは、Dockerで建てたChibisafeを自らのCaddyServerで束ねている。そのため、開放するポートは80番と443番のみでよい。
Cloudflareを設定する
Discordで不特定多数に公開するということで、セキュリティ上の懸念が発生する。そのため、今回はCloudflareを使用してオリジンを隠し帯域を節約する。また、本記事では独自ドメインをCloudflareに登録する過程は省略する。
Chibisafeの設定を編集する
特に問題がなければこれでChibisafeは自分のドメインでアクセスできるはずだ。
-
Chibisafeにログインする
自分のホストしたChibisafeにアクセスし、ログインする。
初期のログイン情報は
ユーザー名:admin
パスワード:admin
となっている。 -
パスワードを変更する
初期のパスワードは非常に脆弱なため、早急にパスワードを変更する。
Dashboard内のCredentialsに移動し、パスワードを変更する。
-
アップロードに必要な設定をする
アップロードの提供元を指定する必要があるため、設定する。
Admin内のSettingsに移動し、ドメインを指定する。https://
を含む必要があることに注意する。
-
アップロード上限を変更する
デフォルトでは1GBまでと個人的には少ないので最大サイズを変更する。
同じタブ内のUploadsのMax Sizeを変更する。
今回は5GB(5000000000
)に設定。
-
Customizationを編集する
こちらは必須ではないが、見栄えのため編集する。
同じタブ内のCustomizationに移動し、編集する。 -
招待を発行する
デフォルトでは不特定多数に匿名でアップロードができないようになっている。
そのため、友人などがアカウントを登録する際は招待を発行する必要がる。
SettingsタブのInvitesに移動し、右上のCreate New Invite
をクリックし、招待を発行する。
実際にアップロードをする
ルートディレクトリにアクセスすれば、ドラッグアンドドロップかファイル選択でアップロードができるはずだ。
Q&A
Q. Dockerは起動しているのに、アクセスができない。
A. /etc/caddy/Caddyfile
を修正する。
chibisafe.example.com {
tls internal
-- reverse_proxy localhost:24424 {
++ reverse_proxy 172.17.0.1:24424 {
trusted_proxies 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32
header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}
}
}
Q. Cloudflareの料金は発生しますか
A. いいえ
Q. なんという会社のサーバーを使用していますか
A. ContaboのCloud VPS 6C 日本リージョンを使用しています。