āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨

āĻĒā§āĻ°āĻ¤āĻŋ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻ›āĻ°, āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻļāĻŋāĻ˛ā§āĻĒ āĻāĻ•āĻŸāĻŋ āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž. āĻāĻ‡ āĻ˜āĻŸāĻ¨āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĻ•ā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ¸ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋ āĻ•ā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻ†āĻ—ā§āĻ°āĻš āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸ā§āĻŦā§€āĻ•ā§ƒāĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋāĻ“ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻāĻ° āĻœāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧāĻ¤āĻž āĻ†āĻ•ā§āĻˇāĻ°āĻŋāĻ• āĻ…āĻ°ā§āĻĨā§‡āĻ‡ āĻ†āĻ•āĻžāĻļāĻšā§āĻŽā§āĻŦā§€ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

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

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨

āĻ†āĻœāĻ•āĻžāĻ˛ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻž āĻ•āĻ āĻŋāĻ¨āĨ¤ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ, āĻ˜ā§āĻ°ā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĄāĻ•āĻžāĻ° āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤

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

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

āĻĄāĻ•āĻžāĻ° āĻ°āĻšāĻ¨āĻž

āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ āĻĄāĻ•āĻžāĻ° āĻ°āĻšāĻ¨āĻž āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡ āĻ¸ā§‡āĻ‡ āĻĒā§āĻ°ā§‹āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸ā§āĻ°āĻˇā§āĻŸāĻžāĻ° āĻ¯āĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻĄāĻ•āĻžāĻ° āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻ•āĻŸāĻŋ YAML āĻĢāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻĄāĻ•āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻŦāĻ‚ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ˛āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻāĻ•āĻŸāĻŋ āĻšā§‹āĻ¸ā§āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻĻā§āĻŸāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§‡

āĻœāĻŋāĻāĻ¨āĻ‡āĻ‰ āĻŽā§‡āĻ• āĻ•āĻ°ā§āĻ¨

āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ make, āĻ¸āĻ‚āĻ•ā§āĻˇā§‡āĻĒā§‡, āĻ‰āĻ¤ā§āĻ¸ āĻ•ā§‹āĻĄ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻāĻŦāĻ‚ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ˛āĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻāĻŸāĻŋ āĻŦāĻ˛āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ make āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯ā§‹āĻœā§āĻ¯ āĻ¯āĻž āĻ•āĻŋāĻ›ā§ āĻ‰ā§ŽāĻ¸ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ•ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻļā§‡āĻˇ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡, āĻ•ā§‹āĻ¨ā§‹ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ†āĻĻā§‡āĻļā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻœāĻĄāĻŧāĻŋāĻ¤āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ•āĻŽāĻžāĻ¨ā§āĻĄ docker-compose āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤ āĻ˛āĻ•ā§āĻˇā§āĻ¯ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻŦā§‡ (āĻ­ā§āĻ¯āĻŧāĻž āĻ˛āĻ•ā§āĻˇā§āĻ¯āĻŦāĻ¸ā§āĻ¤ā§).

āĻ•āĻ°ā§āĻŽāĻ¸ā§‚āĻšā§€ āĻœāĻžāĻ¨āĻžāĻ¤ā§‡ make āĻ†āĻŽāĻ°āĻž āĻ¤āĻžāĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻ•āĻŋ āĻšāĻžāĻ‡ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻ°āĻ•āĻžāĻ° Makefile.

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ Makefile āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĨāĻžāĻ•āĻŦā§‡ docker и docker-compose, āĻ¯āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¯āĻĨāĻž, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻ• āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž, āĻāĻŸāĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž, āĻāĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻž, āĻāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž, āĻ§āĻžāĻ°āĻ•āĻŸāĻŋāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤ āĻ•āĻ°āĻž, āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ•āĻĨāĻž āĻŦāĻ˛āĻ›āĻŋāĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡

āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡āĻŸāĻŋāĻ¤ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  • TimescaleDB āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ (Postgres)āĨ¤
  • Express.js āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĨ¤
  • āĻĒāĻŋāĻ‚ (āĻļā§āĻ§ā§ āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻ• āĻ¯āĻž āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°ā§‡ āĻ¨āĻž)āĨ¤

