Darba ħsibt dwar l-awtomatizzazzjoni tal-iskjerament tal-proġett tiegħi. gitlab.com ġentilment jipprovdi l-għodod kollha għal dan, u ovvjament iddeċidejt li nieħu vantaġġ minnha, insibha u nikteb script ta 'skjerament żgħir. F'dan l-artiklu naqsam l-esperjenza tiegħi mal-komunità.
Se nuri l-eżempji kollha dwar id-distribuzzjoni Debian.
Setup inizjali tal-VPS
Allura xtrajt eżempju per eżempju fuq DO, l-ewwel ħaġa li trid tagħmel hu li tipproteġi s-server tiegħek mid-dinja ta 'barra aggressiva. Mhux se nipprova jew nasserixxi xejn, ser nuri biss il-log /var/log/messages tas-server virtwali tiegħi:
Importanti: tinsiex li tippermetti l-konnessjoni permezz ta' ssh:
ufw allow OpenSSH
Is-sintassi ġenerali hija kif ġej: Ħalli konnessjoni bil-port: ufw allow 12345, fejn 12345 huwa n-numru tal-port jew l-isem tas-servizz. Iċħad: ufw deny 12345
Ixgħel il-firewall:
ufw enable
Aħna noħorġu mis-sessjoni u nerġgħu illoggjaw permezz ta' ssh.
Żid utent, assenjah password, u żidu mal-grupp sudo.
L-ip tas-server għandu jkun tiegħek. Issa ipprova illoggja billi tuża l-utent li ħloqt qabel; m'għadx għandek bżonn iddaħħal password. Sussegwentement, fis-settings tal-konfigurazzjoni, ibdel dan li ġej:
sudo nano /etc/ssh/sshd_config
iddiżattiva l-login tal-password:
PasswordAuthentication no
Ibda mill-ġdid id-daemon sshd:
sudo systemctl reload sshd
Issa jekk int jew xi ħadd ieħor tipprova tidħol bħala l-utent root, mhux se jaħdem.
Sussegwentement, installa dockerd, mhux se niddeskrivi l-proċess hawn, peress li kollox jista 'jinbidel diġà, segwi l-link għall-websajt uffiċjali u għaddej mill-passi tal-installazzjoni ta' docker fuq il-magna virtwali tiegħek: https://docs.docker.com/install/linux/docker-ce/debian/
Ġenerazzjoni ta' ċertifikati
Biex tikkontrolla d-daemon docker mill-bogħod, hija meħtieġa konnessjoni TLS kriptata. Biex tagħmel dan, jeħtieġ li jkollok ċertifikat u ċavetta, li jridu jiġu ġġenerati u trasferiti għall-magna remota tiegħek. Segwi l-passi mogħtija fl-istruzzjonijiet fuq il-websajt uffiċjali tad-docker: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Il-fajls *.pem kollha ġġenerati għas-server, jiġifieri ca.pem, server.pem, key.pem, għandhom jitqiegħdu fid-direttorju /etc/docker fuq is-server.
It-twaqqif ta' dockerd
Fl-iskrittura tat-tnedija tad-docker daemon, inneħħu l-għażla -H df://, din l-għażla tiddetermina fuq liema ospitanti jista' jiġi kkontrollat id-docker daemon.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Sussegwentement, għandek toħloq fajl tas-settings, jekk ma jkunx diġà jeżisti, u speċifika l-għażliet:
Jekk kollox huwa "aħdar", allura nikkunsidraw li kkonfigurajna b'suċċess docker fuq is-server.
Twaqqif ta' konsenja kontinwa fuq gitlab
Sabiex il-ħaddiem ta 'Gitalaba jkun jista' jesegwixxi kmandi fuq host Docker remot, huwa meħtieġ li jiddeċiedi kif u fejn jaħżen iċ-ċertifikati u ċ-ċavetta għal konnessjoni kriptata ma 'Dockerd. I solvut din il-problema billi sempliċement żidt dan li ġej mal-varjabbli fis-settings tal-gitlbab:
Titolu spoiler
Oħroġ biss il-kontenut taċ-ċertifikati u ċ-ċavetta permezz tal-qattus: cat ca.pem. Ikkopja u paste fil-valuri varjabbli.
Ejja niktbu script għall-iskjerament permezz ta' GitLab. Se tintuża l-immaġni 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
Il-problema ewlenija kienet li "ġbid" il-kontenut taċ-ċertifikati f'forma normali mill-varjabbli CI/CD tal-gitlab. Ma stajtx insehem għaliex il-konnessjoni mal-host remot ma kinitx qed taħdem. Fuq il-host ħarist lejn il-log sudo journalctl -u docker, kien hemm żball waqt il-handshake. Iddeċidejt li nħares lejn dak li ġeneralment jinħażen f'varjabbli; biex tagħmel dan, tista' tidher bħal din: cat -A $DOCKER_CERT_PATH/key.pem. I għelbu l-iżball billi żid it-tneħħija tal-karru karattru tr -d 'r'.
Sussegwentement, tista 'żżid kompiti ta' wara r-rilaxx mal-iskript fid-diskrezzjoni tiegħek. Tista' tara l-verżjoni tax-xogħol fir-repożitorju tiegħi https://gitlab.com/isqad/gitlab-ci-cd