āĻāĻ•āϟāĻŋ āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āĻšā§‡āχāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻžāϜ āĻ•āϰāĻž

āφāĻŽāĻŋ 90 āĻāϰ āĻĻāĻļāϕ⧇āϰ āĻļ⧇āώ⧇āϰ āĻĻāĻŋāϕ⧇ āφāĻŽāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āϞāĻŋāϖ⧇āĻ›āĻŋāϞāĻžāĻŽāĨ¤ āϤāĻ–āύ āϤāĻžāĻĻ⧇āϰ āĻ•āĻžāĻœā§‡āϰ āĻ•ā§āϰāĻŽā§‡ āϰāĻžāĻ–āĻž āϖ⧁āĻŦ āϏāĻšāϜ āĻ›āĻŋāϞāĨ¤ āĻ•āĻŋāϛ⧁ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ āĻāĻ•āϟāĻŋ Apache āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ›āĻŋāϞ, āφāĻĒāύāĻŋ FTP āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāχ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϞāĻ— āχāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁ āϞāĻŋāϖ⧇ ftp://ftp.example.com. āϤāĻžāϰāĻĒāϰ⧇ āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϏāĻŽāϝāĻŧ āĻ›āĻŋāϞ, āĻāĻ–āύāĻ•āĻžāϰ āĻšā§‡āϝāĻŧ⧇ āϤāĻ–āύ āϏāĻŦāĻ•āĻŋāϛ⧁ āϏāĻšāϜ āĻ›āĻŋāϞāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āĻšā§‡āχāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻžāϜ āĻ•āϰāĻž

āϤāĻžāϰāĻĒāϰ āĻĨ⧇āϕ⧇ āĻĻ⧁āχ āĻĻāĻļāϕ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ…āύ⧇āĻ• āĻŦāĻĻāϞ⧇ āϗ⧇āϛ⧇āĨ¤ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟāϗ⧁āϞāĻŋ āφāϰāĻ“ āϜāϟāĻŋāϞ āĻšāϝāĻŧ⧇ āωāϠ⧇āϛ⧇; āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻŽā§āĻ•ā§āϤāĻŋ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇⧎ āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ⧇āϰ āĻĒāĻŋāĻ›āύ⧇ āϚāϞāĻŽāĻžāύ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϏāĻžāϧāĻžāϰāĻŖ āĻšāϝāĻŧ⧇ āĻ“āϠ⧇āĨ¤

āφāĻŽāĻžāϰ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻ›āĻŋāϞāĨ¤ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āϜāĻžāύāϤāĻžāĻŽ āϝ⧇ āφāĻŽāĻžāϰ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ āϏāĻžāχāϟāϟāĻŋāϕ⧇ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ: āĻāĻ•āϟāĻŋ āĻļāĻžāĻ–āĻžāϝāĻŧ āϕ⧋āĻĄ āϞ⧇āĻ–āĻž master āĻ—āĻŋāϟāĻšāĻžāĻŦ⧇āĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āφāĻŽāĻŋ āϜāĻžāύāϤāĻžāĻŽ āϝ⧇ āφāĻŽāĻžāϰ āϛ⧋āϟ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āϚāĻžāχāύāĻŋ, āĻŦāĻž āĻĄāĻ•āĻžāϰ āϏ⧋āϝāĻŧāĻžāĻ°ā§āĻŽ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāύāĻŋ, āĻŦāĻž āĻĒāĻĄ, āĻāĻœā§‡āĻ¨ā§āϟ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϤ āϧāϰāϪ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻŦāĻšāϰ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āϤ⧇ āϚāĻžāχāύāĻŋāĨ¤ āϜāϟāĻŋāϞāϤāĻž āĻ•āĻžāϜ āϝāϤāϟāĻž āϏāĻŽā§āĻ­āĻŦ āϏāĻšāϜ āĻ•āϰāĻžāϰ āϞāĻ•ā§āĻˇā§āϝ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻžāϕ⧇ CI/CD āĻāϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤

āφāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĨāĻžāϕ⧇ (āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻāĻ•āϟāĻŋ Node.js āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ) āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āϜāĻžāύāϤ⧇ āϚāĻžāύ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āϰāĻž āϝāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϤ⧇ āϝāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āφāϛ⧇ āϤāĻž āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āϝāĻž āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻŽāĻŋ āφāĻĒāύāĻŋ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇ āφāĻ—ā§āϰāĻšā§€ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻŽāύ⧇ āĻšāϝāĻŧ.

āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āϤ

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋāϰ āĻĒāĻžāĻ āϕ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāĻļ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϞ⧇āĻ–āĻžāϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āϧāĻžāϰāĻŖāĻž āϰāϝāĻŧ⧇āϛ⧇ āĻŦāϞ⧇ āφāĻļāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āϤāĻžāϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ и āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ.

āĻ—ā§‹āϞ

āφāĻŽāĻŋ āĻŦāϞāĻŦ āύāĻž āϝ⧇ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋāϕ⧇ āύāĻŋāσāĻļāĻ°ā§āϤāĻ­āĻžāĻŦ⧇ "āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞ" āĻŦāϞāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻŋ āφāϰāĻ“ āĻāĻ•āϟāĻŋ āύāĻĨāĻŋ āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāĻŋ āϝāĻž āĻļāĻŋāϖ⧇āĻ›āĻŋ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒāĻžāϏ⧇ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻŋāĨ¤

āĻāχ āφāĻŽāĻžāϰ āĻ•āĻ°ā§āĻŽāĻĒā§āϰāĻŦāĻžāĻš āĻšāĻšā§āϛ⧇ āĻ•āĻŋ āĻļ⧇āώ.

āĻŦā§āϝāϤ⧀āϤ āϝ⧇āϕ⧋āύ⧋ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻļāĻžāĻ–āĻžāϝāĻŧ āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ master, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻ°ā§āĻŽ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧ:

  • āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ-āĻāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻļ⧁āϰ⧁ āĻšāϝāĻŧāĨ¤
  • āϏāĻŽāĻ¸ā§āϤ āχāωāύāĻŋāϟ, āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻāĻŦāĻ‚ āĻļ⧇āώ āĻĨ⧇āϕ⧇ āĻļ⧇āώ āĻĒāϰ⧀āĻ•ā§āώāĻž āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧāĨ¤

āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϝ⧇ āϕ⧋āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻĄāĻŧ⧇ āϤāĻžāϰ āϜāĻ¨ā§āϝ master, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧ:

  • āωāĻĒāϰ⧇ āωāĻ˛ā§āϞāĻŋāĻ–āĻŋāϤ āϏāĻŦāĻ•āĻŋāϛ⧁, āĻĒā§āϞāĻžāϏ...
  • āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϕ⧋āĻĄ, āϏ⧇āϟāĻŋāĻ‚āϏ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāĨ¤
  • āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āĻ›āĻŦāĻŋāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤
  • āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ—āĨ¤
  • āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤
  • āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϧāĻžāϰāĻ• āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻāĻŦāĻ‚ āύāϤ⧁āύ āĻ›āĻŦāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĄāĻ•āĻžāϰ, āϚāĻŋāĻ¤ā§āϰ āĻāĻŦāĻ‚ āĻĒāĻžāĻ¤ā§āϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāϕ⧇āĻŦāĻžāϰ⧇ āĻ•āĻŋāϛ⧁āχ āύāĻž āϜāĻžāύ⧇āύ āϤāĻŦ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϏāĻŦ āĻŦāϞāĻŦāĨ¤

CI/CD āĻ•āĻŋ?

āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϰ⧂āĻĒ CI/CD-āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ "āĻ…āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻāϕ⧀āĻ•āϰāĻŖ/āύāĻŋāϰāĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāĨ¤"

