Kuring sakali panginten ngeunaan ngajadikeun otomatis panyebaran proyék kuring. gitlab.com bageur nawaran reureuh di nyadiakeun sagala parabot pikeun ieu, sarta tangtu kuring mutuskeun ngagunakeun eta ku figuring kaluar jeung nulis Aksara deployment leutik. Dina artikel ieu, kuring babagi pangalaman kuring jeung masarakat.
Ngadaptar dina variabel gitlab dina setélan CI / CD sareng eusi sertipikat. Nulis Aksara .gitlab-ci.yml pikeun deployment.
Kuring bakal nunjukkeun sadaya conto dina distribusi Debian.
Setélan VPS awal
Di dieu Anjeun meuli hiji conto misalna dina DO, Hal kahiji anu kudu dipigawé nyaéta ngajaga server anjeun ti dunya luar agrésif. Kuring moal ngabuktikeun atawa negeskeun nanaon, kuring ngan bakal nembongkeun / var / log / log pesen tina server maya kuring:
Nu penting: ulah poho pikeun ngidinan sambungan via ssh:
ufw allow OpenSSH
Sintaksis umum nyaéta: Ngidinan sambungan dina port: ufw ngawenangkeun 12345, dimana 12345 mangrupikeun nomer port atanapi nami jasa. mungkir: ufw mungkir 12345
Hurungkeun firewall:
ufw enable
Urang kaluar tina sési jeung asup deui via ssh.
Tambahkeun pangguna, pasihan anjeunna kecap konci, sareng tambahkeun anjeunna kana grup sudo.
The ip tina server kedah milik anjeun. Ayeuna coba log in handapeun pamaké dijieun saméméhna, anjeun teu kudu ngasupkeun sandi deui. Salajengna, dina setélan konfigurasi, robih ieu:
sudo nano /etc/ssh/sshd_config
mareuman sandi login:
PasswordAuthentication no
Balikan deui daemon sshd:
sudo systemctl reload sshd
Ayeuna upami anjeun atanapi batur nyobian asup salaku root, éta bakal gagal.
Salajengna, urang pasang dockerd, kuring moal ngajelaskeun prosésna di dieu, sabab sadayana parantos dirobih, tuturkeun tautan kana halaman wéb resmi sareng ngalangkungan léngkah-léngkah masang docker dina mesin virtual anjeun: https://docs.docker.com/install/linux/docker-ce/debian/
Generasi sertipikat
Pikeun ngadalikeun daemon docker jarak jauh, sambungan TLS énkripsi diperlukeun. Jang ngalampahkeun ieu, anjeun kedah gaduh sertipikat sareng konci anu anjeun peryogikeun pikeun ngahasilkeun sareng mindahkeun kana mesin jauh anjeun. Turutan léngkah-léngkah anu dipasihkeun dina petunjuk dina halaman wéb docker resmi: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Sadaya file *.pem anu dihasilkeun pikeun server, nyaéta ca.pem, server.pem, key.pem, kedah disimpen dina diréktori /etc/docker dina server.
setelan docker
Dina skrip ngamimitian daemon docker, cabut pilihan -H df: //, pilihan ieu nyarioskeun mana host daemon docker tiasa dikontrol.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Teras, jieun file setélan upami éta henteu acan aya sareng setel pilihan:
Upami sadayana "héjo", maka urang nganggap yén kami parantos suksés ngonpigurasi docker dina server.
Nyetél pangiriman kontinyu dina gitlab
Supados pagawe gitalab tiasa ngalaksanakeun paréntah dina host docker jauh, anjeun kedah mutuskeun kumaha sareng dimana nyimpen sertipikat sareng konci pikeun sambungan énkripsi ka dockerd. Kuring direngsekeun masalah ieu ku saukur nulis ka variabel dina setélan gitlbab:
judul spoiler
Ngan kaluaran eusi sertipikat sareng konci via ucing: cat ca.pem. Salin sareng témpél kana nilai variabel.
Hayu urang nulis naskah pikeun deployment ngaliwatan gitlab. Gambar docker-in-docker (dind) bakal dianggo.
#!/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
Masalah utama nyaéta "tarik kaluar" eusi sertipikat dina bentuk normal tina variabel gitlab CI / CD. Abdi henteu tiasa terang naha sambungan ka host jauh henteu jalan. Kuring nempo sudo journalctl -u docker log on host, aya kasalahan jeung sasalaman. Kuring mutuskeun katingal dina naon umumna disimpen dina variabel, pikeun ieu anjeun tiasa ningali ucing -A $ DOCKER_CERT_PATH / key.pem. Overcame kasalahan ku nambahkeun ngaleupaskeun karakter caret tr -d 'r'.
Salajengna, anjeun tiasa nambihan tugas pas-release kana naskah dina kawijaksanaan anjeun. Anjeun tiasa pariksa versi anu tiasa dianggo dina gudang kuring https://gitlab.com/isqad/gitlab-ci-cd