рдЧрд┐рдЯрд▓реЕрдмрджреНрд╡рд╛рд░реЗ рд╕реАрдбреА рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдореА рдПрдХрджрд╛ рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреА рддреИрдирд╛рддреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛. gitlab.com рджрдпрд╛рд│реВрдкрдгреЗ рдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рд╕рд╛рдзрдиреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ рдореА рддреНрдпрд╛рдЪрд╛ рдлрд╛рдпрджрд╛ рдШреЗрдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реЗ, рддреЗ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗ рдЖрдгрд┐ рдПрдХ рдЫреЛрдЯреА рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рд▓реА. рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рдорд╛рдЭрд╛ рдЕрдиреБрднрд╡ рд╕рдореБрджрд╛рдпрд╛рд╢реА рд╢реЗрдЕрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ.

TL; рдбреЙ

  1. VPS рд╕реЗрдЯ рдХрд░рд╛: рд░реВрдЯ рдЕрдХреНрд╖рдо рдХрд░рд╛, рдкрд╛рд╕рд╡рд░реНрдбрд╕рд╣ рд▓реЙрдЧ рдЗрди рдХрд░рд╛, рдбреЙрдХрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛, ufw рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛
  2. рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рд╛ docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl tcp рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдбреЙрдХрд░реНрдб рдирд┐рдпрдВрддреНрд░рдг рд╕рдХреНрд╖рдо рдХрд░рд╛: рдбреЙрдХрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреВрди -H fd:// рдкрд░реНрдпрд╛рдп рдХрд╛рдврд╛.
  3. docker.json рдордзреНрдпреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╛рдареА рдкрде рдиреЛрдВрджрдгреА рдХрд░рд╛
  4. рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрд╕рд╣ CI/CD рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдЧрд┐рдЯрд▓реЕрдм рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рдиреЛрдВрджрдгреА рдХрд░рд╛. рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ .gitlab-ci.yml рд▓рд┐рд╣рд╛.

рдореА рдбреЗрдмрд┐рдпрди рд╡рд┐рддрд░рдгрд╛рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгреЗ рджрд╛рдЦрд╡рддреЛ.

рдкреНрд░рд╛рд░рдВрднрд┐рдХ VPS рд╕реЗрдЯрдЕрдк

рддрд░ рддреБрдореНрд╣реА рдпреЗрдереЗ рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдХрдд рдШреЗрддрд▓реЗ DO, рддреБрдореНрд╣рд╛рд▓рд╛ рдкрд╣рд┐рд▓реА рдЧреЛрд╖реНрдЯ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рддреА рдореНрд╣рдгрдЬреЗ рддреБрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдЖрдХреНрд░рдордХ рдмрд╛рд╣реЗрд░реАрд▓ рдЬрдЧрд╛рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдгреЗ. рдореА рдХрд╛рд╣реАрд╣реА рд╕рд┐рджреНрдз рдХрд░рдгрд╛рд░ рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рдард╛рдордкрдгреЗ рд╕рд╛рдВрдЧрдгрд╛рд░ рдирд╛рд╣реА, рдореА рдлрдХреНрдд рдорд╛рдЭреНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪреЗ рд▓реЙрдЧ /var/log/messages рджрд╛рдЦрд╡реАрди:

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдЧрд┐рдЯрд▓реЕрдмрджреНрд╡рд╛рд░реЗ рд╕реАрдбреА рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдкреНрд░рдердо, 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]

рд╕рд░реНрд╡реНрд╣рд░ рдЖрдпрдкреА рддреБрдордЪрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрддрд╛ рддреБрдореНрд╣реА рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╡рд╛рдкрд░реВрди рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛; рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдЯрд╛рдХрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдкреБрдвреЗ, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ, рдЦрд╛рд▓реАрд▓ рдмрджрд▓рд╛:

sudo nano /etc/ssh/sshd_config

рдкрд╛рд╕рд╡рд░реНрдб рд▓реЙрдЧрд┐рди рдЕрдХреНрд╖рдо рдХрд░рд╛:

PasswordAuthentication no

sshd рдбрд┐рдорди рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛:

sudo systemctl reload sshd

рдЖрддрд╛ рдЬрд░ рддреБрдореНрд╣реА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгреА рд░реВрдЯ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рддрд░ рддреЗ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.

рдкреБрдвреЗ, рдбреЙрдХрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛, рдореА рдпреЗрдереЗ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрдзреАрдЪ рдмрджрд▓рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЕрдзрд┐рдХреГрдд рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреНрдпрд╛ рджреБрд╡реНрдпрд╛рдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╡рд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЪрд░рдгрд╛рдВрд╡рд░ рдЬрд╛: https://docs.docker.com/install/linux/docker-ce/debian/

рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рддрдпрд╛рд░ рдХрд░рдгреЗ

