рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рдореЗрдХрдлрд╛рдИрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реБрд▓рдн рдХрд░рдгреЗ

рджрд░ рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдиреА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдЗрдВрдбрд╕реНрдЯреНрд░реАрдордзреНрдпреЗ рдмрджрд▓ рд╣реЛрддреЛ. рдпрд╛рддреАрд▓ рдПрдХ рдШрдЯрдирд╛ рдореНрд╣рдгрдЬреЗ рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрдд рд╡рд╛рдврдгрд╛рд░реА рд╕реНрд╡рд╛рд░рд╕реНрдп рдореНрд╣рдгреВрди рдУрд│рдЦрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдЬрд░реА рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рд╣реЗ рдирд╡реАрди рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдирд╕рд▓реЗ рддрд░реА рдЕрд▓реАрдХрдбреЗрдЪ рддреНрдпрд╛рдЪреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдЕрдХреНрд╖рд░рд╢рдГ рдЧрдЧрдирд╛рд▓рд╛ рднрд┐рдбрд▓реА рдЖрд╣реЗ.

рдореЛрдареНрдпрд╛ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рд╕реЗрд╡рд╛рдВрдЪреА рдЬрд╛рдЧрд╛ рдЖрддрд╛ рд╕реНрд╡рддрдВрддреНрд░, рд╕реНрд╡рд╛рдпрддреНрдд рд╕реВрдХреНрд╖реНрдо рд╕реЗрд╡рд╛рдВрдиреА рдШреЗрддрд▓реА рдЖрд╣реЗ. рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореНрд╣рдгреВрди рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рдЬреЛ рдПрдХрд▓ рдЖрдгрд┐ рдЕрддрд┐рд╢рдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЗ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреАрдмреАрдПрдордПрд╕, рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реЛрд▓рд░ рд╕реЗрд╡рд╛ рдЕрд╕реВ рд╢рдХрддреЗ.

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рдореЗрдХрдлрд╛рдИрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реБрд▓рдн рдХрд░рдгреЗ

рдЖрдЬрдХрд╛рд▓, рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рди рд╡рд╛рдкрд░рддрд╛ рдирд╡реАрди рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рдгреЗ рдХрдареАрдг рдЖрд╣реЗ. рдЖрдгрд┐ рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбреЙрдХрд░ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдШреЗрдКрди рдЬрд╛рддреЗ.

рдЧреЛрджреА рдХрд╛рдордЧрд╛рд░

рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЧреЛрджреА рдХрд╛рдордЧрд╛рд░, рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рдЙрдкрдпреЛрдЬрдирд╛рдордзреНрдпреЗ, рдЬрд╡рд│рдЬрд╡рд│ рдПрдХ рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ рдмрдирд▓реЗ рдЖрд╣реЗ. рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рддреБрдореНрд╣реА рд╣реЗ рд╢реЛрдзреВ рд╢рдХрддрд╛ рдХреА рдбреЙрдХрд░ рд╣реЗ рдПрдХрдореЗрд╡ рд╕реНрд╡рддрдВрддреНрд░ рдХрдВрдЯреЗрдирд░рд╛рдпрдЭреЗрд╢рди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЖрд╣реЗ рдЬреЗ рд╕рдВрд╕реНрдерд╛рдВрдирд╛ рдХреЛрдгрддреЗрд╣реА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╣рдЬрддреЗрдиреЗ рддрдпрд╛рд░ рдХрд░реВ рджреЗрддреЗ, рддрд╕реЗрдЪ рддреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд - рд╣рд╛рдпрдмреНрд░рд┐рдб рдХреНрд▓рд╛рдЙрдбреНрд╕рдкрд╛рд╕реВрди рддреЗ рдПрдЬ рд╕рд┐рд╕реНрдЯрдореНрд╕рдкрд░реНрдпрдВрдд рд╡рд┐рддрд░рд┐рдд рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рдбреЙрдХрд░ рд▓рд┐рд╣рд┐рдгреЗ

рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдбреЙрдХрд░ рд▓рд┐рд╣рд┐рдгреЗ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ. рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рддрд┐рддрдХреЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдЕрд╕реВ рд╢рдХрддрд╛рдд.

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭрд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдПрдХрдореЗрдХрд╛рдВрд╢реА рддреНрдпрд╛рдВрдЪреЗ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА YAML рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ. рддреНрдпрд╛рдореБрд│реЗ рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ рд╣реЗ рдорд▓реНрдЯреА-рдХрдВрдЯреЗрдирд░ рдбреЙрдХрд░ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреЗ рд╡рд░реНрдгрди рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ.

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рдореЗрдХрдлрд╛рдИрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реБрд▓рдн рдХрд░рдгреЗ
рд╣реЛрд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реЗ рджреЛрди рдХрдВрдЯреЗрдирд░

рдЬреАрдПрдирдпреВ рдореЗрдХ

