NGINX рдЗрдХрд╛рдИ рд░ Ubuntu рд╕рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд WordPress рд╕реНрдерд╛рдкрдирд╛

NGINX рдЗрдХрд╛рдИ рд░ Ubuntu рд╕рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд WordPress рд╕реНрдерд╛рдкрдирд╛

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

рдпрд╕ рд▓реЗрдЦрдорд╛, рд╣рд╛рдореА Ubuntu рдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ WordPress рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд╛рди рдЧрд░реЗрд░ рджреБрдмреИ рд╕рдВрд╕рд╛рд░рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВ, рд╕рд╛рдереИ рдпрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рд╣рд┐рдВрдбреНрдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХреНрд░рд╛рд▓реЗ рдХреЗ рдЧрд░реНрдЫ рднрдиреЗрд░ рд╡рд░реНрдгрди рдЧрд░реНрджреИ, рд╕рд╛рдереИ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрд╛ рдЧрд░реЗрдХрд╛ рд╕рдореНрдЭреМрддрд╛рд╣рд░реВред ред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХ рдЙрдиреНрдирдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рд▓реЗрдЦрдХреЛ рдкрд╛рда рдЫреЛрдбреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдмрд╕ рд▓рд┐рдкрд┐ рд▓рд┐рдиреБрд╣реЛрд╕реН рдкрд░рд┐рдорд╛рд░реНрдЬрди рд░ рддрдкрд╛рдИрдВрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ред рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕реНрдерд╛рдкрдирд╛ рд╣реЛ рдЬрд╕рд▓рд╛рдИ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди, NGINX рдЗрдХрд╛рдИрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ рд░ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫред

NGINX рдПрдХрд╛рдЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ WordPress рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рд╡рд┐рдХрд╕рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ рдкреБрд░рд╛рдиреЛ рд▓реЗрдЦ, рдЕрдм рд╣рд╛рдореА рддреНрдпрд╣рд╛рдБ рдХрднрд░ рдирднрдПрдХрд╛ рдЪреАрдЬрд╣рд░реВ рдкрдирд┐ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗрдЫреМрдВ (рдЬрд╕реНрддреИ рдзреЗрд░реИ рдЕрдиреНрдп рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рд╣рд░реВрдорд╛):

  • WordPress CLI
  • рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд░ TLSSSL рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдЧрд░реМрдВ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд╡реАрдХрд░рдг
  • NGINX рдХреНрдпрд╛рд╕рд┐рдЩ
  • NGINX рдХрдореНрдкреНрд░реЗрд╕рди
  • HTTPS рд░ HTTP/2 рд╕рдорд░реНрдерди
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди

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

рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ

  • рдХрдиреНрдЯреЗрдирд░ рд╕рд░реНрднрд░ (LXC рд╡рд╛ LXD), рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди, рд╡рд╛ рдХрдореНрддрд┐рдорд╛ 512MB RAM рд░ Ubuntu 18.04 рд╡рд╛ рдирдпрд╛рдБ рд╕реНрдерд╛рдкрдирд╛ рднрдПрдХреЛ рдирд┐рдпрдорд┐рдд рдлрд▓рд╛рдордХреЛ рд╕рд░реНрднрд░ред
  • рдЗрдиреНрдЯрд░рдиреЗрдЯ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдкреЛрд░реНрдЯрд╣рд░реВ 80 рд░ 443
  • рдпрд╕ рд╕рд░реНрднрд░рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдбреЛрдореЗрди рдирд╛рдо
  • рд░реВрдЯ рдкрд╣реБрдБрдЪ (sudo)ред

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрд╡рд▓реЛрдХрди

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

NGINX рдЗрдХрд╛рдИ рд░ Ubuntu рд╕рдВрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд WordPress рд╕реНрдерд╛рдкрдирд╛

рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ

  • рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдзреЗрд░реИ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЖрджреЗрд╢рд╣рд░реВ рдмреЗрд░рд┐рдПрдХрд╛ рдЫрдиреН рдпрджрд┐ рдЗрдбрдореНрдкреЛрдЯреЗрдиреНрд╕реАрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрддрд╣рд░реВ рдЫрдиреН: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд┐рд▓реЗ рдиреИ рдард╛рдЙрдБрдорд╛ рд░рд╣реЗрдХрд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗ рдЬреЛрдЦрд┐рдо рдмрд┐рдирд╛ рдзреЗрд░реИ рдкрдЯрдХ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред
  • рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрд╣рд░реВрдмрд╛рдЯ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдЗрдБ рдПрдХ рдЖрджреЗрд╢рдорд╛ рдкреНрд░рдгрд╛рд▓реА рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (apt upgrade Ubuntu рдХреЛ рд▓рд╛рдЧреА)ред
  • рдЖрджреЗрд╢рд╣рд░реВрд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рддрджрдиреБрд╕рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред
  • рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рд╕реБрд░реБ рдЧрд░реНрди рдереНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕реЗрдЯ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ, рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ, рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрдиреБрдорд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫред
  • рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрджрд╛, рд╣рд╛рдореА рдЬрд╣рд┐рд▓реЗ рдкрдирд┐ рд╕реНрд╡рдЪрд╛рд▓рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрджрдЫреМрдВ, рдЬреБрди, рд╣рд╛рдореА рдЖрд╢рд╛ рдЧрд░реНрдЫреМрдВ, рдХреЛрдбрдХреЛ рд░реВрдкрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЖрдзрд╛рд░ рдмрдиреНрдиреЗрдЫред
  • рд╕рдмреИ рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рдЪрд▓рд╛рдЗрдиреНрдЫ рдореВрд▓, рдХрд┐рдирдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЖрдзрд╛рд░рднреВрдд рдкреНрд░рдгрд╛рд▓реА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫрдиреН, рддрд░ рд╕реАрдзрд╛ WordPress рдирд┐рдпрдорд┐рдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рдЪрд▓реНрдЫред

рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрджреИ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБ рдЕрдШрд┐ рдирд┐рдореНрди рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

  • WORDPRESS_DB_PASSWORD - WordPress рдбрд╛рдЯрд╛рдмреЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб
  • WORDPRESS_ADMIN_USER - WordPress рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд╛рдо
  • WORDPRESS_ADMIN_PASSWORD - WordPress рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб
  • WORDPRESS_ADMIN_EMAIL - WordPress рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЗрдореЗрд▓
  • WORDPRESS_URL WordPress рд╕рд╛рдЗрдЯрдХреЛ рдкреВрд░реНрдг URL рд╣реЛ, рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдБрджреИ https://.
  • LETS_ENCRYPT_STAGING - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЦрд╛рд▓реА, рддрд░ 1 рдорд╛ рдорд╛рди рд╕реЗрдЯ рдЧрд░реЗрд░, рддрдкрд╛рдИрдВрд▓реЗ Let's Encrypt рд╕реНрдЯреЗрдЬрд┐рдЩ рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ, рдЬреБрди рддрдкрд╛рдЗрдБрдХреЛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджрд╛ рдмрд╛рд░рдореНрдмрд╛рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЕрдиреНрдпрдерд╛ Encrypt рд▓реЗ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдХрд╛рд░рдгрд▓реЗ рддрдкрд╛рдЗрдБрдХреЛ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛рд▓рд╛рдИ рдЕрд╕реНрдерд╛рдпреА рд░реВрдкрдорд╛ рд░реЛрдХреНрди рд╕рдХреНрдЫред ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рдХрд┐ рдпреА WordPress-рд╕рдореНрдмрдиреНрдзрд┐рдд рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЫрдиреН рд░ рдпрджрд┐ рд╣реЛрдЗрди рднрдиреЗ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреНрдЫред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдирд╣рд░реВ 572-576 рдорд╛рди рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН LETS_ENCRYPT_STAGING.

рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрджреИ

рд░реЗрдЦрд╛рд╣рд░реВ 55-61 рдорд╛ рд▓рд┐рдкрд┐рд▓реЗ рдирд┐рдореНрди рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрджрдЫ, рдпрд╛ рдд рдХреЗрд╣реА рд╣рд╛рд░реНрдб-рдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдорд╛рди рд╡рд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЦрдгреНрдбрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЪрд░рд╣рд░реВрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░:

  • DEBIAN_FRONTEND="noninteractive" - рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓рд╛рдИ рдмрддрд╛рдЙрдБрдЫ рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдХреБрдиреИ рд╕рдореНрднрд╛рд╡рдирд╛ рдЫреИрдиред
  • WORDPRESS_CLI_VERSION="2.4.0" WordPress CLI рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛред
  • WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c" тАФ WordPress CLI 2.4.0 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рдХреЛ рдЪреЗрдХрд╕рдо (рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред WORDPRESS_CLI_VERSION)ред рд▓рд╛рдЗрди 162 рдорд╛ рд▓рд┐рдкрд┐ рд╕рд╣реА WordPress CLI рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫ рдХрд┐ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдпреЛ рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред
  • UPLOAD_MAX_FILESIZE="16M" - WordPress рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рдЕрдзрд┐рдХрддрдо рдлрд╛рдЗрд▓ рд╕рд╛рдЗрдЬред рдпреЛ рд╕реЗрдЯрд┐рдЩ рдзреЗрд░реИ рдард╛рдЙрдБрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдПрдХ рдард╛рдЙрдБрдорд╛ рд╕реЗрдЯ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред
  • TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" - рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╣реЛрд╕реНрдЯрдирд╛рдо, WORDPRESS_URL рдЪрд░рдмрд╛рдЯ рдкреБрдирдГрдкреНрд░рд╛рдкреНрддред Let's Encrypt рд╕рд╛рдереИ рдЖрдиреНрддрд░рд┐рдХ WordPress рдкреНрд░рдорд╛рдгрд┐рдХрд░рдгрдмрд╛рдЯ рдЙрдкрдпреБрдХреНрдд TLS/SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред
  • NGINX_CONF_DIR="/etc/nginx" - рдореБрдЦреНрдп рдлрд╛рдЗрд▓ рд╕рд╣рд┐рдд NGINX рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рд╕рд╛рде рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдорд╛рд░реНрдЧ nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" тАФ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд╛рдЗрдЯрдХрд╛ рд▓рд╛рдЧрд┐ рдЪрд▓реЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВрдХреЛ рдорд╛рд░реНрдЧ, рдЪрд░рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд TLS_HOSTNAME.

WordPress рд╕рд░реНрднрд░рдорд╛ рд╣реЛрд╕реНрдЯрдирд╛рдо рдЕрд╕рд╛рдЗрди рдЧрд░реНрджреИ

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

рд▓рд┐рдкрд┐ рдХреЛрдб

# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
  echo " Changing hostname to ${TLS_HOSTNAME}"
  hostnamectl set-hostname "${TLS_HOSTNAME}"
fi

/etc/hosts рдорд╛ рд╣реЛрд╕реНрдЯрдирд╛рдо рдердкреНрджреИ

рдердк WP-Cron рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, WordPress рд▓рд╛рдИ HTTP рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди рдЖрд╡рд╢реНрдпрдХ рдЫред WP-Cron рд▓реЗ рд╕рдмреИ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рд╕рд╣реА рддрд░рд┐рдХрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рд▓рд╛рдЗрди рдердкреНрдЫ / Etc / рд╣реЛрд╕реНрдЯрд╣рд░реВрдХреЛрддрд╛рдХрд┐ WordPress рд▓реЗ рд▓реБрдкрдмреНрдпрд╛рдХ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫ:

рд▓рд┐рдкрд┐ рдХреЛрдб

# Add the hostname to /etc/hosts
if [ "$(grep -m1 "${TLS_HOSTNAME}" /etc/hosts)" = "" ]; then
  echo " Adding hostname ${TLS_HOSTNAME} to /etc/hosts so that WordPress can ping itself"
  printf "::1 %sn127.0.0.1 %sn" "${TLS_HOSTNAME}" "${TLS_HOSTNAME}" >> /etc/hosts
fi

рдЕрд░реНрдХреЛ рдЪрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

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

рд▓рд┐рдкрд┐ рдХреЛрдб

# Make sure tools needed for install are present
echo " Installing prerequisite tools"
apt-get -qq update
apt-get -qq install -y 
  bc 
  ca-certificates 
  coreutils 
  curl 
  gnupg2 
  lsb-release

NGINX рдЗрдХрд╛рдИ рд░ NGINX рднрдгреНрдбрд╛рд░рд╣рд░реВ рдердкреНрджреИ

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

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ NGINX рдПрдХрд╛рдЗ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд░ рддреНрдпрд╕рдкрдЫрд┐ NGINX рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдердкреНрдЫ, рднрдгреНрдбрд╛рд░ рдХреБрдЮреНрдЬреА рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рдердкреНрдЫред apt, рдЗрдиреНрдЯрд░рдиреЗрдЯ рдорд╛рд░реНрдлрдд рднрдгреНрдбрд╛рд░рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджреИред

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

рд▓рд┐рдкрд┐ рдХреЛрдб

# Install the NGINX Unit repository
if [ ! -f /etc/apt/sources.list.d/unit.list ]; then
  echo " Installing NGINX Unit repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" > /etc/apt/sources.list.d/unit.list
fi

# Install the NGINX repository
if [ ! -f /etc/apt/sources.list.d/nginx.list ]; then
  echo " Installing NGINX repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
fi

NGINX, NGINX рдПрдХрд╛рдЗ, PHP рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА, Certbot (Les Encrypt) рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

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

рд▓рд┐рдкрд┐ рдХреЛрдб

echo " Updating repository metadata"
apt-get -qq update

# Install PHP with dependencies and NGINX Unit
echo " Installing PHP, NGINX Unit, NGINX, Certbot, and MariaDB"
apt-get -qq install -y --no-install-recommends 
  certbot 
  python3-certbot-nginx 
  php-cli 
  php-common 
  php-bcmath 
  php-curl 
  php-gd 
  php-imagick 
  php-mbstring 
  php-mysql 
  php-opcache 
  php-xml 
  php-zip 
  ghostscript 
  nginx 
  unit 
  unit-php 
  mariadb-server

NGINX рдЗрдХрд╛рдИ рд░ WordPress рдХреЛ рд╕рд╛рде рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ PHP рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рд▓рд┐рдкрд┐рд▓реЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рд╕реЗрдЯрд┐рдЩ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫ рдХрдиреНрдлрд░реНрдбред рдпрд╕рд▓реЗ PHP рдЕрдкрд▓реЛрдбрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзрд┐рдХрддрдо рд╕рд╛рдЗрдЬ рд╕реЗрдЯ рдЧрд░реНрджрдЫ, PHP рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ STDERR рдорд╛ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрджрдЫ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ NGINX рдПрдХрд╛рдЗ рд▓рдЧрдорд╛ рд▓реЗрдЦрд┐рдиреЗрдЫрдиреН, рд░ NGINX рдПрдХрд╛рдЗ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджрдЫред

рд▓рд┐рдкрд┐ рдХреЛрдб

# Find the major and minor PHP version so that we can write to its conf.d directory
PHP_MAJOR_MINOR_VERSION="$(php -v | head -n1 | cut -d' ' -f2 | cut -d'.' -f1,2)"

if [ ! -f "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" ]; then
  echo " Configuring PHP for use with NGINX Unit and WordPress"
  # Add PHP configuration overrides
  cat > "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" << EOM
; Set a larger maximum upload size so that WordPress can handle
; bigger media files.
upload_max_filesize=${UPLOAD_MAX_FILESIZE}
post_max_size=${UPLOAD_MAX_FILESIZE}
; Write error log to STDERR so that error messages show up in the NGINX Unit log
error_log=/dev/stderr
EOM
fi

# Restart NGINX Unit because we have reconfigured PHP
echo " Restarting NGINX Unit"
service unit restart

WordPress рдХреЛ рд▓рд╛рдЧреА рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджреИ

рд╣рд╛рдореАрд▓реЗ рдорд╛рд░рд┐рдпрд╛рдбреАрдмреАрд▓рд╛рдИ MySQL рдорд╛ рд░реЛрдЬреЗрдХрд╛ рдЫреМрдВ рдХрд┐рдирдХрд┐ рдпрд╕рдорд╛ рдзреЗрд░реИ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВ рдЫрдиреН рд░ рд╕рдореНрднрд╛рд╡рдирд╛ рдкрдирд┐ рдЫ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд░рд╛рдореНрд░реЛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ (рд╕рд╛рдпрдж, рдпрд╣рд╛рдБ рд╕рдмреИ рдХреБрд░рд╛ рд╕рд░рд▓ рдЫ: MySQL рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реНрдХреЛ рднрдгреНрдбрд╛рд░ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ)ред

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

рд▓рд┐рдкрд┐ рдХреЛрдб

# Set up the WordPress database
echo " Configuring MariaDB for WordPress"
mysqladmin create wordpress || echo "Ignoring above error because database may already exist"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost" IDENTIFIED BY "$WORDPRESS_DB_PASSWORD"; FLUSH PRIVILEGES;"

WordPress CLI рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рдпрд╕ рдЪрд░рдгрдорд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрдЫ WP-CLIред рдпрд╕рдХреЛ рд╕рд╛рде, рддрдкрд╛рдЗрдБ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди, рдбрд╛рдЯрд╛рдмреЗрд╕ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рд╡рд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдирд╛ WordPress рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рд╡рд┐рд╖рдпрд╡рд╕реНрддреБрд╣рд░реВ рд░ рдПрдб-рдЕрдирд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд░ WordPress рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рд▓рд┐рдкрд┐ рдХреЛрдб

if [ ! -f /usr/local/bin/wp ]; then
  # Install the WordPress CLI
  echo " Installing the WordPress CLI tool"
  curl --retry 6 -Ls "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar" > /usr/local/bin/wp
  echo "$WORDPRESS_CLI_MD5 /usr/local/bin/wp" | md5sum -c -
  chmod +x /usr/local/bin/wp
fi

WordPress рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ WordPress рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрдЫ /var/www/wordpressрд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

  • рдбрд╛рдЯрд╛рдмреЗрд╕ рдЬрдбрд╛рдирд▓реЗ TCP рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рдХрдЯреМрддреА рдЧрд░реНрди рд▓реВрдкрдмреНрдпрд╛рдХрдорд╛ TCP рдХреЛ рд╕рдЯреНрдЯрд╛ рдпреБрдирд┐рдХреНрд╕ рдбреЛрдореЗрди рд╕рдХреЗрдЯрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред
  • WordPress рд▓реЗ рдЙрдкрд╕рд░реНрдЧ рдердкреНрдЫ https:// рдпрджрд┐ рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВ HTTPS рдорд╛рд░реНрдлрдд NGINX рдорд╛ рдЬрдбрд╛рди рднрдПрдорд╛ URL рдорд╛, рд░ PHP рд▓рд╛рдИ рдЯрд╛рдврд╛рдХреЛ рд╣реЛрд╕реНрдЯрдирд╛рдо (NGINX рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ) рдкрдирд┐ рдкрдард╛рдЙрдБрдЫред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрди рдХреЛрдбрдХреЛ рдЯреБрдХреНрд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред
  • WordPress рд▓рд╛рдИ рд▓рдЧрдЗрдирдХреЛ рд▓рд╛рдЧрд┐ HTTPS рдЪрд╛рд╣рд┐рдиреНрдЫ
  • рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд URL рд╕рдВрд░рдЪрдирд╛ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ
  • WordPress рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рд╕рд╣реА рдЕрдиреБрдорддрд┐рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрджрдЫред

рд▓рд┐рдкрд┐ рдХреЛрдб

if [ ! -d /var/www/wordpress ]; then
  # Create WordPress directories
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Download WordPress using the WordPress CLI
  echo " Installing WordPress"
  su -s /bin/sh -c 'wp --path=/var/www/wordpress core download' www-data

  WP_CONFIG_CREATE_CMD="wp --path=/var/www/wordpress config create --extra-php --dbname=wordpress --dbuser=wordpress --dbhost="localhost:/var/run/mysqld/mysqld.sock" --dbpass="${WORDPRESS_DB_PASSWORD}""

  # This snippet is injected into the wp-config.php file when it is created;
  # it informs WordPress that we are behind a reverse proxy and as such
  # allows it to generate links using HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
