Lua-resty-auto-ssl: рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдХреНрддреВре░ 2017  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: auto-ssl/lua-resty-auto-ssl

рдирдорд╕реНрддреЗ,
рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЬрдирд╡рд░реА рдореЗрдВ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛? рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреЛрдб рд╕реЗ рдореИрдВ рдЬреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ sub.domain.tld рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

  • sub.domain.tld:latest тАФ рд╡рд░реНрддрдорд╛рди
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

рдЗрд╕ рддрд░рд╣, рд╣рдо рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреА рдУрд░ рдкрд╣рд▓рд╛ рдХрджрдо рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦрд░реЛрдВрдЪрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╕рднреА 16 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд░реЗрдкреЛ рдореЗрдВрдЯреЗрдирд░ рдирд╣реАрдВ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред LE рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП DNS рд╕рддреНрдпрд╛рдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЕрднреА lua-resty-auto-ssl http рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рди рдХрд░рддреЗ рд╣реБрдП рднреА DNS рд╕рддреНрдпрд╛рдкрди рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • рд╣рдореЗрдВ рдкрд╣рд▓реЗ ACMEv2 рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдЬрд▓рд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА: рдирд┐рд░реНрдЬрд▓рд┐рдд#420
  • рдирд┐рд░реНрдЬрд▓рд┐рдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА (ACMEv1) dns-01 рдЪреБрдиреМрддреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ред рд╡рд░реНрддрдорд╛рди ACMEv2 рдорд╕реМрджреЗ рдореЗрдВ dns-01 рдЪреБрдиреМрддреА рдореЗрд░реЗ рд╕рдорд╛рди рдпрд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддреА рд╣реИред
  • deploy_challenge рдирд┐рд░реНрдЬрд▓рд┐рдд рд╣реБрдХ рдПрдХ рдбреЛрдореЗрди рдФрд░ рдПрдХ рдЯреЛрдХрди рдХреЛ TXT рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИред
  • рдЪреВрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдбреАрдПрдирдПрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

    1. рд▓реЛрдХрдкреНрд░рд┐рдп рдбреАрдПрдирдПрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо "рдорд╛рдирдХ" рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ PowerDNS, CloudFlare рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ nsupdate рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

    2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреИрд╕реЗ рдХрд┐рд╕реА рдорд╛рд▓рд┐рдХрд╛рдирд╛ API рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧрдВрджреА рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рд╣рдореЗрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

      -- Define a function to store the validation tokens for DNS verification -- by let's encrypt in your DNS setup. auto_ssl:set("deploy_dns_challenge", function(domain, token) -- talk to your DNS-API to create a new TXT record _acme-challenge.$domain with value $token end)

  • рднрдВрдбрд╛рд░рдг рдкрд░рдд рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реЗ рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЕрдм рд╕рдЪ рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ред рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ parentdomain.com:wildcard:latest рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЗрдпрд░ рдХреЛ рдЙрд╕ рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдареЛрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдкреНрд░рд╢рди:

  1. рд╣рдо рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди is_wildcard_domain ? рдореМрдЬреВрджрд╛ allow_domain рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп?
  2. рдХреНрдпрд╛ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ DNS (рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП) рдФрд░ HTTP (рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП) рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ DNS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ? рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ HTTP рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рднрд╛рдЧреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

FYI рдХрд░реЗрдВ: рдЕрдм ACMEv2 рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИред :)

рд╡рд░реНрддрдорд╛рди ACMEv2 рдорд╕реМрджреЗ рдореЗрдВ dns-01 рдЪреБрдиреМрддреА рдореЗрд░реЗ рд╕рдорд╛рди рдпрд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддреА рд╣реИред

рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ :-) V1 рдФрд░ V2 API рдХреЗ рдмреАрдЪ DNS-01 рдЪреБрдиреМрддреА рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

FYI рдХрд░реЗрдВ: рдХрдо рд╕реЗ рдХрдо рдирд┐рд░реНрдЬрд▓рд┐рдд рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдЕрдм ACMEv2 рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЕрдм рдЖрдкрдХреЗ рд▓рд┐рдП рдореМрдХрд╛ рд╣реИ;)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ DNS рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Resty-auto-ssl рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рд░реЗрд╕реНрдЯреА-рдСрдЯреЛ-рдПрд╕рдПрд╕рдПрд▓ рдХреЛ "рдЖрдЙрдЯ рдСрдл рдмреИрдВрдб" рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрд░ рд╡рд╛рдкрд╕ рд▓реЗ рдЖрдПрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдб9 рдФрд░ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрднреА рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдо-рдСрдЯреЛ-рдПрд╕рдПрд╕рдПрд▓ рдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдареАрдХ рд╣реИ, рдпрд╣ рдЙрд╕ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИ ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рдбреАрдПрдирдПрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реБрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдЬрд▓рд┐рдд рдореИрдиреНрдпреБрдЕрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...

рдХреНрдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдПрд▓рдИ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд░реЗрдбрд┐рд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рд░реЗрд╕реНрдЯреА-рдСрдЯреЛ-рдПрд╕рдПрд╕рдПрд▓ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХреЗ?

