เช—เชฟเชŸเชฒเซ‡เชฌ เชฆเซเชตเชพเชฐเชพ เชธเซ€เชกเซ€ เชธเซ‡เชŸเช…เชช

เชฎเซ‡เช‚ เชเช•เชตเชพเชฐ เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชœเชฎเชพเชตเชŸเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚. gitlab.com เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช† เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชธเชพเชงเชจเซ‹ เชชเซ‚เชฐเชพ เชชเชพเชกเซ‡ เช›เซ‡, เช…เชจเซ‡ เช…เชฒเชฌเชคเซเชค เชฎเซ‡เช‚ เชคเซ‡เชจเซ‹ เชฒเชพเชญ เชฒเซ‡เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชคเซ‡เชจเซ‡ เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชเช• เชจเชพเชจเซ€ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฒเช–เซ€ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชธเชฎเซเชฆเชพเชฏ เชธเชพเชฅเซ‡ เชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เชถเซ‡เชฐ เช•เชฐเซเช‚ เช›เซเช‚.

TL; DR

  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 เชฆเซเชตเชพเชฐเชพ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เช— เช‡เชจ เช•เชฐเซ€เช เช›เซ€เช.

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช‰เชฎเซ‡เชฐเซ‹, เชคเซ‡เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก เชธเซ‹เช‚เชชเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชกเซ‹ เชœเซ‚เชฅเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹.

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

เชœเซ‹ เชฌเชงเซเช‚ "เชฒเซ€เชฒเซเช‚" เช›เซ‡, เชคเซ‹ เช…เชฎเซ‡ เชฎเชพเชจเซ€เช เช›เซ€เช เช•เซ‡ เช…เชฎเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชกเซ‹เช•เชฐเชจเซ‡ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เช—เซ‹เช เชตเซเชฏเซเช‚ เช›เซ‡.

เช—เชฟเชŸเชฒเซ‡เชฌ เชชเชฐ เชธเชคเชค เชกเชฟเชฒเชฟเชตเชฐเซ€ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช—เซ€เชคเชพเชฒเชพเชฌเชพ เช•เชพเชฐเซเชฏเช•เชฐ เชฐเซ€เชฎเซ‹เชŸ เชกเซ‹เช•เชฐ เชนเซ‹เชธเซเชŸ เชชเชฐ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เชกเซ‹เช•เชฐเซเชก เชธเชพเชฅเซ‡ เชเชจเซเช•เซเชฐเชฟเชชเซเชŸเซ‡เชก เช•เชจเซ‡เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เช…เชจเซ‡ เช•เซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชจเซ‡ เช•เซเชฏเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเซ€ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชฎเซ‡เช‚ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ 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

เชฎเซเช–เซเชฏ เชธเชฎเชธเซเชฏเชพ เช—เชฟเชŸเชฒเซ‡เชฌ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