Gitlab рдорд╛рд░реНрдлрдд рд╕реАрдбреА рд╕реЗрдЯрдЕрдк

рдореИрд▓реЗ рдПрдХ рдкрдЯрдХ рдореЗрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╕реЛрдЪреЗрдВред 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 рдЪрд░рд╣рд░реВрдорд╛ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдХреЛ рд▓рд╛рдЧрд┐ .gitlab-ci.yml рд▓рд┐рдкрд┐ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред

рдо рдбреЗрдмрд┐рдпрди рд╡рд┐рддрд░рдгрдорд╛ рд╕рдмреИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБред

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

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

рд╕реНрдХреНрд░реАрдирд╢рдЯGitlab рдорд╛рд░реНрдлрдд рд╕реАрдбреА рд╕реЗрдЯрдЕрдк

рдкрд╣рд┐рд▓реЗ, 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 рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЪрд░рд╣рд░реВрдорд╛ рд▓реЗрдЦреЗрд░ рд╕рдорд╛рдзрд╛рди рдЧрд░реЗрдВ:

рдмрд┐рдЧрд╛рд░реНрди рд╢реАрд░реНрд╖рдХGitlab рдорд╛рд░реНрдлрдд рд╕реАрдбреА рд╕реЗрдЯрдЕрдк

рдмрд┐рд░рд╛рд▓реЛ рдорд╛рд░реНрдлрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд░ рдХреБрдЮреНрдЬреАрдХреЛ рд╕рд╛рдордЧреНрд░реА рдорд╛рддреНрд░ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН: 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' рд╣рдЯрд╛рдПрд░ рддреНрд░реБрдЯрд┐рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпрд╕рдмрд╛рд╣реЗрдХ, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рд╡рд┐рд╡реЗрдХрдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдкреЛрд╕реНрдЯ-рд░рд┐рд▓реАрдЬ рдХрд╛рд░реНрдпрд╣рд░реВ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВ рдореЗрд░реЛ рднрдгреНрдбрд╛рд░рдорд╛ рдХрд╛рдо рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ https://gitlab.com/isqad/gitlab-ci-cd

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди