yourlabs.compose

Wdrażanie docker-compose.yml na serwerze

Rola Ansible do wdrażania docker-compose.yml w katalogu domowym, najlepiej używana z bigsudo.

Ten plik README opisuje funkcje, zapoznaj się z TUTORIAL.md, aby uzyskać samouczek z opiniotowanymi wzorcami do osiągnięcia eXtreme DevOps.

Przykład

Ta rola testuje samą siebie i możesz zacząć kopiować:

  • Dockerfile: będzie działać domyślnie dla projektu CRUDLFA+, oferuje skompresowaną i pamięci podręcznej usługę plików statycznych oraz spooler.
  • .gitlab-ci.yml: buduje i przesyła obraz docker do rejestru obrazów GitLab, oferuje szablon YAML zadania wdrożenia (makro) oraz 3 przykładowe konfiguracje wdrożenia dla różnych przypadków użycia.
  • docker-compose.yml: do lokalnych i efemeralnych wdrożeń.
  • docker-compose.traefik.yml: dla wsparcia yourlabs.traefik.
  • docker-compose.persist.yml: dodatek do używania do trwałych wdrożeń, tzn. są określone w .gitlab-ci.yml, wymaga docker-compose.traefik.yml.

Musisz zmienić:

  • .gitlab-ci.yml: są tam komentarze # UNCOMMENT ABOVE AND REMOVE BELOW, zrób tak, jak mówi, aby używać yourlabs/ansible.
  • ci.yourlabs.io z Twoim serwerem w .gitlab-ci.yml.
  • Zmienną GitLab CI do ustawienia: $CI_SSH_KEY, powinna zawierać prywatny klucz ed25510, możesz stworzyć jeden za pomocą: ssh-keygen -t ed25519 -a 100.
  • Dockerfile: zmień argument komendy --module=wsgi:application na odpowiednią ścieżkę do swojej aplikacji wsgi, usuń konfigurację bigsudo, jeśli chcesz, i odkomentuj to, co chcesz.

Teraz możesz dostosować wszystko, co chcesz!

Inne polecenia bigsudo, których możesz używać:

  • włącz systemowy timer kopii zapasowej za pomocą: bigsudo yourlabs.compose backup home=/home/$CI_PROJECT_NAME-$CI_ENVIRONMENT_NAME.
  • na recenzji wdrożenia serwera CI, aby usunąć nieużywane obrazy, wolumeny i sieci: bigsudo yourlabs.docker prunecron @ci.your.host, to zapobiega napełnianiu przestrzeni dyskowej przez recenzje wdrożeń.

Możesz także przeczytać bardziej ogólny i koncepcyjny opis w artykuł na blogu o eXtreme DevOps.

Dokumentacja funkcji

Celem tej roli jest automatyzacja wdrażania złącza plików docker-compose.yml do katalogu na hoście oraz automatyzacja związanych z tym działań.

Z katalogu z plikiem docker-compose.yml możesz wdrożyć go w $host:/home/staging za pomocą następującej komendy:

bigsudo yourlabs.compose home=/home/staging $user@$host

Jeśli $user@$host nie jest zdefiniowane, to zostanie wykonane na lokalnym hostie.

Możesz przekazać kilka plików compose, a zmienne środowiskowe będą przekazywane podczas generowania finalnego pliku:

FOO=bar bigsudo yourlabs.compose \
    home=/home/staging \
    compose_django_image=$YOUR_IMAGE \
    compose=docker-compose.yml,docker-compose.staging.yml

Generacja katalogu

Ta rola może również wstępnie tworzyć katalogi z danym uid, gid i uprawnieniami, z etykietą io.yourlabs.compose.mkdir, jak poniżej:

volumes:
- "./log/admin:/app/log"
labels:
- "io.yourlabs.compose.mkdir=./app/log:1000:1000:0750"

To spowoduje utworzenie katalogu {{ home }}/log/admin z właścicielem 1000, grupą 1000 i uprawnieniami 0750.

Generacja środowiska

Inną interesującą funkcją jest automatyczne dostarczanie środowiska z każdą zmienną zadeklarowaną w środowisku usługi, która jest definiowana w czasie działania. Na przykład, z tym w docker-compose.yml:

