Yon fwa mwen te panse sou otomatize deplwaman pwojè mwen an. gitlab.com dous bay tout zouti pou sa a, e nan kou mwen deside pran avantaj de li, n ap kalkile li epi ekri yon ti script deplwaman. Nan atik sa a mwen pataje eksperyans mwen ak kominote a.
TL; DR
Mete kanpe VPS: enfim rasin, konekte ak modpas, enstale dockerd, konfigirasyon ufw
Enskri nan varyab gitlab nan anviwònman CI/CD ak sa ki nan sètifika yo. Ekri yon script .gitlab-ci.yml pou deplwaman.
Mwen pral montre tout egzanp sou distribisyon Debian.
Premye konfigirasyon VPS
Se konsa, ou te achte yon egzanp pou egzanp nan DO, Premye bagay ou bezwen fè se pwoteje sèvè ou kont agresif mond deyò a. Mwen pa pral pwouve oswa afime anyen, mwen pral jis montre log /var/log/messages nan sèvè vityèl mwen an:
Ekran
Premyèman, enstale firewall ufw la:
apt-get update && apt-get install ufw
Ann pèmèt règleman defo a: bloke tout koneksyon k ap fèk ap rantre, pèmèt tout koneksyon sortan yo:
IP sèvè a dwe pou ou. Koulye a, eseye konekte ak itilizatè ou te kreye pi bonè a; ou pa bezwen antre yon modpas ankò. Apre sa, nan paramèt konfigirasyon yo, chanje bagay sa yo:
sudo nano /etc/ssh/sshd_config
enfim login modpas:
PasswordAuthentication no
Rekòmanse demon sshd la:
sudo systemctl reload sshd
Koulye a, si oumenm oswa yon lòt moun eseye konekte kòm itilizatè rasin lan, li pa pral travay.
Apre sa, enstale dockerd, mwen pa pral dekri pwosesis la isit la, paske tout bagay ka deja chanje, swiv lyen ki mennen nan sit entènèt ofisyèl la epi ale nan etap sa yo enstale Docker sou machin vityèl ou: https://docs.docker.com/install/linux/docker-ce/debian/
Jenere sètifika
Pou kontwole daemon Docker a adistans, yon koneksyon TLS chiffres obligatwa. Pou fè sa, ou bezwen gen yon sètifika ak yon kle, ki dwe pwodwi ak transfere nan machin aleka ou. Swiv etap yo bay nan enstriksyon yo sou sit entènèt ofisyèl Docker la: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Tout fichye *.pem ki te pwodwi pou sèvè a, sètadi ca.pem, server.pem, key.pem, dwe mete nan anyè /etc/docker sou sèvè a.
Mete kanpe dockerd
Nan script lansman docker daemon, nou retire opsyon -H df://, opsyon sa a detèmine sou ki lame demon an ka kontwole.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Apre sa, ou ta dwe kreye yon dosye anviwònman, si li pa deja egziste, epi presize opsyon yo:
Si tout bagay se "vèt", Lè sa a, nou konsidere ke nou te avèk siksè configuré Docker sou sèvè a.
Mete kanpe livrezon kontinyèl sou gitlab
Nan lòd pou travayè Gitalaba a kapab egzekite kòmandman sou yon lame Docker aleka, li nesesè deside ki jan ak ki kote yo estoke sètifika ak kle a pou yon koneksyon chiffres ak Dockerd. Mwen rezoud pwoblèm sa a pa senpleman ajoute sa ki annapre yo nan varyab yo nan anviwònman yo gitlbab:
Tit spoiler
Jis soti sa ki nan sètifika yo ak kle atravè chat: cat ca.pem. Kopi epi kole nan valè varyab yo.
Ann ekri yon script pou deplwaman atravè GitLab. Y ap itilize imaj 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
Pwoblèm prensipal la se te "rale" sa ki nan sètifika yo nan yon fòm nòmal soti nan varyab gitlab CI/CD yo. Mwen pa t 'kapab konnen poukisa koneksyon an ak lame a aleka pa t' ap travay. Sou lame a mwen gade log sudo journalctl -u docker, te gen yon erè pandan lanmen an. Mwen deside gade sa ki an jeneral ki estoke nan varyab yo; pou fè sa, ou ka gade tankou sa a: chat -A $DOCKER_CERT_PATH/key.pem. Mwen simonte erè a lè mwen ajoute retire karaktè cha la tr -d 'r'.
Apre sa, ou ka ajoute travay apre lage nan script la nan diskresyon ou. Ou ka wè vèsyon k ap travay la nan depo mwen an https://gitlab.com/isqad/gitlab-ci-cd