በgitlab በኩል የሲዲ ማዋቀር

በአንድ ወቅት የፕሮጀክቴን ስርጭት አውቶማቲክ ለማድረግ አስቤ ነበር። gitlab.com በደግነት ለዚህ ሁሉንም መሳሪያዎች ያቀርባል, እና በእርግጥ እሱን በመለየት እና ትንሽ የማሰማራት ስክሪፕት በመጻፍ ልጠቀምበት ወሰንኩ. በዚህ ጽሑፍ ውስጥ የእኔን ልምድ ለማህበረሰቡ አካፍላለሁ።

TL; DR

  1. VPS አዋቅር፡ root አሰናክል፣ የይለፍ ቃል መግባትን፣ dockerd ን ጫን፣ ufw አዋቅር
  2. ለአገልጋይ እና ደንበኛ የምስክር ወረቀቶችን ይፍጠሩ docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl የመትከያ መቆጣጠሪያን በtcp ሶኬት በኩል ያንቁ፡-H fd:// አማራጭን ከዶክተር ውቅረት ያስወግዱት።
  3. በ docker.json ውስጥ ወደ የምስክር ወረቀቶች የሚወስዱ መንገዶችን ያዘጋጁ
  4. በጊትላብ ተለዋዋጮች በሲአይ/ሲዲ መቼቶች ከምስክር ወረቀቱ ይዘቶች ጋር ይመዝገቡ። ለማሰማራት የ.gitlab-ci.yml ስክሪፕት ይፃፉ።

በዴቢያን ስርጭት ላይ ሁሉንም ምሳሌዎች አሳይሻለሁ።

የመጀመሪያ VPS ማዋቀር

እዚህ ላይ ለምሳሌ ገዝተሃል DO, መጀመሪያ ማድረግ ያለብዎት አገልጋይዎን ከአስጨናቂው የውጭ ዓለም መጠበቅ ነው. ምንም ነገር አላረጋግጥም ወይም አላስረግጥም፣ የቨርቹዋል አገልጋይዬን /var/log/መልእክቶችን ብቻ አሳያለሁ፡-

.Иншотበgitlab በኩል የሲዲ ማዋቀር

በመጀመሪያ የ 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]

የአገልጋዩ አይፒ የእርስዎ መሆን አለበት። አሁን ቀደም ሲል በተፈጠረው ተጠቃሚ ስር ለመግባት ይሞክሩ, ከአሁን በኋላ የይለፍ ቃል ማስገባት አያስፈልግዎትም. በመቀጠል፣ በማዋቀር ቅንጅቶች ውስጥ፣ የሚከተሉትን ይቀይሩ።

sudo nano /etc/ssh/sshd_config

የይለፍ ቃል መግባትን ያሰናክሉ፡

PasswordAuthentication no

የsshd ዴሞንን እንደገና ያስጀምሩ

sudo systemctl reload sshd

አሁን እርስዎ ወይም ሌላ ሰው እንደ root ለመግባት ከሞከሩ, አይሳካም.

በመቀጠል, 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 ፋይሎች ለአገልጋዩ ማለትም cap.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

መክተቻውን በአዲስ ቅንብሮች ዳግም ያስጀምሩ፡-

sudo systemctl daemon-reload && sudo systemctl restart docker

እስቲ እንፈትሽ፡

sudo systemctl status docker

ሁሉም ነገር አረንጓዴ ከሆነ, በአገልጋዩ ላይ ዶከርን በተሳካ ሁኔታ እንዳዋቀርን እናስባለን.

በgitlab ላይ ቀጣይነት ያለው ማድረስ በማዘጋጀት ላይ

የጊታላብ ሰራተኛው በርቀት ዶከር አስተናጋጅ ላይ ትዕዛዞችን ማስፈፀም እንዲችል የምስክር ወረቀቶችን እንዴት እና የት እንደሚከማች እና የተመሰጠረ ግንኙነትን ወደ መክተቻው ቁልፍ መወሰን ያስፈልግዎታል። ይህንን ችግር በቀላሉ በgitlbab ቅንብሮች ውስጥ ላሉ ተለዋዋጮች በመፃፍ ፈታሁት፡-

አጥፊ ርዕስበgitlab በኩል የሲዲ ማዋቀር

የምስክር ወረቀቶችን እና ቁልፎቹን ይዘቶች በድመት ብቻ ያውጡ፡ 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

ዋናው ችግር የምስክር ወረቀቶቹን ይዘቶች በመደበኛ መልክ ከ gitlab CI / CD ተለዋዋጮች ውስጥ "ማውጣት" ነበር። ከርቀት አስተናጋጁ ጋር ያለው ግንኙነት ለምን እንዳልሰራ ማወቅ አልቻልኩም። በአስተናጋጁ ላይ የ sudo journalctl -u docker ሎግ ተመለከትኩ፣ በመጨባበጥ ላይ ስህተት አለ። በአጠቃላይ በተለዋዋጮች ውስጥ የተከማቸውን ለማየት ወሰንኩ፣ ለዚህም ድመት -A $DOCKER_CERT_PATH/key.pem ማየት ይችላሉ። የእንክብካቤ ቁምፊ tr -d 'r' መወገድን በመጨመር ስህተቱን አሸንፏል።

በተጨማሪም፣ ከመልቀቅ በኋላ ተግባሮችን በእርስዎ ውሳኔ ወደ ስክሪፕቱ ማከል ይችላሉ። በእኔ ማከማቻ ውስጥ የሚሰራውን ስሪት ማየት ይችላሉ። https://gitlab.com/isqad/gitlab-ci-cd

ምንጭ: hab.com

አስተያየት ያክሉ