EOM

  # Create WordPress configuration
  su -s /bin/sh -p -c "cat /tmp/wp_forwarded_for.php | ${WP_CONFIG_CREATE_CMD}" www-data
  rm /tmp/wp_forwarded_for.php
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress config set 'FORCE_SSL_ADMIN' 'true'" www-data

  # Install WordPress
  WP_SITE_INSTALL_CMD="wp --path=/var/www/wordpress core install --url="${WORDPRESS_URL}" --title="${WORDPRESS_SITE_TITLE}" --admin_user="${WORDPRESS_ADMIN_USER}" --admin_password="${WORDPRESS_ADMIN_PASSWORD}" --admin_email="${WORDPRESS_ADMIN_EMAIL}" --skip-email"
  su -s /bin/sh -p -c "${WP_SITE_INSTALL_CMD}" www-data

  # Set permalink structure to a sensible default that isn't in the UI
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # Remove sample file because it is cruft and could be a security problem
  rm /var/www/wordpress/wp-config-sample.php

  # Ensure that WordPress permissions are correct
  find /var/www/wordpress -type d -exec chmod g+s {} ;
  chmod g+w /var/www/wordpress/wp-content
  chmod -R g+w /var/www/wordpress/wp-content/themes
  chmod -R g+w /var/www/wordpress/wp-content/plugins
fi

NGINX рдЗрдХрд╛рдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ PHP рдЪрд▓рд╛рдЙрди рд░ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкрдерд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди, PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рд▓рд╛рдИ рдЕрд▓рдЧ рдЧрд░реНрджреИ рд░ рдкреНрд░рджрд░реНрд╢рди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди NGINX рдПрдХрд╛рдЗрд▓рд╛рдИ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджрдЫред рдпрд╣рд╛рдБ рд╣реЗрд░реНрди рдХреЛ рд▓рд╛рдЧреА рддреАрди рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЫрдиреН:

  • рдирд╛рдорд╕реНрдерд╛рдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдХрдиреНрдЯреЗрдирд░рдорд╛ рд▓рд┐рдкрд┐ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ рднрдиреА рдЬрд╛рдБрдЪрдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕рд░реНрддрджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫред рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐рдирднрдиреЗ рдзреЗрд░реИ рдХрдиреНрдЯреЗрдирд░ рд╕реЗрдЯрдЕрдкрд╣рд░реВрд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдЪрд▓рд╛рдЙрди рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдиред
  • рдпрджрд┐ рдирд╛рдорд╕реНрдерд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдЫ рднрдиреЗ, рдирд╛рдорд╕реНрдерд╛рди рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН рдиреЗрдЯрд╡рд░реНрдХред рдпреЛ WordPress рд▓рд╛рдИ рджреБрдмреИ рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБрд╣рд░реВрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд░ рдПрдХреИ рд╕рдордпрдорд╛ рд╡реЗрдмрдорд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрди рдЕрдиреБрдорддрд┐ рджрд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ: (MariaDB рд░ NGINX Uniy рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдореЗрдореЛрд░реА)/(PHP + 5 рдорд╛ RAM рд╕реАрдорд╛)
    рдпреЛ рдорд╛рди NGINX рдПрдХрд╛рдЗ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред

рдпреЛ рдорд╛рдирд▓реЗ рдкрдирд┐ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫ рдХрд┐ рддреНрдпрд╣рд╛рдБ рд╕рдзреИрдВ рдХрдореНрддрд┐рдорд╛ рджреБрдИ PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ, рдЬреБрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐рдирднрдиреЗ WordPress рд▓реЗ рдЖрдлреИрдВрдорд╛ рдзреЗрд░реИ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЧрд░реНрджрдЫ, рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдмрд┐рдирд╛, рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЬрд╕реНрддреИ WP-Cron рдмреНрд░реЗрдХ рд╣реБрдиреЗрдЫред рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдпреА рд╕реАрдорд╛рд╣рд░реВ рдмрдврд╛рдЙрди рд╡рд╛ рдШрдЯрд╛рдЙрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ, рдХрд┐рдирднрдиреЗ рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд░реВрдврд┐рд╡рд╛рджреА рдЫрдиреНред рдзреЗрд░реИ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛, рд╕реЗрдЯрд┐рдЩрд╣рд░реВ 10 рд░ 100 рдмреАрдЪрдорд╛ рдЫрдиреНред

рд▓рд┐рдкрд┐ рдХреЛрдб

if [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d '')" == "" ]; then
  NAMESPACES='"namespaces": {
        "cgroup": true,
        "credential": true,
        "mount": true,
        "network": false,
        "pid": true,
        "uname": true
    }'
else
  NAMESPACES='"namespaces": {}'
fi

PHP_MEM_LIMIT="$(grep 'memory_limit' /etc/php/7.4/embed/php.ini | tr -d ' ' | cut -f2 -d= | numfmt --from=iec)"
AVAIL_MEM="$(grep MemAvailable /proc/meminfo | tr -d ' kB' | cut -f2 -d: | numfmt --from-unit=K)"
MAX_PHP_PROCESSES="$(echo "${AVAIL_MEM}/${PHP_MEM_LIMIT}+5" | bc)"
echo " Calculated the maximum number of PHP processes as ${MAX_PHP_PROCESSES}. You may want to tune this value due to variations in your configuration. It is not unusual to see values between 10-100 in production configurations."