▍ āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻāϕ⧀āĻ•āϰāĻŖ

āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻšāϞ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϝ⧇āĻ–āĻžāύ⧇ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϰāĻž āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻŽā§‚āϞ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻĻ⧇āϝāĻŧ (āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ āĻļāĻžāĻ–āĻž master) āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇, āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϕ⧋āĻĄā§‡āϰ āϗ⧁āĻŖāĻŽāĻžāύ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

▍ āĻ…āĻŦāĻŋāϰāĻžāĻŽ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž

āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻšāϞ āϘāύ āϘāύ, āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϕ⧋āĻĄ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύāĨ¤ CI/CD āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϰ⧂āĻĒ⧇āϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻ…āĻ‚āĻļāϕ⧇ āĻ•āĻ–āύāĻ“ āĻ•āĻ–āύāĻ“ "āĻ…āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻŦāĻŋāϤāϰāĻŖ" āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦāĻžāύāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻŽā§‚āϞāϤ "āύāĻŋāϰāĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ" āĻŽāϤāχ, āĻ•āĻŋāĻ¨ā§āϤ⧁ "āύāĻŋāϰāĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻŦāĻŋāϤāϰāĻŖ" āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻŦā§‹āĻāĻžāϝāĻŧāĨ¤

āϗ⧇āϟāĻŋāĻ‚ āĻ¸ā§āϟāĻžāĻ°ā§āĻŸā§‡āĻĄ

āĻāχ āϏāĻŦ āĻļāĻŋāĻ–āϤ⧇ āφāĻŽāĻŋ āϝ⧇ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āϤāĻžāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āύ⧋āϟ āύāĻžāĻ“. āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϝāĻž āφāĻŽāĻŋ āĻ•āĻžāϜ āĻ•āϰāĻ›āĻŋ, āύ⧋āϟ āύ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻŽāĻŋ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āĻ›āĻŋ JAMStack-āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ, āĻŦāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻāĻ•āϟāĻŋ āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ, āϝāĻžāϤ⧇ āĻāϟāĻŋ āĻ…āĻĢāĻžāϰ āĻ•āϰ⧇ āĻāĻŽāύ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āĻ•ā§āώāĻŽāϤāĻžāϰ āϏ⧁āĻŦāĻŋāϧāĻž āύāĻŋāϤ⧇ āύ⧇āϟāϞāĻŋāĻĢāĻžāχ. āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϰ āϜāϟāĻŋāϞāϤāĻž āĻŦāĻžāĻĄāĻŧāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇, āφāĻŽāĻžāϕ⧇ āĻāϟāĻŋāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ…āĻ‚āĻļ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϝāĻžāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āϝ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻ‚āĻšāϤāĻ•āϰāĻŖ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ•ā§ŒāĻļāϞ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āφāĻŽāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ Node.js āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϚāϞāĻŽāĻžāύ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āϏ āϏāĻžāĻ°ā§āĻ­āĻžāϰ, āĻāĻ•āϟāĻŋ āĻāĻ•āĻ•-āĻĒ⧃āĻˇā§āĻ āĻž āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĒāϰāĻŋāĻŦ⧇āĻļāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄ API āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇āĨ¤ āĻāχ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āϝāϟāĻŋ āϏ⧇āχ āĻ•ā§ŒāĻļāϞ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ āϝāĻž āĻĒāĻžāĻ“āϝāĻŧāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻāχ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ—āĻžāχāĻĄāĨ¤

āϏāĻžāĻĨ⧇ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻ•āϰāϞāĻžāĻŽ āĻŦāĻ¨ā§āϧ⧁, āϝāĻŋāύāĻŋ āĻāĻ•āϜāύ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻŦāĻŋāĻļ⧇āώāĻœā§āĻž, āĻāĻŦāĻ‚ āϤāĻžāϕ⧇ āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰāϞ⧇āύ āϝ⧇ āφāĻŽāĻžāϰ āχāĻšā§āĻ›āĻžāĻŽāϤ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāϰ āϕ⧀ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ āϤāĻŋāύāĻŋ āφāĻŽāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻ°ā§āĻŽāĻĒā§āϰāĻŦāĻžāĻš āϕ⧇āĻŽāύ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϧāĻžāϰāĻŖāĻž āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āύ, āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āϞāĻ•ā§āĻˇā§āϝ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āϞāĻ•ā§āĻˇā§āϝāϗ⧁āϞāĻŋ āĻĨāĻžāĻ•āĻžāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āϝ⧇ āφāĻŽāĻžāϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĄāĻ•āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ āϤāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻĄāĻ•āĻļā§āϰāĻŽāĻŋāĻ•

āĻĄāĻ•āĻžāϰ āĻšāϞ āĻāĻ•āϟāĻŋ āϟ⧁āϞ āϝāĻž, āĻ•āύāĻŸā§‡āχāύāĻžāϰāĻžāχāĻœā§‡āĻļāύ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϰ āϜāĻ¨ā§āϝ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ, āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϕ⧇ āϏāĻšāĻœā§‡āχ āĻŦāĻŋāϤāϰāĻŖ, āĻ¸ā§āĻĨāĻžāĻĒāύ āĻāĻŦāĻ‚ āĻāĻ•āχ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϚāĻžāϞāĻžāύ⧋āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ, āĻāĻŽāύāĻ•āĻŋ āĻĄāĻ•āĻžāϰ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āύāĻŋāĻœā§‡āχ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϚāϞ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡, āφāĻŽāĻžāϕ⧇ āĻĄāĻ•āĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ āϟ⧁āϞāϏ (āϏāĻŋāĻāϞāφāχ) āĻ āφāĻŽāĻžāϰ āĻšāĻžāϤ āĻĒ⧇āϤ⧇ āĻšāĻŦ⧇āĨ¤ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĄāĻ•āĻžāϰ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āĻ—āĻžāχāĻĄāϟāĻŋ āĻ āĻŋāĻ• āϤāϤāϟāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āĻāĻŦāĻ‚ āϏāĻšāϜāĻŦā§‹āĻ§ā§āϝ āύāϝāĻŧ, āϤāĻŦ⧇ āĻāϤ⧇ āĻŦāϞāĻž āφāϛ⧇ āϝ⧇ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒ āĻšāĻŋāϏ⧇āĻŦ⧇ āφāĻĒāύāĻžāϕ⧇ āĻĄāĻ•āĻžāϰ āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ (āĻŽā§āϝāĻžāĻ• āĻŦāĻž āĻāϰ āϜāĻ¨ā§āϝ) āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ Windows).

āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ GitHub āĻ—āĻŋāϟ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻŦāĻž āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϰ āϜāĻ¨ā§āϝ npm āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĒā§āϝāĻžāϕ⧇āϜāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝāĨ¤ āĻāϟāĻŋ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ…āύāϞāĻžāχāύ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞāĨ¤ āĻāϟāĻŋ āĻĄāĻ•āĻžāϰ āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤

āϏ⧁āϤāϰāĻžāĻ‚, āĻĄāĻ•āĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āĻĻ⧁āϟāĻŋ āϜāĻŋāύāĻŋāϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

āĻāϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āĻĄāĻ•āĻžāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āĻĄāĻ•āĻžāϰ āϏāĻŋāĻāϞāφāχ āĻ•āĻžāϜ āĻ•āϰāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

docker -v

āĻāϰāĻĒāϰ⧇, āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰāĻž āĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰ⧇ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āϞāĻ— āχāύ āĻ•āϰ⧁āύ:

docker login

