áá»áœááºá¯ááºááẠáá»áœááºá¯ááºá ááá±á¬áá»ááºááᯠá¡ááá¯á¡áá»á±á¬áẠááŒáá·áºáá»ááºááẠá
ááºážá
á¬ážáá²á·áá°ážáááºá gitlab.com ááẠá€á¡áá¬á¡ááœáẠáááááá¬á¡á¬ážáá¯á¶ážááᯠááŒááºáá¬á
áœá¬ áá¶á·ááá¯ážáá±ážáá²á·ááŒá®ážá áá±áá»á¬áááºááŸá¬ áááºážááᯠá¡áá¯á¶ážáá»ááẠáá¯á¶ážááŒááºááá¯ááºááŒá®áž áá±ážáááºáá±á¬ ááŒáá·áºáá»ááºááŸá¯ script ááᯠáá±ážáá¬ážááẠáá¯á¶ážááŒááºáá²á·áááºá á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºáá¡ááœá±á·á¡ááŒá¯á¶ááᯠá¡ááá¯ááºážá¡ááá¯ááºážááŸáá·áº áá»áŸáá±áá«áááºá
TL; DR
- VPS á áá áºááá·áºááœááºážááŒááºáž- root ááá¯ááááºáá«á á áá¬ážááŸááºááŒáá·áºáááºáá±á¬ááºáá«á dockerd ááá¯ááá·áºááœááºážáá«á ufw ááá¯á á®á ááºáá«á
- áá¬áá¬ááŸáá·áº client á¡ááœáẠáááºááŸááºáá»á¬áž áááºáá®ážáá«á
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl tcp socket ááŸáá áºááá·áº dockerd ááááºážáá»á¯ááºááŸá¯ááᯠááœáá·áºáá«- -H fd:// option ááᯠdocker config á០áááºááŸá¬ážáá«á - docker.json ááœáẠáááºááŸááºáá»á¬ážááá¯á· áááºážááŒá±á¬ááºážáá»á¬áž ááŸááºáá¯á¶áááºáá«á
- áááºááŸááºáá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŒáá·áº CI/CD áááºáááºáá»á¬ážááœáẠgitlab variable áá»á¬ážááœáẠááŸááºáá¯á¶áááºáá«á ááŒáá·áºáá»ááºááŸá¯á¡ááœáẠ.gitlab-ci.yml áá¬ááºááœáŸááºážáá±ážáá«á
Debian ááŒáá·áºááŒá°ážááŸá¯ááœáẠááá°áá¬á¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááŒáá«áááºá
áááŠáž VPS á áá áºááá·áºááœááºážááŸá¯
áá®áá±á¬á· á¥ááᬠáá¬áááá
áºáá¯ááᯠáááºáááºááá¯ááºáááºá
á
ááááºáá¯á¶
ááááŠážá
áœá¬ ufw firewall ááᯠinstall áá¯ááºáá«á
apt-get update && apt-get install ufw
áá°áááºážáá°áá«áááᯠááœáá·áºááŒáá«á áá¯á·- á¡áááºáá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠááááºááá¯á·áá«á á¡ááœááºáá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠááœáá·áºááŒá¯áá«-
ufw default deny incoming
ufw default allow outgoing
á¡áá±ážááŒá®ážáááº- ssh ááŸáá áºááá·áº áá»áááºáááºááŸá¯ááᯠááœáá·áºááŒá¯ááẠááá±á·áá«ááŸáá·áºá
ufw allow OpenSSH
áá±áá°áá»á¡áá¬ážá¡ááá¯ááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºáááº- ááááºáááºážá¡ááá¯áẠáá»áááºáááºááŸá¯ááᯠááœáá·áºááŒá¯áá«- ufw ááœáá·áºááŒá¯ 12345á 12345 ááẠááááºáááºážáá¶áá«áẠááá¯á·ááá¯áẠáááºáá±á¬ááºááŸá¯áá¡áááºááŒá áºáááºá Deny: ufw deny 12345
Firewall ááá¯ááœáá·áºáá«-
ufw enable
áá»áœááºá¯ááºááá¯á·ááẠá ááºááŸááºááŸááœááºááŒá®áž ssh ááŸáá áºááá·áº áááºáá¶áááºáá±á¬ááºáá«áááºá
á¡áá¯á¶ážááŒá¯áá°áá áºáŠážááá¯ááá·áºáá«á áá°á·á¡á¬áž á áá¬ážááŸááºáá áºáá¯áááºááŸááºáá±ážááŒá®áž sudo á¡ááœá²á·ááá¯á·ááá·áºáá«á
apt-get install sudo
adduser scoty
usermod -aG sudo scoty
ááá¯á·áá±á¬áẠá¡á á®á¡á ááºá¡áá áááºááẠá áá¬ážááŸááºáááºáá±á¬ááºááŒááºážááᯠááááºááá·áºáááºá áá®ááá¯áá¯ááºááá¯á·á ááá·áº ssh áá±á¬á·ááᯠáá¬áá¬ááá¯á· áá°ážáá°áá«-
ssh-copy-id [email protected]
áá¬áᬠip ááẠááá·áºá¡ááœááºááŒá áºááááºá ááᯠááẠá¡á á±á¬ááá¯ááºážá áááºáá®ážáá¬ážááá·áº á¡áá¯á¶ážááŒá¯áá°ááᯠá¡áá¯á¶ážááŒá¯á áá±á¬á·ááºá¡ááºáááºááẠááŒáá¯ážá á¬ážáá«á áááºááẠá áá¬ážááŸááºááá·áºááẠáááá¯á¡ááºáá±á¬á·áá«á ááá¯á·áá±á¬ááºá ááœá²á·á ááºážááŸá¯áááºáááºáá»á¬ážááœáẠá¡á±á¬ááºáá«ááá¯á·ááᯠááŒá±á¬ááºážáá²áá«á
sudo nano /etc/ssh/sshd_config
á áá¬ážááŸááºáááºáá±á¬ááºááŒááºážááá¯ááááºáá«
PasswordAuthentication no
sshd daemon ááᯠááŒááºáááºá áááºáá«á
sudo systemctl reload sshd
ááᯠááẠááá¯á·ááá¯áẠá¡ááŒá¬ážáá áºáŠážáŠážááẠá¡ááŒá áºá¡áá¯á¶ážááŒá¯áá°á¡ááŒá Ạáá±á¬á·ááºá¡ááºáááºááẠááŒáá¯ážá á¬ážáá«áá áááºážááẠá¡áá¯ááºáááŒá áºáá«á
ááá¯á·áá±á¬ááºá dockerd ááá¯ááá·áºááœááºážáá«á á¡áá¬á¡á¬ážáá¯á¶ážááá¯ááŒá±á¬ááºážáá²ááá¯ááºáá±ááŒá®ááŒá
áºáá±á¬ááŒá±á¬áá·áºá á€áá±áá¬ááœáẠdockerd ááá¯ááá·áºááœááºážáá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áºá¡áá¬á¡á¬ážáá¯á¶ážáááºááá¬ážáááºáááºááá¯ááºááá¯á·ááá·áºááºááá¯ááá¯ááºáá¬ááŒá®ážáááºá virtual machine ááœáẠdocker ááá¯ááá·áºááœááºážááŒááºážáá¡ááá·áºáá»á¬ážá¡ááá¯ááºážááœá¬ážáá«-
áááºááŸááºáá»á¬ážáá¯ááºáá±ážááŒááºážá
docker daemon ááᯠá¡áá±ážá០ááááºážáá»á¯ááºáááºá áá¯ááºááŸááºáá¬ážáá±á¬ TLS áá»áááºáááºááŸá¯ ááá¯á¡ááºáá«áááºá áááºážááá¯áá¯ááºáá±á¬ááºáááºá áááºáá¡áá±ážááááºážá
ááºááá¯á· áá¯ááºáá¯ááºááŒá®áž ááœáŸá²ááŒá±á¬ááºážáá±ážáááá·áº áááºááŸááºááŸáá·áº áá±á¬á·áá
áºáá¯ááŸáááẠááá¯á¡ááºáááºá ááá¬ážááẠdocker áááºááá¯ááºááŸá ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááœáẠáá±á¬áºááŒáá¬ážááá·áº á¡ááá·áºáá»á¬ážááᯠááá¯ááºáá¬áá«-
dockerd ááᯠá áá áºááá·áºááœááºážááŒááºážá
docker daemon launch script ááœááºá áá»áœááºá¯ááºááá¯á·ááẠ-H df:// ááœá±ážáá»ááºááŸá¯ááᯠáááºááŸá¬ážááŒá®ážá á€ááœá±ážáá»ááºááŸá¯ááẠáááºááá·áº host ááᯠdocker daemon ááááºážáá»á¯ááºááá¯ááºáááºááᯠáá¯á¶ážááŒááºáááºá
# 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
}
port 2376 ááœáẠáá»áááºáááºááŸá¯áá»á¬ážááᯠááœáá·áºááŒá¯ááŒáá«á áá¯á·á
sudo ufw allow 2376
áááºáááºá¡áá áºáá»á¬ážááŒáá·áº dockerd ááᯠááŒááºáááºá áááºááŒáá«á áá¯á·á
sudo systemctl daemon-reload && sudo systemctl restart docker
á á áºáá±ážááŒáá·áºáá¡á±á¬ááº-
sudo systemctl status docker
á¡áá¬á¡á¬ážáá¯á¶áž "á¡á áááºážáá±á¬ááº" ááŒá áºáá«áá áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬áá±á«áºááœáẠdocker ááᯠá¡á±á¬ááºááŒááºá áœá¬ configure áá¯ááºááá¯ááºááŒá®áᯠáá»áœááºá¯ááºááá¯á·áá°ááá«áááºá
gitlab ááœáẠá ááºáááºáááŒáẠáá±ážááá¯á·ááŒááºážááᯠá áá áºááá·áºááœááºážááŒááºážá
Gitalaba áá¯ááºáá¬ážááẠá¡áá±ážááááºáž Docker host ááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áááºá¡ááœáẠDockerd ááŸáá·áº áá¯ááºááŸááºáá¬ážáá±á¬ áá»áááºáááºááŸá¯á¡ááœáẠáááºááŸááºáá»á¬ážááŸáá·áº áá±á¬á·ááᯠáááºááá¯á·ááááºážáááºážááááºááᯠáá¯á¶ážááŒááºááẠááá¯á¡ááºáá«áááºá gitlbab áááºáááºáá»á¬ážááŸá ááááºážááŸááºáá»á¬ážááá¯á· á¡á±á¬ááºáá«ááá¯á·ááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯ááºáá²á·áá«áááºá
Spoiler áá±á«ááºážá
ááº
áááºááŸááºáá»á¬ážááŸáá·áº áá±á¬á·áá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠcat ááŸáá
áºááá·áº áá¯ááºááá¯ááºáá¯á¶áá¬á cat ca.pem
. ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬áááºááá¯ážáá»á¬ážáá²ááá¯á· áá°ážáá°ááŒá®áž áá°ážááá·áºáá«á
GitLab ááŸáááá·áº deployment á¡ááœáẠscript áá áºáá¯áá±ážááá¯ááºáá¡á±á¬ááºá 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 # ÑкÑÐžÐ¿Ñ ÐŽÐµÐ¿Ð»ÐŸÑ ÑÑÑ
ááŸááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° ááŒáá·áºáá»ááºáá¬ážáá±á¬ script á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž-
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 variable áá»á¬ážá០áá¯á¶ááŸááºáá¯á¶á á¶ááŒáá·áº áááºááŸááºáá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠ"ááœá²" áááºááŒá áºáááºá á¡áá±ážááááºážáá¬áááá¯á· áá»áááºáááºááŸá¯ áá¬á·ááŒá±á¬áá·áº á¡áá¯ááºááá¯ááºáááºááᯠáá»áœááºáá±á¬áº á¡ááŒá±ááŸá¬áááá«á áááºáá¶áá°ááœáẠáá»áœááºá¯ááºááẠlog sudo journalctl -u docker ááá¯ááŒáá·áºááá¯ááºáááºá áááºááœá²á ááºááœáẠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááŸááá±áááºá ááááºážááŸááºáá»á¬ážááœáẠáá±áá¯áá»á¡á¬ážááŒáá·áº ááááºážáááºážáá¬ážáááºááᯠááŒáá·áºááŸá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá áááºážááᯠááŒá¯áá¯ááºáááºá áááºááẠá€áá²á·ááá¯á· ááŒáá·áºááá¯ááºáááº- cat -A $DOCKER_CERT_PATH/key.pemá ááá¬ážá¡áá¹ááᬠtr -d 'r' ááᯠáááºááŸá¬ážááŒááºážááŒáá·áº á¡ááŸá¬ážááᯠáá»á±á¬áºááœáŸá¬ážááá¯ááºáá²á·áááºá
ááá¯á·áá±á¬ááºá áááºááẠááá·áºáá¯á¶ážááŒááºáá»ááºá¡ááá¯ááºáž áá¬ááºááœáŸááºážááá¯á· áá¯ááºáá±ááŒá®ážáá±á¬áẠáá¯ááºáá±á¬ááºá
áá¬áá»á¬ážááᯠááá·áºááá¯ááºáááºá áá»áœááºá¯ááºáááá¯ááŸá±á¬ááºááŸá¯ááœáẠá¡áá¯ááºáá¯ááºáá±á¬áá¬ážááŸááºážááᯠáááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
source: www.habr.com