рдбреЙрдХрд░ рдбрд┐рдорди рджреВрд░рд╕реНрдердкрдгреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб TLS рдХрдиреЗрдХреНрд╢рди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЖрдгрд┐ рдПрдХ рдХреА рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдЖрдкрд▓реНрдпрд╛ рд░рд┐рдореЛрдЯ рдорд╢реАрдирд╡рд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдЖрдгрд┐ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЕрдзрд┐рдХреГрдд рдбреЙрдХрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рд╕реВрдЪрдирд╛рдВрдордзреНрдпреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЪрд░рдгрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рд╕рд░реНрд╡ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ *.pem рдлрд╛рдЗрд▓реНрд╕, рдЬрд╕реЗ рдХреА ca.pem, server.pem, key.pem, рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ /etc/docker рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдареЗрд╡рд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд.

рдбреЙрдХрд░реНрдб рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдбреЙрдХрд░ рдбрд┐рдорди рд▓рд╛рдБрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ, рдЖрдореНрд╣реА -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

рдирд╡реАрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╕рд╣ рдбреЙрдХрд░реНрдб рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реВрдпрд╛:

sudo systemctl daemon-reload && sudo systemctl restart docker

рдЪрд▓рд╛ рддрдкрд╛рд╕реВрдпрд╛:

sudo systemctl status docker

рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА "рд╣рд┐рд░рд╡реЗ" рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЛ рдХреА рдЖрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдбреЙрдХрд░ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ.

gitlab рд╡рд░ рд╕рддрдд рдбрд┐рд▓рд┐рд╡реНрд╣рд░реА рд╕реЗрдЯ рдХрд░рдгреЗ

рд░рд┐рдореЛрдЯ рдбреЙрдХрд░ рд╣реЛрд╕реНрдЯрд╡рд░ рдЧрд┐рддрд╛рд▓рд╛рдмрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдбреЙрдХрд░реНрдбрд╕рд╣ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рдЖрдгрд┐ рдХреА рдХрд╢реА рдЖрдгрд┐ рдХреБрдареЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рд╛рдпрдЪреА рд╣реЗ рдард░рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореА gitlbab рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреАрд▓ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рдлрдХреНрдд рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреА рдЬреЛрдбреВрди рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реА:

рд╕реНрдкреЙрдпрд▓рд░ рд╢реАрд░реНрд╖рдХрдЧрд┐рдЯрд▓реЕрдмрджреНрд╡рд╛рд░реЗ рд╕реАрдбреА рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдлрдХреНрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреА рд╕рд╛рдордЧреНрд░реА рдЖрдгрд┐ рдорд╛рдВрдЬрд░реАрджреНрд╡рд╛рд░реЗ рдХреА рдЖрдЙрдЯрдкреБрдЯ рдХрд░рд╛: cat ca.pem. рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реНрд╣реЕрд▓реНрдпреВрдЬрдордзреНрдпреЗ рдХреЙрдкреА рдЖрдгрд┐ рдкреЗрд╕реНрдЯ рдХрд░рд╛.

GitLab рджреНрд╡рд╛рд░реЗ рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣реВ. рдбреЙрдХрд░-рдЗрди-рдбреЙрдХрд░ (рдбрд┐рдВрдб) рдкреНрд░рддрд┐рдорд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдИрд▓.

.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

рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯрдЪреА рд╕рд╛рдордЧреНрд░реА рдЧрд┐рдЯрд▓реЕрдм рд╕реАрдЖрдп/рд╕реАрдбреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреВрди рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдкрд╛рдд "рдкреБрд▓" рдХрд░рдгреЗ рд╣реА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА. рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдЪреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдХрд╛рдо рдХрд░рдд рдирд╛рд╣реА рд╣реЗ рдорд▓рд╛ рд╕рдордЬреВ рд╢рдХрд▓реЗ рдирд╛рд╣реА. рд╣реЛрд╕реНрдЯрд╡рд░ рдореА рд▓реЙрдЧ sudo journalctl -u рдбреЙрдХрд░ рдкрд╛рд╣рд┐рд▓рд╛, рд╣рдБрдбрд╢реЗрдХ рджрд░рдореНрдпрд╛рди рдПрдХ рддреНрд░реБрдЯреА рдЖрд▓реА. рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдХрд╛рдп рд╕рд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ рддреЗ рдкрд╛рд╣рдгреНрдпрд╛рдЪреЗ рдореА рдард░рд╡рд▓реЗ; рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдЕрд╕реЗ рджрд┐рд╕реВ рд╢рдХрддрд╛: cat -A $DOCKER_CERT_PATH/key.pem. рдореА рдХреЕрд░реЗрдЬ рд╡рд░реНрдг tr -d 'r' рдХрд╛рдвреВрди рдЯрд╛рдХреВрди рддреНрд░реБрдЯреАрд╡рд░ рдорд╛рдд рдХреЗрд▓реА.

рдкреБрдвреЗ, рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╡рд┐рд╡реЗрдХрдмреБрджреНрдзреАрдиреБрд╕рд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдкреЛрд╕реНрдЯ-рд░рд┐рд▓реАрдЭ рдХрд╛рд░реНрдпреЗ рдЬреЛрдбреВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА рдорд╛рдЭреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рдХрд╛рд░реНрдпрд░рдд рдЖрд╡реГрддреНрддреА рдкрд╛рд╣реВ рд╢рдХрддрд╛ https://gitlab.com/isqad/gitlab-ci-cd

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