āĻĄāĻ•āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϚāĻŋāĻ¤ā§āϰ āĻāĻŦāĻ‚ āĻĒāĻžāĻ¤ā§āϰ⧇āϰ āϧāĻžāϰāĻŖāĻžāϗ⧁āϞāĻŋ āĻŦ⧁āĻāϤ⧇ āĻšāĻŦ⧇āĨ¤

▍āĻ›āĻŦāĻŋ

āĻāĻ•āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻŦā§āϞ⧁āĻĒā§āϰāĻŋāĻ¨ā§āĻŸā§‡āϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āϝāĻž āϧāĻžāϰāĻ• āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻĢāĻžāχāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋāĻ‚āϏ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟāĨ¤ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰāĻž āϏāĻšāĻœā§‡āχ āĻ›āĻŦāĻŋ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

# Đ’Ņ‹Đ˛ĐžĐ´ ŅĐ˛ĐĩĐ´ĐĩĐŊиК ОйО Đ˛ŅĐĩŅ… ĐžĐąŅ€Đ°ĐˇĐ°Ņ…
docker images

āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻļāĻŋāϰ⧋āύāĻžāĻŽ āϏāĻš āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āφāωāϟāĻĒ⧁āϟ āĻ•āϰāĻŦ⧇:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āφāĻŽāϰāĻž āĻāĻ•āχ āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻ•āĻŋāϛ⧁ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻŦ - āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϏāĻš āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āφāϛ⧇, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āϕ⧀ āφāωāϟāĻĒ⧁āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻžāϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖāĨ¤

▍āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ

āĻāĻ•āϟāĻŋ āϧāĻžāϰāĻ• āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻŸā§‡āĻŦāϞ āĻĒā§āϝāĻžāϕ⧇āϜ āϝāĻž āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŦāĻ•āĻŋāϛ⧁ āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏāĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āχ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇, āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āύāĻŋāĻ°ā§āĻŦāĻŋāĻļ⧇āώ⧇: āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻŦāĻ‚ āĻāĻ•āχ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āĨ¤ āĻŽā§‹āĻĻā§āĻĻāĻž āĻ•āĻĨāĻž āĻšāϞ āĻāĻ•āχ āϚāĻŋāĻ¤ā§āϰ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

# ПĐĩŅ€ĐĩŅ‡Đ¸ŅĐģĐĩĐŊиĐĩ Đ˛ŅĐĩŅ… ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ĐžĐ˛
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

▍āĻŸā§āϝāĻžāĻ—

āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āĻāĻ•āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ⧇āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻāĻ•āϟāĻŋ āχāĻ™ā§āĻ—āĻŋāϤāĨ¤

▍ āĻĄāĻ•āĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āĻĻā§āϰ⧁āϤ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ

āĻāĻ–āĻžāύ⧇ āĻ•āĻŋāϛ⧁ āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĄāĻ•āĻžāϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻŸā§€āĻŽ

āĻĒā§āϰāϏāĻ™ā§āĻ—

āĻĒā§āϰāĻ­āĻžāĻŦ

āĻĄāĻ•āĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ

āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ

āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž

āĻĄāĻ•āĻžāϰ āĻŸā§āϝāĻžāĻ—

āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ

āχāĻŽā§‡āϜ āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚

āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ

āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ

āχāĻŽā§‡āϜ āϤāĻžāϞāĻŋāĻ•āĻž

āĻĄāĻ•āĻžāϰ āϰāĻžāύ

āφāϧāĻžāϰ

āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϧāĻžāϰāĻ• āϚāĻžāϞāĻžāύ⧋

āĻĄāĻ•āĻžāϰ āϧāĻžāĻ•ā§āĻ•āĻž

āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻĄāĻ•āĻžāϰ āϟāĻžāύ

āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āϞ⧋āĻĄ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻĄāĻ•āĻžāϰ ps

āφāϧāĻžāϰ

āϤāĻžāϞāĻŋāĻ•āĻž āĻĒāĻžāĻ¤ā§āϰ⧇

āĻĄāĻ•āĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ›āĻžāρāϟāĻžāχ

āĻ›āĻŦāĻŋ/āϧāĻžāϰāĻ•

āĻ…āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĒāĻžāĻ¤ā§āϰ āĻāĻŦāĻ‚ āĻ›āĻŦāĻŋ āĻ…āĻĒāϏāĻžāϰāĻŖ

▍āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ

āφāĻŽāĻŋ āϜāĻžāύāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻžāϞāĻžāϤ⧇ āĻšāϝāĻŧāĨ¤ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āϰ⧇āĻĄāĻŋāĻŽā§‡āĻĄ āϰāĻŋāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦāĻĒā§āϝāĻžāĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āφāϛ⧇āĨ¤ āĻāϰ āĻĒāϰ⧇, āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻĒā§‹āĻ°ā§āĻŸā§‡ āĻāĻ•āϟāĻŋ Node.js āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ 5000. āĻāϟāĻŋ āĻāχ āĻŽāϤ āĻĻ⧇āĻ–āĻžāϝāĻŧ:

npm i         # ŅƒŅŅ‚Đ°ĐŊОвĐēа ĐˇĐ°Đ˛Đ¸ŅĐ¸ĐŧĐžŅŅ‚ĐĩĐš
npm run build # ŅĐąĐžŅ€Đēа React-ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊĐ¸Ņ
npm run start # СаĐŋ҃ҁĐē Node-ҁĐĩŅ€Đ˛ĐĩŅ€Đ°

āĻāϟāĻž āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāĻž āωāϚāĻŋāϤ āϝ⧇ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāχ āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āύ⧇āχāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āĻžāύ⧇, āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ, āϝ⧇āϕ⧋āύ āϏāĻžāϧāĻžāϰāĻŖ āύ⧋āĻĄ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻ•āϰāĻŦ⧇āĨ¤

āϧāĻžāϰāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āĻĄāĻ•āĻžāϰāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āύāĻžāĻŽāĻ• āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϟāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ Dockerfile, āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϰ⧁āϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāϤāĨ¤ āĻāχ āĻĢāĻžāχāϞāϟāĻŋ, āĻĒā§āϰāĻĨāĻŽā§‡, āĻŦ⧇āĻļ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻŦāϞ⧇ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇āĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋāϤ⧇ āϝāĻž āϰāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦāĻŋāĻļ⧇āώ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻœā§‡āϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āĻ…āύ⧁āϰ⧂āĻĒ āĻ•āĻŋāϛ⧁ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻ•āĻŋāϛ⧁ āφāϛ⧇:

  • āĻĨ⧇āϕ⧇ — āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻŦ⧇āϏ āχāĻŽā§‡āϜ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ āϝāĻžāϰ āωāĻĒāϰ āϧāĻžāϰāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤
  • āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ - āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻ‰ā§ŽāϏ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻžāĻ¤ā§āϰ⧇ āĻĢāĻžāχāϞ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰāĻžāĨ¤
  • āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĄāĻŋāϰ — āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϏ⧇āϟ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤
  • āϚāĻžāϞāĻžāύ - āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϚāĻžāϞāĻžāύāĨ¤
  • āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž - āĻĒā§‹āĻ°ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏāĨ¤
  • āĻāĻ¨ā§āĻŸā§āϰāĻŋāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ - āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ⧇āϰ āχāĻ™ā§āĻ—āĻŋāϤāĨ¤

Dockerfile āĻāχ āĻŽāϤ āĻ•āĻŋāϛ⧁ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇:

# Đ—Đ°ĐŗŅ€ŅƒĐˇĐ¸Ņ‚ŅŒ ĐąĐ°ĐˇĐžĐ˛Ņ‹Đš ĐžĐąŅ€Đ°Đˇ
FROM node:12-alpine

# ĐĄĐēĐžĐŋĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹ иС Ņ‚ĐĩĐēŅƒŅ‰ĐĩĐš Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸ в Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸ŅŽ app/
COPY . app/

# Đ˜ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ app/ в Ņ€ĐžĐģи Ņ€Đ°ĐąĐžŅ‡ĐĩĐš Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸
WORKDIR app/

# ĐŖŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ĐˇĐ°Đ˛Đ¸ŅĐ¸ĐŧĐžŅŅ‚Đ¸ (ĐēĐžĐŧаĐŊда npm ci ĐŋĐžŅ…ĐžĐļа npm i, ĐŊĐž Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ Đ´ĐģŅ Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸ĐˇĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊҋ҅ ŅĐąĐžŅ€ĐžĐē)
RUN npm ci --only-production

# ĐĄĐžĐąŅ€Đ°Ņ‚ŅŒ ĐēĐģиĐĩĐŊ҂ҁĐēĐžĐĩ React-ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ Đ´ĐģŅ ĐŋŅ€ĐžĐ´Đ°Đē҈ĐŊа
RUN npm run build

# ĐŸŅ€ĐžŅĐģŅƒŅˆĐ¸Đ˛Đ°Ņ‚ŅŒ ҃ĐēаСаĐŊĐŊŅ‹Đš ĐŋĐžŅ€Ņ‚
EXPOSE 5000

# ЗаĐŋŅƒŅŅ‚Đ¸Ņ‚ŅŒ Node-ҁĐĩŅ€Đ˛ĐĩŅ€
ENTRYPOINT npm run start

āφāĻĒāύāĻžāϰ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻŦ⧇āϏ āχāĻŽā§‡āĻœā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϰ āĻ•āĻžāϰāĻŖ āĻšāϞ⧋ āĻ•āĻŋāϛ⧁ āĻŦ⧇āϏ āχāĻŽā§‡āϜ (āϝ⧇āĻŽāύ āύ⧋āĻĄ āφāϞāĻĒāĻžāχāύ) LinuxāĻāϗ⧁āϞ⧋āϕ⧇ āϝāĻĨāĻžāϏāĻŽā§āĻ­āĻŦ āĻ•āĻŽ āϜāĻžāϝāĻŧāĻ—āĻž āύ⧇āϝāĻŧ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĢāϞ⧇, āĻāϤ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ•āĻŋāϛ⧁ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āύāĻžāĻ“ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

▍āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ, āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āϚāĻžāϞāĻžāύ⧋

āϞ⧋āĻ•āĻžāϞ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋ āĻ“ āϞāĻžā§āĻšā§‡āϰ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āĻĒāϰ⧇ āφāϛ⧇ DockerfileāĻ•āĻžāϜāϗ⧁āϞ⧋ āĻŦ⧇āĻļ āϏāĻšāϜāĨ¤ āφāĻĒāύāĻŋ āĻ›āĻŦāĻŋāϟāĻŋāϕ⧇ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āĻĒ⧁āĻļ āĻ•āϰāĻžāϰ āφāϗ⧇, āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

▍ āϏāĻŽāĻžāĻŦ⧇āĻļ

āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻĒāύāĻžāϕ⧇ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ, āĻāĻ•āϟāĻŋ āύāĻžāĻŽ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— (āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ›āĻŦāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻŦ⧇ latest).

# ĐĄĐąĐžŅ€Đēа ĐžĐąŅ€Đ°ĐˇĐ°
docker build -t <image>:<tag> .

āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āĻĄāĻ•āĻžāϰ āĻ›āĻŦāĻŋāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...Đ˛Ņ‹ĐŋĐžĐģĐŊĐĩĐŊиĐĩ ŅŅ‚Đ°ĐŋОв ŅĐąĐžŅ€Đēи...
Successfully built 123456789123
Successfully tagged <image>:<tag>

āĻŦāĻŋāĻ˛ā§āĻĄāϟāĻŋ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāύāĻŋāϟ āϏāĻŽāϝāĻŧ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ - āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āĻ•āϤāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āϰāϝāĻŧ⧇āϛ⧇ āϤāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤ āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāϞ⧇, āφāĻĒāύāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ docker images āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āύāϤ⧁āύ āĻ›āĻŦāĻŋāϰ āĻŦāĻ°ā§āĻŖāύāĻž āĻĻ⧇āϖ⧁āύāĨ¤

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

▍āϞāĻžā§āϚ āĻ•āϰ⧁āύ

āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ āϝ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϧāĻžāϰāĻ• āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ•āĻžāϰāĻŖ āφāĻŽāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇ āϚāϞāĻŽāĻžāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϤ⧇ āϚāĻžāχ localhost:5000, āφāĻŽāĻŋ, āĻœā§‹āĻĄāĻŧāĻžāϰ āĻŦāĻžāĻŽ āĻĻāĻŋāϕ⧇ 5000:5000 āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšāϝāĻŧ 5000. āĻĄāĻžāύ āĻĒāĻžāĻļ⧇ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĒā§‹āĻ°ā§āϟāĨ¤

# ЗаĐŋ҃ҁĐē ҁ Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиĐĩĐŧ ĐģĐžĐēаĐģҌĐŊĐžĐŗĐž ĐŋĐžŅ€Ņ‚Đ° 5000 и ĐŋĐžŅ€Ņ‚Đ° ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€Đ° 5000
docker run -p 5000:5000 <image>:<tag>

āĻāĻ–āύ āϝ⧇āĻšā§‡āϤ⧁ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āϚāϞāϛ⧇, āφāĻĒāύāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ docker ps āĻāχ āϧāĻžāϰāĻ• āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻĻ⧇āĻ–āϤ⧇ (āĻŦāĻž āφāĻĒāύāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ docker ps -a, āϝāĻž āϏāĻŽāĻ¸ā§āϤ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰ⧇, āĻļ⧁āϧ⧁ āϚāϞāĻŽāĻžāύ āύāϝāĻŧ)āĨ¤

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                    NAMES
987654321234        <image>             "/bin/sh -c 'npm runâ€Ļ"   6 seconds ago        Up 6 seconds                0.0.0.0:5000->5000/tcp   stoic_darwin

āĻāĻ–āύ āϝāĻĻāĻŋ āĻ āĻŋāĻ•āĻžāύāĻžāϝāĻŧ āϝāĻžāύ localhost:5000 — āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āϚāϞāĻŽāĻžāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻˇā§āĻ āĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻāĻ•āϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āϚāϞāĻŽāĻžāύ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻĒ⧃āĻˇā§āĻ āĻžāϰ āĻŽāϤ⧋ āĻĻ⧇āĻ–āϤ⧇ āĻ āĻŋāĻ• āĻāĻ•āχ āϰāĻ•āĻŽā§ˇ

▍āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•āĻžāĻļāύāĻž

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻ›āĻŦāĻŋāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āĻāχ āĻ›āĻŦāĻŋāϟāĻŋ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ āϝ⧇ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇āϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϰ āĻĒāϰ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āϜāĻžāϝāĻŧāĻ—āĻž āĻĨāĻžāĻ•āĻŦ⧇ āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻ›āĻŦāĻŋāϟāĻŋ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻ›āĻŦāĻŋāϟāĻŋāϰ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋāϰ āύāĻžāĻŽ āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇āϰ āύāĻžāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ āύāĻžāĻŽā§‡āϰ āĻļ⧇āώ⧇ āϝ⧇āϕ⧋āύ⧋ āĻŸā§āϝāĻžāĻ— āĻŦāϏāĻžāύ⧋ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āύ⧀āĻšā§‡ āĻāχ āĻ¸ā§āĻ•āĻŋāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāĻŽā§‡āϜ āύāĻžāĻŽāĻ•āϰāϪ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖāĨ¤