рдХреЛрдб рд╕реЗ рдореИрдВ рдЬреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ sub.domain.tld рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

  • sub.domain.tld:latest тАФ рд╡рд░реНрддрдорд╛рди
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

рдЗрд╕ рддрд░рд╣, рд╣рдо рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреА рдУрд░ рдкрд╣рд▓рд╛ рдХрджрдо рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦрд░реЛрдВрдЪрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@akalipetis рдХреНрдпрд╛ рдЖрдкрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧ

ssl_options.fullchain_der
ssl_options.privkey_der

allow_domain рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛?
рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдЖрдк allow_domain рдореЗрдВ рдПрдХ рд░реЗрдбрд┐рд╕ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреА рдирд┐рдЧрд░рд╛рдиреА рд╕реЗрд╡рд╛ рдкрд░ рдХрд╕реНрдЯрдо рдбреЛрдореЗрди рд╕реНрдерд┐рддрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lua-resty-auto-ssl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ xxxx.status.updown.io рдЬреИрд╕реЗ рдореЗрд░реЗ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВрдиреЗ allow_domain *status.updown.io рд▓рд┐рдП рдкреНрд░рдорд╛рдгрд┐рдд рдкреАрдврд╝реА рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛:

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

рдФрд░ рдлрд┐рд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЙрд▓рдмреИрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛:

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

рдореИрдВрдиреЗ рдбреАрдПрдирдПрд╕ рдЪреБрдиреМрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ DNS рдЪреБрдиреМрддреА рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдХрдо рддрдХрдиреАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ рдПрдХ рдЬреЛ рдХрдИ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ https://github.com/AnalogJ/lexicon рдХреЗ рд╕рд╛рде DNS рдЪреБрдиреМрддреА рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!
рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред

@kapouer рдЯрд┐рдк рдХреЗ рд▓рд┐рдП lexicon рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЧрд░ рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдЧрд╛;)

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреА рдирд┐рдЧрд░рд╛рдиреА рд╕реЗрд╡рд╛ рдкрд░ рдХрд╕реНрдЯрдо рдбреЛрдореЗрди рд╕реНрдерд┐рддрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lua-resty-auto-ssl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ xxxx.status.updown.io рдЬреИрд╕реЗ рдореЗрд░реЗ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВрдиреЗ allow_domain *status.updown.io рд▓рд┐рдП рдкреНрд░рдорд╛рдгрд┐рдд рдкреАрдврд╝реА рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛:

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

рдФрд░ рдлрд┐рд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЙрд▓рдмреИрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛:

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

рдореИрдВрдиреЗ рдбреАрдПрдирдПрд╕ рдЪреБрдиреМрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ DNS рдЪреБрдиреМрддреА рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдХрдо рддрдХрдиреАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдХреЗ рд▓рд┐рдП рднреА рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдбреЛрдореЗрди рдЪреЗрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреЛрд░реНрдЯрд▓ рд╣реЛрд╕реНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ "рд╕реНрд╡рдпрдВ" рдбреЛрдореЗрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд╕реАрдП рд╕реЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА LE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред

рдореИрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

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

https://certbot-dns-cloudflare.readthedocs.io/en/stable/

@jarthod рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди? рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рд╣рд░ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд░реНрдж рд╣реИред

@jarthod рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди? рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рд╣рд░ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд░реНрдж рд╣реИред

рдореЗрд░реА рддрд░рдл рд╕реЗ рдирд╣реАрдВ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╣рд░ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдореИрдиреБрдЕрд▓ рдирд╡реАрдиреАрдХрд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╛рдж рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реЗрд╡рд╛ (updown.io) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдореБрдЭреЗ рд╕рдЪреЗрдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рднреА рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВред рд╡реИрд╕реЗ рднреА рдореИрдВ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ 1 рд╕рд╛рд▓ рдХрд╛ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдПрд╕рдПрд╕рдПрд▓ рдорд┐рд▓рд╛ред

рдЕрдм рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХрд╛ рдХрд╛рдо рд╣реИ

03-рдЕрдХреНрдЯреВрдмрд░-2020 рдХреЛ, рд░рд╛рдд 10:30 рдмрдЬреЗ, рдПрдбреНрд░рд┐рдпрди рд░реЗ-рдЬреЗрд░реНрдерди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд░рд╛рдп
@jarthod рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди? рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рд╣рд░ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд░реНрдж рд╣реИред

рдореЗрд░реА рддрд░рдл рд╕реЗ рдирд╣реАрдВ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╣рд░ 3 рдорд╣реАрдиреЗ рдореЗрдВ рдореИрдиреБрдЕрд▓ рдирд╡реАрдиреАрдХрд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╛рдж рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реЗрд╡рд╛ (updown.io) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдореБрдЭреЗ рд╕рдЪреЗрдд рдХрд░рддрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

domharrington picture domharrington  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

serathius picture serathius  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

danDanV1 picture danDanV1  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kshnurov picture kshnurov  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sahildeliwala picture sahildeliwala  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