கிட்லாப் வழியாக சிடியை அமைக்கிறது

எனது திட்டத்தின் வரிசைப்படுத்தலை தானியங்குபடுத்துவது பற்றி ஒருமுறை நான் நினைத்தேன். gitlab.com தயவுடன் இதற்கான அனைத்து கருவிகளையும் வழங்குகிறது, நிச்சயமாக நான் அதைப் பயன்படுத்திக் கொள்ள முடிவு செய்தேன், அதைக் கண்டுபிடித்து ஒரு சிறிய வரிசைப்படுத்தல் ஸ்கிரிப்டை எழுதுகிறேன். இந்தக் கட்டுரையில் எனது அனுபவத்தை சமூகத்துடன் பகிர்ந்து கொள்கிறேன்.

டிஎல்; DR

  1. VPS ஐ அமைக்கவும்: ரூட்டை முடக்கவும், கடவுச்சொல்லுடன் உள்நுழையவும், dockerd ஐ நிறுவவும், ufw ஐ உள்ளமைக்கவும்
  2. சேவையகம் மற்றும் கிளையண்டிற்கான சான்றிதழ்களை உருவாக்கவும் docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl tcp சாக்கெட் வழியாக dockerd கட்டுப்பாட்டை இயக்கு: டோக்கர் கட்டமைப்பிலிருந்து -H fd:// விருப்பத்தை அகற்றவும்.
  3. docker.json இல் சான்றிதழ்களுக்கான பாதைகளைப் பதிவு செய்யவும்
  4. சான்றிதழ்களின் உள்ளடக்கத்துடன் CI/CD அமைப்புகளில் gitlab மாறிகளில் பதிவு செய்யவும். வரிசைப்படுத்துவதற்கு .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]

சர்வர் ஐபி உங்களுடையதாக இருக்க வேண்டும். இப்போது நீங்கள் முன்பு உருவாக்கிய பயனரைப் பயன்படுத்தி உள்நுழைய முயற்சிக்கவும்; நீங்கள் இனி கடவுச்சொல்லை உள்ளிட வேண்டியதில்லை. அடுத்து, உள்ளமைவு அமைப்புகளில், பின்வருவனவற்றை மாற்றவும்:

sudo nano /etc/ssh/sshd_config

கடவுச்சொல் உள்நுழைவை முடக்கு:

PasswordAuthentication no

sshd டீமானை மீண்டும் துவக்கவும்:

sudo systemctl reload sshd

இப்போது நீங்கள் அல்லது வேறு யாராவது ரூட் பயனராக உள்நுழைய முயற்சித்தால், அது வேலை செய்யாது.

அடுத்து, dockerd ஐ நிறுவவும், நான் இங்கே செயல்முறையை விவரிக்க மாட்டேன், எல்லாவற்றையும் ஏற்கனவே மாற்ற முடியும் என்பதால், அதிகாரப்பூர்வ வலைத்தளத்திற்கான இணைப்பைப் பின்தொடர்ந்து, உங்கள் மெய்நிகர் கணினியில் docker ஐ நிறுவும் படிகளைப் பின்பற்றவும்: 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

எல்லாம் "பச்சை" என்றால், நாங்கள் சர்வரில் டாக்கரை வெற்றிகரமாக உள்ளமைத்துள்ளோம் என்று கருதுகிறோம்.

கிட்லாப்பில் தொடர்ச்சியான டெலிவரியை அமைத்தல்

Gitalaba பணியாளரால் ரிமோட் டோக்கர் ஹோஸ்டில் கட்டளைகளை இயக்க முடியும் என்பதற்காக, எப்படி, எங்கு சான்றிதழ்களை சேமிப்பது மற்றும் Dockerd உடன் மறைகுறியாக்கப்பட்ட இணைப்பிற்கான திறவுகோலைத் தீர்மானிக்க வேண்டியது அவசியம். 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 மாறிகளில் இருந்து சாதாரண வடிவத்தில் சான்றிதழ்களின் உள்ளடக்கங்களை "இழுக்க" முக்கிய பிரச்சனையாக இருந்தது. ரிமோட் ஹோஸ்டுக்கான இணைப்பு ஏன் வேலை செய்யவில்லை என்பதை என்னால் கண்டுபிடிக்க முடியவில்லை. ஹோஸ்டில் நான் log sudo journalctl -u dockerஐப் பார்த்தேன், கைகுலுக்கலின் போது பிழை ஏற்பட்டது. பொதுவாக மாறிகளில் என்ன சேமிக்கப்படுகிறது என்பதைப் பார்க்க முடிவு செய்தேன்; இதைச் செய்ய, நீங்கள் இப்படிக் காணலாம்: cat -A $DOCKER_CERT_PATH/key.pem. டிஆர் -டி 'ஆர்' என்ற வண்டி எழுத்தை நீக்கி பிழையைச் சமாளித்தேன்.

அடுத்து, வெளியீட்டிற்குப் பிந்தைய பணிகளை உங்கள் விருப்பப்படி ஸ்கிரிப்ட்டில் சேர்க்கலாம். நீங்கள் வேலை செய்யும் பதிப்பை எனது களஞ்சியத்தில் பார்க்கலாம் https://gitlab.com/isqad/gitlab-ci-cd

ஆதாரம்: www.habr.com

கருத்தைச் சேர்