āĻāĻ–āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧ⧇ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ docker push āĻāϟāĻŋāϕ⧇ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇ āϠ⧇āϞ⧇ āĻĻāĻŋāϤ⧇āĨ¤

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# На ĐŋŅ€Đ°ĐēŅ‚Đ¸ĐēĐĩ ŅŅ‚Đž ĐŧĐžĐļĐĩŅ‚ Đ˛Ņ‹ĐŗĐģŅĐ´ĐĩŅ‚ŅŒ, ĐŊаĐŋŅ€Đ¸ĐŧĐĩŅ€, Ņ‚Đ°Đē:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāĻ•āϞ⧇, āĻ›āĻŦāĻŋāϟāĻŋ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϏāĻšāĻœā§‡āχ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ

āĻāĻ–āύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻŽāϰāĻž āϝāĻžāϚāĻžāχ āĻ•āϰ⧇āĻ›āĻŋ āϝ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ, āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āφāĻ•āĻžāϰ⧇, āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϚāϞāϛ⧇āĨ¤ āφāĻŽāϰāĻž āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϟāĻŋ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āφāĻĒāϞ⧋āĻĄ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āφāĻŽāϰāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϞāĻ•ā§āĻˇā§āϝ⧇āϰ āĻĻāĻŋāϕ⧇ āϖ⧁āĻŦ āĻ­āĻžāϞ āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āφāϰāĻ“ āĻĻ⧁āϟāĻŋ āĻĒā§āϰāĻļā§āύ⧇āϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

  • āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ CI āϟ⧁āϞ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤
  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻāĻŦāĻ‚ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ. āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ - āĻĄāĻŋāϟāĻŋāĻ—āĻžāϞ āĻŽāĻšāĻžāϏāĻžāĻ—āϰ.

āĻāϟāĻŋ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāĻž āωāϚāĻŋāϤ āϝ⧇ āĻāĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋāϰ āφāϰ⧇āĻ•āϟāĻŋ āϏāĻ‚āĻŽāĻŋāĻļā§āϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, Travis CI āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āφāĻĒāύāĻŋ CircleCI āĻŦāĻž Github āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻŦāĻ‚ DigitalOcean āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ - AWS āĻŦāĻž LinodeāĨ¤

āφāĻŽāϰāĻž Travis CI āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ, āĻāĻŦāĻ‚ āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻāχ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϤ⧇ āĻ•āĻŋāϛ⧁ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻ…āϤāĻāĻŦ, āĻāĻ–āύ āφāĻŽāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāϟāĻŋāϕ⧇ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻŦ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻŦāĨ¤

āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ

āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāϰāĻžā§āϜāĻžāĻŽāĨ¤ āφāĻŽāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāϟāĻŋāϞāϤāĻžāϝāĻŧ āϝ⧇āϤ⧇ āϚāĻžāχ āύāĻž, āϝ⧇āĻšā§‡āϤ⧁ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻ…āύāĻ¨ā§āϝ, āĻāĻŦāĻ‚ āĻāϟāĻŋ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āϏ⧁āĻŦāĻŋāϧāĻž āύāĻŋāϝāĻŧ⧇ āφāϏāĻŦ⧇ āύāĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āύ āϤāĻŦ⧇ āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻŋ āĻŽā§ŒāϞāĻŋāĻ• āĻŦāĻŋāώāϝāĻŧāϗ⧁āϞāĻŋ āĻ•āĻ­āĻžāϰ āĻ•āϰāĻŦāĨ¤ āφāĻĒāύāĻŋ Travis CI, CircleCI, Jenkins āĻŦāĻž āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āϚāϝāĻŧāύ āĻ•āϰ⧁āύ āύāĻž āϕ⧇āύ, āĻ…āύ⧁āϰ⧂āĻĒ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāĻĻā§āϧāϤāĻŋ āϏāĻ°ā§āĻŦāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇, āϝāĻžāύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āφāĻĒāύāĻžāϰ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻāϕ⧀āĻ­ā§‚āϤ āĻ•āϰ⧁āύāĨ¤ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻĒāύāĻžāϕ⧇ āϏ⧇āχ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϰ āϏāĻžāĻĨ⧇ āφāĻĒāύāĻŋ āĻ•āĻžāϜ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϤ⧇ āϚāĻžāύ āĻāĻŦāĻ‚ āĻāϟāĻŋāϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤ (āφāĻŽāĻŋ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ, āϤāĻŦ⧇ āφāĻŽāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āϝ⧇ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻŦāĻŋāϟāĻŦāĻžāϕ⧇āϟ, āĻāĻŦāĻ‚ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧂āĻĒ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāϕ⧀āĻ­ā§‚āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇)āĨ¤

āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āϚāĻžāϞ⧁ āĻšāϞ⧇, āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ āϝāĻž āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ āωāĻ˛ā§āϞ⧇āĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰ⧇, āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻļāĻžāĻ–āĻžāϗ⧁āϞāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

▍āϚāĻžāĻ•āϰ⧀āϰ āĻœā§€āĻŦāύāϚāĻ•ā§āϰ

āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ āĻŦāϞāĻž āĻšāϝāĻŧ .travis.yml āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϰ⧁āϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ, āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϧāĻžāϰāĻŖāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āĻœā§€āĻŦāύāϚāĻ•ā§āϰ āĻ•āĻžāϜ. āĻāχ āϘāϟāύāĻžāϗ⧁āϞāĻŋ āϝ⧇ āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āϏāĻ‚āϘāϟāĻŋāϤ āĻšāϝāĻŧ āϏ⧇ āĻ…āύ⧁āϏāĻžāϰ⧇ āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success иĐģи after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

▍āĻĒāϰ⧀āĻ•ā§āώāĻž

āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ āφāĻŽāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āϝāĻžāĻšā§āĻ›āĻŋāĨ¤ āφāĻŽāĻŋ āĻ­āĻžāώāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āύ⧋āĻĄ 12 āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āĻĄāĻ•āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻžāϗ⧁āϞāĻŋ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻŦāϞ⧇āĻ›āĻŋāĨ¤

āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āϏāĻŦāĻ•āĻŋāϛ⧁ .travis.yml, āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āϏāĻŽāĻ¸ā§āϤ āĻļāĻžāĻ–āĻžāϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻĒ⧁āϞ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻž āĻšāϞ⧇ āϤāĻž āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻž āĻšāĻŦ⧇, āϝāĻĻāĻŋ āύāĻž āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĻāϰāĻ•āĻžāϰ⧀ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻ•āĻžāϰāĻŖ āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ āϝ⧇ āφāĻŽāϰāĻž āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇ āφāϏāĻž āϏāĻŽāĻ¸ā§āϤ āϕ⧋āĻĄ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āϜāĻžāύāϤ⧇ āĻĻ⧇āϝāĻŧ āϝ⧇ āϕ⧋āĻĄāϟāĻŋ āĻļāĻžāĻ–āĻžāϝāĻŧ āϞ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āĻŋāύāĻžāĨ¤ master, āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ­āĻ™ā§āĻ— āĻ•āϰāĻŦ⧇ āĻ•āĻŋāύāĻžāĨ¤ āĻāχ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āϝāĻžāĻĒā§€ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇, āφāĻŽāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻŋ, āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ āĻ“āϝāĻŧ⧇āĻŦāĻĒā§āϝāĻžāĻ• āĻĄā§‡āĻ­ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞāĻžāχ (āĻāϟāĻŋ āφāĻŽāĻžāϰ āĻ•āĻ°ā§āĻŽāĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻāĻ•āϟāĻŋ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ), āĻāĻŦāĻ‚ āĻĒāϰ⧀āĻ•ā§āώāĻž āϚāĻžāϞāĻžāχāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϚāĻžāύ āϝ⧇ āφāĻĒāύāĻžāϰ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āĻ­āĻžāϰ⧇āϜ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āĻŦā§āϝāĻžāϜ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻž āĻšā§‹āĻ•, āĻāĻ–āĻžāύ⧇ āĻāχ āϤāĻĨā§āϝ āϏāĻ‚āĻ—ā§āϰāĻš āĻ“ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ Jest, Travis CI āĻāĻŦāĻ‚ Coveralls āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āϤāĻžāχ āĻĢāĻžāχāϞ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻāĻ–āĻžāύ⧇ .travis.yml:

# ĐŖŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅĐˇŅ‹Đē
language: node_js

# ĐŖŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ вĐĩŅ€ŅĐ¸ŅŽ Node.js
node_js:
  - '12'

services:
  # Đ˜ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐžĐŧаĐŊĐ´ĐŊŅƒŅŽ ŅŅ‚Ņ€ĐžĐē҃ Docker
  - docker

install:
  # ĐŖŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ĐˇĐ°Đ˛Đ¸ŅĐ¸ĐŧĐžŅŅ‚Đ¸ Đ´ĐģŅ Ņ‚ĐĩŅŅ‚ĐžĐ˛
  - npm ci

before_script:
  # ЗаĐŋŅƒŅŅ‚Đ¸Ņ‚ŅŒ ҁĐĩŅ€Đ˛ĐĩŅ€ и ĐēĐģиĐĩĐŊŅ‚ Đ´ĐģŅ Ņ‚ĐĩŅŅ‚ĐžĐ˛
  - npm run dev &

script:
  # ЗаĐŋŅƒŅŅ‚Đ¸Ņ‚ŅŒ Ņ‚Đĩҁ҂ҋ
  - npm run test

āĻāĻ–āĻžāύ⧇āχ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āϏāĻŽāĻ¸ā§āϤ āĻļāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻĒ⧁āϞ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋ āĻļ⧇āώ āĻšāϝāĻŧāĨ¤

▍ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž

āϏāĻŽāĻ¸ā§āϤ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒāϰ⧀āĻ•ā§āώāĻž āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻšāϝāĻŧ⧇āϛ⧇ āĻāχ āĻ…āύ⧁āĻŽāĻžāύ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇, āφāĻŽāϰāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āϝāĻž āϐāĻšā§āĻ›āĻŋāĻ•, āϕ⧋āĻĄāϟāĻŋ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻļāĻžāĻ–āĻž āĻĨ⧇āϕ⧇ āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āϰāϤ⧇ āϚāĻžāχ master, āφāĻŽāϰāĻž āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āϝāĻĨāĻžāϝāĻĨ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻĻāĻŋāχāĨ¤ āφāĻŽāϰāĻž āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āϝ⧇ āϕ⧋āĻĄāϟāĻŋ āĻĻ⧇āĻ–āĻŦ āϏ⧇āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻžāϰ āφāϗ⧇, āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āϏāϤāĻ°ā§āĻ• āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§ƒāϤ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇ āϝ⧇āϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤

deploy:
  # ĐĄĐžĐąŅ€Đ°Ņ‚ŅŒ Docker-ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ и ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐĩĐŗĐž ĐŊа Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĻ⧁āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇:

  • āĻāĻ•āϟāĻŋ CI āϟ⧁āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāĻŽā§‡āϜāϟāĻŋāϕ⧇ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āĻŸā§āϝāĻžāĻ— āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĒāĻžāĻ āĻžāύ (āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ)āĨ¤
  • āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϚāĻŋāĻ¤ā§āϰāϟāĻŋ āϞ⧋āĻĄ āĻ•āϰāĻž, āĻĒ⧁āϰāĻžāύ⧋ āϧāĻžāϰāĻ•āϟāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻļ⧁āϰ⧁ āĻ•āϰāĻž (āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ DigitalOcean āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡ āϚāϞ⧇)āĨ¤

āĻĒā§āϰāĻĨāĻŽā§‡, āφāĻĒāύāĻžāϕ⧇ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ, āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĒ⧁āĻļ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āχāĻŽā§‡āϜ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āϞāĻ—āχāύāϗ⧁āϞāĻŋāϤ⧇ āĻ…āύāĻ¨ā§āϝ āĻŸā§āϝāĻžāĻ— āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ•ā§ŒāĻļāϞ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ›āĻžāĻĄāĻŧāĻž āĻāϟāĻŋ āφāĻŽāϰāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϝāĻž āĻ•āϰ⧇āĻ›āĻŋ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āϖ⧁āĻŦ āĻŽāĻŋāϞāĨ¤ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻŦāϰāĻŖ āϝ⧇āĻŽāύ āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻ•ā§ŒāĻļāϞ, āϞāĻ—āχāύ, āĻāϏāĻāϏāĻāχāϚ āϕ⧀ āĻāύāϕ⧋āĻĄāĻŋāĻ‚, āĻāϏāĻāϏāĻāχāϚ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ⧇ āφāĻŽāĻžāϰ āĻ…āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧌āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ āφāĻŽāĻžāϰ āĻŦāϝāĻŧāĻĢā§āϰ⧇āĻ¨ā§āĻĄ āĻŦāĻžāĻļ⧇āϰ āϏāĻžāĻĨ⧇ āĻ…āύ⧇āĻ• āĻ­āĻžāϞ⧋, āϝ⧇āĻŽāύāϟāĻž āĻ…āĻ¨ā§āϝ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁āϰ āϏāĻžāĻĨ⧇āĨ¤ āϤāĻŋāύāĻŋ āφāĻŽāĻžāϕ⧇ āĻāχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϞāĻŋāĻ–āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āϛ⧇āύāĨ¤

āϏ⧁āϤāϰāĻžāĻ‚, āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻĒā§āϰāĻĨāĻŽ āĻ…āĻ‚āĻļāϟāĻŋ āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ⧇ āĻ›āĻŦāĻŋāϟāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāϛ⧇āĨ¤ āĻāϟāĻŋ āĻ•āϰāĻž āĻŦ⧇āĻļ āϏāĻšāϜāĨ¤ āφāĻŽāĻŋ āϝ⧇ āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻ¸ā§āĻ•āĻŋāĻŽāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ āϤāĻžāϤ⧇ āĻāĻ•āϟāĻŋ āĻ—āĻŋāϟ āĻšā§āϝāĻžāĻļ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ—āĻŋāϟ āĻŸā§āϝāĻžāĻ— āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻž āϜāĻĄāĻŧāĻŋāϤ, āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĨāĻžāϕ⧇āĨ¤ āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇ āϝ⧇ āĻŸā§āϝāĻžāĻ—āϟāĻŋ āĻ…āύāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϝ⧇āϟāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϏ⧇āϟāĻŋāϕ⧇ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ DOCKER_USERNAME и DOCKER_PASSWORD āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϝāĻž āĻŸā§āĻ°ā§āϝāĻžāĻ­āĻŋāϏ āϏāĻŋāφāχ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āϟ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ Travis CI āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻŦ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋ āϭ⧁āϞ āĻšāĻžāϤ⧇ āύāĻž āĻĒāĻĄāĻŧ⧇āĨ¤

āĻāĻ–āĻžāύ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻĒā§āϰāĻĨāĻŽ āĻ…āĻ‚āĻļ deploy.sh.

#!/bin/sh
set -e # ĐžŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ҁĐēŅ€Đ¸ĐŋŅ‚ ĐŋŅ€Đ¸ ĐŊаĐģĐ¸Ņ‡Đ¸Đ¸ ĐžŅˆĐ¸ĐąĐžĐē

IMAGE="<username>/<repository>"                             # ĐžĐąŅ€Đ°Đˇ Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-Ņ…ŅŅˆ и Ņ‚ĐĩĐŗĐ¸

