рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд▓реЛрд╣реЗ рдФрд░ рдЖрднрд╛рд╕реА рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдардкреБрддрд▓реА рдФрд░ рд╣рд┐рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдЙрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд┐ рдЖрдк рд╣рд┐рд░рд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рд╣рд┐рд░рд╛ рдХрд╛ рдЕрд╕рд▓реА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред
рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
рд╣реИрдВ:
- рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдХрдардкреБрддрд▓реА рдФрд░ рд╣реАрд░рд╛ рдХреНрдпрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рд╣реИ
- рдЖрдкрдХреА рдХрдВрдкрдиреА рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЯреАрдореЗрдВ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рд╕реНрддрд░ рдкрд░ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдЖрдк рдПрдХ рдкрдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдиреЛрдб рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рдЖрдк рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЖрдХрд╛рд░ рддрдХ рдмрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ
- рдХреНрдпрд╛ рдЖрдк рджрд┐рд╡реНрдп рдпрд╛рдореНрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдврд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ :)
- рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдЦ рд▓рдВрдмрд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдЙрдкрдпреЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдардкреБрддрд▓реА рд╕реЗ рд╣рд┐рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдФрд░ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рдХрдардкреБрддрд▓реА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрджрд┐ рд╣рд┐рд░рд╛ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛
- рд╣рдорд╛рд░реЗ рдкрд╛рд╕ SEMrush рдореЗрдВ рд▓рдЧрднрдЧ 30 рд╡рд┐рдХрд╛рд╕ рджрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рд╣реИ
- рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ (рдкреАрдПрд▓, рдбреАрдмреАрдПрдордПрд╕, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред
- рдЯреАрдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ)
- рдЯреАрдореЗрдВ рд╕реНрд╡рдпрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддреИрдирд╛рддреА рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреА рд╣реИрдВ (рдпрд╣ рдкрдкреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
рдереЛрдбрд╝рд╛ рд╕рд╛ рдЗрддрд┐рд╣рд╛рд╕
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 3 рдкрдкреЗрдЯ рдореЗрдВ рд╕рдм рдХреБрдЫ рдерд╛, рдлрд┐рд░ рд╣рдордиреЗ 4 рд╡реЗрдВ рдкрдкреЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рд╕рднреА рдирдП рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛, рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ 4 рд╡реЗрдВ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ред
рддреАрд╕рд░реЗ рдкрдкреЗрдЯ рдореЗрдВ, рд╣рдо рдиреЛрдб рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗред рдореЙрдбреНрдпреВрд▓ рдЧреАрддрд╛рд▓рд╛рдм рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдореВрд╣ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдереЗ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрдкреЗрдЯ рд╕рд░реНрд╡рд░ ( r10k рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ) рдкрд░ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдкрдкреЗрдЯ рдПрдЬреЗрдВрдЯ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ рдЖрдП рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред
рддрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкреБрдкреНрд▓реЗрдлрд╛рдЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ рдбрд╛рд▓ рджрд┐рдПред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдореБрджрд╛рдп рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдорд░реНрдерди рдФрд░ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ), рдФрд░ рд╣рдорд╛рд░реЗ рд╕реНрдерд╛рдиреАрдп рдирд╣реАрдВ рд╣реИрдВред рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рд┐рд░реЗ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдиреЛрдб рдлрд╛рдЗрд▓реЗрдВ (рдЬреИрд╕реЗ рдиреЛрдбреНрд╕.рдкреАрдкреА) рдЧреБрдордирд╛рдореА рдореЗрдВ рдбреВрдм рдЧрдИрдВред
рдЪреМрдереЗ рдкрдкреЗрдЯ рдореЗрдВ, рд╣рдордиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдиреАрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдХреЗрд╡рд▓ рджреВрд░рд╕реНрде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЖрд░рдХреНрд╖рдг рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛", рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЕрднреА рднреА рдЦреБрдж рдХреЛ рдХреБрдЫ рдХрд░рдирд╛ рдФрд░ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓ hiera рдФрд░ рдХреЛрдИ рдиреЛрдб рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВред
рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдХреЗ рд╕рд╛рде 30 рдЯреАрдореЗрдВ рд╣реЛрдВ, рддреЛ> 1000 рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ menagerie рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреАрд╡реНрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЖрдЧреЗ рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рд┐рд░рд╛ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрдХреНрд░рдо
рд╣рд┐рдпрд░рд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдЗрд╕рдХрд╛ рдирд╛рдо рдорд┐рд▓рд╛) рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рд╛рде, рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
--- :hierarchy: - "nodes/%{::fqdn}" - "teams/%{::team}_team/nodes/%{::fqdn}" - "teams/%{::team}_team/projects/%{::project}/tiers/%{::tier}" - "teams/%{::team}_team/projects/%{::project}/%{::role}" - "teams/%{::team}_team/projects/%{::project}" - "teams/%{::team}_team/roles/%{::role}" - "teams/%{::team}_team/%{::team}" - "projects/%{::project}/tiers/%{::tier}/%{::role}" - "projects/%{::project}/tiers/%{::tier}" - "projects/%{::project}/%{::role}" - "projects/%{::project}" - "tiers/%{::tier}" - "virtual/%{::virtual}" - "os/%{::operatingsystem}/%{::operatingsystemmajrelease}" - "os/%{::operatingsystem}" - users - common
рдкрд╣рд▓реЗ, рдЕрд╕реНрдкрд╖реНрдЯ рдЪрд░ (рддрдереНрдпреЛрдВ) рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред
SEMrush рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ 4 рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╢реЗрд╖ рддрдереНрдп рдЬреЛ рдЗрд╕рдХреА рд╕рдВрдмрджреНрдзрддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
team
рддрдереНрдп - рдпрд╣ рдХрд┐рд╕ рдЯреАрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ- рддрдереНрдп
project
- рдпрд╣ рдХрд┐рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ role
рддрдереНрдп - рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдереНрдп - рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдордВрдЪрди рдХрд░рддрд╛ рд╣реИ (рдареЗрд╕, рдкрд░реАрдХреНрд╖рдг, рджреЗрд╡)
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдкрдкреЗрдЯ рдПрдЬреЗрдВрдЯ, рдкрдкреЗрдЯ рдорд╛рд╕реНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИ рдФрд░ рдЗрди рддрдереНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕рд░реНрд╡рд░ рдЦреБрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд░рд╛рд╕реНрддреЗ рдФрд░ рдЙрдирдХреЗ рддрдереНрдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред
рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди, рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ (рдЕрдХреНрд╕рд░, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╛рдирдХрд╛рд░ рд▓реЛрдЧ рдЦреБрдж рд╕реЗ рдкреНрд░рд╢рд╛рд╕рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рд╣реЛрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, nginx рдХреЗ рд╕рд╛рде рдХреБрдЫ рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░, рдЕрдЬрдЧрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрдХреЗрдВрдб рд╕рд░реНрд╡рд░, рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдбрд┐рд╕ рд╕рд░реНрд╡рд░ mysql рдХреЗ рд╕рд╛рде рдПрдХ db рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдХреЛ рднреВрдорд┐рдХрд╛рдПрдВ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рддреИрдирд╛рддреА рдФрд░ рдЕрдкрдиреА ssh рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рдореЗрдВ, рд╕реЗрд╡рд╛ рдЖрдорддреМрд░ рдкрд░ рд╡рд░реНрдгрд┐рдд рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреА рд╣реИ - рдЗрд╕ рд╕рд░реНрд╡рд░ рдХрд╛ рдХреНрдпрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ (nginx, python, mysql, рдЖрджрд┐) рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд┐рдпрд░ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЕрдЧрд░ рд╣рдореЗрдВ рджреЗрд╡ рдордВрдЪ рдкрд░ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдПрдХ рдкреНрд░рддрд┐ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ (рдкрд╛рд╕рд╡рд░реНрдб, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЗрд╡-рд╕рд░реНрд╡рд░ рдФрд░ рдареЗрд╕-рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрдВрдЧреЗ рдХрд┐ рдЯрд┐рдпрд░ рд╡рд╛рдВрдЫрд┐рдд "рд╕реНрдерд┐рддрд┐" (рдареЗрд╕ рдпрд╛ рджреЗрд╡) рдкрд░ рд╕реЗрдЯ рд╣реИред рдФрд░ рдлрд┐рд░ рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рдФрд░ рд╣рд┐рдпрд░рд╛ рдХрд░ рджреЗрдЧрд╛ред
рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ рд╣реА рднреВрдорд┐рдХрд╛ рдореЗрдВ рджреЛ рд╕рдорд╛рди рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВ, рддреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдПрдХ рдФрд░ рд╣рд┐рд╕реНрд╕рд╛ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрдПрдЧрд╛ред рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдк {fqdn }.yaml
рдХреЗ рдирд╛рдо рд╕реЗ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, nodes/myserver.domain.net
), рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЪрд░ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗред
рдЙрджрд╛рд╣рд░рдг: php рдХреЛрдб рд╡рд╛рд▓реЗ рджреЛ рдмреИрдХрдПрдВрдб рдПрдХ рд╣реА рднреВрдорд┐рдХрд╛ рдореЗрдВ рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдмреИрдХрдЕрдк рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╣рдо рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднреВрдорд┐рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдФрд░ nodes/backend1.semrush.net
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░рдЦрдирд╛ рд╣реИред
рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ teams/team-name.yaml
рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдпрд╣ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рднреАред
рдЗрди рдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛ рд╣реИ ред рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдорд┐рд▓реА рдлрд╝рд╛рдЗрд▓ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрдЧреА, рдЙрд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдЪрд░ рдЗрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЕрд░реНрдерд╛рддреН, рднреВрдорд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ " projects/%{::project}/%{::role}
" рдореЗрдВ рдЪрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ " projects/%{::project}
" рдореЗрдВ рдЪрд░ рдкрд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддрд╛ рд╣реИред рдЪрд░ рднреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рд╡рд┐рд▓рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдФрд░ / рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ / рднреВрдорд┐рдХрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП mysql config рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ, рдЖрдк рд╡рд┐рд╢реЗрд╖ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╡рдЬрди рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреНрдп рд╕реНрддрд░реЛрдВ рдкрд░ рд╕рдорд╛рди рдЪрд░ рдореЗрдВ рд╣реЛ (рджрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрднрд╛рдЧ рд╣реЛрдЧрд╛)ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ " hieradata/nodes/%{::fqdn}
" рдкрде рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдб рдХреА рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдиреЛрдб рдлрд╝рд╛рдЗрд▓ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдорд╛рдВрдб рд╕реНрддрд░ рдкрд░ред рдиреАрдЪреЗ рд╡рд╣ рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ рдЕрдиреНрдп, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрдереНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:
- "virtual/%{::virtual}" - "os/%{::operatingsystem}/%{::operatingsystemmajrelease}" - "os/%{::operatingsystem}" - users - common
рддрджрдиреБрд╕рд╛рд░, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ common.yaml
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝рд╛рдЗрд▓ users.yaml
рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ), os/%{::operatingsystem}
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ OS (рддрдереНрдп ::operatingsystem
) рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдкреНрд░реЛрдлрд╛рдЗрд▓
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рд╡реЗ рдкрде site/profiles
рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рд╕рд░реНрд╡рд░ рдкрд░ рд╣реИрдВрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рд░реЗрдбрд┐рд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ sysctl рдкреИрд░рд╛рдореАрдЯрд░ vm.overcommit_memory
рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ ред рдлрд┐рд░ рд╣рдо рдПрдХ рдЫреЛрдЯреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:
# standalone redis server class profiles::db::redis ( Hash $config = {}, String $output_buffer_limit_slave = '256mb 64mb 60', ) { # https://redis.io/topics/faq#background-saving-fails-with-a-fork-error-under-linux-even-if-i-have-a-lot-of-free-ram sysctl { 'vm.overcommit_memory': ensure => present, value => '1', } class { '::redis': * => $config, } }
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ / рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рд┐рд░рд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рджреВрд░рд╕реНрде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдЕрдиреБрдореЛрджрд┐рдд" рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдХреБрдЫ рдмрдЧ рдпрд╛ рджреЛрд╖ рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рд╣реА / рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╣реА рдирд┐рд░реНрдгрдп, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ "рддреИрдпрд╛рд░" рдХрд░ рд╕рдХреЗред рдиреАрдЪреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рдЖрдк рдмреЗрд╣рддрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рд╣рд┐рд░рд╛ рдореЗрдВ рд░рд╣рд╕реНрдп рдЫрд┐рдкрд╛
рдирдВрдЧреЗ рдкрдкреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рд┐рд░рд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде hiera рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВред рдХреБрдВрдЬреА рдХрд╛ рдирд┐рдЬреА рд╣рд┐рд╕реНрд╕рд╛ рдкрдкреЗрдЯ рдорд╛рд╕реНрдЯрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ (рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░) рдкрд░, рдЙрдкрдХрд░рдг рдХреЗрд╡рд▓ gem install hiera-eyaml
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдкрддреНрд░ eyaml encrypt --pkcs7-public-key=/path/to/public_key.pkcs7.pem -s 'hello'
рдХреА рдПрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП eyaml encrypt --pkcs7-public-key=/path/to/public_key.pkcs7.pem -s 'hello'
рдЖрдк рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди eyaml рдпрд╛ рд╕рд┐рд░реНрдл yaml рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкрдкреЗрдЯ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ред рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
roles::postrgresql::password: 'ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAbIz1ihQlThMWa9T+Lq194Y6QdElMD1XTev5y+VPSHtkPTu6Al6TJaSrXF+7phJIjue+NF4ZVtJCLkHxUR6nJJqks0fcGS1vF2+6mmM9cy69sIU1A3HqpOHZLuqHAc7jUqljYxpwWSIGOK6I2FygdAp5FfOTewqfcVVmXj97EJdcv3DKrbAlSrIMO2iZRYwQvyv+qnptnZ7pilR2veOCPW2UMm6zagDLutX9Ft5vERbdaiCiEfTOpVa9Qx0GqveNRVJLV/5lfcL5ajdNBJXkvKqDbx8d3ZBtEVAAqeKlw0LqzScgmCbWQx2kUzukX5LSxbTpT0Th984Vp1sl7iPk7UTA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCp5GcwidcEMA+0wjAMblkKgBCR/f9KGXUgLh3/Ok60OIT5]'
рдпрд╛ рдПрдХ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ:
roles::postgresql::password: > ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEw DQYJKoZIhvcNAQEBBQAEggEAbIz1ihQlThMWa9T+Lq194Y6QdElMD1XTev5y +VPSHtkPTu6Al6TJaSrXF+7phJIjue+NF4ZVtJCLkHxUR6nJJqks0fcGS1vF 2+6mmM9cy69sIU1A3HqpOHZLuqHAc7jUqljYxpwWSIGOK6I2FygdAp5FfOTe wqfcVVmXj97EJdcv3DKrbAlSrIMO2iZRYwQvyv+qnptnZ7pilR2veOCPW2UM m6zagDLutX9Ft5vERbdaiCiEfTOpVa9Qx0GqveNRVJLV/5lfcL5ajdNBJXkv KqDbx8d3ZBtEVAAqeKlw0LqzScgmCbWQx2kUzukX5LSxbTpT0Th984Vp1sl7 iPk7UTA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCp5GcwidcEMA+0wjAM blkKgBCR/f9KGXUgLh3/Ok60OIT5]
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рддреИрдпрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдм рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдВрдЧрд▓реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг
Spoiler : рдХрдИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реБрдЪрд┐ рдХреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡реЗ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдардкреБрддрд▓реА 4 рдореЗрдВ рд╣рд╛рдЗрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рд╕рднреА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдкреЛрд╕реНрдЯ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реЛ рдЬрд╛рдПрдЧреАред рдореИрдВ рд╣рд╛рдЗрд░рд╛ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдХрд╛рд░реНрдп рдпрд╣ рд╣реИ: рд╣рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рджреЛ рд╕рдорд╛рди рдбреАрдмреА рд╕рд░реНрд╡рд░, рдЬрд┐рд╕ рдкрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХрд▓ рддреИрдирд╛рдд рд╣реИ
- рджреЛ рдФрд░ рд╕рд░реНрд╡рд░ - рдирдЧрдиреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рдордиреЗ
- рдкрд╛рдВрдЪрд╡реЗрдВ рдФрд░ рдЫрдареЗ рд╕рд░реНрд╡рд░ - рдЕрдЬрдЧрд░ docker рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
- рдХреБрдЫ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ
рд╣рдо рдХреНрд░рдо рдореЗрдВ рдЕрдкрдиреА рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдкрд░рд┐рдпреЛрдЬрдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ projects/kicker.yaml
рдмрдирд╛рдПрдВ projects/kicker.yaml
ред рд╣рдордиреЗ рдЗрд╕рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ: рд╣рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреБрдж рдХреЛ рднреА рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИред
--- classes: - apt::debian::semrush files: "/srv/data": ensure: 'directory' owner: 'deploy' group: 'www-data' mode: '0755' '/srv/data/shared_temp': ensure: 'directory' owner: 'deploy' group: 'www-data' mode: '0775' user_management::present: - deploy
рдбреАрдмреА рдХреА рднреВрдорд┐рдХрд╛
projects/kicker/db.yaml
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рднреВрдорд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЕрдм рддрдХ, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░реЗрдВрдЧреЗ:
--- classes: - profiles::db::postgresql profiles::db::postgresql::globals: manage_package_repo: true version: '10' profiles::db::postgresql::db_configs: 'listen_addresses': value: '*' profiles::db::postgresql::databases: kicker: {} profiles::db::postgresql::hba_rules: 'local connect to kicker': type: 'local' database: 'kicker' user: 'kicker' auth_method: 'md5' order: '001' 'allow connect from 192.168.1.100': type: 'host' database: 'kicker' user: 'kicker' auth_method: 'md5' address: '192.168.1.100/32' order: '002'
рдпрд╣рд╛рдВ рд╣рдо рдЙрди рд╕рднреА рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрд▓реА рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рд╕рдмрд╕реЗ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП:
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ :: db :: postgresql class profiles::db::postgresql ( Hash $globals = {}, Hash $params = {}, Hash $recovery = {}, Hash[String, Hash[String, Variant[String, Boolean, Integer]]] $roles = {}, Hash[String, Hash[String, Variant[String, Boolean]]] $db_configs = {}, Hash[String, Hash[String, Variant[String, Boolean]]] $databases = {}, Hash[String, String] $db_grants = {}, Hash[String, Hash[String, String]] $extensions = {}, Hash[String, String] $table_grants = {}, Hash[String, Hash[String, String]] $hba_rules = {}, Hash[String, String] $indent_rules = {}, Optional[String] $role = undef, # 'master', 'slave' Optional[String] $master_host = undef, Optional[String] $replication_password = undef, Integer $master_port = 5432, String $replication_user = 'repl', String $trigger_file = '/tmp/pg_trigger.file', ){ case $role { 'slave': { $_params = { manage_recovery_conf => true, } if $globals['datadir'] { file { "${globals['datadir']}/recovery.done": ensure => absent, } } $_recovery = { 'recovery config' => { standby_mode => 'on', primary_conninfo => "host=${master_host} port=${master_port} user=${replication_user} password=${replication_password}", trigger_file => $trigger_file, } } $_conf = { 'hot_standby' => { value => 'on', }, } file { $trigger_file: ensure => absent, } } 'master': { $_conf = { 'wal_level' => { value => 'replica', }, 'max_wal_senders' => { value => 5, }, 'wal_keep_segments' => { value => 32, }, } file { $trigger_file: ensure => present, } } default: { $_params = {} $_recovery = {} $_conf = {} } } class { '::postgresql::globals': * => $globals, } class { '::postgresql::server': * => deep_merge($_params, $params), } create_resources('::postgresql::server::config_entry', deep_merge($_conf, $db_configs)) create_resources('::postgresql::server::role', $roles) create_resources('::postgresql::server::database', $databases) create_resources('::postgresql::server::database_grant', $db_grants) create_resources('::postgresql::server::extension', $extensions) create_resources('::postgresql::server::table_grant', $table_grants) create_resources('::postgresql::server::pg_hba_rule', $hba_rules) create_resources('::postgresql::server::pg_indent_rule', $indent_rules) create_resources('::postgresql::server::recovery', deep_merge($_recovery, $recovery)) }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо Postgresql 10
рдПрдХ рдЧрд┐рд░ рдЧрдП рдЭрдкрдЯреНрдЯрд╛ Postgresql 10
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ ( listen
) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, kicker
рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ pg_hba.conf
рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдирд┐рдпрдо рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдХреВрд▓!
рд╕рд╛рдордиреЗ рдХреА рднреВрдорд┐рдХрд╛
рд╣рдо frontend
рдЙрдард╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде projects/kicker/frontend.yaml
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
--- classes: - profiles::webserver::nginx profiles::webserver::nginx::servers: 'kicker.semrush.com': use_default_location: false listen_port: 80 server_name: - 'kicker.semrush.com' profiles::webserver::nginx::locations: 'kicker-root': location: '/' server: 'kicker.semrush.com' proxy: 'http://kicker-backend.semrush.com:8080' proxy_set_header: - 'X-Real-IP $remote_addr' - 'X-Forwarded-for $remote_addr' - 'Host kicker.semrush.com' location_cfg_append: 'proxy_next_upstream': 'error timeout invalid_header http_500 http_502 http_503 http_504' proxy_connect_timeout: '5'
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо profiles::webserver::nginx
рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ nginx рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЪрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ server
рдФрд░ location
рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдзреНрдпрд╛рди рджреЗрдЧрд╛ рдХрд┐ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЙрдЪреНрдЪ рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛрдЧрд╛, рдФрд░ рдЕрдиреНрдп рдЪрд░ ( server_name
, proxy
) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреВрдорд┐рдХрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЗрди рдЪрд░ рдХреЛ рдХреЗрд╡рд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЙрдХрдЯрд░ рдХреА рднреВрдорд┐рдХрд╛
projects/kicker/docker.yaml
рдХреА рднреВрдорд┐рдХрд╛ projects/kicker/docker.yaml
:
--- classes: - profiles::docker profiles::docker::params: version: '17.05.0~ce-0~debian-stretch' packages: 'python3-pip': provider: apt 'Fabric3': provider: pip3 ensure: 1.12.post1 user_management::users: deploy: groups: - docker
profiles/docker.pp
рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред рдореИрдВ рдЙрд╕рдХрд╛ рдХреЛрдб рджреВрдВрдЧрд╛:
рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ :: docker class profiles::docker ( Hash $params = {}, Boolean $install_kernel = false, ){ class { 'docker': * => $params, } if ($install_kernel) { include profiles::docker::kernel } }
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЙрддреНрдкрд╛рдж рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рднреВрдорд┐рдХрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЛ facts.d рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбрд╛рд▓рдирд╛, рдЬрд┐рд╕рдХрд╛ рд╕реНрдерд╛рди рдХрдардкреБрддрд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
. тФЬтФАтФА kicker тФВ тФЬтФАтФА db.yaml тФВ тФЬтФАтФА docker.yaml тФВ тФФтФАтФА frontend.yaml тФФтФАтФА kicker.yaml 1 directory, 4 files
рдЕрдм рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб
рдЪрд▓реЛ рд╕рднреА рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ projects/kicker/tiers/prod.yaml
рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╕рднреА рд╕рдорд╛рди), рд╕рд╛рде рд╣реА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдмрдврд╝рд╛ рд╕реНрддрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
рджреЗрд╡ рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрд╕рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЕрднреА рднреА рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ frontend
рднреВрдорд┐рдХрд╛ рдХреЗ рдиреЗрдЧрдиреЗрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ projects/kicker/tiers/dev/frontend.yaml
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдПрдХ рдирдП рд╕реНрддрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
--- profiles::webserver::nginx::servers: 'kicker-dev.semrush.com': use_default_location: false listen_port: 80 server_name: - 'kicker-dev.semrush.com' profiles::webserver::nginx::locations: 'kicker-root': location: '/' server: 'kicker-dev.semrush.com' proxy: 'http://kicker-backend-dev.semrush.com:8080' proxy_set_header: - 'X-Real-IP $remote_addr' - 'X-Forwarded-for $remote_addr' - 'Host kicker-dev.semrush.com' location_cfg_append: 'proxy_next_upstream': 'error timeout invalid_header http_500 http_502 http_503 http_504' proxy_connect_timeout: '5'
рдЕрдм рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕реНрддрд░реЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдордиреЗ proxy_pass
рдФрд░ proxy_pass
рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рд╕рд░реНрд╡рд░ рдЬрд┐рд╕рдореЗрдВ рддрдереНрдпреЛрдВ рдХреА рднреВрдорд┐рдХрд╛ рд╣реЛрддреА рд╣реИ = frontend рдФрд░ tier = dev рдХреЛ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рд▓рд┐рдП projects/kicker/frontend.yaml
рдлрд╛рдЗрд▓ рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЗ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ projects/kicker/tiers/dev/frontend.yaml
рдлрд╛рдЗрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред ред
PostgreSQL рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдЫрд┐рдкрд╛ рд░рд╣рд╛ рд╣реИ
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдЬреЗрдВрдбрд╛ рдкрд░ рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо рд╣реИ - рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВред
рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдореИрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдПрдБ:
eyaml encrypt -s 'verysecretpassword' eyaml encrypt -s 'testpassword'
рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ **projects/kicker/tiers/prod/db.yaml**
рдФрд░ **projects/kicker/tiers/dev/db.yaml**
(рдпрд╛ рдЖрдк рдЖрдИрд▓реИрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИ)ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
--- profiles::db::postgresql::roles: 'kicker': password_hash: > 'ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAsdpb2P0axUJzyWr2duRKAjh0WooGYUmoQ5gw0nO9Ym5ftv6uZXv25DRMKh7vsbzrrOR5/lLesx/pAVmcs2qbhd/y0Vr1oc2ohHlZBBKtCSEYwem5VN+kTMhWPvlt93x/S9ERoBp8LrrsIvicSYZByNfpS2DXCFbogSXCfEPxTTmCOtlOnxdjidIc9Q1vfAXv7FRQanYIspr2UytScm56H/ueeAc/8RYK51/nXDMtdPOiAP5VARioUKyTDSk8FqNvdUZRqA3cl+hA+xD5PiBHn5T09pnH8HyE/39q09gE0pXRe5+mOnU/4qfqFPc/EvAgAq5mVawlCR6c/cCKln5wJTA8BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBDNKijGHBLPCth0sfwAjfl/gBAaPsfvzZQ/Umgjy1n+im0s]'
рдЗрд╕рдХреЗ рдмрд╛рдж, kicker
рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдЖрдПрдЧрд╛, рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рд╣рд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред рд╣рд╛рдЗрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдкрджрд╛рдиреБрдХреНрд░рдо рдпрд╣ рд╣реИ:
. тФЬтФАтФА db.yaml тФЬтФАтФА docker.yaml тФЬтФАтФА frontend.yaml тФФтФАтФА tiers тФЬтФАтФА dev тФВ тФЬтФАтФА db.yaml тФВ тФФтФАтФА frontend.yaml тФЬтФАтФА prod тФВ тФФтФАтФА db.yaml тФФтФАтФА prod.yaml 3 directories, 7 files
рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рднрдВрдбрд╛рд░ рдХреНрд▓реЛрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрд╡ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдирд┐рд╖реНрдХрд░реНрд╖
рдкрдкреЗрдЯ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рд╣рд┐рд░реЗ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЖрджрд░реНрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреВрд▓ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдирд┐рд░рдВрддрд░ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдЙрд╕рдХрд╛ "рджрд░реНрд╢рди" рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдПрдХрд░реВрдкрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рддрд╛рд▓рдореЗрд▓ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИред рдХреБрдЫ рд▓реЛрдЧ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рджреЗрд╡реЛрдВ рдФрд░ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдЦреБрдж рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╕рдм рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЙрдкрдХрд░рдг рдпрд╛ рдЙрддреНрдкрд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдореЗрдВ рд╕рдЯреАрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд, рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЦреИрд░, рдФрд░ "рд╕рд░реНрд╡рд░ рдкрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдФрд░ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред рдХреИрдореЛрди, 2018 рдпрд╛рд░реНрдб рдореЗрдВ рд╣реИ! рддреЛ рдХрдардкреБрддрд▓реА рдФрд░ ansible рдлреЗрдВрдХ рдФрд░ рд╕рд░реНрд╡рд░рд╣рд┐рдд рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдХрджрдоред
рдмрд╛рджрд▓реЛрдВ, рдХрдВрдЯреЗрдирд░реАрдХрд░рдг рдФрд░ рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд░рд╣реА рд╣реИред рдЖрдк рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдПрдХ рдЕрд╕рдлрд▓-рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рднреА рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдСрдЯреЛ-рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рдмреИрдХрдЕрдк, рдкреНрд░рддрд┐рдХреГрддрд┐, рдСрдЯреЛ-рдбрд┐рд╕реНрдХрд╡рд░реА, рдЖрджрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ ansible, рдХрдардкреБрддрд▓реА, рд░рд╕реЛрдЗрдпрд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрдХрд░ред рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ)ред рджреВрд╕рд░реА рдУрд░, рдмрд╛рджрд▓реЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрдо рд▓реЛрд╣реЗ рдХреЗ рд╕рд░реНрд╡рд░ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╢реНрд╡рд░ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред
рдХреНрд░реЗрдбрд┐рдЯ
рдзрдиреНрдпрд╡рд╛рдж:
- рджрд┐рдорд┐рддреНрд░реА рдЯреБрдкрд┐рдЯреНрд╕рд┐рди, рджрд┐рдорд┐рддреНрд░реА рд▓реЛрдЧреЛрд╡, рд╕реНрдЯреАрдлрди рдлреЗрдбреЛрд░реЛрд╡ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреА рдкреВрд░реА рдЯреАрдо рдЗрд╕ рд▓реЗрдЦ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЙрдирдХреА рдорджрдж рдХреЗ рд▓рд┐рдП
- рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рд╡реНрд▓рд╛рджрд┐рдореАрд░ рд▓реЗрдЧреНрдХреЛрд╕реНрдЯреБрдкреЛрд╡
- рдпрд╣ рд╕рдм рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреВрд░реНрд╡-рдкреНрд░рдХрд╛рд╢рди рдЪрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдирд╛ рддрдмрдХреЛрд╡рд╛
- рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд┐рддрд╛ рдЬрд╝рдЦрд╛рд░реЛрд╡