рдЧрд┐рдЯрд▓реИрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдбреА рд╕реЗрдЯрдЕрдк

рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ред gitlab.com рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдФрд░ рдПрдХ рдЫреЛрдЯреА рддреИрдирд╛рддреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред

TL, рдбреЙ

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

рдореИрдВ рдбреЗрдмрд┐рдпрди рд╡рд┐рддрд░рдг рдкрд░ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡реАрдкреАрдПрд╕ рд╕реЗрдЯрдЕрдк

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

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдЧрд┐рдЯрд▓реИрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдбреА рд╕реЗрдЯрдЕрдк

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, ufw рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

apt-get update && apt-get install ufw

рдЖрдЗрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреАрддрд┐ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ: рд╕рднреА рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ, рд╕рднреА рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВ:

ufw default deny incoming
ufw default allow outgoing

рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рди рднреВрд▓реЗрдВ:

ufw allow OpenSSH

рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдкреЛрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ: ufw 12345 рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдЬрд╣рд╛рдВ 12345 рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдпрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рд╣реИред рдЗрдирдХрд╛рд░: рдпреВрдПрдлрдбрдмреНрд▓реНрдпреВ рдЗрдирдХрд╛рд░ 12345

рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдЪрд╛рд▓реВ рдХрд░реЗрдВ:

ufw enable

рд╣рдо рд╕рддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рдФрд░ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ, рдЙрд╕реЗ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдЙрд╕реЗ рд╕реВрдбреЛ рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

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/

рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдирд╛

рдбреЙрдХрд░ рдбреЗрдореЙрди рдХреЛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреАрдПрд▓рдПрд╕ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдХреЗ рдЖрдкрдХреА рд░рд┐рдореЛрдЯ рдорд╢реАрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ *.pem рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЕрд░реНрдерд╛рддреН ca.pem, рд╕рд░реНрд╡рд░.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

рдЖрдЗрдП рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде dockerd рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

sudo systemctl daemon-reload && sudo systemctl restart docker

рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИ:

sudo systemctl status docker

рдпрджрд┐ рд╕рдм рдХреБрдЫ "рд╣рд░рд╛" рд╣реИ, рддреЛ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЙрдХрд░ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

рдЧрд┐рдЯрд▓реИрдм рдкрд░ рдирд┐рд░рдВрддрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреА рд╕реНрдерд╛рдкрдирд╛

рдЧреАрддрд╛рд▓рдмрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреВрд░рд╕реНрде рдбреЙрдХрд░ рд╣реЛрд╕реНрдЯ рдкрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдбреЙрдХрд░рдб рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреБрдВрдЬреА рдХреЛ рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ 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 # ╤Б╨║╤А╨╕╨┐╤В ╨┤╨╡╨┐╨╗╨╛╤П ╤В╤Г╤В

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА:

рдмрд┐рди/рддреИрдирд╛рддреА.рд╢

#!/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

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

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ https://gitlab.com/isqad/gitlab-ci-cd

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