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.
ansible-galaxy install yourlabs.compose