echo " Configuring NGINX Unit to use PHP and WordPress"
cat > /tmp/wordpress.json << EOM
{
  "settings": {
    "http": {
      "header_read_timeout": 30,
      "body_read_timeout": 30,
      "send_timeout": 30,
      "idle_timeout": 180,
      "max_body_size": $(numfmt --from=iec ${UPLOAD_MAX_FILESIZE})
    }
  },
  "listeners": {
    "127.0.0.1:8080": {
      "pass": "routes/wordpress"
    }
  },
  "routes": {
    "wordpress": [
      {
        "match": {
          "uri": [
            "*.php",
            "*.php/*",
            "/wp-admin/"
          ]
        },
        "action": {
          "pass": "applications/wordpress/direct"
        }
      },
      {
        "action": {
          "share": "/var/www/wordpress",
          "fallback": {
            "pass": "applications/wordpress/index"
          }
        }
      }
    ]
  },
  "applications": {
    "wordpress": {
      "type": "php",
      "user": "www-data",
      "group": "www-data",
      "processes": {
        "max": ${MAX_PHP_PROCESSES},
        "spare": 1
      },
      "isolation": {
        ${NAMESPACES}
      },
      "targets": {
        "direct": {
          "root": "/var/www/wordpress/"
        },
        "index": {
          "root": "/var/www/wordpress/",
          "script": "index.php"
        }
      }
    }
  }
}
EOM

curl -X PUT --data-binary @/tmp/wordpress.json --unix-socket /run/control.unit.sock http://localhost/config

NGINX рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рдЖрдзрд╛рд░рднреВрдд NGINX рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ

рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ NGINX рдХреНрдпрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдореБрдЦреНрдп рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ nginx.confред рд╣реНрдпрд╛рдиреНрдбрд▓рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд░ рдЕрдкрд▓реЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзрд┐рдХрддрдо рдлрд╛рдЗрд▓ рдЖрдХрд╛рд░рдХреЛ рд╕реЗрдЯрд┐рдЩрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реНред рддреНрдпрд╣рд╛рдБ рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдореНрдкреНрд░реЗрд╕рди рд╕реЗрдЯрд┐рдЩреН рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рд▓рд╛рдЗрди рдкрдирд┐ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдХреНрдпрд╛рд╕рд┐рдЩ рд╕реЗрдЯрд┐рдЩрд╣рд░реВред

рд▓рд┐рдкрд┐ рдХреЛрдб

# Make directory for NGINX cache
mkdir -p /var/cache/nginx/proxy

