Ez carekê li ser otomatîzekirina bicîhkirina projeya xwe fikirîm. gitlab.com ji bo vê yekê ji kerema xwe hemî amûran peyda dike, û bê guman min biryar da ku wê bi fêhmkirina wê û nivîsandina skrîptek piçûkxistinê bikar bînim. Di vê gotarê de, ez ezmûna xwe bi civakê re parve dikim.
TL; DR
VPS saz bikin: root neçalak bikin, têketina şîfreyê, dockerd saz bikin, ufw mîheng bikin
Di guherbarên gitlab de di mîhengên CI / CD de bi naveroka sertîfîkayan re qeyd bikin. Ji bo bicihkirinê skrîptek .gitlab-ci.yml binivîsin.
Ez ê hemî mînakan li ser belavkirina Debian nîşan bidim.
Sazkirina VPS-ya destpêkê
Li vir we mînakek mînakek li ser kirî DO, yekem tiştê ku hûn bikin ev e ku hûn servera xwe ji cîhana derve ya êrîşkar biparêzin. Ez ê tiştek îsbat nekim û nebêjim, ez ê tenê têketina /var/log/messages servera xweya virtual nîşan bidim:
Krîtîk
Pêşîn, dîwarê ufw-ê saz bikin:
apt-get update && apt-get install ufw
Siyaseta xwerû çalak bike: hemî girêdanên hatinî asteng bike, destûr bide hemî girêdanên derketinê:
Girîng: ji bîr nekin ku destûr bidin girêdana bi ssh:
ufw allow OpenSSH
Hevoksaziya gelemperî ev e: Destûr bide girêdana li portê: ufw destûr dide 12345, ku 12345 jimareya portê an navê karûbarê ye. Înkar bike: ufw înkar bike 12345
Firewallê veke:
ufw enable
Em ji danişînê derdikevin û dîsa bi riya ssh têkevin.
Bikarhênerek lê zêde bike, şîfreyek jê re destnîşan bike, û wî li koma sudo zêde bike.
IP-ya serverê divê ya we be. Naha hewl bidin ku têkevin bin bikarhênerê ku berê hatî afirandin, hûn êdî ne hewce ne ku şîfreyek têkevin. Piştre, di mîhengên vesazkirinê de, jêrîn biguherînin:
sudo nano /etc/ssh/sshd_config
têketina şîfreyê neçalak bike:
PasswordAuthentication no
Daemon sshd ji nû ve bidin destpêkirin:
sudo systemctl reload sshd
Naha heke hûn an kesek din hewl bide ku wekî root têkeve, ew ê têk nebe.
Dûv re, em dockerd saz dikin, ez ê pêvajoyê li vir venabêjim, ji ber ku her tişt dikare jixwe were guheztin, zencîreya malpera fermî bişopînin û gavên sazkirina dockerê li ser makîneya xweya virtual derbas bikin: https://docs.docker.com/install/linux/docker-ce/debian/
nifşê sertîfîkayê
Ji bo kontrolkirina docker daemon ji dûr ve, pêwendiyek TLS ya şîfrekirî hewce ye. Ji bo kirina vê yekê, hûn hewce ne ku sertîfîkayek û mifteyek ku hûn hewce ne ku çêbikin û veguhezînin makîneya xweya dûr. Gavên ku di rêwerzên li ser malpera fermî ya docker de hatine dayîn bişopînin: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Hemî pelên *.pem ên ji bo serverê hatine çêkirin, ango ca.pem, server.pem, key.pem, divê di pelrêça /etc/dockerê ya li ser serverê de werin danîn.
sazkirina dokerê
Di skrîpta destpêkirina docker daemon de, vebijarka -H df: // jêbirin, ev vebijark ji kîjan mêvandarê daemonê docker dikare were kontrol kirin.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Dûv re, heke ew jixwe tune be pelek mîhengan biafirînin û vebijarkan saz bikin:
Ger her tişt kesk be, wê hingê em difikirin ku me bi serfirazî docker li ser serverê mîheng kiriye.
Sazkirina radestkirina domdar li ser gitlab
Ji bo ku xebatkarê gitalab bikaribe fermanan li ser mêvandarek dockerê ya dûr bixebite, hûn hewce ne ku biryar bidin ka çawa û li ku derê sertîfîkayan û mifteyek ji bo girêdanek şîfrekirî bi dockerdê re hilîne. Min ev pirsgirêk bi tenê bi nivîsandina guhêrbarên di mîhengên gitlbab de çareser kir:
sernavê spoiler
Tenê naveroka sertîfîkayan û mifteyê bi riya pisîkê derxînin: cat ca.pem. Kopî bikin û bixin nav nirxên guhêrbar.
Ka em bi gitlab ve skrîptek binivîsin. Wêneyê docker-in-docker (dind) dê were bikar anî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
Pirsgirêka sereke ev bû ku naveroka sertîfîkayan di forma normal de ji guhêrbarên gitlab CI / CD "derxe". Min nikarî fêhm bikim ka çima girêdana bi mêvandarê dûr re nexebite. Min li têketina sudo journalctl -u dockerê ya li ser mêvandar nihêrî, di destan de xeletiyek heye. Min biryar da ku li tiştên ku bi gelemperî di guhêrbaran de têne hilanîn binihêrim, ji bo vê yekê hûn dikarin pisîkê -A $DOCKER_CERT_PATH/key.pem bibînin. Bi zêdekirina rakirina karaktera caret tr -d 'r', xeletî derbas kir.
Zêdetir, hûn dikarin li gorî viyana xwe peywirên piştî-serbestberdanê li skrîptê zêde bikin. Hûn dikarin guhertoya xebatê ya di depoya min de binihêrin https://gitlab.com/isqad/gitlab-ci-cd