рд╣реЗрд▓реНрдордордзреАрд▓ рд░рд╣рд╕реНрдпрд╛рдВрдЪреА рд╕реНрд╡рдпрдВ-рдирд┐рд░реНрдорд┐рддреА

рд╣реЗрд▓реНрдордордзреАрд▓ рд░рд╣рд╕реНрдпрд╛рдВрдЪреА рд╕реНрд╡рдпрдВ-рдирд┐рд░реНрдорд┐рддреА

рд╕рдВрдШ Mail.ru рд╡рд░реВрди Kubernetes aaS рдПрдХ рд▓рд╣рд╛рди рдиреЛрдЯ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреЗрд▓реА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛рдирд╛ рд╣реЗрд▓реНрдо рд╕рд┐рдХреНрд░реЗрдЯреНрд╕ рдЖрдкреЛрдЖрдк рдХрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдмрджреНрджрд▓. рдЦрд╛рд▓реАрд▓ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд▓реЗрдЦрдХрд╛рдЪрд╛ рдордЬрдХреВрд░ рдЖрд╣реЗ - Intoware рдЪреЗ рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдВрдЪрд╛рд▓рдХ, рдПрдХ рдХрдВрдкрдиреА рдЬреА SaaS рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ.

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

рддрдерд╛рдкрд┐, рдХрд╛рд╣реА рдЧреЛрд╖реНрдЯреА рдЖрд╡рд╢реНрдпрдХрддреЗрдкреЗрдХреНрд╖рд╛ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдЕрдзрд┐рдХ рдХрдареАрдг рдЖрд╣реЗрдд.

рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛рдирд╛ рдЖрдкреЛрдЖрдк рдЧреБрдкрд┐рддреЗ рдХрд╢реА рдирд┐рд░реНрдорд╛рдг рдХрд░рд╛рдпрдЪреА?

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

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

рдЧреБрдкрд┐рддреЗ рдмрдирд╡рдгреЗ

рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рд╣реЗрд▓реНрдордордзреНрдпреЗ рдПрдХ рд░рд╣рд╕реНрдп рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  • рд╡реНрд╣реЕрд▓реНрдпреВрдЬ рдлрд╛рдЗрд▓рдордзреАрд▓ рд░рд╣рд╕реНрдпрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рд╛;
  • рддреИрдирд╛рддреА рджрд░рдореНрдпрд╛рди рддреЗ рдкреБрдиреНрд╣рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рд╛;
  • рдЙрдкрдпреЛрдЬрди/рдкреЙрдбрдЪреНрдпрд╛ рдЖрдд рддреНрдпрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдШреНрдпрд╛;
  • ... рдирдлрд╛!

рд╣реЗ рд╕рд╣рд╕рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рддреЗ:

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ .Values.MyApiKeySecret | quote }}

values.yml рдордзреАрд▓ рдореВрд▓реНрдпреЗ рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░рд╣рд╕реНрдп

рдкрд░рдВрддреБ рд╕рдордЬрд╛ рдХреА рддреБрдореНрд╣реА рд╡реНрд╣реЕрд▓реНрдпреВ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рддреБрдордЪреЗ рд░рд╣рд╕реНрдп рдирдореВрдж рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА.

рддреЗрдереЗ рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд рдЬреЗрд╡реНрд╣рд╛ рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА рд╕рд╛рдорд╛рдпрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ, рдЬреА рдкреНрд░рддрд┐рд╖реНрдард╛рдкрдирд╡реЗрд│реА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ.

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

рд╣реБрдХ

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

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

рдЬрд░ рддреБрдореНрд╣реА рддреБрдордЪреЗ рд░рд╣рд╕реНрдп рдирд┐рд░реНрдорд╛рдг рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рддреБрдордЪреА рдкрд╣рд┐рд▓реА рд╕реНрдерд╛рдкрдирд╛ рдЕрджреНрдпрд╛рдк рдЭрд╛рд▓реА рдирд╕реЗрд▓ рддрд░ рд╡рд╛рдЪрдгреЗ рдерд╛рдВрдмрд╡рд╛, рдкреНрд░реА-рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реБрдХ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдЙрддреНрддрдо рдХрд╛рдо рдХрд░реЗрд▓.

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

рдХрд╛рд░реНрдпреЗ

рд╣реЗрд▓реНрдо рдлрдВрдХреНрд╢рдиреНрд╕ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдШрдЯрдХ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it

рд╣реЗ рдЙрджрд╛рд╣рд░рдг рджрд╛рдЦрд╡рддреЗ рдХреА apiKey рд╕рд┐рдХреНрд░реЗрдЯрдЪреЗ рдореВрд▓реНрдп рд╣реЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рджрд░рдореНрдпрд╛рди рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реЗ рдирд╡реАрди UUID рдЕрд╕реЗрд▓.

