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 を削除する必要があります。

プロジェクトについて

Deploy a docker-compose.yml in a target directory

インストール
ansible-galaxy install yourlabs.compose
ライセンス
Unknown
ダウンロード
4k
所有者
OSS Hack'n'Dev, we provide all kind of paid services on OSS and sponsor OSS