やりたかったこと
CVATというアノテーションツールを、部署のみんなが使えるようにAWS上に公開したい。
しかし、普通にやるとhttp://EIP:8080 となってしまうので、https化(https://hogefuga.com) したい。
一方で、公開してもCVATの仕様上、create accountが誰でもできてしまう。
従って、https://hogefuga.com にアクセスしたらbasic認証を通すようにする。
前提
CVATの基本的なインストール方法より、http://EIP:8080 でアクセスできるまで。
手段
- aws Lightsailにてインスタンス起動
- staticIPを付与
- CVATをgit cloneし、docker compose up -d後、superuser作成(公式通り)
- "ドメインとDNS"よりドメインの登録とDNSゾーンを作成
- hogefuga.comをstaticIPに割り当てる
- DNSレコードに、Aレコードとしてhogefuga.comをstaticIPを登録する
https化準備
環境変数設定
ACME_EMAILはドメイン登録したときに使用したメアド
export CVAT_HOST=hogefuga.com
export ACME_EMAIL=hogefuga@gmail.com
自動アノテーション
まずversionを確認
cat components/serverless/docker-compose.serverless.yml
docker-compose.serverless.yml
services:
nuclio:
container_name: nuclio
image: quay.io/nuclio/dashboard:1.13.0-amd64
1.13.0と判明。
wget https://github.com/nuclio/nuclio/releases/download/1.13.0/nuctl-1.13.0-linux-amd64
sudo mv nuctl-1.13.0-linux-amd64 /usr/local/bin/nuctl
sudo chmod +x /usr/local/bin/nuctl
SAMのインストール
cd serverless && ./deploy_cpu.sh pytorch/facebookresearch/sam/nuclio
yoloのインストール
cd serverless && ./deploy_cpu.sh onnx/WongKinYiu/yolov7/nuclio
basic認証
hash生成
echo $(htpasswd -nb <yourID> <yourPW>) | sed -e s/\\$/\\$\\$/g
docker-compose.https.ymlの編集(to add basic auth部分)
docker-compose.https.yml
# Copyright (C) 2018-2022 Intel Corporation
#
# SPDX-License-Identifier: MIT
services:
cvat_server:
labels:
- traefik.http.routers.cvat.entrypoints=websecure
- traefik.http.routers.cvat.tls.certresolver=lets-encrypt
cvat_ui:
labels:
- traefik.http.routers.cvat-ui.entrypoints=websecure
- traefik.http.routers.cvat-ui.tls.certresolver=lets-encrypt
# to add basic auth
- traefik.http.middlewares.cvat-ui-auth.basicauth.users=<yourID>:$$apr1$$<hash>
- traefik.http.routers.cvat-ui.middlewares=cvat-ui-auth
traefik:
image: traefik:v2.9
container_name: traefik
environment:
TRAEFIK_ENTRYPOINTS_web_ADDRESS: :80
TRAEFIK_ENTRYPOINTS_web_HTTP_REDIRECTIONS_ENTRYPOINT_TO: websecure
TRAEFIK_ENTRYPOINTS_web_HTTP_REDIRECTIONS_ENTRYPOINT_SCHEME: https
TRAEFIK_ENTRYPOINTS_websecure_ADDRESS: :443
TRAEFIK_CERTIFICATESRESOLVERS_lets-encrypt_ACME_EMAIL: "${ACME_EMAIL:?Please set the ACME_EMAIL env variable}"
TRAEFIK_CERTIFICATESRESOLVERS_lets-encrypt_ACME_TLSCHALLENGE: "true"
TRAEFIK_CERTIFICATESRESOLVERS_lets-encrypt_ACME_STORAGE: /letsencrypt/acme.json
ports:
- 80:80
- 443:443
volumes:
- cvat_letsencrypt:/letsencrypt
起動
docker compose -f docker-compose.yml -f docker-compose.https.yml -f components/serverless/docker-compose.serverless.yml up -d