Мен бир жолу өзүмдүн долбоорумду жайылтууну автоматташтыруу жөнүндө ойлонгом. gitlab.com бул үчүн бардык куралдарды боорукердик менен камсыз кылат, жана, албетте, мен анын пайдасын көрүүнү чечтим, аны түшүнүп, чакан жайылтуу сценарийин жазууну чечтим. Бул макалада мен өз тажрыйбамды коомчулук менен бөлүшөм.
docker.json ичинде сертификаттарга баруучу жолдорду каттаңыз
Сертификаттардын мазмуну менен CI/CD жөндөөлөрүндө gitlab өзгөрмөлөрүндө катталыңыз. Жайгаштыруу үчүн .gitlab-ci.yml сценарийин жазыңыз.
Мен Debian бөлүштүрүү боюнча бардык мисалдарды көрсөтөм.
Баштапкы VPS орнотуу
Ошентип, мисалы, даректен мисал сатып алдыңыз DO, биринчи кезекте сервериңизди агрессивдүү тышкы дүйнөдөн коргоо керек. Мен эч нерсени далилдебейм же ырастабайм, мен жөн гана виртуалдык серверимдин /var/log/messages журналын көрсөтөм:
Экрандын
Биринчиден, ufw брандмауэрин орнотуңуз:
apt-get update && apt-get install ufw
Келгиле, демейки саясатты иштетели: бардык кирүүчү байланыштарды бөгөттөө, бардык чыгууларга уруксат берүү:
Маанилүү: ssh аркылуу туташууга уруксат берүүнү унутпаңыз:
ufw allow OpenSSH
Жалпы синтаксис төмөнкүдөй: Порт боюнча туташууга уруксат берүү: ufw уруксат берүү 12345, мында 12345 порт номери же кызматтын аталышы. Жок кылуу: ufw четке кагуу 12345
Firewall күйгүзүү:
ufw enable
Биз сессиядан чыгып, ssh аркылуу кайра киребиз.
Колдонуучуну кошуп, ага сырсөз дайындаңыз жана аны sudo тобуна кошуңуз.
Сервердин IP дареги сиздики болушу керек. Эми буга чейин түзгөн колдонуучу аркылуу кирүүгө аракет кылыңыз; сырсөздү киргизүүнүн кереги жок. Андан кийин, конфигурация орнотууларында, төмөнкүнү өзгөртүңүз:
sudo nano /etc/ssh/sshd_config
сырсөз менен кирүүнү өчүрүү:
PasswordAuthentication no
sshd демонун кайра иштетиңиз:
sudo systemctl reload sshd
Эми сиз же башка бирөө түпкү колдонуучу катары кирүүгө аракет кылсаңыз, ал иштебейт.
Андан кийин, докерди орнотуңуз, мен бул жерде процессти сүрөттөп бербейм, анткени бардыгын өзгөртүүгө болот, расмий веб-сайтка шилтеме менен өтүп, виртуалдык машинаңызга докерди орнотуу кадамдарынан өтүңүз: https://docs.docker.com/install/linux/docker-ce/debian/
Сертификаттарды түзүү
Докер демонун алыстан башкаруу үчүн шифрленген TLS байланышы талап кылынат. Бул үчүн, сизде сертификат жана ачкыч болушу керек, алар түзүлүп, алыскы машинаңызга өткөрүлүп берилиши керек. Докердин расмий веб-сайтындагы нускамаларда берилген кадамдарды аткарыңыз: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Сервер үчүн бардык түзүлгөн *.pem файлдары, атап айтканда, ca.pem, server.pem, key.pem, сервердеги /etc/docker каталогуна жайгаштырылышы керек.
Dockerd орнотулууда
Докер демонунун ишке киргизүү скриптинде биз -H df:// опциясын алып салабыз, бул параметр докер демону кайсы хостто башкарыла аларын аныктайт.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Андан кийин, сиз орнотуулар файлын түзүшүңүз керек, эгерде ал жок болсо, жана параметрлерди көрсөтүңүз:
Эгерде бардыгы “жашыл” болсо, анда биз серверде докерди ийгиликтүү конфигурацияладык деп эсептейбиз.
gitlab боюнча үзгүлтүксүз жеткирүү орнотуу
Гиталаба жумушчусу алыскы Docker хостунда буйруктарды аткара алышы үчүн, сертификаттарды жана Dockerd менен шифрленген туташуунун ачкычын кантип жана кайда сактоону чечиш керек. Мен бул көйгөйдү жөн гана gitlbab орнотууларындагы өзгөрмөлөргө төмөнкүнү кошуу менен чечтим:
Спойлер аталышы
Жөн гана сертификаттардын мазмунун жана мышык аркылуу ачкычты чыгарыңыз: cat ca.pem. Көчүрүп, өзгөрмө маанилерине чаптаңыз.
Келгиле, GitLab аркылуу жайылтуу үчүн сценарий жазалы. 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
Негизги көйгөй сертификаттардын мазмунун gitlab CI/CD өзгөрмөлөрүнөн кадимки формада "тартып алуу" болгон. Алыскы хост менен байланыш эмне үчүн иштебей жатканын түшүнө алган жокмун. Хостто мен log sudo journalctl -u докерди карадым, кол алышуу учурунда ката кетти. Мен өзгөрмөлөрдө жалпысынан эмне сакталаарын карап көрүүнү чечтим; бул үчүн сиз төмөнкүдөй көрүнсөңүз болот: cat -A $DOCKER_CERT_PATH/key.pem. Мен tr -d 'r' каретка белгисин алып салуу менен катаны жеңдим.
Андан кийин, сиз өз каалооңуз боюнча скриптке релизден кийинки тапшырмаларды кошо аласыз. Сиз менин репозиторийимден жумушчу версиясын көрө аласыз https://gitlab.com/isqad/gitlab-ci-cd