گيٽ ليب ذريعي سي ڊي سيٽ اپ

مون هڪ دفعو منهنجي منصوبي جي ترتيب کي خودڪار ڪرڻ بابت سوچيو. gitlab.com مھرباني ڪري ھن لاءِ سڀ اوزار مهيا ڪري ٿو، ۽ يقينن مون ان کي استعمال ڪرڻ جو فيصلو ڪيو آھي ان کي استعمال ڪندي ۽ ھڪڙي ننڍڙي ترتيب واري اسڪرپٽ لکڻ سان. هن آرٽيڪل ۾، مان پنهنجو تجربو ڪميونٽي سان حصيداري ڪريان ٿو.

TL، ڊاڪٽر

  1. VPS سيٽ اپ ڪريو: روٽ کي غير فعال ڪريو، پاسورڊ لاگ ان، ڊاڪڊر انسٽال ڪريو، ufw ترتيب ڏيو
  2. سرور ۽ ڪلائنٽ لاءِ سرٽيفڪيٽ ٺاھيو docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl tcp ساکٽ ذريعي ڊڪرڊ ڪنٽرول کي فعال ڪريو: ڊاڪر ترتيب مان -H fd:// آپشن کي هٽايو.
  3. docker.json ۾ سرٽيفڪيٽن جا رستا مقرر ڪريو
  4. سرٽيفڪيٽ جي مواد سان گڏ CI / CD سيٽنگون ۾ gitlab variables ۾ رجسٽر ڪريو. ترتيب ڏيڻ لاءِ .gitlab-ci.yml اسڪرپٽ لکو.

مان ڊيبين جي تقسيم تي سڀ مثال ڏيکاريندس.

شروعاتي VPS سيٽ اپ

هتي توهان هڪ مثال خريد ڪيو مثال طور تي DO، سڀ کان پهرين ڪم ڪرڻ آهي توهان جي سرور کي جارحيت واري ٻاهرين دنيا کان بچائڻ لاءِ. مان ڪجھ به ثابت يا ثابت نه ڪندس، مان صرف ڏيکاريندس /var/log/messages لاگ منهنجي ورچوئل سرور:

اسڪرين شاٽگيٽ ليب ذريعي سي ڊي سيٽ اپ

پهريون، انسٽال ڪريو 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

ھاڻي جيڪڏھن توھان يا ڪو ٻيو روٽ طور لاگ ان ٿيڻ جي ڪوشش ڪندو، اھو ناڪام ٿيندو.

اڳيون، اسان 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 ڊاريڪٽري ۾ رکڻ گهرجي.

ڊاکر سيٽ اپ

ڊاڪر ڊيمن جي شروعاتي اسڪرپٽ ۾، -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

نئين سيٽنگن سان dockerd ٻيهر شروع ڪريو:

sudo systemctl daemon-reload && sudo systemctl restart docker

اچو ته چيڪ ڪريون:

sudo systemctl status docker

جيڪڏهن هر شي سائي آهي، پوء اسان سمجهون ٿا ته اسان سرور تي ڊاکر ڪاميابي سان ترتيب ڏني آهي.

gitlab تي مسلسل ترسيل قائم ڪرڻ

گيٽاب ورڪر لاءِ ريموٽ ڊاڪر هوسٽ تي حڪمن تي عمل ڪرڻ جي قابل ٿي وڃڻ لاءِ، توهان کي اهو فيصلو ڪرڻو پوندو ته ڪيئن ۽ ڪٿي سرٽيفڪيٽن کي ذخيرو ڪرڻ ۽ ڊاڪرڊ لاءِ هڪ انڪريپٽ ٿيل ڪنيڪشن لاءِ ڪيچي. مون هن مسئلي کي حل ڪيو صرف gitlbab سيٽنگن ۾ متغير ڏانهن لکڻ سان:

خراب ڪرڻ وارو عنوانگيٽ ليب ذريعي سي ڊي سيٽ اپ

صرف سند جي مواد کي ٻاھر ڪڍو ۽ ٻلي ذريعي ڪي: cat ca.pem. ڪاپي ۽ پيسٽ ڪريو متغير قدرن ۾.

اچو ته gitlab ذريعي ترتيب ڏيڻ لاءِ اسڪرپٽ لکون. Docker-in-docker (dind) تصوير استعمال ڪئي ويندي.

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 متغيرن مان. مان سمجهي نه سگهيو آهيان ته ريموٽ ميزبان سان ڪنيڪشن ڇو ڪم نه ڪيو. مون ڏٺو هوسٽ تي sudo journalctl -u docker لاگ، اتي هڪ غلطي آهي هٿ ملائڻ سان. مون اهو ڏسڻ جو فيصلو ڪيو ته عام طور تي متغيرن ۾ ڇا ذخيرو ٿيل آهي، ان لاءِ توهان ڏسي سگهو ٿا cat -A $DOCKER_CERT_PATH/key.pem. ڪيريٽ ڪردار tr -d 'r' کي هٽائڻ شامل ڪندي غلطي کي ختم ڪيو.

وڌيڪ، توهان پنهنجي صوابديد تي اسڪرپٽ ۾ پوسٽ-رليز ڪم شامل ڪري سگهو ٿا. توھان چيڪ ڪري سگھو ٿا ڪم ڪندڙ ورزن منھنجي مخزن ۾ https://gitlab.com/isqad/gitlab-ci-cd

جو ذريعو: www.habr.com

تبصرو شامل ڪريو