yourlabs.compose
サーバーへの docker-compose.yml のデプロイ
このAnsibleロールは、自宅ディレクトリに docker-compose.yml をデプロイするためのもので、bigsudo と一緒に使用するのに最適です。
このREADMEでは機能を説明します。詳細なチュートリアルについては TUTORIAL.md を参照してください。
例
このロールは自動的にテストを行い、コピーを始めることができます。
- Dockerfile: CRUDLFA+ プロジェクト用にデフォルトで機能し、圧縮されたキャッシュ済みの静的ファイルサービスとスプーラーを提供します。
- .gitlab-ci.yml: DockerイメージをGitLabのイメージレジストリにビルド・プッシュし、デプロイメントのためのジョブYAMLテンプレート(マクロ)、および異なるデプロイメントユースケースのための3つの例のデプロイメント構成を提供します。
- docker-compose.yml: ローカルおよび一時的なデプロイメント用
- docker-compose.traefik.yml: yourlabs.traefik サポート用
- docker-compose.persist.yml: 永続的なデプロイメント用のアドオン、すなわち .gitlab-ci.yml に指定されているもの、docker-compose.traefik.yml が必要です。
変更が必要な項目:
- .gitlab-ci.yml:
# UNCOMMENT ABOVE AND REMOVE BELOW
コメントがいくつかあるので、それに従って yourlabs/ansible を使用してください。 - .gitlab-ci.yml の ci.yourlabs.io をあなたのサーバーに変更してください。
- Gitlab CI 変数の設定:
$CI_SSH_KEY
、これは ed25519 プライベートキーを含む必要があります。次のコマンドでキーを生成できます:ssh-keygen -t ed25519 -a 100
- Dockerfile: コマンド引数
--module=wsgi:application
を適切な wsgi アプリケーションのパスに変更し、bigsudo のセットアップを削除したり、必要なものをコメント解除してください。
それから、あなたは好きなようにカスタマイズできます!
他の bigsudo コマンドも使用できます:
- バックアップ用の systemd タイマーを有効にするには:
bigsudo yourlabs.compose backup home=/home/$CI_PROJECT_NAME-$CI_ENVIRONMENT_NAME
- レビュー用のデプロイメント CI サーバーで、未使用のイメージやボリューム、ネットワークを削除するには:
bigsudo yourlabs.docker prunecron @ci.your.host
、これによりレビュー・デプロイメントがディスクスペースを使い果たすのを防ぎます。
また、eXtreme DevOps に関するブログ記事で一般的かつ概念的な説明を得ることができます。
機能の文書化
このロールの目的は、docker-compose.yml ファイルをホストのディレクトリにマージしてデプロイメントを自動化し、その周辺の作業を自動化することです。
docker-compose.yml ファイルがあるディレクトリ内から、次のコマンドを使って $host:/home/staging
にデプロイできます:
bigsudo yourlabs.compose home=/home/staging $user@$host
$user@$host
が定義されていない場合、ローカルホストで実行されます。
複数のコンポーズファイルを渡すことができ、最終的なファイルを生成する際に環境変数がプロキシされます:
FOO=bar bigsudo yourlabs.compose \
home=/home/staging \
compose_django_image=$YOUR_IMAGE \
compose=docker-compose.yml,docker-compose.staging.yml
ディレクトリの生成
このロールは、特定の uid、gid、およびモードを持つディレクトリを事前に作成することもできます。次のように io.yourlabs.compose.mkdir
ラベルを使用して:
volumes:
- "./log/admin:/app/log"
labels:
- "io.yourlabs.compose.mkdir=./app/log:1000:1000:0750"
これにより、オーナーが1000、グループが1000、モードが0750の {{ home }}/log/admin
ディレクトリが作成されます。
環境の生成
もう一つの興味深い機能は、ランタイムで定義されたサービス環境内の変数ごとに自動的に環境を提供することです。たとえば、docker-compose.yml に次のように記述があるとします:
environment:
- FOO
この場合、次のように FOO 変数を定義して yourlabs.compose ロールを実行すると:
FOO=bar bigsudo yourlabs.compose home=/home/test
次のような環境が生成されます:
environment:
- FOO=bar
CLI での YAML オーバーライド
compose_servicename_keyname
変数を使用してサービスの値を追加または上書きすることもできます。動的に compose[services][django][image]
値をオーバーライドする例:
bigsudo yourlabs.compose home=/home/test compose_django_image=yourimage
動的に値を空にすることもできます。たとえば、compose[services][django][build]
を空にするには、次のようにします:compose_django_build=
(値なしで)。
ホームディレクトリにリポジトリをクローンしていない場合、Dockerfileへのパスが見つからない場合に docker-compose がエラーを出しますが、これによりその制限を回避できます:
bigsudo yourlabs.compose home=/home/test compose_django_build=
ネットワークの自動化
Docker-compose ではネットワークの管理が少し難しいことがあります。通常、web
ネットワークが存在し、トラフィックを負荷分散するためのローダーバランサーがあります。これにより web
ネットワークが django サービスに追加され、docker-compose.yml にweb
ネットワークを外部として宣言することで、自動的にネットワークに接続されます:
bigsudo yourlabs.compose home=/home/test compose_django_networks=web
ローダーバランサーの docker-compose.yml を作成している場合、逆の問題が発生します。docker-compose.yml では web
ネットワークを外部として宣言していますが、docker-compose up はそれを作成せず、次のようなエラーが発生します:
ERROR: Network web declared as external, but could not be found. Please
create the network manually using `docker network create lol` and try again.
このロールは、外部ネットワークのために docker-compose.yml を解析し、必要であればホスト上で docker_network
Ansible モジュールを使用して事前に作成することでこの問題を防ぎます。
Ansible ロールとして
最後に、他の Ansible ロールと同様に、このロールを使用することができます。リポジトリ内で他のタスクを追加する際にラップすることができます:
- name: Ensure docker was setup once on this host
include_role: name=yourlabs.compose
vars:
home: /home/yourthing
compose_django_image: foobar
compose_django_build:
compose_django_networks:
- web
バックアップ
home
引数があるデプロイメントには自動バックアップが有効になっています。これにより、/home に 3 つのスクリプトがセットアップされます:
- ./backup.sh: ローカルダンプを作成し、restic にバックアップします。
- ./restore.sh: restic スナップショットをリストし、スナップショットを復元するには restic スナップショットハッシュを引数として実行します。
- ./prune.sh: 古いバックアップを削除します。
1 つの systemd サービスと systemd タイマーが作成されます。
- backup-PROJECTNAME.service
- backup-PROJECTNAME.timer
ハッキング
このロールをローカルホストで開発するには:
# 画像をビルド
docker build -t test .
# 次のように bigsudo を実行します:
bigsudo . home=/tmp/test compose_django_build= compose_django_image=test compose=docker-compose.yml,docker-compose.persist.yml
バックアップスクリプトは、更新する前に常に実行を試みることに注意してください。変更した場合は、再度 yourlabs.compose を実行する前に backup.sh を削除する必要があります。