# ĐĄĐąĐžŅ€Đēа и Ņ‚ĐĩĐŗĐ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐžĐąŅ€Đ°ĐˇĐ°
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# Đ’Ņ…ĐžĐ´ в Docker Hub и Đ˛Ņ‹ĐŗŅ€ŅƒĐˇĐēа ĐžĐąŅ€Đ°ĐˇĐ°
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻ…āĻ‚āĻļāϟāĻŋ āϕ⧀ āĻšāĻŦ⧇ āϤāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āφāĻĒāύāĻŋ āϕ⧋āύ āĻšā§‹āĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇āύ āĻāĻŦāĻ‚ āĻāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ—āϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻ—āĻ āĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻžāϰ āωāĻĒāϰāĨ¤ āφāĻŽāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻŋ āĻĄāĻŋāϜāĻŋāϟāĻžāϞ āĻŽāĻšāĻžāϏāĻžāĻ—āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ, āφāĻŽāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āĻĄāĻ•ā§āϟāĻāϞ. AWS āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ aws, āĻāĻŦāĻ‚ āϤāĻžāχāĨ¤

āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āϤ⧇āĻŽāύ āĻ•āĻ āĻŋāύ āĻ›āĻŋāϞ āύāĻžāĨ¤ āφāĻŽāĻŋ āĻŦ⧇āϏ āχāĻŽā§‡āĻœā§‡āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻĄā§āϰāĻĒāϞ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āωāĻ˛ā§āϞ⧇āĻ–ā§āϝ āϝ⧇, āφāĻŽāĻŋ āϝ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ āϤāĻžāϤ⧇ āĻāĻ•āĻŦāĻžāϰ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĄāĻ•āĻžāϰ āχāύāĻ¸ā§āϟāϞ āĻāĻŦāĻ‚ āĻāĻ•āĻŦāĻžāϰ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧāĨ¤ āφāĻŽāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ Ubuntu ā§§ā§Ž.ā§Ļā§Ē, āϏ⧁āϤāϰāĻžāĻ‚ āφāĻĒāύāĻŋāĻ“ āϝāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ UbuntuāĻāĻ•āχ āĻ•āĻžāϜ āĻ•āϰāϤ⧇, āφāĻĒāύāĻŋ āϕ⧇āĻŦāϞ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ The āϏāĻšāϜ āĻ—āĻžāχāĻĄāĨ¤

āφāĻŽāĻŋ āĻāĻ–āĻžāύ⧇ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻ›āĻŋ āύāĻž, āϝ⧇āĻšā§‡āϤ⧁ āĻāχ āĻĻāĻŋāĻ•āϟāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŦā§āϝāĻžāĻĒāĻ•āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāĻŽāĻŋ āĻļ⧁āϧ⧁ SSH āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāĻŦ⧇ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āϏāĻŽā§āĻĒāĻžāĻĻāĻŋāϤ āĻ•āĻ°ā§āĻŽā§‡āϰ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻĻ⧇āĻŦ:

  • āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āϝ⧇ āϧāĻžāϰāĻ•āϟāĻŋ āϚāϞāϛ⧇ āϤāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤
  • āϤāĻžāϰāĻĒāϰ⧇ āφāĻĒāύāĻžāϕ⧇ āĻĒāϟāĻ­ā§‚āĻŽāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϧāĻžāϰāĻ• āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤
  • āφāĻĒāύāĻžāϕ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻĒā§‹āĻ°ā§āϟ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ 80 - āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻ āĻŋāĻ•āĻžāύāĻžāϝāĻŧ āϏāĻžāχāĻŸā§‡ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻŦ⧇ example.com, āĻĒā§‹āĻ°ā§āϟ āωāĻ˛ā§āϞ⧇āĻ– āύāĻž āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āĻ āĻŋāĻ•āĻžāύāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ example.com:5000.
  • āĻ…āĻŦāĻļ⧇āώ⧇, āφāĻĒāύāĻžāϕ⧇ āϏāĻŽāĻ¸ā§āϤ āĻĒ⧁āϰāĻžāύ⧋ āĻĒāĻžāĻ¤ā§āϰ āĻāĻŦāĻ‚ āϚāĻŋāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻŽā§āĻ›āϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻāĻ–āĻžāύ⧇āχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ•āϤāĻžāĨ¤

# ĐĐ°ĐšŅ‚Đ¸ ID Ņ€Đ°ĐąĐžŅ‚Đ°ŅŽŅ‰ĐĩĐŗĐž ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€Đ°
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)

# ĐžŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đ°Ņ€Ņ‹Đš ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, СаĐŋŅƒŅŅ‚Đ¸Ņ‚ŅŒ ĐŊĐžĐ˛Ņ‹Đš, ĐžŅ‡Đ¸ŅŅ‚Đ¸Ņ‚ŅŒ ŅĐ¸ŅŅ‚ĐĩĐŧ҃
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f

āĻ•āĻŋāϛ⧁ āϜāĻŋāύāĻŋāϏ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāϤ⧇

āĻāϟāĻž āϏāĻŽā§āĻ­āĻŦ āϝ⧇ āφāĻĒāύāĻŋ āϝāĻ–āύ Travis CI āĻĨ⧇āϕ⧇ SSH āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻŦ⧇āύ, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āϏāϤāĻ°ā§āĻ•āϤāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ āϝāĻž āφāĻĒāύāĻžāϕ⧇ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āĻĨ⧇āϕ⧇ āĻŦāĻžāϧāĻž āĻĻ⧇āĻŦ⧇ āĻ•āĻžāϰāĻŖ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āĨ¤

The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?

āφāĻŽāĻŋ āĻļāĻŋāϖ⧇āĻ›āĻŋ āϝ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϕ⧀āϕ⧇ āĻŦ⧇āϏ 64-āĻ āĻāύāϕ⧋āĻĄ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻ°ā§āĻŽā§‡ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āϝāĻžāϤ⧇ āĻāϟāĻŋ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇, āφāĻĒāύāĻŋ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āϕ⧀āϟāĻŋ āĻĄāĻŋāϕ⧋āĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ⧇ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ known_hosts āωāĻĒāϰ⧇āϰ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĒāϰāĻŋāĻ¤ā§āϰāĻžāĻŖ āĻĒ⧇āϤ⧇.

echo <public key> | base64 # Đ˛Ņ‹Đ˛ĐžĐ´Đ¸Ņ‚ <ĐŋŅƒĐąĐģĐ¸Ņ‡ĐŊŅ‹Đš ĐēĐģŅŽŅ‡, СаĐēĐžĐ´Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš в base64>

āĻ…āύ⧁āĻļā§€āϞāύ⧇, āĻāχ āφāĻĻ⧇āĻļāϟāĻŋ āĻāχāϰāĻ•āĻŽ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇:

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== you@example.com" | base64

āĻāĻŦāĻ‚ āĻāĻ–āĻžāύ⧇ āĻāϟāĻŋ āĻ•āĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ - āĻāĻ•āϟāĻŋ āĻŦ⧇āϏ64 āĻāύāϕ⧋āĻĄā§‡āĻĄ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

āĻāĻ–āĻžāύ⧇ āωāĻĒāϰ⧇ āωāĻ˛ā§āϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āφāϛ⧇

install:
  - echo < ĐŋŅƒĐąĐģĐ¸Ņ‡ĐŊŅ‹Đš ĐēĐģŅŽŅ‡, СаĐēĐžĐ´Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš в base64> | base64 -d >> $HOME/.ssh/known_hosts

āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻ•āχ āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϕ⧀ āĻĻāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻšā§‡āϤ⧁ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϕ⧀ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϕ⧀ āĻĻāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻĒāύāĻžāϕ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ Travis CI āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϕ⧋āĻĨāĻžāĻ“ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤

āφāϰ⧇āĻ•āϟāĻŋ āĻŦāĻŋāώāϝāĻŧ āϞāĻ•ā§āώāĻŖā§€āϝāĻŧ āϝ⧇ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āϞāĻžāχāύ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻŽāĻ—ā§āϰ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ - āĻāϰ āϏāĻžāĻĨ⧇ doctl. āĻāϰ āϜāĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

doctl compute ssh <droplet> --ssh-command "Đ˛ŅĐĩ ĐēĐžĐŧаĐŊĐ´Ņ‹ ĐąŅƒĐ´ŅƒŅ‚ СдĐĩҁҌ && СдĐĩҁҌ"

TLS/SSL āĻāĻŦāĻ‚ āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻŋāĻ‚

āφāĻŽāĻŋ āωāĻĒāϰ⧇ āωāĻ˛ā§āϞāĻŋāĻ–āĻŋāϤ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻŽāĻŋ āϝ⧇ āĻļ⧇āώ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ āϤāĻž āĻšāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ SSL āĻ›āĻŋāϞ āύāĻžāĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻŋ āĻœā§‹āϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ Node.js āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋ Nginx āĻāĻŦāĻ‚ āφāϏ⧁āύ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻŋ, āφāĻĒāύāĻžāϕ⧇ āĻ…āύ⧇āĻ• āϟāĻŋāĻ™ā§āĻ•āĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āφāĻŽāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻāχ āϏāĻŽāĻ¸ā§āϤ SSL āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāχāύāĻŋ, āϤāĻžāχ āφāĻŽāĻŋ āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻŋ āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āĻĄāĻŋāĻāύāĻāϏ-āĻ āĻāϰ āĻŦāĻŋāĻŦāϰāĻŖ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ DigitalOcean-āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒ⧁āύāĻ°ā§āύāĻŦā§€āĻ•āϰāĻŖ āĻ¸ā§āĻŦ-āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāĻŋāϤ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āϏāĻšāϜ, āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇ āĻāĻŦāĻ‚ āĻĻā§āϰ⧁āϤ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĨ¤ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏ⧁āĻŦāĻŋāϧāĻž āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇ āĻāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇ āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ⧇āϰ āĻĒāĻŋāĻ›āύ⧇ āϚāϞāĻŽāĻžāύ āĻāĻ•āĻžāϧāĻŋāĻ• āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ SSL āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž āϖ⧁āĻŦ āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇āĨ¤ āĻāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϗ⧁āϞāĻŋāϕ⧇ āύāĻŋāĻœā§‡āϰāĻžāχ SSL āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ "āϚāĻŋāĻ¨ā§āϤāĻž" āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āύāĻž, āϤāĻŦ⧇ āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§‹āĻ°ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ 80. āϤāĻžāχ āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ⧇ SSL āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻž SSL āϏ⧇āϟ āφāĻĒ āĻ•āϰāĻžāϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻšā§‡āϝāĻŧ⧇ āĻ…āύ⧇āĻ• āϏāĻšāϜ āĻāĻŦāĻ‚ āφāϰāĻ“ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĨ¤

āĻāĻ–āύ āφāĻĒāύāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āĻĒā§‹āĻ°ā§āϟ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āχāύāĻ•āĻžāĻŽāĻŋāĻ‚ āϏāĻ‚āϝ⧋āĻ—āϗ⧁āϞāĻŋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ - āĻĒā§‹āĻ°ā§āϟ āĻ›āĻžāĻĄāĻŧāĻž 80, āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ āĻāĻŦāĻ‚ āĻĒā§‹āĻ°ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ 22 SSH āĻāϰ āϜāĻ¨ā§āϝāĨ¤ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāχ āĻĻ⧁āϟāĻŋ āĻŦā§āϝāϤ⧀āϤ āĻ…āĻ¨ā§āϝ āϕ⧋āύāĻ“ āĻĒā§‹āĻ°ā§āĻŸā§‡ āϏāϰāĻžāϏāϰāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤

āĻĢāϞāĻžāĻĢāϞ

āφāĻŽāĻŋ āĻāχ āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋāϤ⧇ āϝāĻž āϝāĻž āĻŦāϞ⧇āĻ›āĻŋāϞāĻžāĻŽ āϤāĻž āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻĄāĻ•āĻžāϰ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻŦāĻž āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ CI/CD āĻšā§‡āχāύ⧇āϰ āϧāĻžāϰāĻŖāĻžāϗ⧁āϞāĻŋ āφāĻŽāĻžāϕ⧇ āφāϰ āĻ­āϝāĻŧ āĻĻ⧇āĻ–āĻžāϝāĻŧāύāĻŋāĨ¤ āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻšā§‡āχāύ āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋ, āϝāĻžāϰ āϏāĻŽāϝāĻŧ āϕ⧋āĻĄāϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧋āĻĄāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻāĻ–āύāĻ“ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āϤ⧁āϞāύāĻžāĻŽā§‚āϞāĻ•āĻ­āĻžāĻŦ⧇ āύāϤ⧁āύ, āĻāĻŦāĻ‚ āφāĻŽāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āϝ⧇ āφāĻŽāĻžāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻ°ā§āĻŽāĻĒā§āϰāĻŦāĻžāĻš āωāĻ¨ā§āύāϤ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āφāϰāĻ“ āĻĻāĻ•ā§āώ āĻ•āϰāĻžāϰ āωāĻĒāĻžāϝāĻŧ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āϤāĻžāχ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āϕ⧋āύ āϧāĻžāϰāύāĻž āĻĨāĻžāĻ•āϞ⧇ āĻĻāϝāĻŧāĻž āĻ•āϰ⧇ āφāĻŽāĻžāϕ⧇ āϜāĻžāύāĻžāύāĨ¤ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āϜāĻžāύāĻŋ āφāĻŽāĻŋ āφāĻļāĻž āĻ•āϰāĻŋ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻžāϝāĻŧ āφāĻĒāύāĻžāϕ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āϛ⧇āĨ¤ āφāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇ āĻāϟāĻŋ āĻĒāĻĄāĻŧāĻžāϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āφāĻŽāĻŋ āϝāϤāϟāĻž āĻļāĻŋāϖ⧇āĻ›āĻŋ āϤāϤāϟāĻžāχ āĻļāĻŋāϖ⧇āĻ›āĻŋ āϝāĻ–āύ āφāĻŽāĻŋ āĻāϤ⧇ āϝ⧇ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻĨāĻž āĻŦāϞ⧇āĻ›āĻŋ āϤāĻž āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāĨ¤

āĻĻā§āϰāĻˇā§āϟāĻŦā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŦāĻžāϜāĻžāϰ āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϜ āφāϛ⧇ āĻĄāĻ•āĻļā§āϰāĻŽāĻŋāĻ•, āϝāĻž āĻāĻ• āĻ•ā§āϞāĻŋāϕ⧇ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āĻĒāĻžāĻ¤ā§āϰ⧇ āĻ•āĻžāϜ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻ­āĻŋāĻĒāĻŋāĻāϏ. āϏāĻŽāĻ¸ā§āϤ āύāϤ⧁āύ āĻ—ā§āϰāĻžāĻšāĻ•āĻĻ⧇āϰ āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇ 3 āĻĻāĻŋāύ⧇āϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāĻŋāϝāĻŧ āĻĒāĻžāĻ āĻ•āĻ—āĻŖ! āφāĻĒāύāĻŋ āĻ•āĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ CI/CD āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ?

āĻāĻ•āϟāĻŋ āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āĻšā§‡āχāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻžāϜ āĻ•āϰāĻž

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster