เจ—เจฟเจŸเจฒเฉˆเจฌ เจฐเจพเจนเฉ€เจ‚ เจธเฉ€เจกเฉ€ เจธเฉˆเจŸ เจ…เจช เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจตเจพเจฐ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจฒเจฟเจค เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจธเฉ‹เจšเจฟเจ†เฅค 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 เจฆเจฟเจ–เจพเจตเจพเจ‚เจ—เจพ:

เจธเจ•เฉเจฐเฉ€เจจเจธเจผเฉŒเจŸเจ—เจฟเจŸเจฒเฉˆเจฌ เจฐเจพเจนเฉ€เจ‚ เจธเฉ€เจกเฉ€ เจธเฉˆเจŸ เจ…เจช เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจชเจนเจฟเจฒเจพเจ‚, 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

เจนเฉเจฃ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจœเจพเจ‚ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจฐเฉ‚เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจตเจœเฉ‹เจ‚ เจฒเจพเจ—เจ‡เจจ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ…เฉฑเจ—เฉ‡, เจกเฉŒเจ•เจฐเจก เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹, เจฎเฉˆเจ‚ เจ‡เฉฑเจฅเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจตเจฐเจฃเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจญ เจ•เฉเจ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฌเจฆเจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจงเจฟเจ•เจพเจฐเจค เจตเฉˆเจฌเจธเจพเจˆเจŸ เจฆเฉ‡ เจฒเจฟเฉฐเจ• เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ†เจชเจฃเฉ€ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ 'เจคเฉ‡ เจกเฉŒเจ•เจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ‡ เจ•เจฆเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเฉ‹: 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

เจฎเฉเฉฑเจ– เจธเจฎเฉฑเจธเจฟเจ† เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจ—เจฟเจŸเจฒเฉˆเจฌ เจธเฉ€เจ†เจˆ/เจธเฉ€เจกเฉ€ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ†เจฎ เจฐเฉ‚เจช เจตเจฟเฉฑเจš "เจ–เจฟเฉฑเจšเจฃเจพ" เจธเฉ€เฅค เจฎเฉˆเจ‚ เจ‡เจน เจจเจนเฉ€เจ‚ เจธเจฎเจ เจธเจ•เจฟเจ† เจ•เจฟ เจฐเจฟเจฎเฉ‹เจŸ เจนเฉ‹เจธเจŸ เจจเจพเจฒ เจ•เจจเฉˆเจ•เจธเจผเจจ เจ•เจฟเจ‰เจ‚ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐ เจฐเจฟเจนเจพ เจธเฉ€เฅค เจนเฉ‹เจธเจŸ 'เจคเฉ‡ เจฎเฉˆเจ‚ เจฒเฉŒเจ— sudo journalctl -u docker เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฟเจ†, เจนเฉˆเจ‚เจกเจธเจผเฉ‡เจ• เจฆเฉŒเจฐเจพเจจ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจ†เจˆ เจธเฉ€เฅค เจฎเฉˆเจ‚ เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉ€ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ; เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹: cat -A $DOCKER_CERT_PATH/key.pem. เจฎเฉˆเจ‚ เจ•เฉˆเจฐเฉ‡เจœ เจ…เฉฑเจ–เจฐ tr -d 'r' เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃ เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจ•เฉ‡ เจ—เจฒเจคเฉ€ เจจเฉ‚เฉฐ เจฆเฉ‚เจฐ เจ•เฉ€เจคเจพเฅค

เจ…เฉฑเจ—เฉ‡, เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจฎเจฐเจœเจผเฉ€ เจจเจพเจฒ เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจฐเฉ€เจฒเฉ€เจœเจผ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฆเฉ‡ เจ•เจพเจฐเจœ เจธเจผเจพเจฎเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจคเฉเจธเฉ€เจ‚ เจฎเฉ‡เจฐเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ https://gitlab.com/isqad/gitlab-ci-cd

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