ΠΠ΅Π΄Π½ΡΠΆ ΠΌΠΈΡΠ»Π΅Ρ
Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ. gitlab.com Π»ΡΠ±Π΅Π·Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠΈΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΈ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ΅ΡΠΈΡ
Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ, ΠΊΠ°ΡΠΎ Π³ΠΎ ΡΠ°Π·Π±ΡΠ°Ρ
ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ
ΠΌΠ°Π»ΡΠΊ ΡΠΊΡΠΈΠΏΡ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠΏΠΎΠ΄Π΅Π»ΡΠΌ ΠΎΠΏΠΈΡΠ° ΡΠΈ Ρ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°.
TL; DR
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ VPS: Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ root, Π²Π»ΠΈΠ·Π°Π½Π΅ Ρ ΠΏΠ°ΡΠΎΠ»Π°, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ dockerd, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ ufw
- ΠΠ΅Π½Π΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π·Π° ΡΡΡΠ²ΡΡ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΡΡΠ΅Π· tcp ΡΠΎΠΊΠ΅Ρ: ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° -H fd:// ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ΅Ρ. - ΠΠ°Π΄Π°ΠΉΡΠ΅ ΠΏΡΡΠΈΡΠ° ΠΊΡΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π² docker.json
- Π Π΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° gitlab Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° CI / CD ΡΡΡ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ .gitlab-ci.yml ΡΠΊΡΠΈΠΏΡ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
Π©Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° Π½Π° Debian.
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° VPS
Π’ΡΠΊ ΡΡΠ΅ Π·Π°ΠΊΡΠΏΠΈΠ»ΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°
ΡΠ½ΠΈΠΌΠΊΠΈ
ΠΡΡΠ²ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Π·Π°ΡΠΈΡΠ½Π°ΡΠ° ΡΡΠ΅Π½Π° ufw:
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 Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π΅ Π²Π°Ρ. Π‘Π΅Π³Π° ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° Π²Π»Π΅Π·Π΅ΡΠ΅ ΠΏΠΎΠ΄ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°ΡΠ΅ ΠΏΠ°ΡΠΎΠ»Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
sudo nano /etc/ssh/sshd_config
Π·Π°Π±ΡΠ°Π½Π΅ΡΠ΅ Π²Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Ρ ΠΏΠ°ΡΠΎΠ»Π°:
PasswordAuthentication no
Π Π΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ sshd Π΄Π΅ΠΌΠΎΠ½Π°:
sudo systemctl reload sshd
Π‘Π΅Π³Π°, Π°ΠΊΠΎ Π²ΠΈΠ΅ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠΉ Π΄ΡΡΠ³ ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π΄Π° Π²Π»Π΅Π·Π΅ ΠΊΠ°ΡΠΎ root, ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ dockerd, Π½ΡΠΌΠ° Π΄Π° ΠΎΠΏΠΈΡΠ²Π°ΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° ΡΡΠΊ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΎ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΎ, ΡΠ»Π΅Π΄Π²Π°ΠΉΡΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ΅Π±ΡΠ°ΠΉΡ ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΏΡΠ΅Π· ΡΡΡΠΏΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° docker Π½Π° Π²Π°ΡΠ°ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°:
ΠΠ΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
ΠΠ° Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΡΠΈΡΡΠΎΠ²Π°Π½Π° TLS Π²ΡΡΠ·ΠΊΠ°. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈ ΠΊΠ»ΡΡ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΠΈΡΠ΅ Π½Π° Π²Π°ΡΠ°ΡΠ° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π°. Π‘Π»Π΅Π΄Π²Π°ΠΉΡΠ΅ ΡΡΡΠΏΠΊΠΈΡΠ΅, Π΄Π°Π΄Π΅Π½ΠΈ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ΅Π±ΡΠ°ΠΉΡ Π½Π° Π΄ΠΎΠΊΠ΅Ρ:
Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π΄ΠΎΠΊΠ΅Ρ
Π ΡΠΊΡΠΈΠΏΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° -H df://, ΡΠ°Π·ΠΈ ΠΎΠΏΡΠΈΡ ΠΊΠ°Π·Π²Π° Π½Π° ΠΊΠΎΠΉ Ρ ΠΎΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡ.
# 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
ΠΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π·Π΅Π»Π΅Π½ΠΎ, ΡΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ Π΄ΠΎΠΊΠ΅Ρ Π½Π° ΡΡΡΠ²ΡΡΠ°.
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° gitlab
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΡΡ Π½Π° gitalab Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Π΄ΠΎΠΊΠ΅Ρ Ρ ΠΎΡΡ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΊΡΠ΄Π΅ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΈ ΠΊΠ»ΡΡ Π·Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Π΄ΠΎΠΊΠ΅Ρ. Π Π΅ΡΠΈΡ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° gitlbab:
ΡΠΏΠΎΠΉΠ»Π΅Ρ Π·Π°Π³Π»Π°Π²ΠΈΠ΅
ΠΡΠΎΡΡΠΎ ΠΈΠ·Π²Π΅Π΄Π΅ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈ ΠΊΠ»ΡΡΠ° ΡΡΠ΅Π· cat: cat ca.pem
. ΠΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
ΠΠ΅ΠΊΠ° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΡΠ΅Π· gitlab. Π©Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄ΠΎΠΊΠ΅Ρ Π² Π΄ΠΎΠΊΠ΅Ρ (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 Π΄ΠΎΠΊΠ΅Ρ Π½Π° Ρ ΠΎΡΡΠ°, ΠΈΠΌΠ° Π³ΡΠ΅ΡΠΊΠ° Ρ ΡΡΠΊΠΎΡΡΠΈΡΠΊΠ°Π½Π΅ΡΠΎ. Π Π΅ΡΠΈΡ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π·Π° ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ cat -A $DOCKER_CERT_PATH/key.pem. ΠΡΠ΅ΠΎΠ΄ΠΎΠ»ΡΡ ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ°ΡΠ΅ΡΠ½ΠΈΡ Π·Π½Π°ΠΊ tr -d 'r'.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ»Π΅Π΄ ΠΏΡΡΠΊΠ°Π½Π΅ ΠΊΡΠΌ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΠΎ ΡΠ²ΠΎΠ΅ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π² ΠΌΠΎΠ΅ΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com