echo " Configuring NGINX"
cat > ${NGINX_CONF_DIR}/nginx.conf << EOM
user nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       ${NGINX_CONF_DIR}/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    client_max_body_size ${UPLOAD_MAX_FILESIZE};
    keepalive_timeout  65;
    # gzip settings
    include ${NGINX_CONF_DIR}/gzip_compression.conf;
    # Cache settings
    proxy_cache_path /var/cache/nginx/proxy
        levels=1:2
        keys_zone=wp_cache:10m
        max_size=10g
        inactive=60m
        use_temp_path=off;
    include ${NGINX_CONF_DIR}/conf.d/*.conf;
}
EOM

NGINX рдХрдореНрдкреНрд░реЗрд╕рди рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рдкрдард╛рдЙрдиреБ рдЕрдШрд┐ рдлреНрд▓рд╛рдИрдорд╛ рд╕рд╛рдордЧреНрд░реА рдХрдореНрдкреНрд░реЗрд╕ рдЧрд░реНрдиреБ рд╕рд╛рдЗрдЯрдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рддрд░рд┐рдХрд╛ рд╣реЛ, рддрд░ рдХрдореНрдкреНрд░реЗрд╕рди рд╕рд╣реА рд░реВрдкрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ рдорд╛рддреНрд░ред рд▓рд┐рдкрд┐рдХреЛ рдпреЛ рдЦрдгреНрдб рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ рдпрд╣рд╛рдБ рджреЗрдЦрд┐.

рд▓рд┐рдкрд┐ рдХреЛрдб

cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Credit: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Compression                                                        |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Enable gzip compression.
# Default: off
gzip on;
# Compression level (1-9).
# 5 is a perfect compromise between size and CPU usage, offering about 75%
# reduction for most ASCII files (almost identical to level 9).
# Default: 1
gzip_comp_level 6;
# Don't compress anything that's already small and unlikely to shrink much if at
# all (the default is 20 bytes, which is bad as that usually leads to larger
# files after gzipping).
# Default: 20
gzip_min_length 256;
# Compress data even for clients that are connecting to us via proxies,
# identified by the "Via" header (required for CloudFront).
# Default: off
gzip_proxied any;
# Tell proxies to cache both the gzipped and regular version of a resource
# whenever the client's Accept-Encoding capabilities header varies;
# Avoids the issue where a non-gzip capable client (which is extremely rare
# today) would display gibberish if their proxy gave them the gzipped version.
# Default: off
gzip_vary on;
# Compress all output labeled with one of the following MIME-types.
# `text/html` is always compressed by gzip module.
# Default: text/html
gzip_types
  application/atom+xml
  application/geo+json
  application/javascript
  application/x-javascript
  application/json
  application/ld+json
  application/manifest+json
  application/rdf+xml
  application/rss+xml
  application/vnd.ms-fontobject
  application/wasm
  application/x-web-app-manifest+json
  application/xhtml+xml
  application/xml
  font/eot
  font/otf
  font/ttf
  image/bmp
  image/svg+xml
  text/cache-manifest
  text/calendar
  text/css
  text/javascript
  text/markdown
  text/plain
  text/xml
  text/vcard
  text/vnd.rim.location.xloc
  text/vtt
  text/x-component
  text/x-cross-domain-policy;
EOM

WordPress рдХреЛ рд▓рд╛рдЧреА NGINX рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдЕрд░реНрдХреЛ, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ WordPress рдХреЛ рд▓рд╛рдЧреА рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ default.conf рд╕реВрдЪреАрдорд╛ рдХрдиреНрдлрд░реНрдбред рдпреЛ рдпрд╣рд╛рдБ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ:

  • Certbot рдорд╛рд░реНрдлрдд Let's Encrypt рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд TLS рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрджреИ (рдпрд╕рд▓рд╛рдИ рд╕реЗрдЯрдЕрдк рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рд╣реБрдиреЗрдЫ)
  • Let's Encrypt рдмрд╛рдЯ рд╕рд┐рдлрд╛рд░рд┐рд╕рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд TLS рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрджреИ
  • рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ 1 рдШрдгреНрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдХреНрдпрд╛рд╕рд┐рдЩ рд╕реНрдХрд┐рдк рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рджреБрдИ рд╕рд╛рдЭрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ: favicon.ico рд░ robots.txt: рдкрд╣реБрдБрдЪ рд▓рдЧрд┐рдЩ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╕рд╛рдереИ рдлрд╛рдЗрд▓ рдлреЗрд▓рд╛ рдкрд░реЗрди рднрдиреЗ рддреНрд░реБрдЯрд┐ рд▓рдЧрд┐рдЩред
  • рд▓реБрдХреЗрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдХреЗрд╣реА рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рд░реЛрдХреНрдиреБрд╣реЛрд╕реН .phpрдЕрд╡реИрдз рдкрд╣реБрдБрдЪ рд╡рд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╕реБрд░реБрд╡рд╛рдд рд░реЛрдХреНрди
  • рд╕реНрдерд┐рд░ рд░ рдлрдиреНрдЯ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣реБрдБрдЪ рд▓рдЧрд┐рдЩ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • рд╣реЗрдбрд░ рд╕реЗрдЯрд┐рдЩ рдкрд╣реБрдБрдЪ-рдирд┐рдпрдиреНрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдореВрд▓ рдлрдиреНрдЯ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐
  • index.php рд░ рдЕрдиреНрдп рд╕реНрдЯреНрдпрд╛рдЯрд┐рдХреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рд░реНрдЧ рдердкреНрджреИред

рд▓рд┐рдкрд┐ рдХреЛрдб

cat > ${NGINX_CONF_DIR}/conf.d/default.conf << EOM
upstream unit_php_upstream {
    server 127.0.0.1:8080;
    keepalive 32;
}
server {
    listen 80;
    listen [::]:80;
    # ACME-challenge used by Certbot for Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }
    location / {
      return 301 https://${TLS_HOSTNAME}$request_uri;
    }
}
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ${TLS_HOSTNAME};
    root        /var/www/wordpress/;
    # Let's Encrypt configuration
    ssl_certificate         ${CERT_DIR}/fullchain.pem;
    ssl_certificate_key     ${CERT_DIR}/privkey.pem;
    ssl_trusted_certificate ${CERT_DIR}/chain.pem;
    include ${NGINX_CONF_DIR}/options-ssl-nginx.conf;
    ssl_dhparam ${NGINX_CONF_DIR}/ssl-dhparams.pem;
    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    # Proxy caching
    proxy_cache wp_cache;
    proxy_cache_valid 200 302 1h;
    proxy_cache_valid 404 1m;
    proxy_cache_revalidate on;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban)
    location ~ /. {
        deny all;
    }
    # Deny access to any files with a .php extension in the uploads directory;
    # works in subdirectory installs and also in multi-site network.
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: deny access to wp-content, wp-includes PHP files
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Deny public access to wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # Do not log access for static assets, media
    location ~* .(?:css(.map)?|js(.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        access_log off;
    }
    location ~* .(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }
    location / {
        try_files $uri @index_php;
    }
    location @index_php {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass       http://unit_php_upstream;
    }
    location ~* .php$ {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        try_files        $uri =404;
        proxy_pass       http://unit_php_upstream;
    }
}
EOM

Let's Encrypt рдмрд╛рдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ Certbot рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдд: рдирд╡реАрдХрд░рдг рдЧрд░реНрджреИ

рд╕рд░реНрдЯрдмреЛрдЯ Electronic Frontier Foundation (EFF) рдХреЛ рдирд┐:рд╢реБрд▓реНрдХ рдЙрдкрдХрд░рдг рд╣реЛ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ Let's Encrypt рдмрд╛рдЯ TLS рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд░ рд╕реНрд╡рддрдГ рдирд╡реАрдХрд░рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ NGINX рдорд╛ Let's Encrypt рдмрд╛рдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди Certbot рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдирд┐рдореНрди рдЧрд░реНрдЫ:

  • NGINX рд░реЛрдХреНрдЫ
  • рдбрд╛рдЙрдирд▓реЛрдбрд╣рд░реВ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХрд╛ TLS рд╕реЗрдЯрд┐рдЩрд╣рд░реВ
  • рд╕рд╛рдЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди Certbot рдЪрд▓рд╛рдЙрдБрдЫ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди NGINX рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдЫ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдирд╡реАрдХрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд╡рд╛ рдЫреИрди рднрдиреА рдЬрд╛рдБрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд░ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рдирдпрд╛рдБ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ NGINX рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рд▓рд┐рдкрд┐ рдХреЛрдб

echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop

mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot

if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
  echo " Downloading recommended TLS parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT" 
    -o "${NGINX_CONF_DIR}/options-ssl-nginx.conf" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf" 
    || echo "Couldn't download latest options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Downloading recommended TLS DH parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT" 
    -o "${NGINX_CONF_DIR}/ssl-dhparams.pem" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem" 
    || echo "Couldn't download latest ssl-dhparams.pem"
fi

# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Removing self-signed certificates"
  rm -rf "${CERT_DIR}"
fi

if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
  CERTBOT_STAGING_FLAG=""
else
  CERTBOT_STAGING_FLAG="--staging"
fi

if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
  echo " Generating certificates with Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Starting NGINX in order to use new configuration"
service nginx start

# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рдЗрдЯрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди

рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдХреБрд░рд╛ рдЧрд░реНрдпреМрдВ рдХрд┐ рдХрд╕рд░реА рд╣рд╛рдореНрд░реЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗ NGINX рд░ NGINX рдПрдХрд╛рдЗрд▓рд╛рдИ TLSSSL рд╕рдХреНрд╖рдо рднрдПрдХреЛ рдЙрддреНрдкрд╛рджрди-рддрдпрд╛рд░ рд╕рд╛рдЗрдЯ рд╕реЗрд╡рд╛ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдЫред рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд╕рд╛рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

  • рд╕рдорд░реНрдерди Brotli, HTTPS рдорд╛ рдлреНрд▓рд╛рдИ рдХрдореНрдкреНрд░реЗрд╕рди рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдЫ
  • рдореЛрдб рд╕реБрд░рдХреНрд╖рд╛ ╤Б WordPress рдХреЛ рд▓рд╛рдЧреА рдирд┐рдпрдорддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рдЗрдЯрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрдХреНрд░рдордгрд╣рд░реВ рд░реЛрдХреНрди
  • рдмреНрдпрд╛рдХрдЕрдк WordPress рдХреЛ рд▓рд╛рдЧреА рдЬреБрди рддрдкрд╛рдИрд▓рд╛рдИ рдЙрдкрдпреБрдХреНрдд рдЫ
  • рд╕рдВрд░рдХреНрд╖рдг рд╕рд╣рдпреЛрдЧрдХреЛ рд╕рд╛рде AppArmor (Ubuntu рдорд╛)
  • Postfix рд╡рд╛ msmtp рддрд╛рдХрд┐ WordPress рд▓реЗ рдореЗрд▓ рдкрдард╛рдЙрди рд╕рдХреНрдЫ
  • рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рдЗрдЯ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ рдпрд╕рд▓реЗ рдХрддрд┐ рдЯреНрд░рд╛рдлрд┐рдХ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрдЫ рднрдиреЗрд░ рдмреБрдЭреНрдиреБрд╣реЛрд╕реН

рдЕрдЭ рд░рд╛рдореНрд░реЛ рд╕рд╛рдЗрдЯ рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдЕрдкрдЧреНрд░реЗрдб рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫреМрдВ NGINX рдкреНрд▓рд╕, рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд NGINX рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛рдореНрд░реЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ, рдЙрджреНрдпрдо-рдЧреНрд░реЗрдб рдЙрддреНрдкрд╛рджрдиред рдпрд╕рдХрд╛ рд╕рджрд╕реНрдпрд╣рд░реВрд▓реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдмреНрд░реЛрдЯрд▓реА рдореЛрдбреНрдпреБрд▓, рд╕рд╛рдереИ (рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реБрд▓реНрдХрдХреЛ рд▓рд╛рдЧрд┐) рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫрдиреНред NGINX ModSecurity WAFред рд╣рд╛рдореА рдкрдирд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрдЫреМрдВ NGINX рдПрдк рд╕реБрд░рдХреНрд╖рд╛, F5 рдмрд╛рдЯ рдЙрджреНрдпреЛрдЧ-рдЕрдЧреНрд░рдгреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рд╡рд┐рдзрд┐рдорд╛ рдЖрдзрд╛рд░рд┐рдд NGINX Plus рдХреЛ рд▓рд╛рдЧрд┐ WAF рдореЛрдбреНрдпреБрд▓ред

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

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