āĻāĻ‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ 3āĻŸāĻŋ āĻĄāĻ•āĻžāĻ° āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ docker-composeāĻāĻ‡ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€. āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻ• āĻ¸āĻ™ā§āĻ—ā§‡ timescale āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻŽāĻ¤ā§‹ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ•āĻ‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡āĨ¤ āĻ¯āĻĨāĻž, āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ:

  • Postgres āĻļā§‡āĻ˛ā§‡ āĻ˛āĻ—āĻ‡āĻ¨ āĻ•āĻ°ā§āĻ¨āĨ¤
  • āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ.
  • āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ pg_dump āĻŸā§‡āĻŦāĻŋāĻ˛ āĻŦāĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĨ¤

Express.js āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°, expressjs, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

  • āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ˛āĻ— āĻĨā§‡āĻ•ā§‡ āĻ¨āĻ¤ā§āĻ¨ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĨ¤
  • āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻļā§‡āĻ˛ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ¨ā§‹ āĻšāĻšā§āĻ›ā§‡āĨ¤

āĻĒāĻžāĻ¤ā§āĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž

āĻāĻ–āĻ¨ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻāĻ–āĻ¨ āĻāĻ‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤ āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ†āĻ›ā§‡ docker-compose, āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ -f, āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ docker-compose.yml.

āĻāĻ‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ docker-compose.yml.

āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•ā§‡āĻŽāĻ¨ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ āĻ¤āĻž āĻĻā§‡āĻ–ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• docker-compose. āĻ†āĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻļā§‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ psql, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

āĻāĻ•āĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ, āĻ¯āĻž āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧ āĻ¨āĻž docker-composeāĻāĻŦāĻ‚ docker, āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

docker exec -it  edp_timescale_1 psql -Upostgres

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

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ‰āĻ­āĻ¯āĻŧ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ‡ āĻœāĻŸāĻŋāĻ˛ āĻ¨āĻ¯āĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻĢāĻ°ā§āĻŽā§‡ "āĻ°ā§āĻ¯āĻžāĻĒāĻžāĻ°" āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ Makefile, āĻ¯āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĻā§‡āĻŦā§‡ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĻā§€āĻ°ā§āĻ˜ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻŦā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ•āĻ‡ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻ—ā§āĻ˛āĻŋ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡:

make db-shell

āĻāĻŸāĻž āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ¯ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° Makefile āĻŦā§āĻ¯āĻžāĻĒāĻ•āĻ­āĻžāĻŦā§‡ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻ¸āĻ™ā§āĻ—ā§‡ āĻ•āĻžāĻœ āĻ¸āĻšāĻœāĻ¤āĻ°!

āĻ•āĻžāĻœā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ docker-compose.yml:

version: '3.3'
services:
    api:
        build: .
        image: mywebimage:0.0.1
        ports:
            - 8080:8080
        volumes:
            - /app/node_modules/
        depends_on:
            - timescale
        command: npm run dev
        networks:
            - webappnetwork
    timescale:
        image: timescale/timescaledb-postgis:latest-pg11
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
        volumes:
          - ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
        networks:
           - webappnetwork
    ping:
       image: willfarrell/ping
       environment:
           HOSTNAME: "localhost"
           TIMEOUT: 300
networks:
   webappnetwork:
       driver: bridge

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻĒāĻžāĻ¤ā§āĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ Makefile:

THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
        make -pRrq  -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
        docker-compose -f docker-compose.yml build $(c)
up:
        docker-compose -f docker-compose.yml up -d $(c)
start:
        docker-compose -f docker-compose.yml start $(c)
down:
        docker-compose -f docker-compose.yml down $(c)
destroy:
        docker-compose -f docker-compose.yml down -v $(c)
stop:
        docker-compose -f docker-compose.yml stop $(c)
restart:
        docker-compose -f docker-compose.yml stop $(c)
        docker-compose -f docker-compose.yml up -d $(c)
logs:
        docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
        docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
        docker-compose -f docker-compose.yml ps
login-timescale:
        docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
        docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
        docker-compose -f docker-compose.yml exec timescale psql -Upostgres

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