рд╣реЗрд▓реНрдордордзреНрдпреЗ рдЦрд░реЛрдЦрд░рдЪ рд╡рд┐рд╕реНрддреГрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд▓рд╛рдпрдмреНрд░рд░реА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ рдЬреА рд╕рд╛рдиреБрдХреВрд▓ рдЙрдкрдпреЛрдЬрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ GO рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рдЖрдгрд┐ Sprig рдЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд▓рд╛рдн рдШреЗрддреЗ.

рд▓реБрдХрдЕрдк рдлрдВрдХреНрд╢рди

рд╣реЗрд▓реНрдо 3.1 рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рд▓реБрдХрдЕрдк рдлрдВрдХреНрд╢рди, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рджреНрдпрдорд╛рди рддреИрдирд╛рддреАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рдЖрдгрд┐:

  • рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рддрдкрд╛рд╕рд╛;
  • рдирдВрддрд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рд╡рд┐рджреНрдпрдорд╛рди рд╕рдВрд╕рд╛рдзрдирд╛рдЪреЗ рдореВрд▓реНрдп рдкрд░рдд рдХрд░рд╛.

рдпрд╛ рджреЛрдиреНрд╣реА рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдЖрдкрдг рдПрдХ-рд╡реЗрд│, рдЧрддрд┐рдорд╛рдирдкрдгреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реЗ рд░рд╣рд╕реНрдп рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ!

# 1. ╨Ч╨░╨┐╤А╨╛╤Б╨╕╤В╤М ╤Б╤Г╤Й╨╡╤Б╤В╨▓╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╡╨║╤А╨╡╤В╨░ ╨╕ ╨▓╨╡╤А╨╜╤Г╤В╤М ╨▓ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨╛╨╣ $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
  name: some-awesome-secret
type: Opaque

# 2. ╨Х╤Б╨╗╨╕ ╤Б╨╡╨║╤А╨╡╤В ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╨╡╤В, ╨▓╨╖╤П╤В╤М ╨╡╨│╨╛ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╨║╨░╨║ apiKey (╤Б╨╡╨║╤А╨╡╤В ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В ╨║╨╛╨┤╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ Base64, ╤В╨░╨║ ╤З╤В╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╣╤В╨╡ ╨║╨╗╤О╤З "data")
{{ if $secret -}}
data:
  apiKey: {{ $secret.data.apiKey }}

# 3. ╨Х╤Б╨╗╨╕ ╤Б╨╡╨║╤А╨╡╤В ╨╜╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╨╡╤В тАФ ╤Б╨╛╨╖╨┤╨░╤В╤М ╨╡╨│╨╛ (╨▓ ╤Н╤В╨╛╤В ╤А╨░╨╖ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╣╤В╨╡ "stringData", ╤В╨░╨║ ╨║╨░╨║ ╨▒╤Г╨┤╨╡╤В ╨╛╨▒╤Л╤З╨╜╨╛╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡)!
{{ else -}}
stringData:
  apiKey: {{ uuidv4 | quote }}
{{ end }}

рдЬреЗрд╡реНрд╣рд╛ рдЬреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдирд╡реАрди рдЕрджреНрдпрддрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рд╣реЗрд▓реНрдо рдПрдХ рдирд╡реАрди рдЧреБрдкреНрдд рдореВрд▓реНрдп рддрдпрд╛рд░ рдХрд░реЗрд▓ (рдЬрд░ рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреЗрд╣реА рд░рд╣рд╕реНрдп рдирд╕реЗрд▓) рдХрд┐рдВрд╡рд╛ рд╡рд┐рджреНрдпрдорд╛рди рдореВрд▓реНрдп рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░реЗрд▓.

рд░рд┐рдЭрд░реНрд╡реНрд╣рд░реНрд╡реНрд╣рд░ ... рдкреБрдиреНрд╣рд╛!

рд╡рд┐рд╖рдпрд╛рд╡рд░ рдЕрдЬреВрди рдХрд╛рдп рд╡рд╛рдЪрд╛рдпрдЪреЗ:

  1. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреАрд▓ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧрдЪреЗ рддреАрди рд╕реНрддрд░ рдЖрдгрд┐ рддреЗ рдкреНрд░рднрд╛рд╡реАрдкрдгреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ.
  2. рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдЯреЗрдореНрдкрд▓реЗрдЯрд╕рд╣ рдЪрд╛рдЪреЗрдЧрд┐рд░реАрдЪреНрдпрд╛ рднрд╛рд╡рдиреЗрдд рдХреБрдмрд░реНрдиреЗрдЯреНрд╕.
  3. рдЖрдордЪреЗ рдЪреЕрдиреЗрд▓ рдЕрд░рд╛рдЙрдВрдб рдХреБрдмрд░рдиреЗрдЯреЗрд╕ рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреНрдпреЗ.

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

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