рдХрд╛рд░реНрдпрдХреНрд░рдо make, рдореВрд▓рдд: рд╕реЛрд░реНрд╕ рдХреЛрдбрд╡рд░реВрди рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪреНрдпрд╛ рдмрд┐рд▓реНрдбрд┐рдВрдЧрд▓рд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЖрдкрдг рдЕрд╕реЗ рдореНрд╣рдгреВ рд╢рдХрддреЛ make рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдХрд╛рд╣реА рдЗрдирдкреБрдЯ рд╕рд╛рдордЧреНрд░реАрдЪреЗ рдХрд╛рд╣реА рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкрд╛рдд, рдХрд╛рд╣реА рдЙрджреНрджрд┐рд╖реНрдЯрд╛рдд рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЖрджреЗрд╢рд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдЬреНрдЮрд╛ docker-compose рдЕрдореВрд░реНрдд рд▓рдХреНрд╖реНрдпрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ (рдлреЛрди рд▓рдХреНрд╖реНрдп).

рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╛рдВрдЧрдгреНрдпрд╛рд╕рд╛рдареА make рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рддреВрди рдХрд╛рдп рд╣рд╡реЗ рдЖрд╣реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдлрд╛рдИрд▓ рд╣рд╡реА рдЖрд╣реЗ Makefile.

рдЖрдордЪреНрдпрд╛ рдордзреНрдпреЗ Makefile рдирд┐рдпрдорд┐рдд рдЖрджреЗрд╢ рдЕрд╕рддреАрд▓ docker ╨╕ docker-compose, рдЬреЗ рдЕрдиреЗрдХ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА рдХрдВрдЯреЗрдирд░ рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓, рддреЗ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓, рддреЗ рдерд╛рдВрдмрд╡рдгреНрдпрд╛рдмрджреНрджрд▓, рддреЗ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓, рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓, рдХрдВрдЯреЗрдирд░ рд▓реЙрдЧрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдЖрдгрд┐ рдЗрддрд░ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд.

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭрд╕рд╛рдареА рдард░рд╛рд╡рд┐рдХ рд╡рд╛рдкрд░ рдкреНрд░рдХрд░рдгреЗ

рдЪрд▓рд╛ рдПрдХрд╛ рдирд┐рдпрдорд┐рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░реВрдпрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдШрдЯрдХ рдЖрд╣реЗрдд:

  • TimescaleDB рдбреЗрдЯрд╛рдмреЗрд╕ (Postgres).
  • Express.js рдЕрд░реНрдЬ.
  • рдкрд┐рдВрдЧ (рдлрдХреНрдд рдПрдХ рдХрдВрдЯреЗрдирд░, рдХрд╛рд╣реА рд╡рд┐рд╢реЗрд╖ рдХрд░рдд рдирд╛рд╣реА).

рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕ 3 рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдЖрдгрд┐ рдлрд╛рдЗрд▓рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ docker-compose, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╣реЗ рдХрдВрдЯреЗрдирд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реВрдЪрдирд╛ рдЖрд╣реЗрдд. рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдЯрдЪрдкреЙрдЗрдВрдЯ рдЕрд╕рддреАрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрдВрдЯреЗрдирд░рд╕рд╣ timescale рддреЗ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рддреНрдпрд╛рдЪ рдкрджреНрдзрддреАрдиреЗ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрдИрд▓. рдмрд╣реБрджрд╛, рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ:

  • рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд╢реЗрд▓рдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рдд рдЖрд╣реЗ.
  • рдЯреЗрдмрд▓ рдЖрдпрд╛рдд рдЖрдгрд┐ рдирд┐рд░реНрдпрд╛рдд.
  • рдирд┐рд░реНрдорд┐рддреА 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 рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рд░реБрджреНрдз SQL рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рдореЗрдХрдлрд╛рдИрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реБрд▓рдн рдХрд░рдгреЗ
timescaledb рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ psql рдЪрд╛рд▓рд╡рдгреЗ

  • 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, рд╣реЗ рд╕рд╣рдпреЛрдЧ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рддреНрд░реБрдЯреА рдХрдореА рдХрд░рддреЗ.

PS рдЖрдордЪреНрдпрд╛ рдордзреНрдпреЗ рдмрд╛рдЬрд╛рд░рдкреЗрда рдПрдХ рдкреНрд░рддрд┐рдорд╛ рдЖрд╣реЗ рдЧреЛрджреА рдХрд╛рдордЧрд╛рд░, рдЬреЗ рдПрдХрд╛ рдХреНрд▓рд┐рдХрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдпреЗрдереЗ рдЖрдкрдг рдХрдВрдЯреЗрдирд░рдЪреЗ рдСрдкрд░реЗрд╢рди рддрдкрд╛рд╕реВ рд╢рдХрддрд╛ VPS. рд╕рд░реНрд╡ рдирд╡реАрди рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ 3 рджрд┐рд╡рд╕рд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдореЛрдлрдд рджрд┐рд▓реА рдЬрд╛рддреЗ.

рдкреНрд░рд┐рдп рд╡рд╛рдЪрдХ! рддреБрдореНрд╣реА рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд╕реЗ рдХрд░рддрд╛?

рдбреЙрдХрд░ рдХрдВрдкреЛрдЭ: рдореЗрдХрдлрд╛рдИрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реБрд▓рдн рдХрд░рдгреЗ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