āĻĒāĻ°ā§‡ Makefile āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤, āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

  • make help - āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻœāĻžāĻ°āĻŋ āĻ•āĻ°āĻž make.

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯

  • make build - āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‡āĻŽā§‡āĻœ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ Dockerfile. āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ timescale и ping. āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ‡āĻŽā§‡āĻœ api āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ—āĻĄāĻŧā§‡ āĻ¤ā§āĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤ āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡ āĻ āĻŋāĻ• āĻāĻŸāĻŋāĻ‡ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻāĻ•āĻŸāĻŋ āĻĄāĻ•āĻžāĻ° āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž

  • make start - āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻ• āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ make start c=timescale.

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻ•ā§‡āĻ˛ āĻ§āĻžāĻ°āĻ• āĻšāĻ˛āĻŽāĻžāĻ¨

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻ‚ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻšāĻ˛āĻ›ā§‡

  • make login-timescale - āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°ā§‡āĻ° āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§‡āĻļāĻ¨ā§‡ āĻ˛āĻ—āĻ‡āĻ¨ āĻ•āĻ°ā§āĻ¨ timescale.

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻ•ā§‡āĻ˛ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻŦā§āĻ¯āĻžāĻļ āĻšāĻ˛āĻ›ā§‡

  • make db-shell - āĻĒā§āĻ°āĻŦā§‡āĻļāĻĻā§āĻŦāĻžāĻ° psql āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ timescale āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§‡ āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ•ā§‹āĻ¯āĻŧā§‡āĻ°āĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻ•ā§‡āĻ˛āĻĄāĻŦāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĒāĻŋāĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻšāĻšā§āĻ›ā§‡

  • make stop - āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĨāĻžāĻŽāĻžāĻ¨āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻŸāĻžāĻ‡āĻŽāĻ¸ā§āĻ•ā§‡āĻ˛ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĨāĻžāĻŽāĻžāĻ¨ā§‹

  • make down - āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻĨāĻžāĻŽāĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ§āĻžāĻ°āĻ• āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻ›āĻ¨ā§āĻĻāĻ¸āĻ‡ āĻ§āĻžāĻ°āĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ - make down c=timescale āĻŦāĻž make down c=api.

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨
āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻŽā§āĻ›ā§āĻ¨

āĻĢāĻ˛āĻžāĻĢāĻ˛

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

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ Makefile āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻāĻŦāĻ‚ āĻ¸āĻšāĻœ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§‡āĻ›ā§‡ā§ˇ docker-compose.yml. āĻ¯āĻĨāĻž, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ›āĻŋ:

  • āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻĒāĻžāĻ¤ā§āĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ docker-compose.yml, āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻ•āĻžāĻœ āĻšāĻ¸ā§āĻ¤āĻ•ā§āĻˇā§‡āĻĒ āĻ¨āĻž.
  • āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ make help āĻāĻŦāĻ‚ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻĒāĻžāĻ¨āĨ¤
  • āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻ— āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°āĻžāĻ° āĻŽāĻ¤ā§‹ āĻœāĻŋāĻ¨āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻĻā§€āĻ°ā§āĻ˜ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŽāĻ¤ docker-compose -f docker-compose.yml exec timescale psql -Upostgres āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ make db-shell.
  • āĻĢāĻžāĻ‡āĻ˛ Makefile āĻ†āĻĒāĻ¨āĻŋ, āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻŦā§ƒāĻĻā§āĻ§āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŦā§āĻ¯āĻžāĻ•āĻ†āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻž āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ¸āĻšāĻœāĨ¤
  • āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĻāĻ˛ āĻāĻ•āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ Makefile, āĻāĻŸāĻŋ āĻ¸āĻšāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŽāĻ˛āĻžāĻ‡āĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°ā§‡ā§ˇ

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

āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻžāĻ āĻ•āĻ—āĻŖ! āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻĄāĻ•āĻžāĻ° āĻ°āĻšāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻŦā§‡āĻ¨?

āĻĄāĻ•āĻžāĻ° āĻ•āĻŽā§āĻĒā§‹āĻœ: āĻŽā§‡āĻ•āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻžāĻœ āĻ¸āĻšāĻœ āĻ•āĻ°ā§āĻ¨

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

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