CD erigens per gitlab

Cogitavi semel de instruere consilium instruere. gitlab.com omnia instrumenta ad hoc benigne praebet, et ea utique uti decrevi, ea remanens et scripturam parvam instruere scribens. In hoc articulo experientiam meam cum communitate communico.

TL, DR

  1. VPS extruxerat: radix disable, cum password ini, dockerd install, configurare ufw
  2. Testimonia pro servo et clientis generate docs.docker.com/engine/security/https/#create-a-ca servo-and-client-keys-with-openssl Admitte dockerd control per tcp nervum: remove -H fd:// optionem a navale config.
  3. Mandare vias ad libellos in docker.json
  4. Subcriptio in gitlab variabilium in CI/CD fundis cum contentis testimoniorum. Scribere scriptionem .gitlab-ci.yml pro instruere.

Exempla omnia in distributione Debiana ostendam.

Coepi VPS setup

Emit igitur exempli gratia at DOPrimum, quod debes facere, servo tuo ab infesto defendat extra mundum. Ego nihil probabo aut assero, Modo monstrabo logam /var/log/epistulae meae virtualis servi:

screenshotCD erigens per gitlab

Primum, install firewall ufw;

apt-get update && apt-get install ufw

Sit consilium defaltum: impedit omnes nexus ineuntes, omnes exitus permittunt nexus:

ufw default deny incoming
ufw default allow outgoing

Maximus: noli oblivisci permittere nexum per ssh:

ufw allow OpenSSH

Syntaxis generalis haec est: Concede nexum per portum: ufw admitte 12345, ubi est numerus portus vel nomen militiae 12345. Nega: ufw negant 12345 .

Firewall Turn in:

ufw enable

Eximus sessionem et iterum ini per ssh.

Usorem adde, tesseram ei tribue, et globo sudo adde eum.

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

Deinde, iuxta consilium, tesseram login disable debes. hoc facere, clavem ssh servo tuo effingo;

ssh-copy-id [email protected]

Servus ip tuus esse debet. Nunc conare aperi utens utente, quem antea creasti, tesseram inire non iam debes. Deinde in occasus configurationis, sequentia muta.

sudo nano /etc/ssh/sshd_config

login disable password:

PasswordAuthentication no

Sshd daemonem sileo:

sudo systemctl reload sshd

Nunc si te vel alius radicem usoris inire temptaverit, non laborabit.

Deinde, institue dockerd, processus hic non describemus, quoniam omnia iam mutata sunt, sequere nexum in rutrum et vade per gradus institutionis sclavorum in machina virtuali tua: https://docs.docker.com/install/linux/docker-ce/debian/

Testimonia generans

Ad reprimendum gregem daemonem remotius, nexus encryptatus TLS requiritur. Ad hoc faciendum, testimonium et clavem habere debes, quae generari et ad machinam remotam tuam transferri debet. Gradus sequere in instructiones de doliario officiali; https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Omnia generata *.pem lima pro servo, scilicet ca.pem, server.pem, key.pem, collocari debent in /etc/docker indicem in calculonis servi.

Occasus sursum dockerd

In docker daemon scripturam deducunt, optio -H df:// removemus, optio haec decernit qua hospes datrix daemon coerceri potest.

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

Deinde, lima unctiones creare, si iam non est, optiones specificare:

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

Necessitudines in portu sinamus 2376 ;

sudo ufw allow 2376

Sit scriptor sileo dockerd cum occasus novos:

sudo systemctl daemon-reload && sudo systemctl restart docker

Sit scriptor reprehendo:

sudo systemctl status docker

Si omnia "viridia" sunt, consideremus nos bene figuratum in calculonis servo.

Profecta est continua traditio in gitlab

Ut operarius Gitalaba praecepta in remoto Docker hospite exsequi possit, necesse est quomodo et ubi libellos condere et clavem connexionis cum Dockerd encrypto condere necesse est. Hanc problema solvi simpliciter addendo sequentia variabilium in occasus gitlbab:

Praedo titulumCD erigens per gitlab

Iustus output contenta libellorum et clavis per cat: cat ca.pem. Effingo quod crustulum in valores variabiles.

Scriptum scribemus pro instruere per GitLab. In-dopharius (dind) imago adhibebitur.

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

Contenta scriptorum instruere cum comment:

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

Praecipua quaestio erat "trahere" contenta libellorum in forma normali e gitlab CI/CD variabilium. Non potui instar sicco cur nexus ad exercitum remotum non fungitur. In exercitu aspexi stipem sudo journalctl -u docker, error in handshake erat. Quaere constitui quid in variabilibus generatim sit conditum, hoc facere potes, sic intueri potes: cat -A $DOCKER_CERT_PATH/key.pem. Errorem superavi addendo charactere sublato carpenti tr -d' r'.

Deinde addere potes munera post-remissionis ad scriptorem pro arbitrio tuo. Potes videre versionem operantes in repositio https://gitlab.com/isqad/gitlab-ci-cd

Source: www.habr.com