CDaren konfigurazioa gitlab bidez

Behin pentsatu nuen nire proiektuaren hedapena automatizatzea. gitlab.com-ek atsegin handiz eskaintzen ditu horretarako tresna guztiak, eta, jakina, erabiltzea erabaki nuen asmatuz eta inplementazio script txiki bat idatziz. Artikulu honetan, komunitatearekin nire esperientzia partekatzen dut.

TL; DR

  1. Konfiguratu VPS: desgaitu root, pasahitza saioa hasteko, instalatu dockerd, konfiguratu ufw
  2. Sortu zerbitzari eta bezeroentzako ziurtagiriak docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Gaitu dockerd kontrola tcp socket bidez: kendu -H fd:// aukera docker konfiguraziotik.
  3. Ezarri ziurtagirien bideak docker.json-en
  4. Erregistratu gitlab aldagaietan CI / CD ezarpenetan ziurtagirien edukiekin. Idatzi .gitlab-ci.yml script bat hedatzeko.

Debian banaketari buruzko adibide guztiak erakutsiko ditut.

VPS hasierako konfigurazioa

Hemen, adibidez, instantzia bat erosi duzu DO, egin beharreko lehen gauza zure zerbitzaria kanpoko mundu erasokorretatik babestea da. Ez dut ezer frogatuko edo baieztatuko, nire zerbitzari birtualeko /var/log/messages erregistroa erakutsiko dut:

screenshotCDaren konfigurazioa gitlab bidez

Lehenik eta behin, instalatu ufw suebakia:

apt-get update && apt-get install ufw

Gaitu politika lehenetsia: blokeatu sarrerako konexio guztiak, baimendu irteerako konexio guztiak:

ufw default deny incoming
ufw default allow outgoing

Garrantzitsua: ez ahaztu ssh bidez konexioa baimentzea:

ufw allow OpenSSH

Sintaxi orokorra hau da: Allow connection on port: ufw allow 12345, non 12345 atakaren zenbakia edo zerbitzuaren izena den. Ukatu: ufw deny 12345

Aktibatu suebakia:

ufw enable

Saiotik irten eta berriro ssh bidez hasten gara.

Gehitu erabiltzaile bat, esleitu pasahitza eta gehitu sudo taldean.

apt-get install sudo
adduser scoty
usermod -aG sudo scoty

Ondoren, planaren arabera, pasahitz saioa desgaitu beharko zenuke. horretarako, kopiatu zure ssh gakoa zerbitzarian:

ssh-copy-id [email protected]

Zerbitzariaren ipak zurea izan behar du. Orain saiatu lehenago sortutako erabiltzailearekin saioa hasten, ez duzu pasahitzik sartu beharrik. Ondoren, konfigurazio-ezarpenetan, aldatu honako hau:

sudo nano /etc/ssh/sshd_config

desgaitu pasahitza saioa hasteko:

PasswordAuthentication no

Berrabiarazi sshd deabrua:

sudo systemctl reload sshd

Orain zu edo beste norbait root gisa saioa hasten saiatzen bazara, huts egingo du.

Ondoren, dockerd instalatzen dugu, ez dut hemen prozesua deskribatuko, dagoeneko dena alda daitekeenez, jarraitu webgune ofizialerako esteka eta jarraitu docker zure makina birtualean instalatzeko urratsak: https://docs.docker.com/install/linux/docker-ce/debian/

Ziurtagiria sortzea

Docker daemon urrunetik kontrolatzeko, enkriptatutako TLS konexioa behar da. Horretarako, zure urruneko makina sortzeko eta transferitzeko behar duzun ziurtagiria eta gako bat izan behar dituzu. Jarraitu docker webgune ofizialeko argibideetan emandako urratsak: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Zerbitzarirako sortutako *.pem fitxategi guztiak, hots, ca.pem, server.pem, key.pem, zerbitzariko /etc/docker direktorioan kokatu behar dira.

docker konfigurazioa

Docker daemon abiarazteko scriptean, kendu -H df:// aukera, aukera honek docker deabrua zein ostalaritan kontrolatu daitekeen esaten du.

# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd

Ondoren, sortu ezarpen-fitxategi bat dagoeneko existitzen ez bada eta ezarri aukerak:

/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
}

Baimendu konexioak 2376 atakan:

sudo ufw allow 2376

Berrabiarazi dockerd ezarpen berriekin:

sudo systemctl daemon-reload && sudo systemctl restart docker

Egiaztatu dezagun:

sudo systemctl status docker

Dena berdea bada, zerbitzarian docker ondo konfiguratu dugula uste dugu.

Etengabeko entrega konfiguratzea gitlab-en

Gitalab-eko langileak urruneko docker ostalari batean komandoak exekutatu ahal izateko, dockerd-erako ziurtagiriak eta gako bat nola eta non gorde behar dituzun erabaki behar duzu. Arazo hau gitlbab ezarpenetan aldagaietan idatziz konpondu nuen:

spoiler izenburuaCDaren konfigurazioa gitlab bidez

Idatzi ziurtagirien eta gakoen edukia katu bidez: cat ca.pem. Kopiatu eta itsatsi balio aldakorretan.

Idatzi dezagun gitlab bidez hedatzeko script bat. Docker-in-docker (dind) irudia erabiliko da.

.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 # скрипт дСплоя Ρ‚ΡƒΡ‚

Inplementazio-scriptaren edukia iruzkinekin:

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

Arazo nagusia gitlab CI / CD aldagaietatik ziurtagirien edukia modu normalean "atera" izan zen. Ezin izan nuen asmatu urruneko ostalariaren konexioak zergatik ez zuen funtzionatu. Ostalariaren sudo journalctl -u docker erregistroan begiratu dut, errore bat dago esku-ematearekin. Orokorrean aldagaietan gordetzen dena aztertzea erabaki nuen, horretarako cat -A $DOCKER_CERT_PATH/key.pem ikus dezakezu. Akatsa gainditu du tr -d 'r' karakterea kentzea gehituz.

Gainera, kaleratu osteko zereginak gehi ditzakezu gidoiari zure diskrezioan. Laneko bertsioa nire biltegian ikus dezakezu https://gitlab.com/isqad/gitlab-ci-cd

Iturria: www.habr.com

Gehitu iruzkin berria