Kunagi mõtlesin oma projekti juurutamise automatiseerimisele. gitlab.com pakub selleks lahkelt kõik tööriistad ja loomulikult otsustasin seda kasutada, mõeldes selle välja ja kirjutades väikese juurutusskripti. Selles artiklis jagan oma kogemusi kogukonnaga.
Registreeruge gitlabi muutujates CI / CD sätetes sertifikaatide sisuga. Kirjutage juurutamiseks .gitlab-ci.yml skript.
Näitan kõiki näiteid Debiani distributsiooni kohta.
VPS-i esialgne seadistamine
Siit ostsite näiteks eksemplari DO, on esimene asi, mida teha, kaitsta oma serverit agressiivse välismaailma eest. Ma ei tõesta ega väida midagi, näitan lihtsalt oma virtuaalserveri logi /var/log/messages:
Screenshot
Esmalt installige ufw tulemüür:
apt-get update && apt-get install ufw
Luba vaikepoliitika: blokeeri kõik sissetulevad ühendused, luba kõik väljaminevad ühendused:
Serveri IP peab olema teie oma. Proovi nüüd sisse logida varem loodud kasutaja alt, parooli enam sisestama ei pea. Järgmisena muutke konfiguratsiooniseadetes järgmist.
sudo nano /etc/ssh/sshd_config
keela parooliga sisselogimine:
PasswordAuthentication no
Taaskäivitage sshd deemon:
sudo systemctl reload sshd
Nüüd, kui teie või keegi teine proovib administraatorina sisse logida, siis see ebaõnnestub.
Järgmisena installime dockerdi, ma ei kirjelda siin protsessi, kuna kõike saab juba muuta, järgige ametliku veebisaidi linki ja tehke oma virtuaalmasinasse dockeri installimise etapid: https://docs.docker.com/install/linux/docker-ce/debian/
Sertifikaadi genereerimine
Dockeri deemoni kaugjuhtimiseks on vaja krüptitud TLS-ühendust. Selleks peab teil olema sertifikaat ja võti, mille peate genereerima ja oma kaugmasinasse üle kandma. Järgige dokkeri ametlikul veebisaidil toodud juhiseid. https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Kõik serveri jaoks loodud *.pem-failid, nimelt ca.pem, server.pem, key.pem, tuleks paigutada serveri kataloogi /etc/docker.
doki seadistamine
Dockeri deemoni käivitusskriptist eemaldage suvand -H df://, see suvand ütleb, millisel hostil saab dokkedeemonit juhtida.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Järgmisena looge seadete fail, kui seda veel pole, ja määrake valikud:
Kui kõik on roheline, siis arvame, et oleme serveris dokkeri edukalt konfigureerinud.
Pidev kohaletoimetamise seadistamine Gitlabis
Selleks, et gitalabi töötaja saaks kaugdokeri hostis käske täita, peate otsustama, kuidas ja kuhu salvestada sertifikaate ja dockerdi krüpteeritud ühenduse võtit. Lahendasin selle probleemi, kirjutades lihtsalt gitlbabi seadete muutujatele:
spoileri pealkiri
Lihtsalt väljastage sertifikaatide sisu ja võti cati kaudu: cat ca.pem. Kopeerige ja kleepige muutuvatesse väärtustesse.
Kirjutame Gitlabi kaudu juurutamiseks skripti. Kasutatakse docker-in-doccker (dind) pilti.
#!/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
Peamine probleem oli gitlabi CI / CD muutujatest sertifikaatide sisu tavakujul "välja tõmbamine". Ma ei saanud aru, miks ühendus kaughostiga ei tööta. Vaatasin hostis sudo journalctl -u dockeri logi, käepigistuses on viga. Otsustasin vaadata, mida üldiselt muutujatesse salvestatakse, selle jaoks näete kassi -A $DOCKER_CERT_PATH/key.pem. Vea sai üle, lisades tähise tr -d 'r' eemaldamise.
Lisaks saate oma äranägemise järgi skriptile lisada avaldamisjärgseid ülesandeid. Tööversiooni saate vaadata minu hoidlast https://gitlab.com/isqad/gitlab-ci-cd