Një herë kam menduar për automatizimin e vendosjes së projektit tim. gitlab.com ofron me dashamirësi të gjitha mjetet për këtë, dhe sigurisht vendosa të përfitoj prej tij, duke e kuptuar dhe duke shkruar një skenar të vogël vendosjeje. Në këtë artikull unë ndaj përvojën time me komunitetin.
Regjistroni shtigjet drejt certifikatave në docker.json
Regjistrohuni në variablat gitlab në cilësimet CI/CD me përmbajtjen e certifikatave. Shkruani një skript .gitlab-ci.yml për vendosje.
Unë do të tregoj të gjithë shembujt në shpërndarjen e Debian.
Konfigurimi fillestar i VPS
Kështu që keni blerë një shembull për shembull në DO, gjëja e parë që duhet të bëni është të mbroni serverin tuaj nga bota e jashtme agresive. Unë nuk do të provoj apo pohoj asgjë, thjesht do të tregoj log /var/log/mesazhet e serverit tim virtual:
screenshot
Së pari, instaloni murin e zjarrit ufw:
apt-get update && apt-get install ufw
Le të aktivizojmë politikën e paracaktuar: bllokoni të gjitha lidhjet hyrëse, lejoni të gjitha lidhjet dalëse:
E rëndësishme: mos harroni të lejoni lidhjen përmes ssh:
ufw allow OpenSSH
Sintaksa e përgjithshme është si më poshtë: Lejo një lidhje me port: ufw allow 12345, ku 12345 është numri i portit ose emri i shërbimit. Moho: ufw mohoj 12345
Aktivizoni murin e zjarrit:
ufw enable
Ne dalim nga sesioni dhe hyjmë përsëri përmes ssh.
Shto një përdorues, cakto një fjalëkalim dhe shtoje në grupin sudo.
IP-ja e serverit duhet të jetë e juaja. Tani provoni të identifikoheni duke përdorur përdoruesin që keni krijuar më parë; nuk keni më nevojë të vendosni një fjalëkalim. Tjetra, në cilësimet e konfigurimit, ndryshoni sa vijon:
sudo nano /etc/ssh/sshd_config
çaktivizoni hyrjen me fjalëkalim:
PasswordAuthentication no
Rinisni demonin sshd:
sudo systemctl reload sshd
Tani nëse ju ose dikush tjetër përpiqet të identifikoheni si përdorues rrënjë, nuk do të funksionojë.
Tjetra, instaloni dockerd, unë nuk do ta përshkruaj procesin këtu, pasi gjithçka tashmë mund të ndryshohet, ndiqni lidhjen në faqen zyrtare të internetit dhe kaloni nëpër hapat e instalimit të docker në makinën tuaj virtuale: https://docs.docker.com/install/linux/docker-ce/debian/
Gjenerimi i certifikatave
Për të kontrolluar demonin e dokerit nga distanca, kërkohet një lidhje e koduar TLS. Për ta bërë këtë, ju duhet të keni një certifikatë dhe një çelës, të cilat duhet të gjenerohen dhe transferohen në kompjuterin tuaj në distancë. Ndiqni hapat e dhëna në udhëzimet në faqen zyrtare të docker-it: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Të gjithë skedarët *.pem të gjeneruar për serverin, përkatësisht ca.pem, server.pem, key.pem, duhet të vendosen në drejtorinë /etc/docker në server.
Konfigurimi i dockerd
Në skriptin e nisjes së docker daemon, ne heqim opsionin -H df://, ky opsion përcakton se në cilin host mund të kontrollohet daemon docker.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Tjetra, duhet të krijoni një skedar cilësimesh, nëse nuk ekziston tashmë, dhe të specifikoni opsionet:
Nëse gjithçka është "e gjelbër", atëherë ne konsiderojmë se kemi konfiguruar me sukses docker në server.
Vendosja e dërgesës së vazhdueshme në gitlab
Në mënyrë që punonjësi i Gitalaba të jetë në gjendje të ekzekutojë komanda në një host të largët Docker, është e nevojshme të vendosni se si dhe ku të ruani certifikatat dhe çelësin për një lidhje të koduar me Dockerd. E zgjidha këtë problem thjesht duke shtuar sa vijon në variablat në cilësimet e gitlbab:
titull spoiler
Thjesht nxirrni përmbajtjen e certifikatave dhe çelësin përmes cat: cat ca.pem. Kopjoni dhe ngjisni në vlerat e ndryshueshme.
Le të shkruajmë një skript për vendosje nëpërmjet GitLab. Do të përdoret imazhi docker-in-docker (dind).
#!/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
Problemi kryesor ishte “tërheqja” e përmbajtjes së certifikatave në një formë normale nga variablat gitlab CI/CD. Nuk mund ta kuptoja pse lidhja me hostin në distancë nuk po funksiononte. Në host shikova log sudo journalctl -u docker, pati një gabim gjatë shtrëngimit të duarve. Vendosa të shikoj se çfarë ruhet përgjithësisht në variabla; për ta bërë këtë, mund të dukeni kështu: cat -A $DOCKER_CERT_PATH/key.pem. E kapërceva gabimin duke shtuar heqjen e karakterit të karrocës tr -d 'r'.
Më pas, mund të shtoni detyra pas publikimit në skenar sipas gjykimit tuaj. Mund ta shikoni versionin e punës në depon time https://gitlab.com/isqad/gitlab-ci-cd