ما یوځل د خپلې پروژې د ګمارلو اتومات کولو په اړه فکر وکړ. gitlab.com په مهربانۍ سره د دې لپاره ټول وسیلې چمتو کوي ، او البته ما پریکړه وکړه چې له دې څخه ګټه واخلم ، دا یې په ګوته کړم او د پلي کولو کوچنۍ سکریپټ ولیکم. په دې مقاله کې زه خپلې تجربې له ټولنې سره شریکوم.
د تمديد؛ DR
- VPS تنظیم کړئ: روټ غیر فعال کړئ ، د پټنوم سره لاګ ان شئ ، ډاکرډ نصب کړئ ، ufw تنظیم کړئ
- د سرور او مراجعینو لپاره سندونه تولید کړئ
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl د tcp ساکټ له لارې د ډاکرډ کنټرول فعال کړئ: د ډاکر ترتیب څخه -H fd:// اختیار لرې کړئ. - په docker.json کې سندونو ته لارې راجستر کړئ
- د سندونو مینځپانګې سره د CI/CD تنظیماتو کې د ګیټلاب متغیرونو کې راجستر کړئ. د ګمارلو لپاره سکریپټ .gitlab-ci.yml ولیکئ.
زه به د دیبیان توزیع ټول مثالونه وښیم.
د VPS ابتدايي ترتیب
نو تاسو د مثال په توګه یو مثال وپیرئ
سکرین شاټ
لومړی، د ufw فایروال نصب کړئ:
apt-get update && apt-get install ufw
راځئ چې ډیفالټ پالیسي فعاله کړو: ټولې راتلوونکې اړیکې بندې کړئ، ټولو وتلو اړیکو ته اجازه ورکړئ:
ufw default deny incoming
ufw default allow outgoing
مهم: د ssh له لارې اړیکې ته اجازه مه ورکوئ:
ufw allow OpenSSH
عمومي ترکیب په لاندې ډول دی: د پورټ له لارې اتصال ته اجازه ورکړئ: ufw اجازه 12345 ، چیرې چې 12345 د پورټ شمیره یا د خدماتو نوم دی. انکار: ufw انکار 12345
فایروال فعال کړئ:
ufw enable
موږ له غونډې څخه وځو او د ssh له لارې بیا ننوتل.
یو کارن اضافه کړئ، هغه ته یو پټنوم ورکړئ، او هغه د سوډو ګروپ ته اضافه کړئ.
apt-get install sudo
adduser scoty
usermod -aG sudo scoty
بیا، د پلان سره سم، تاسو باید د پټنوم ننوتل غیر فعال کړئ. د دې کولو لپاره، خپل ssh کیلي سرور ته کاپي کړئ:
ssh-copy-id [email protected]
د سرور IP باید ستاسو وي. اوس هڅه وکړئ د هغه کارونکي په کارولو سره لاګ ان شئ چې تاسو مخکې جوړ کړی؛ تاسو نور اړتیا نلرئ پاسورډ دننه کړئ. بیا، د ترتیب ترتیباتو کې، لاندې بدل کړئ:
sudo nano /etc/ssh/sshd_config
د پټنوم ننوتل غیر فعال کړئ:
PasswordAuthentication no
د sshd ډیمون بیا پیل کړئ:
sudo systemctl reload sshd
اوس که تاسو یا بل څوک د روټ کارونکي په توګه د ننوتلو هڅه کوي، دا به کار ونکړي.
بیا ، ډاکرډ نصب کړئ ، زه به دلته پروسه تشریح نه کړم ، ځکه چې هرڅه دمخه بدلیدلی شي ، رسمي ویب پا toې ته لینک تعقیب کړئ او په خپل مجازی ماشین کې د ډاکر نصبولو مرحلو ته لاړشئ:
د سندونو تولید
د ډاکر ډیمون لرې کنټرول کولو لپاره ، د کوډ شوي TLS پیوستون ته اړتیا ده. د دې کولو لپاره، تاسو اړتیا لرئ یو سند او کیلي ولرئ، کوم چې باید تولید او ستاسو ریموټ ماشین ته لیږدول شي. په رسمي ډاکر ویب پا onه کې لارښوونو کې ورکړل شوي مرحلې تعقیب کړئ:
د ډاکرډ ترتیب کول
د ډاکر ډیمون لانچ سکریپټ کې ، موږ د -H df:// اختیار لرې کوو ، دا اختیار ټاکي چې په کوم کوربه د ډاکر ډیمون کنټرول کیدی شي.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
بیا، تاسو باید د ترتیباتو فایل جوړ کړئ، که دا دمخه شتون نلري، او اختیارونه مشخص کړئ:
/etc/docker/docker.json
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2376"
],
"labels": [
"is-our-remote-engine=true"
],
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.pem",
"tlskey": "/etc/docker/key.pem",
"tlsverify": true
}
راځئ چې په 2376 بندر کې اړیکو ته اجازه ورکړو:
sudo ufw allow 2376
راځئ چې د نوي ترتیباتو سره ډاکرډ بیا پیل کړو:
sudo systemctl daemon-reload && sudo systemctl restart docker
راځئ چې وګورو:
sudo systemctl status docker
که هرڅه "شنه" وي، نو بیا موږ فکر کوو چې موږ په سرور کې ډاکر په بریالیتوب سره تنظیم کړی دی.
په ګیټلاب کې د دوامداره تحویلي تنظیم کول
د دې لپاره چې د ګیتابابا کارمند وکولی شي په لرې پرتو ډاکر کوربه کې قوماندې اجرا کړي ، دا اړینه ده چې پریکړه وکړئ چې څنګه او چیرې سندونه ذخیره کړئ او د ډاکرډ سره د کوډ شوي اړیکې لپاره کیلي. ما دا ستونزه په ساده ډول د gitlbab ترتیباتو کې متغیرونو ته د لاندې اضافه کولو سره حل کړه:
سپوئلر سرلیک
یوازې د سندونو مینځپانګې او کیلي د بلی له لارې تولید کړئ: cat ca.pem
. د متغیر ارزښتونو کې کاپي او پیسټ کړئ.
راځئ چې د GitLab له لارې د ګمارنې لپاره سکریپټ ولیکو. د ډاکر-ان-ډاکر (ډینډ) عکس به وکارول شي.
.gitlab-ci.yml
image:
name: docker/compose:1.23.2
# перепишем entrypoint , чтобы работало в dind
entrypoint: ["/bin/sh", "-c"]
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
- docker:dind
stages:
- deploy
deploy:
stage: deploy
script:
- bin/deploy.sh # скрипт деплоя тут
د ګمارنې سکریپټ مینځپانګې د نظرونو سره:
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
اصلي ستونزه دا وه چې د سندونو مینځپانګې په نورمال شکل کې د ګیټلاب CI/CD متغیرونو څخه "راوباسي". زه نشم پوهیدم چې ولې د لیرې کوربه سره اړیکه کار نه کوي. په کوربه کې ما د log sudo journalctl -u docker ته وکتل، د لاس اخیستو پرمهال یوه تېروتنه وه. ما پریکړه وکړه چې وګورم هغه څه چې عموما په متغیرونو کې ساتل کیږي؛ د دې کولو لپاره، تاسو کولی شئ داسې وګورئ: بلی -A $DOCKER_CERT_PATH/key.pem. ما د کیریج کرکټر tr -d 'r' لرې کولو اضافه کولو سره تېروتنه کابو کړه.
بل ، تاسو کولی شئ په خپل اختیار کې سکریپټ ته د خپریدو وروسته دندې اضافه کړئ. تاسو کولی شئ زما په ذخیره کې کاري نسخه وګورئ
سرچینه: www.habr.com