Мен бір кездері жобамды орналастыруды автоматтандыру туралы ойладым. gitlab.com бұл үшін барлық құралдарды ұсынады, және, әрине, мен оның артықшылығын пайдалануды шештім, оны анықтап, шағын орналастыру сценарийін жаздым. Бұл мақалада мен өз тәжірибемді қоғамдастықпен бөлісемін.
Мен Debian таратуындағы барлық мысалдарды көрсетемін.
Бастапқы VPS орнату
Мәселен, мысалы, мына жерден дананы сатып алдыңыз DO, сізге қажет бірінші нәрсе - серверіңізді агрессивті сыртқы әлемнен қорғау. Мен ештеңені дәлелдемеймін немесе бекітпеймін, мен виртуалды серверімнің /var/log/messages журналын ғана көрсетемін:
Скриншот
Алдымен ufw брандмауэрін орнатыңыз:
apt-get update && apt-get install ufw
Әдепкі саясатты қосайық: барлық кіріс қосылымдарды блоктау, барлық шығыс қосылымдарға рұқсат ету:
Маңызды: ssh арқылы қосылуға рұқсат беруді ұмытпаңыз:
ufw allow OpenSSH
Жалпы синтаксис келесідей: Порт бойынша қосылуға рұқсат ету: ufw рұқсат 12345, мұндағы 12345 порт нөмірі немесе қызмет атауы. Бас тарту: ufw жоққа шығару 12345
Брандмауэрді қосыңыз:
ufw enable
Біз сеанстан шығып, ssh арқылы қайта кіреміз.
Пайдаланушыны қосыңыз, оған құпия сөз тағайындаңыз және оны sudo тобына қосыңыз.
Сервер IP сіздікі болуы керек. Енді бұрын жасаған пайдаланушы арқылы жүйеге кіріп көріңіз, енді құпия сөзді енгізудің қажеті жоқ. Әрі қарай, конфигурация параметрлерінде келесіні өзгертіңіз:
sudo nano /etc/ssh/sshd_config
парольмен кіруді өшіру:
PasswordAuthentication no
Sshd демонын қайта іске қосыңыз:
sudo systemctl reload sshd
Енді сіз немесе басқа біреу түбірлік пайдаланушы ретінде кіруге әрекеттенсе, ол жұмыс істемейді.
Әрі қарай, dockerd орнатыңыз, мен мұнда процесті сипаттамаймын, себебі барлығын өзгертуге болады, ресми веб-сайтқа сілтемені орындаңыз және виртуалды машинаңызға докерді орнату қадамдарын орындаңыз: 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 жүйесінде үздіксіз жеткізуді орнату
Gitalaba жұмысшысы қашықтағы Docker хостында пәрмендерді орындай алуы үшін сертификаттарды және Dockerd-пен шифрланған қосылым кілтін қалай және қайда сақтау керектігін шешу қажет. Мен бұл мәселені gitlbab параметрлеріндегі айнымалы мәндерге жай ғана қосу арқылы шештім:
Спойлер тақырыбы
Тек сертификаттардың мазмұнын және мысық арқылы кілтті шығарыңыз: cat ca.pem. Айнымалы мәндерге көшіріп, қойыңыз.
GitLab арқылы орналастыру үшін сценарий жазайық. Docker-in-docker (dind) кескіні пайдаланылады.
Түсініктемелері бар орналастыру сценарийінің мазмұны:
bin/deploy.sh
#!/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 айнымалыларынан қалыпты пішіндегі сертификаттардың мазмұнын «тартып алу» болды. Мен қашықтағы хостқа қосылу неге жұмыс істемейтінін түсіне алмадым. Хостта мен sudo journalctl -u docker журналын қарадым, қол алысу кезінде қате пайда болды. Мен әдетте айнымалы мәндерде не сақталатынын қарастыруды шештім; ол үшін келесідей көрінуге болады: cat -A $DOCKER_CERT_PATH/key.pem. Мен tr -d 'r' каретка таңбасын алып тастау арқылы қатені жеңдім.
Әрі қарай, сіз өз қалауыңыз бойынша сценарийге шығарылымнан кейінгі тапсырмаларды қоса аласыз. Жұмыс нұсқасын менің репозиторийімде көре аласыз https://gitlab.com/isqad/gitlab-ci-cd