рдбрдХрд░ рдХрдореНрдкреЛрдЬ: рдореЗрдХрдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рдорд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрджреИ

рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╣реА рд╡рд░реНрд╖рдорд╛, рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдЙрджреНрдпреЛрдЧрд▓реЗ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдирдмрд╛рдЯ рдЧреБрдЬреНрд░рд┐рд░рд╣реЗрдХреЛ рдЫред рдпреА рдордзреНрдпреЗ рдПрдХ рдШрдЯрдирд╛рд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдорд╛ рдмрдвреНрджреЛ рдЪрд╛рд╕реЛрдХреЛ рд░реВрдкрдорд╛ рдорд╛рдиреНрдпрддрд╛ рджрд┐рди рд╕рдХрд┐рдиреНрдЫред рдпрджреНрдпрдкрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛рд╣рд░реВ рд╕рдмреИрднрдиреНрджрд╛ рдирдпрд╛рдБ рдкреНрд░рд╡рд┐рдзрд┐ рд╣реЛрдЗрди, рднрд░реНрдЦрд░реИ рдпрд╕рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдкрдорд╛ рдЖрдХрд╛рд╢ рдЫред

рдареВрд▓рд╛ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ рд╕реЗрд╡рд╛рд╣рд░реВ рдЕрдм рд╕реНрд╡рддрдиреНрддреНрд░, рд╕реНрд╡рд╛рдпрддреНрдд рд▓рдШреБ рд╕реЗрд╡рд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рднрдЗрд░рд╣реЗрдХрд╛ рдЫрдиреНред рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕рд▓рд╛рдИ рдПрдЙрдЯреИ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдПрдХрд▓ рд░ рдзреЗрд░реИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдп рдкреВрд░рд╛ рдЧрд░реНрджрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдпреЛ рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ DBMS, рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдПрдХ Solr рд╕реЗрд╡рд╛ рд╣реБрди рд╕рдХреНрдЫред

рдбрдХрд░ рдХрдореНрдкреЛрдЬ: рдореЗрдХрдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рдорд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрджреИ

рдЖрдЬрдХрд▓, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реА рдирдпрд╛рдБ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫред рд░ рдпреЛ рдЕрд╡рд╕реНрдерд╛, рдмрд╛рд░реАрдорд╛, рд╣рд╛рдореАрд▓рд╛рдИ рдбрдХрд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рд▓реИрдЬрд╛рдиреНрдЫред

рдбрдХрд░

рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо рдбрдХрд░, рдорд╛рдЗрдХреНрд░реЛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╡рд┐рдХрд╛рд╕ рд░ рддреИрдирд╛рддреАрдорд╛, рд▓рдЧрднрдЧ рдПрдХ рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ рднрдПрдХреЛ рдЫред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдбрдХрд░ рдПрдХ рдорд╛рддреНрд░ рд╕реНрд╡рддрдиреНрддреНрд░ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреЗрд╢рди рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╣реЛ рдЬрд╕рд▓реЗ рд╕рдВрдЧрдардирд╣рд░реВрд▓рд╛рдИ рд╕рд╣рдЬ рд░реВрдкрдорд╛ рдХреБрдиреИ рдкрдирд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рд╕рд╛рдереИ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХреБрдиреИ рдкрдирд┐ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рд╡рд┐рддрд░рдг рдЧрд░реНрди рд░ рдЪрд▓рд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ - рд╣рд╛рдЗрдмреНрд░рд┐рдб рдХреНрд▓рд╛рдЙрдбрджреЗрдЦрд┐ рдХрд┐рдирд╛рд░рд╛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ред

рдбрдХрд░ рд░рдЪрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдкреНрд░рд╡рд┐рдзрд┐ рдбрдХрд░ рд░рдЪрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдмрд╣реБ-рдХрдиреНрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛред рдбрдХрд░ рдХрдореНрдкреЛрдЬ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬрддрд┐ рдзреЗрд░реИ рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрди рд╕рдХреНрдЫред

рдбрдХрд░ рдХрдореНрдкреЛрдЬрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛, рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд╕реЗрд╡рд╛рд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд░ рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рдЙрдиреАрд╣рд░реВрдХреЛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди YAML рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдбрдХрд░ рдХрдореНрдкреЛрдЬ рдпрд╕реИрд▓реЗ рдмрд╣реБ-рдХрдиреНрдЯреЗрдирд░ рдбрдХрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрди рд░ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдЙрдкрдХрд░рдг рд╣реЛред

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

GNU рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН

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

рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрддрд╛рдЙрди make рд╣рд╛рдореА рдпрд╕рдмрд╛рдЯ рдХреЗ рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреНрдиреЗ рдмрд╛рд░реЗ, рд╣рд╛рдореАрд▓рд╛рдИ рдлрд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдиреНрдЫ Makefile.

рд╣рд╛рдореНрд░реЛрдорд╛ Makefile рдирд┐рдпрдорд┐рдд рдЖрджреЗрд╢рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫ docker ╨╕ docker-compose, рдЬреБрди рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рдЕрд░реНрдерд╛рддреН, рд╣рд╛рдореА рдХрдиреНрдЯреЗрдирд░ рдЬрдореНрдорд╛ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрджреИрдЫреМрдВ, рдпрд╕рд▓рд╛рдИ рд╕реБрд░реБ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ, рдпрд╕рд▓рд╛рдИ рд░реЛрдХреНрди, рдпрд╕рд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреЗ, рдХрдиреНрдЯреЗрдирд░рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд▓рдЧрдЗрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ, рдХрдиреНрдЯреЗрдирд░ рд▓рдЧрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ, рд░ рдЕрдиреНрдп рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдмрд╛рд░реЗред

рдбрдХрд░ рдХрдореНрдкреЛрдЬрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЧ рдХреЗрд╕рд╣рд░реВ

рдирд┐рдореНрди рдЕрд╡рдпрд╡рд╣рд░реВ рднрдПрдХреЛ рдирд┐рдпрдорд┐рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдХрд▓реНрдкрдирд╛ рдЧрд░реМрдВ:

  • TimescaleDB рдбрд╛рдЯрд╛рдмреЗрд╕ (Postgres)ред
  • Express.js рдЖрд╡реЗрджрдиред
  • рдкрд┐рдВрдЧ (рдХреЗрд╡рд▓ рдПрдХ рдХрдиреНрдЯреЗрдирд░, рдХреЗрд╣рд┐ рд╡рд┐рд╢реЗрд╖ рдЧрд░реНрджреИрди)ред

рдпреЛ рдПрдкрд▓рд╛рдИ рей рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░ рд░ рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓ рдЪрд╛рд╣рд┐рдиреНрдЫ 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 рдбрд╛рдЯрд╛рдмреЗрд╕ рд╡рд┐рд░реБрджреНрдз SQL рдкреНрд░рд╢реНрдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиред

рдбрдХрд░ рдХрдореНрдкреЛрдЬ: рдореЗрдХрдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рдорд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрджреИ
рдЯрд╛рдЗрдорд╕реНрдХреЗрд▓реНрдбрдмреА рдХрдиреНрдЯреЗрдирд░рдорд╛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди