Socrú CD trí gitlab

Shíl mé uair amháin faoi imscaradh mo thionscadail a uathoibriú. Soláthraíonn gitlab.com na huirlisí go léir le haghaidh seo, agus ar ndóigh chinn mé é a úsáid trína figuring amach agus scríobh script imscaradh beag. San Airteagal seo, roinnim mo thaithí leis an bpobal.

TL; DR

  1. Socraigh VPS: díchumasaigh fréamh, logáil isteach pasfhocail, suiteáil dockerd, cumraigh ufw
  2. Gin teastais don fhreastalaí agus don chliant docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Cumasaigh rialú dockerd trí soicéad tcp: bain an rogha -H fd:// ó chumraíocht an docker.
  3. Socraigh cosáin chuig teastais in docker.json
  4. Cláraigh sna hathróga gitlab sna socruithe CI / CD le hábhar na ndeimhnithe. Scríobh script .gitlab-ci.yml le himscaradh.

Taispeánfaidh mé gach sampla ar dháileadh Debian.

Socrú tosaigh VPS

Anseo cheannaigh tú sampla mar shampla ar DO, is é an chéad rud atá le déanamh ná do fhreastalaí a chosaint ón domhan ionsaitheach lasmuigh. Ní dhéanfaidh mé aon rud a chruthú ná a dhearbhú, ní thaispeánfaidh mé ach logáil /var/log/messages mo fhreastalaí fíorúil:

ScreenshotSocrú CD trí gitlab

Gcéad dul síos, suiteáil balla dóiteáin ufw:

apt-get update && apt-get install ufw

Cumasaigh an polasaí réamhshocraithe: bac le gach nasc isteach, ceadaigh gach nasc amach:

ufw default deny incoming
ufw default allow outgoing

Tábhachtach: ná déan dearmad nasc a cheadú trí ssh:

ufw allow OpenSSH

Is é an chomhréir ghinearálta: Ceadaigh nasc ar an gcalafort: ceadaigh ufw 12345, áit arb é 12345 uimhir an phoirt nó ainm na seirbhíse. Séanadh: ufw shéanadh 12345

Cuir balla dóiteáin ar siúl:

ufw enable

Scoirimid an seisiún agus logáil isteach arís trí ssh.

Cuir úsáideoir leis, sann pasfhocal dó, agus cuir leis an ngrúpa sudo é.

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

Ansin, de réir an phlean, ba cheart duit logáil isteach pasfhocail a dhíchumasú. Chun é seo a dhéanamh, cóipeáil d'eochair ssh chuig an bhfreastalaí:

ssh-copy-id [email protected]

Caithfidh IP an fhreastalaí a bheith agatsa. Anois déan iarracht logáil isteach faoin úsáideoir a cruthaíodh níos luaithe, ní gá duit pasfhocal a chur isteach níos mó. Ansin, sna socruithe cumraíochta, athraigh an méid seo a leanas:

sudo nano /etc/ssh/sshd_config

díchumasaigh logáil isteach pasfhocail:

PasswordAuthentication no

Atosaigh an deamhan sshd:

sudo systemctl reload sshd

Anois má dhéanann tú féin nó duine éigin eile iarracht logáil isteach mar fhréamh, teipfidh sé.

Ansin, déanaimid dockerd a shuiteáil, ní dhéanfaidh mé cur síos ar an bpróiseas anseo, toisc gur féidir gach rud a athrú cheana féin, lean an nasc chuig an láithreán gréasáin oifigiúil agus téigh trí na céimeanna a bhaineann le docker a shuiteáil ar do mheaisín fíorúil: https://docs.docker.com/install/linux/docker-ce/debian/

Giniúint Teastas

Chun an deamhan docker a rialú go cianda, tá nasc TLS criptithe ag teastáil. Chun seo a dhéanamh, ní mór duit teastas agus eochair a bheith agat a theastaíonn uait a ghiniúint agus a aistriú chuig do chianinneall. Lean na céimeanna a thugtar sna treoracha ar láithreán gréasáin oifigiúil an docker: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Ba cheart gach comhad *.pem a ghintear don fhreastalaí, eadhon ca.pem, server.pem, key.pem, a chur san eolaire /etc/docker ar an bhfreastalaí.

socrú docker

Sa script tosaithe deamhan docker, bain an rogha -H df: //, insíonn an rogha seo cé acu óstach ar féidir an deamhan docker a rialú.

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

Ansin, cruthaigh comhad socruithe mura bhfuil sé ann cheana féin agus socraigh na roghanna:

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

Ceadaigh naisc ar phort 2376:

sudo ufw allow 2376

Atosaigh dockerd le socruithe nua:

sudo systemctl daemon-reload && sudo systemctl restart docker

Déanaimis seiceáil:

sudo systemctl status docker

Má tá gach rud glas, ansin measann muid go bhfuil muid tar éis docker a chumrú go rathúil ar an bhfreastalaí.

Seachadadh leanúnach a shocrú ar gitlab

Ionas go mbeidh an t-oibrí gitalab in ann orduithe a fhorghníomhú ar óstach docker cianda, ní mór duit cinneadh a dhéanamh maidir le conas agus cén áit ar cheart teastais a stóráil agus eochair do nasc criptithe le dockerd. Réitigh mé an fhadhb seo trí scríobh chuig na hathróga sna socruithe gitlbab:

teideal spoilerSocrú CD trí gitlab

Aschuir inneachar na dteastas agus na heochrach trí cat: cat ca.pem. Cóipeáil agus greamaigh isteach i luachanna athraitheacha.

Scríobhaimis script le himscaradh trí gitlab. Bainfear úsáid as an íomhá 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 # скрипт деплоя тут

Ábhar na scripte imscartha le tuairimí:

bin/imscaradh.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

Ba í an phríomhfhadhb ná "tarraingt amach" inneachar na ndeimhnithe sa ghnáthfhoirm ó na hathróga gitlab CI/CD. Níorbh fhéidir liom a dhéanamh amach cén fáth nár oibrigh an nasc leis an gcianóstach. D'fhéach mé ar an logáil sudo journalctl -u docker ar an ósta, tá earráid leis an handshake. Chinn mé chun breathnú ar an méid atá stóráilte go ginearálta in athróga, le haghaidh seo is féidir leat a fheiceáil cat -A $DOCKER_CERT_PATH/key.pem. Sáraíodh an earráid trí bhaint an charachtair caret tr -d 'r' a chur leis.

Ina theannta sin, is féidir leat tascanna iarscaoilte a chur leis an script de do rogha féin. Is féidir leat an leagan oibre a sheiceáil i mo stór https://gitlab.com/isqad/gitlab-ci-cd

Foinse: will.com

Add a comment