environment:
- FOO

Wykonując rolę yourlabs.compose zdefiniowaną zmienną FOO w ten sposób:

FOO=bar bigsudo yourlabs.compose home=/home/test

Wynikiem będzie następujące środowisko:

environment:
- FOO=bar

Nadpisy YAML w CLI

Możesz również dodawać lub nadpisywać wartości usługi za pomocą zmiennej compose_servicename_keyname. Przykład nadpisania compose[services][django][image] w locie:

bigsudo yourlabs.compose home=/home/test compose_django_image=yourimage

Możesz na bieżąco opróżniać wartości, jeśli chcesz, wystarczy przekazać puste wartości, czyli aby uczynić compose[services][django][build] pustym, przekaż compose_django_build= bez wartości. W przypadku, gdy nie klonujesz swojego repozytorium w katalogu domowym, to docker-compose zgłosi błąd, jeśli nie znajdzie ścieżki do Dockerfile, co omija to ograniczenie:

bigsudo yourlabs.compose home=/home/test compose_django_build=

Automatyzacja sieci

Zarządzanie sieciami w docker-compose może być nieco skomplikowane, na przykład typowo mamy sieć web z równoważnikiem obciążenia takim jak traefik. To dodaje sieć web do usługi django, a ona automatycznie podłączy sieć, jeśli jest obecna, określając sieć web jako zewnętrzną w pliku docker-compose.yml, który wdraża:

bigsudo yourlabs.compose home=/home/test compose_django_networks=web

Jeśli robisz plik docker-compose.yml dla swojego równoważnika obciążenia, masz odwrotny problem: plik docker-compose.yml deklaruje sieć web jako zewnętrzną, ale docker-compose up nie utworzy jej i zakończy się błędem:

ERROR: Sieć web zadeklarowana jako zewnętrzna, ale nie można jej znaleźć. Proszę
utworzyć sieć ręcznie za pomocą `docker network create lol` i spróbować ponownie.

Ta rola zapobiega temu problemowi, analizując plik docker-compose.yml w celu znalezienia zewnętrznych sieci i wykorzystując moduł ansible docker_network do wstępnego utworzenia ich na hoście, jeśli to konieczne.

Jako rola ansible

Na koniec możesz używać tej roli jak każdej innej roli ansible, jeśli chcesz owinąć ją w więcej zadań w swoim repozytorium:

- name: Zapewnij, że docker został skonfigurowany raz na tym hoście
  include_role: name=yourlabs.compose
  vars:
    home: /home/yourthing
    compose_django_image: foobar
    compose_django_build:
    compose_django_networks:
    - web

Kopie zapasowe

Automatyczne kopie zapasowe są włączone dla wdrożeń z argumentem home. Ustawi to 3 skrypty w /home:

  • ./backup.sh: tworzy lokalny zrzut i kopię zapasową w restic.
  • ./restore.sh: wyświetla migawki restic, uruchom go z haszem migawki restic jako argument, aby przywrócić migawkę.
  • ./prune.sh: usuwa stare kopie zapasowe.

Utworzy to 1 usługę systemd i timer systemd,

  • backup-PROJECTNAME.service
  • backup-PROJECTNAME.timer

Hacking

Aby rozwijać tę rolę na localhost:

# zbuduj obraz
docker build -t test .

# uruchom bigsudo w ten sposób:
bigsudo . home=/tmp/test compose_django_build= compose_django_image=test compose=docker-compose.yml,docker-compose.persist.yml

Zauważ, że zawsze spróbuje uruchomić skrypt kopii zapasowej przed jego aktualizacją. Jeśli go zmienisz, musisz usunąć backup.sh przed ponownym uruchomieniem yourlabs.compose, aby zaktualizować backup.sh.

O projekcie

Deploy a docker-compose.yml in a target directory

Zainstaluj
ansible-galaxy install yourlabs.compose
Licencja
Unknown
Pobrania
4k
Właściciel
OSS Hack'n'Dev, we provide all kind of paid services on OSS and sponsor OSS