Ajattelin kerran automatisoida projektini käyttöönoton. gitlab.com tarjoaa ystävällisesti kaikki työkalut tähän, ja tietysti päätin käyttää sitä selvittämällä se ja kirjoittamalla pienen käyttöönottoskriptin. Tässä artikkelissa jaan kokemukseni yhteisön kanssa.
Rekisteröidy gitlab-muuttujiin CI/CD-asetuksissa varmenteiden sisällöllä. Kirjoita .gitlab-ci.yml-skripti käyttöönottoa varten.
Näytän kaikki esimerkit Debian-jakelusta.
VPS:n alkuasetus
Täältä ostit instanssin esim DO, ensimmäinen asia on suojata palvelimesi aggressiiviselta ulkomaailmalta. En todista tai väitä mitään, näytän vain virtuaalipalvelimeni /var/log/messages-lokin:
kuvakaappaus
Asenna ensin ufw-palomuuri:
apt-get update && apt-get install ufw
Ota oletuskäytäntö käyttöön: estä kaikki saapuvat yhteydet, salli kaikki lähtevät yhteydet:
Palvelimen IP:n on oltava sinun. Yritä nyt kirjautua sisään aiemmin luodulla käyttäjällä, sinun ei tarvitse enää antaa salasanaa. Muuta seuraavaksi kokoonpanoasetuksissa seuraavaa:
sudo nano /etc/ssh/sshd_config
poista salasana kirjautuminen käytöstä:
PasswordAuthentication no
Käynnistä sshd-daemon uudelleen:
sudo systemctl reload sshd
Nyt jos sinä tai joku muu yrittää kirjautua sisään root-käyttäjänä, se epäonnistuu.
Seuraavaksi asennamme dockerdin, en kuvaile prosessia tässä, koska kaikki voidaan jo muuttaa, seuraa linkkiä viralliselle verkkosivustolle ja käy läpi dockerin asennusvaiheet virtuaalikoneellesi: https://docs.docker.com/install/linux/docker-ce/debian/
Sertifikaatin luominen
Docker-daemonin etähallinta edellyttää salattua TLS-yhteyttä. Tätä varten sinulla on oltava varmenne ja avain, jotka sinun on luotava ja siirrettävä etäkoneellesi. Noudata virallisen Docker-verkkosivuston ohjeissa annettuja ohjeita: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Kaikki palvelimelle luodut *.pem-tiedostot, eli ca.pem, server.pem, key.pem, tulee sijoittaa palvelimen /etc/docker-hakemistoon.
telakointiaseman asetukset
Poista Docker-daemonin käynnistyskomentosarjasta -H df:// -vaihtoehto. Tämä vaihtoehto kertoo, missä isännässä Docker-daemonia voidaan ohjata.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Luo seuraavaksi asetustiedosto, jos sitä ei vielä ole, ja aseta asetukset:
Jos kaikki on vihreää, katsomme, että olemme määrittäneet telakan onnistuneesti palvelimelle.
Jatkuvan toimituksen määrittäminen gitlabissa
Jotta gitalab-työntekijä voi suorittaa komentoja etätelakointiasemassa, sinun on päätettävä, miten ja missä tallennetaan varmenteita ja avain salattua yhteyttä varten Dockerd-laitteeseen. Ratkaisin tämän ongelman kirjoittamalla gitlbab-asetusten muuttujiin:
spoilerin otsikko
Anna vain varmenteiden sisältö ja avain catin kautta: cat ca.pem. Kopioi ja liitä muuttujaarvoihin.
Kirjoitetaan skripti käyttöönottoa varten gitlabin kautta. Docker-in-docker (dind) -kuvaa käytetään.
#!/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
Suurin ongelma oli sertifikaattien sisällön "vetäminen ulos" normaalimuodossa gitlab CI/CD -muuttujista. En pystynyt ymmärtämään, miksi yhteys etäisäntään ei toiminut. Katsoin sudo journalctl -u Dockerin lokia isännässä, kädenpuristuksessa on virhe. Päätin katsoa, mitä yleensä on tallennettu muuttujiin, tätä varten voit nähdä cat -A $DOCKER_CERT_PATH/key.pem. Virhe on voitettu lisäämällä poistomerkki tr -d 'r'.
Lisäksi voit lisätä julkaisun jälkeisiä tehtäviä käsikirjoitukseen oman harkintasi mukaan. Voit tarkistaa toimivan version arkistostani https://gitlab.com/isqad/gitlab-ci-cd