Ek het eenkeer daaraan gedink om die ontplooiing van my projek te outomatiseer. gitlab.com verskaf vriendelik al die gereedskap hiervoor, en natuurlik het ek besluit om dit te gebruik deur dit uit te vind en 'n klein ontplooiingsskrif te skryf. In hierdie artikel deel ek my ervaring met die gemeenskap.
Registreer in die gitlab veranderlikes in die CI / CD instellings met die inhoud van die sertifikate. Skryf 'n .gitlab-ci.yml-skrip vir ontplooiing.
Ek sal alle voorbeelde oor die Debian-verspreiding wys.
Aanvanklike VPS-opstelling
Hier het jy byvoorbeeld 'n instansie gekoop op DO, die eerste ding om te doen is om jou bediener te beskerm teen die aggressiewe buitewêreld. Ek sal niks bewys of beweer nie, ek sal net die /var/log/messages log van my virtuele bediener wys:
kiekie
Installeer eers die ufw firewall:
apt-get update && apt-get install ufw
Aktiveer die verstekbeleid: blokkeer alle inkomende verbindings, laat alle uitgaande verbindings toe:
Die ip van die bediener moet joune wees. Probeer nou om aan te meld onder die gebruiker wat vroeër geskep is, jy hoef nie meer 'n wagwoord in te voer nie. Vervolgens, in die konfigurasie-instellings, verander die volgende:
sudo nano /etc/ssh/sshd_config
deaktiveer wagwoordaanmelding:
PasswordAuthentication no
Herbegin die sshd daemon:
sudo systemctl reload sshd
As jy of iemand anders as root probeer aanmeld, sal dit misluk.
Vervolgens installeer ons dockerd, ek sal nie die proses hier beskryf nie, aangesien alles reeds verander kan word, volg die skakel na die amptelike webwerf en gaan deur die stappe om docker op u virtuele masjien te installeer: https://docs.docker.com/install/linux/docker-ce/debian/
Sertifikaat generering
Om die docker-demon op afstand te beheer, word 'n geënkripteerde TLS-verbinding vereis. Om dit te doen, moet jy 'n sertifikaat en 'n sleutel hê wat jy moet genereer en na jou afgeleë masjien oordra. Volg die stappe in die instruksies op die amptelike docker-webwerf: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Alle gegenereerde *.pem-lêers vir die bediener, naamlik ca.pem, server.pem, key.pem, moet in die /etc/docker-gids op die bediener geplaas word.
docker-opstelling
Verwyder die -H df://-opsie in die docker-daemon-opstartskrip, hierdie opsie vertel op watter gasheer die docker-demoon beheer kan word.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Skep dan 'n instellingslêer as dit nie reeds bestaan nie en stel die opsies in:
As alles groen is, is ons van mening dat ons docker suksesvol op die bediener opgestel het.
Stel deurlopende aflewering op gitlab op
Om die gitalab-werker in staat te stel om opdragte op 'n afgeleë docker-gasheer uit te voer, moet jy besluit hoe en waar om sertifikate en 'n sleutel vir 'n geënkripteerde verbinding met dockerd te stoor. Ek het hierdie probleem opgelos deur eenvoudig na die veranderlikes in die gitlbab-instellings te skryf:
spoiler titel
Voer net die inhoud van die sertifikate en sleutel uit via kat: cat ca.pem. Kopieer en plak in veranderlike waardes.
Kom ons skryf 'n skrif vir implementering deur gitlab. Die docker-in-doker (dind)-prent sal gebruik word.
Die inhoud van die ontplooiingskrip met opmerkings:
bin/deploy.sh
#!/usr/bin/env sh
# Падаем сразу, если возникли какие-то ошибки
set -e
# Выводим, то , что делаем
set -v
#
DOCKER_COMPOSE_FILE=docker-compose.yml
# Куда деплоим
DEPLOY_HOST=185.241.52.28
# Путь для сертификатов клиента, то есть в нашем случае - gitlab-воркера
DOCKER_CERT_PATH=/root/.docker
# проверим, что в контейнере все имеется
docker info
docker-compose version
# создаем путь (сейчас работаем в клиенте - воркере gitlab'а)
mkdir $DOCKER_CERT_PATH
# изымаем содержимое переменных, при этом удаляем лишние символы добавленные при сохранении переменных.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# на всякий случай даем только читать
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem
# далее начинаем уже работать с удаленным docker-демоном. Собственно, сам деплой
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376
# проверим, что коннектится все успешно
docker-compose
-f $DOCKER_COMPOSE_FILE
ps
# логинимся в docker-регистри, тут можете указать свой "местный" регистри
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
docker-compose
-f $DOCKER_COMPOSE_FILE
pull app
# поднимаем приложение
docker-compose
-f $DOCKER_COMPOSE_FILE
up -d app
Die grootste probleem was om die inhoud van die sertifikate in die normale vorm uit die gitlab CI / CD veranderlikes te "trek". Ek kon nie agterkom hoekom die verbinding met die afgeleë gasheer nie werk nie. Ek het na die sudo journalctl -u docker log op die gasheer gekyk, daar is 'n fout met die handdruk. Ek het besluit om te kyk na wat oor die algemeen in veranderlikes gestoor word, hiervoor kan jy cat -A $DOCKER_CERT_PATH/key.pem sien. Het die fout oorkom deur die verwydering van die karetkarakter tr -d 'r' by te voeg.
Verder kan jy na-vrystelling take by die skrif voeg na jou goeddunke. U kan die werkende weergawe in my bewaarplek nagaan https://gitlab.com/isqad/gitlab-ci-cd