αααα»αααααΆαααα·αα’αααΈααΆαααΆαααααααΆααααααααααααααα»ααααααααααααααααα·α gitlab.com ααΌααααααα§αααααααΆααα’αααααααΆαααααα αΆααα α αΎαααΆααΆααα·αααΆαα αααα»αααΆααααααα
α
α·αααααααΎααΆααααααααααΆα
αα α αΎααααααααααααΈαααΆαααααααΆαααΌα
αα½αα αα
αααα»αα’αααααααα αααα»αα
ααααααααααα·ααααααααααααα»αααΆαα½ααα ααααα
TL; αα»α
- ααα‘αΎα VPSα αα·αααααΎαααΆα root, α αΌαααΆααααααααΆαα, ααα‘αΎα dockerd, ααααααα ααΆαααααααα ufw
- αααααΎααα·ααααΆαααααααααααΆαααααΆαααΈααα αα·ααααΆαααΈαααααα
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl ααΎαααΆαααααααααα dockerd ααΆαααααααα tcpα αααααααΎα -H fd:// α ααααΈ docker config α - αααααααααΌααα ααΆαααα·ααααΆαααααααα αααα»α docker.json
- α α»αααααααααα»αα’ααα gitlab αααα»αααΆαααααα CI/CD ααΆαα½αααΉαααααΉαααΆααααα·ααααΆααααααα αααααααααααΈα .gitlab-ci.yml αααααΆααααΆααα±ααααααΎααααΆααα
αααα»αααΉααααα αΆαα§ααΆα αααααΆααα’αααα ααΎααΆαα ααα αΆα Debian α
ααΆαααα‘αΎα VPS ααααΌα
αα
ααΈαααα’αααααΆααα·αα§ααΆα ααααα½ααα
ααΎ
ααΌαααα’αααααα
ααααΌαααα‘αΎα ufw firewallα
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 α
ααααααα’αααααααΎααααΆαα αααααααΆααααααααΆααα±ααααΆαα α αΎαααααααααΆαααα αααα»α sudo α
apt-get install sudo
adduser scoty
usermod -aG sudo scoty
αααααΆαααα αααααΆααααααα α’ααααα½ααααα·αααΆαα αΌαααΆααααααααΆααα ααΎααααΈααααΎααΌα αααα ααααααΌααα ssh ααααα’ααααα αααΆαααΈαααα
ssh-copy-id [email protected]
ip αααα server ααααΌαααααΆααααα’αααα α₯α‘αΌαβααααΆααΆαβα αΌαβαααααβα’αααβααααΎβαααβααΆαβαααααΎαβαα»α α’αααβαα·αβα αΆαααΆα αβαααα αΌαβααΆαααβαααααΆααβαααβααα αααααΆαααα αα αααα»αααΆαααααααα ααΆαααααααα ααΌαααααΆααααααΌαααΌα ααΆααααααα
sudo nano /etc/ssh/sshd_config
αα·αααΆαα αΌαααΆααααααααΆααα
PasswordAuthentication no
α αΆααααααΎααααα·α sshd α‘αΎααα·αα
sudo systemctl reload sshd
α₯α‘αΌαααα ααααα·αααΎα’ααα α¬ααααΆααααΆααααααΆααΆαα αΌαααΆ root ααΆααΉααααΆαααα
αααααΆαααα ααΎαααα‘αΎα dockerd αααα»αααΉααα·ααααααΆααα’αααΈααααΎαααΆααα
ααΈααααα αααααα’αααΈαα’αΆα
ααααΌαααΆαααααΆααααααΌααα½α
α αΎα ααΌαααααΎααΆαααααα
ααΆααααα αααααααααΌαααΆα α αΎαααααααΆααααα αΆαααααΆαααα‘αΎα docker αα
ααΎαααΆαααΈααα·αααα·αααααα’αααα
ααΆααααααΎααα·ααααΆαααααα
ααΎααααΈααααααααααααα·α docker ααΈα
ααααΆα ααΆααααααΆαα TLS αααααΆαα’αα·αααααΈαααΊααααΌαααΆαααΆαααΆαα ααΎααααΈααααΎααΌα
αααα α’αααααααΌαααΆααα·ααααΆαααααα αα·ααααααα’αααααααΌαααΆαααΎααααΈαααααΎα αα·αααααααα
αααΆαααΈαααΈα
ααααΆαααααα’αααα α’αα»ααααααΆαααα αΆααααααΆααααααα±αααααα»αααΆαααααΆααα
ααΎααα αααααααααΌαααΆααααα dockerα
ααΆαααα‘αΎα docker
αα αααα»αααααααΈα docker daemon startup αααααααΎα -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
}
α’αα»ααααΆαααΆααααααΆαααα ααΎα ααα 2376α
sudo ufw allow 2376
α αΆααααααΎα dockerd α‘αΎααα·αααΆαα½αααΉαααΆααααααααααΈα
sudo systemctl daemon-reload && sudo systemctl restart docker
ααααα·αα·αααα
sudo systemctl status docker
ααααα·αααΎα’αααΈαααΆααα’ααααΆαααααααα αααααΎααα·α αΆαααΆααΆααΎαααΆαααααααα ααΆαααααααα docker ααααααααααα ααΎαααΆαααΈαααα
αααα αααΆαα ααα αΆααααααα ααΎ gitlab
ααΎααααΈα±αααα»ααααα·α gitalab α’αΆα ααααα·ααααα·ααΆααααααααΆαα ααΎαααΆαααΈα docker ααΈα ααααΆα α’αααααααΌααααααα α α·αααααΈαααα αα·ααααααααααααααΌααααααΆαα»ααα·ααααΆαααααα αα·αααΌααααααααΆααααΆααααααΆαααααααΆαα’αα·αααααΈααα dockerd α αααα»αααΆααααααααΆααααα αΆααααααααααΆααααααααααα ααΆααα’ααααα αααα»αααΆαααααα gitlbabα
α
αααααΎα spoiler
ααααΆαααααααα
ααααααΉαααΆααααα·ααααΆαααααα αα·ααααααΉαααΆααααααααΆα 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
αααα αΆα ααααααΊ "ααΆαα αα" ααΆαα·ααΆαααα·ααααΆαααααααααα»αααααααααααααΆααΈα’ααα gitlab CI / CD α αααα»ααα·αα’αΆα αααααΆαααΆα ααα»α’αααΈααΆαααΆααΆαααααΆαααα αααΆαααΈαααΈα ααααΆααα·αααααΎαααΆαα αααα»αααΆααααα‘ααααΎα sudo journalctl -u docker log αα ααΎαααΆαααΈα ααΆαααα α»αααΆαα½αααΉαααΆαα αΆααααα αααα»αααΆααααααα α α·αααααααΎαα’αααΈαααααΆααΌαα ααααΌαααΆααααααΆαα»ααααα»αα’ααα αααααΆααααΆαααα α’αααα’αΆα ααΎαααααΆ -A $DOCKER_CERT_PATH/key.pemα ααααααααΎααα α»ααααααααααααΆααααα½α’αααα tr -d 'r' α ααα
ααΎαααΈααα α’αααα’αΆα
αααααααα·α
αα
ααΆααααααααΆαα
ααααααΆααα
ααααααΈαααΆαααΆαααααα
α
α·αααααααα’αααα α’αααα’αΆα
αα·αα·αααααΎαααααααααααα»αααααΎαααΆααα
αααα»αααααΆαααααααααα»α
ααααα: www.habr.com