āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻŋāĻĄāĻŋ āĻ¸ā§‡āĻŸāĻ†āĻĒ

āĻ†āĻŽāĻŋ āĻāĻ•āĻŦāĻžāĻ° āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻžāĻ° āĻ•āĻĨāĻž āĻ­ā§‡āĻŦā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ 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 āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻŦāĻžāĻ° āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°āĻŋāĨ¤

āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨, āĻ¤āĻžāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ•ā§‡ āĻ¸ā§āĻĄā§‹ āĻ—ā§āĻ°ā§āĻĒā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨āĨ¤

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

āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ "āĻ¸āĻŦā§āĻœ" āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĄāĻ•āĻžāĻ° āĻ¸āĻĢāĻ˛āĻ­āĻžāĻŦā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻĄā§‡āĻ˛āĻŋāĻ­āĻžāĻ°āĻŋ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ—ā§€āĻ¤āĻžāĻ˛āĻžāĻŦāĻž āĻ•āĻ°ā§āĻŽā§€ āĻ¯āĻžāĻ¤ā§‡ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĄāĻ•āĻžāĻ° āĻšā§‹āĻ¸ā§āĻŸā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻ•āĻžāĻ°ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻ¸āĻ‚āĻ¯ā§‹āĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻāĻŦāĻ‚ āĻ•ā§€ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻŦāĻ‚ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ†āĻŽāĻŋ āĻ—āĻŋāĻŸāĻ˛āĻŦā§āĻ¯āĻžāĻŦ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ā§‡ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ:

āĻ¸ā§āĻĒāĻ¯āĻŧāĻ˛āĻžāĻ° āĻļāĻŋāĻ°ā§‹āĻ¨āĻžāĻŽāĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻŋāĻĄāĻŋ āĻ¸ā§‡āĻŸāĻ†āĻĒ

āĻŦāĻŋāĻĄāĻŧāĻžāĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻāĻŦāĻ‚ āĻ•ā§€ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•āĻ°ā§āĻ¨: 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