{"id":340017,"date":"2022-10-20T15:00:40","date_gmt":"2022-10-20T15:00:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=340017"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=340017","title":{"rendered":"<span>OUTLINE: \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 Notion \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/634bef549fd9c5cec2589aa5\" data-style=\"\" id=\"634bef549fd9c5cec2589aa5\" width=\"\"><\/div>\n<p><em>\u0421 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0440\u044b\u043d\u043a\u0430 \u0443\u0436\u0435 \u0443\u0448\u043b\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0418\u0422-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0441\u043e\u0444\u0442 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u2014 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043c\u0435\u043d\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0439\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 Confluence \u0438\u043b\u0438 Notion: \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043c\u0438\u0440\u0430 \u0438 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442 \u0442\u0435\u0431\u0435 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u00ab\u043f\u043e\u043a\u0430\u00bb. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u00a0<\/em><\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0433\u043e\u0440\u044c, \u044f DevOps \u0432 Malov.Tech<sup><sub>[\u0441\u0441\u044b\u043b\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u043c\u043e\u0434.]<\/sub><\/sup>. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u0448\u0435\u043b \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b open-source wiki-\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0432\u0438\u0434\u0435\u043e-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u2014 \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432\u044b\u0448\u0435. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \ud83d\ude42<\/p>\n<h3>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f\u00a0<\/h3>\n<p>\u041c\u044b \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u0441\u043a\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c Confluence \u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430 Outline. \u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0441 \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a, <a href=\"https:\/\/github.com\/outline\" rel=\"noopener noreferrer nofollow\"><u>Outline<\/u><\/a> \u2014 \u044d\u0442\u043e open-source \u0431\u0430\u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 markdown-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u041c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0437\u0434\u0435\u0441\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c (\u0434\u043d\u0438 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434).\u00a0<\/p>\n<p><strong>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439\u00a0<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 TTL (\u0441\u0440\u043e\u043a \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438) \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439, \u0442\u043e \u044d\u0442\u0443 \u0438\u043d\u0444\u0443 \u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e \u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0432 Outline.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<\/li>\n<li>\n<p>Outline \u0432\u0435\u0434\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0436\u0435\u0435 \u0438, \u043f\u043e \u0441\u0443\u0442\u0438, MVP: \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0435\u043a\u0441\u0442, \u043d\u0435\u0442 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043a \u0432 Notion, \u043d\u043e \u0440\u0435\u0431\u044f\u0442\u0430 \u0432\u0437\u044f\u043b\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0442\u0435\u043c\u043f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438, \u0443\u0432\u0435\u0440\u0435\u043d, \u0441\u043a\u043e\u0440\u043e \u043d\u0430\u0432\u0435\u0440\u0441\u0442\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<p>\u041c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441\u0442\u0435\u043a \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441 Ubuntu 20.04, 2 \u0413\u0411 RAM \u0438 2 CPU + \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b \u0435\u0449\u0435 2-3 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438:<\/p>\n<p><strong>1. Docker \u2014 https:\/\/docs.docker.com\/engine\/<\/strong><\/p>\n<p><strong>2. Portainer \u2014 https:\/\/docs.portainer.io\/start\/install\/server\/docker\/linux<\/strong><\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 Portainer:<\/p>\n<p><strong>3. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0434\u043e\u043a\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445.<\/strong><\/p>\n<p>&#8212; Networks > Add network > \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0451: reverseproxy<\/p>\n<p><strong>4.<\/strong> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Nginx-Proxy-Manager (\u0434\u0430\u043b\u0435\u0435 NPM, \u043d\u043e \u043d\u0435 \u043f\u0443\u0442\u0430\u0435\u043c \u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#171;npm&#187; \u2014 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 Node.js). \u041d\u0430\u0448 NPM &#8212; \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0442 \u0436\u0435 Nginx, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e NPM \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Nginx. \u0412 \u043d\u0435\u043c \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u0435\u0442\u0438 reverseproxy \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 SSL-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b Let&#8217;s Encrypt.<\/p>\n<p><strong>&#8212; Stacks > Add stack\u00a0<\/strong><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430:\u00a0<\/p>\n<pre><code>version: \"3\" services:  \u00a0\u00a0app: \u00a0\u00a0\u00a0\u00a0image: 'jc21\/nginx-proxy-manager:latest' \u00a0\u00a0\u00a0\u00a0restart: unless-stopped \u00a0\u00a0\u00a0\u00a0ports: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# \u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &lt;host-port>:&lt;container-port> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '80:80' # Public HTTP Port \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '443:443' # Public HTTPS Port \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '81:81' # Admin Web Port \u00a0\u00a0\u00a0\u00a0environment: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_HOST: \"db\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_PORT: 3306 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_USER: \"npm\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_PASSWORD: ${MYSQL_PASSWORD} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_NAME: \"npm\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# true, \u0435\u0441\u043b\u0438 IPv6 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0445\u043e\u0441\u0442\u0435 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DISABLE_IPV6: 'true' \u00a0\u00a0\u00a0\u00a0volumes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/data:\/data \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/letsencrypt:\/etc\/letsencrypt \u00a0\u00a0\u00a0\u00a0depends_on: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- db \u00a0\u00a0\u00a0\u00a0networks: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- nginx-proxy-manager \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- reverseproxy  \u00a0\u00a0db: \u00a0\u00a0\u00a0\u00a0image: 'jc21\/mariadb-aria:latest' \u00a0\u00a0\u00a0\u00a0restart: unless-stopped \u00a0\u00a0\u00a0\u00a0environment: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_DATABASE: 'npm' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_USER: 'npm' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_PASSWORD: ${MYSQL_PASSWORD} \u00a0\u00a0\u00a0\u00a0volumes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/data\/mysql:\/var\/lib\/mysql \u00a0\u00a0\u00a0\u00a0networks: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- nginx-proxy-manager  networks: \u00a0\u00a0nginx-proxy-manager: \u00a0\u00a0reverseproxy: \u00a0\u00a0\u00a0\u00a0external: true<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;<u>Advanced mode<\/u>&#171;<u>,<\/u> \u043b\u0438\u0431\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 &#171;<u>Add an environment variable<\/u>&#187; >\u00a0<\/p>\n<pre><code>MYSQL_ROOT_PASSWORD=&lt;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 openssl rand -hex 20> MYSQL_PASSWORD=&lt;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 openssl rand -hex 20><\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0432\u0435\u0431-\u043f\u0430\u043d\u0435\u043b\u044c NPM \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>http:\/\/{ip-\u0430\u0434\u0440\u0435\u0441-\u0441\u0435\u0440\u0432\u0435\u0440\u0430}:81<\/code> \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0430\u0434\u043c\u0438\u043d\u0430:<br \/>&#8212; \u041b\u043e\u0433\u0438\u043d: <code>admin@example.com<\/code><br \/>&#8212; \u041f\u0430\u0440\u043e\u043b\u044c: <code>changeme<\/code><\/p>\n<p><strong>5. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c Outline.<\/strong><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b Outline \u0438 MinIO (\u043e MinIO \u043d\u0438\u0436\u0435) \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 (\u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432), \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0441\u0435\u0442\u044c &#171;reverseproxy&#187;. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u0438\u043c \u043f\u043e\u0440\u0442\u0430\u043c \u0447\u0435\u0440\u0435\u0437 NPM \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438.<\/p>\n<p>&#8212; Stacks > Add stack\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430:\u00a0<\/p>\n<pre><code>version: \"2\" services:   outline_redis:     image: redis     restart: always     container_name: outline_redis     networks:       - outline-internal   outline_postgres:     image: postgres:13     restart: always     container_name: outline_postgres     environment:       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}       - POSTGRES_USER=outline       - POSTGRES_DB=outline     networks:       - outline-internal     volumes:       - \/mnt\/containers\/outline\/container-data\/db:\/var\/lib\/postgresql\/data:Z     # ports:     #   - 5432:5432   outline_minio:     image: minio\/minio     restart: always     container_name: outline_minio     volumes:       - \/mnt\/containers\/outline\/container-data\/data:\/data:Z     environment:       - MINIO_ROOT_USER=minio       - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}       - MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL}     # ports:       # - 9000:9000       # - 9001:9001     networks:       - reverseproxy     command: \"server \/data --console-address :9001\"   outline:     image: outlinewiki\/outline     user: root     restart: always     container_name: outline     command: sh -c \"yarn sequelize:migrate --env=production-ssl-disabled &amp;&amp; yarn start --env=production-ssl-disabled\"     depends_on:       - outline_postgres       - outline_redis       - outline_minio     environment:       - PGSSLMODE=disable       - SECRET_KEY=${SECRET_KEY}       - UTILS_SECRET=${UTILS_SECRET}       - DATABASE_URL=postgres:\/\/outline:${POSTGRES_PASSWORD}@outline_postgres:5432\/outline       - REDIS_URL=redis:\/\/outline_redis:6379       - URL=${WIKI_URL}       - PORT=443       - AWS_ACCESS_KEY_ID=minio       - AWS_REGION=us-east-1       - AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}       - AWS_S3_UPLOAD_BUCKET_URL=${WIKIDATA_URL}       - AWS_S3_UPLOAD_BUCKET_NAME=outline       - AWS_S3_UPLOAD_MAX_SIZE=26214400       - AWS_S3_FORCE_PATH_STYLE=true       - AWS_S3_ACL=private       # \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Slack:       #- SLACK_CLIENT_ID=${SLACK_CLIENT_ID}       #- SLACK_CLIENT_SECRET=${SLACK_CLIENT_SECRET}       - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}       - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}     # ports:     #   443:443     networks:       - outline-internal       - reverseproxy networks:   outline-internal:   reverseproxy:     external: true<\/code><\/pre>\n<p><strong>5.1 \u0414\u043e\u0431\u0430\u0432\u0438\u043c environment variables \u0432 \u043d\u0430\u0448 Outline Stack\u00a0<\/strong><\/p>\n<p><strong>Disclaimer:<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Outline \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Google OAuth 2.0. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Slack. \u0411\u043e\u043b\u044c\u0448\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Outline \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 https:\/\/github.com\/outline\/outline\/blob\/main\/.env.sample<\/p>\n<p>&#8212; Environment variables > Advanced mode<br \/>\u2757 \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, SECRET_KEY \u0438 UTILS_SECRET \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u043e\u043b\u044f\u043c\u0438.<\/p>\n<pre><code>SECRET_KEY={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 32} UTILS_SECRET={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 32} POSTGRES_PASSWORD={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 20} MINIO_ROOT_PASSWORD={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 20} MINIO_BROWSER_REDIRECT_URL=https:\/\/wikidata-admin.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} WIKI_URL=https:\/\/wiki.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} WIKIDATA_URL=https:\/\/wikidata.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} GOOGLE_CLIENT_ID={\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 id \u0438\u0437 https:\/\/console.cloud.google.com\/} GOOGLE_CLIENT_SECRET={\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 Client secret \u0438\u0437 https:\/\/console.cloud.google.com\/}<\/code><\/pre>\n<p><strong>5.2 \u0412\u0430\u0448\u0438 GOOGLE_CLIENT_ID \u0438 GOOGLE_CLIENT_SECRET \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435 Google Cloud https:\/\/console.cloud.google.com\/\u00a0<\/strong><\/p>\n<p>&#8212; \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 (\u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d) > APIs &amp; Services > Credentials > Create credentials > OAuth Client ID\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/647\/676\/869\/6476768692aa32b9b3a38cf2a9e847b7.jpeg\" width=\"1337\" height=\"559\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/647\/676\/869\/6476768692aa32b9b3a38cf2a9e847b7.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435,\u00a0<br \/>&#8212; <strong>Application type<\/strong>: Web application<br \/>&#8212; <strong>Name<\/strong>: \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e client ID<br \/>&#8212; <strong>Authorized JavaScript origins<\/strong>: https:\/\/wiki.&lt;\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d><br \/>&#8212; <strong>Authorized redirect URIs<\/strong>: https:\/\/wiki.&lt;\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d>\/auth\/google.callback<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/320\/a31\/c05\/320a31c05db6dcc20fcda551c58d80d2.jpeg\" width=\"1333\" height=\"938\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/320\/a31\/c05\/320a31c05db6dcc20fcda551c58d80d2.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>6. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 Nginx-Proxy-Manager:<\/strong><\/p>\n<p>\u0412 NPM <code>http:\/\/{ip-\u0430\u0434\u0440\u0435\u0441-\u0441\u0435\u0440\u0432\u0435\u0440\u0430}:81<\/code> > Hosts > Add host<br \/>\u0414\u043b\u044f Outline \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 3 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442:<\/p>\n<ul>\n<li>\n<p>wiki.malov.tech &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441<\/p>\n<\/li>\n<li>\n<p>wikidata-admin.malov.tech &#8212; \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 MinIO<\/p>\n<\/li>\n<li>\n<p>wikidata.malov.tech &#8212; \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043c\u0435\u043d \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f MinIO<\/p>\n<\/li>\n<\/ul>\n<p><strong>6.1<\/strong> &#8212; wiki.malov.tech<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d00\/5a0\/9ed\/d005a09ede805469868e25c293342a00.jpeg\" width=\"508\" height=\"557\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d00\/5a0\/9ed\/d005a09ede805469868e25c293342a00.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d54\/e53\/e51\/d54e53e5185311a1649e779be941f4f7.jpeg\" width=\"508\" height=\"565\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d54\/e53\/e51\/d54e53e5185311a1649e779be941f4f7.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>6.2<\/strong> wikidata-admin.malov.tech<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/102\/a08\/085\/102a080858f6ea07dbf0d74544d5cd76.jpeg\" width=\"507\" height=\"556\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/102\/a08\/085\/102a080858f6ea07dbf0d74544d5cd76.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/19b\/1bf\/67c\/19b1bf67c1a89629cd157b719d7d7f6a.jpeg\" width=\"508\" height=\"565\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/19b\/1bf\/67c\/19b1bf67c1a89629cd157b719d7d7f6a.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>6.3<\/strong> wikidata.malov.tech<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a0f\/7be\/5a7\/a0f7be5a73d0f353f403775463aab329.jpeg\" width=\"508\" height=\"557\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a0f\/7be\/5a7\/a0f7be5a73d0f353f403775463aab329.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/cfd\/6f8\/5c0\/cfd6f85c09a5738ac2c4d4e58fdd9edd.jpeg\" width=\"508\" height=\"565\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cfd\/6f8\/5c0\/cfd6f85c09a5738ac2c4d4e58fdd9edd.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>7<\/strong>. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c SMTP \u0434\u043b\u044f email \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 Outline, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f NPM \u0438 Portainer, \u0437\u0430\u043a\u0440\u044b\u0432 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u043f\u043e \u0430\u0439\u043f\u0438 \u0431\u0435\u0437 SSL.<\/p>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435! \u0412\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 Outline \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043a\u0438\u043d\u0435\u0442 \u0432\u0430\u0441 \u043f\u043e \u043b\u0438\u0447\u043d\u044b\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u0430\u043c \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430. \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430: \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u0441\u044b\u043b\u043a\u0438, \u0432\u044b\u0440\u0435\u0437\u043a\u0438, \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u2014 \u0432\u0441\u0435, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c \u0432 Confluence, Notion \u0438 Google Docs. \u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043b\u044e\u0441 \u2014 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0442\u043e\u0436\u0435 \u0441\u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0438\u043a\u0438-\u0441\u0438\u0441\u0442\u0435\u043c\u044b.  <\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/693594\/\"> https:\/\/habr.com\/ru\/post\/693594\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/634bef549fd9c5cec2589aa5\" data-style=\"\" id=\"634bef549fd9c5cec2589aa5\" width=\"\"><\/div>\n<p><em>\u0421 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0440\u044b\u043d\u043a\u0430 \u0443\u0436\u0435 \u0443\u0448\u043b\u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0418\u0422-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0441\u043e\u0444\u0442 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u2014 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043c\u0435\u043d\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0439\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 Confluence \u0438\u043b\u0438 Notion: \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043c\u0438\u0440\u0430 \u0438 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442 \u0442\u0435\u0431\u0435 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u00ab\u043f\u043e\u043a\u0430\u00bb. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\u00a0<\/em><\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0433\u043e\u0440\u044c, \u044f DevOps \u0432 Malov.Tech<sup><sub>[\u0441\u0441\u044b\u043b\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u043c\u043e\u0434.]<\/sub><\/sup>. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u0448\u0435\u043b \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b open-source wiki-\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0432\u0438\u0434\u0435\u043e-\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u2014 \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432\u044b\u0448\u0435. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \ud83d\ude42<\/p>\n<h3>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f\u00a0<\/h3>\n<p>\u041c\u044b \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u0441\u043a\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c Confluence \u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430 Outline. \u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0441 \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a, <a href=\"https:\/\/github.com\/outline\" rel=\"noopener noreferrer nofollow\"><u>Outline<\/u><\/a> \u2014 \u044d\u0442\u043e open-source \u0431\u0430\u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 markdown-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u043a\u0434\u0430\u0443\u043d \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. \u041c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0437\u0434\u0435\u0441\u044c \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c (\u0434\u043d\u0438 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434).\u00a0<\/p>\n<p><strong>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439\u00a0<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 TTL (\u0441\u0440\u043e\u043a \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438) \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439, \u0442\u043e \u044d\u0442\u0443 \u0438\u043d\u0444\u0443 \u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e \u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0432 Outline.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<\/li>\n<li>\n<p>Outline \u0432\u0435\u0434\u0435\u043c \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0436\u0435\u0435 \u0438, \u043f\u043e \u0441\u0443\u0442\u0438, MVP: \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0435\u043a\u0441\u0442, \u043d\u0435\u0442 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043a \u0432 Notion, \u043d\u043e \u0440\u0435\u0431\u044f\u0442\u0430 \u0432\u0437\u044f\u043b\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0442\u0435\u043c\u043f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438, \u0443\u0432\u0435\u0440\u0435\u043d, \u0441\u043a\u043e\u0440\u043e \u043d\u0430\u0432\u0435\u0440\u0441\u0442\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<p>\u041c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0441\u0442\u0435\u043a \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441 Ubuntu 20.04, 2 \u0413\u0411 RAM \u0438 2 CPU + \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b \u0435\u0449\u0435 2-3 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438:<\/p>\n<p><strong>1. Docker \u2014 https:\/\/docs.docker.com\/engine\/<\/strong><\/p>\n<p><strong>2. Portainer \u2014 https:\/\/docs.portainer.io\/start\/install\/server\/docker\/linux<\/strong><\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 Portainer:<\/p>\n<p><strong>3. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0434\u043e\u043a\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445.<\/strong><\/p>\n<p>&#8212; Networks > Add network > \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0451: reverseproxy<\/p>\n<p><strong>4.<\/strong> \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Nginx-Proxy-Manager (\u0434\u0430\u043b\u0435\u0435 NPM, \u043d\u043e \u043d\u0435 \u043f\u0443\u0442\u0430\u0435\u043c \u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#171;npm&#187; \u2014 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 Node.js). \u041d\u0430\u0448 NPM &#8212; \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0442 \u0436\u0435 Nginx, \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e NPM \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Nginx. \u0412 \u043d\u0435\u043c \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u043a \u0441\u0435\u0442\u0438 reverseproxy \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 SSL-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b Let&#8217;s Encrypt.<\/p>\n<p><strong>&#8212; Stacks > Add stack\u00a0<\/strong><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430:\u00a0<\/p>\n<pre><code>version: \"3\" services:  \u00a0\u00a0app: \u00a0\u00a0\u00a0\u00a0image: 'jc21\/nginx-proxy-manager:latest' \u00a0\u00a0\u00a0\u00a0restart: unless-stopped \u00a0\u00a0\u00a0\u00a0ports: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# \u0412 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 &lt;host-port>:&lt;container-port> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '80:80' # Public HTTP Port \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '443:443' # Public HTTPS Port \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- '81:81' # Admin Web Port \u00a0\u00a0\u00a0\u00a0environment: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_HOST: \"db\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_PORT: 3306 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_USER: \"npm\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_PASSWORD: ${MYSQL_PASSWORD} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DB_MYSQL_NAME: \"npm\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# true, \u0435\u0441\u043b\u0438 IPv6 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0445\u043e\u0441\u0442\u0435 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DISABLE_IPV6: 'true' \u00a0\u00a0\u00a0\u00a0volumes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/data:\/data \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/letsencrypt:\/etc\/letsencrypt \u00a0\u00a0\u00a0\u00a0depends_on: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- db \u00a0\u00a0\u00a0\u00a0networks: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- nginx-proxy-manager \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- reverseproxy  \u00a0\u00a0db: \u00a0\u00a0\u00a0\u00a0image: 'jc21\/mariadb-aria:latest' \u00a0\u00a0\u00a0\u00a0restart: unless-stopped \u00a0\u00a0\u00a0\u00a0environment: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_DATABASE: 'npm' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_USER: 'npm' \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_PASSWORD: ${MYSQL_PASSWORD} \u00a0\u00a0\u00a0\u00a0volumes: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/data\/mysql:\/var\/lib\/mysql \u00a0\u00a0\u00a0\u00a0networks: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- nginx-proxy-manager  networks: \u00a0\u00a0nginx-proxy-manager: \u00a0\u00a0reverseproxy: \u00a0\u00a0\u00a0\u00a0external: true<\/code><\/pre>\n<p>\u041d\u0438\u0436\u0435 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;<u>Advanced mode<\/u>&#171;<u>,<\/u> \u043b\u0438\u0431\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 &#171;<u>Add an environment variable<\/u>&#187; >\u00a0<\/p>\n<pre><code>MYSQL_ROOT_PASSWORD=&lt;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 openssl rand -hex 20> MYSQL_PASSWORD=&lt;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 openssl rand -hex 20><\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0432\u0435\u0431-\u043f\u0430\u043d\u0435\u043b\u044c NPM \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>http:\/\/{ip-\u0430\u0434\u0440\u0435\u0441-\u0441\u0435\u0440\u0432\u0435\u0440\u0430}:81<\/code> \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0430\u0434\u043c\u0438\u043d\u0430:<br \/>&#8212; \u041b\u043e\u0433\u0438\u043d: <code>admin@example.com<\/code><br \/>&#8212; \u041f\u0430\u0440\u043e\u043b\u044c: <code>changeme<\/code><\/p>\n<p><strong>5. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c Outline.<\/strong><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b Outline \u0438 MinIO (\u043e MinIO \u043d\u0438\u0436\u0435) \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 (\u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432), \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u044d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0441\u0435\u0442\u044c &#171;reverseproxy&#187;. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u044d\u0442\u0438\u043c \u043f\u043e\u0440\u0442\u0430\u043c \u0447\u0435\u0440\u0435\u0437 NPM \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438.<\/p>\n<p>&#8212; Stacks > Add stack\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430:\u00a0<\/p>\n<pre><code>version: \"2\" services:   outline_redis:     image: redis     restart: always     container_name: outline_redis     networks:       - outline-internal   outline_postgres:     image: postgres:13     restart: always     container_name: outline_postgres     environment:       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}       - POSTGRES_USER=outline       - POSTGRES_DB=outline     networks:       - outline-internal     volumes:       - \/mnt\/containers\/outline\/container-data\/db:\/var\/lib\/postgresql\/data:Z     # ports:     #   - 5432:5432   outline_minio:     image: minio\/minio     restart: always     container_name: outline_minio     volumes:       - \/mnt\/containers\/outline\/container-data\/data:\/data:Z     environment:       - MINIO_ROOT_USER=minio       - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}       - MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL}     # ports:       # - 9000:9000       # - 9001:9001     networks:       - reverseproxy     command: \"server \/data --console-address :9001\"   outline:     image: outlinewiki\/outline     user: root     restart: always     container_name: outline     command: sh -c \"yarn sequelize:migrate --env=production-ssl-disabled &amp;&amp; yarn start --env=production-ssl-disabled\"     depends_on:       - outline_postgres       - outline_redis       - outline_minio     environment:       - PGSSLMODE=disable       - SECRET_KEY=${SECRET_KEY}       - UTILS_SECRET=${UTILS_SECRET}       - DATABASE_URL=postgres:\/\/outline:${POSTGRES_PASSWORD}@outline_postgres:5432\/outline       - REDIS_URL=redis:\/\/outline_redis:6379       - URL=${WIKI_URL}       - PORT=443       - AWS_ACCESS_KEY_ID=minio       - AWS_REGION=us-east-1       - AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}       - AWS_S3_UPLOAD_BUCKET_URL=${WIKIDATA_URL}       - AWS_S3_UPLOAD_BUCKET_NAME=outline       - AWS_S3_UPLOAD_MAX_SIZE=26214400       - AWS_S3_FORCE_PATH_STYLE=true       - AWS_S3_ACL=private       # \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Slack:       #- SLACK_CLIENT_ID=${SLACK_CLIENT_ID}       #- SLACK_CLIENT_SECRET=${SLACK_CLIENT_SECRET}       - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}       - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}     # ports:     #   443:443     networks:       - outline-internal       - reverseproxy networks:   outline-internal:   reverseproxy:     external: true<\/code><\/pre>\n<p><strong>5.1 \u0414\u043e\u0431\u0430\u0432\u0438\u043c environment variables \u0432 \u043d\u0430\u0448 Outline Stack\u00a0<\/strong><\/p>\n<p><strong>Disclaimer:<\/strong> \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Outline \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Google OAuth 2.0. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Slack. \u0411\u043e\u043b\u044c\u0448\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Outline \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 https:\/\/github.com\/outline\/outline\/blob\/main\/.env.sample<\/p>\n<p>&#8212; Environment variables > Advanced mode<br \/>\u2757 \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, SECRET_KEY \u0438 UTILS_SECRET \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u043e\u043b\u044f\u043c\u0438.<\/p>\n<pre><code>SECRET_KEY={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 32} UTILS_SECRET={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 32} POSTGRES_PASSWORD={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 20} MINIO_ROOT_PASSWORD={\u0441\u0433\u0435\u043d\u0435\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openssl rand -hex 20} MINIO_BROWSER_REDIRECT_URL=https:\/\/wikidata-admin.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} WIKI_URL=https:\/\/wiki.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} WIKIDATA_URL=https:\/\/wikidata.{\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d} GOOGLE_CLIENT_ID={\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 id \u0438\u0437 https:\/\/console.cloud.google.com\/} GOOGLE_CLIENT_SECRET={\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 Client secret \u0438\u0437 https:\/\/console.cloud.google.com\/}<\/code><\/pre>\n<p><strong>5.2 \u0412\u0430\u0448\u0438 GOOGLE_CLIENT_ID \u0438 GOOGLE_CLIENT_SECRET \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435 Google Cloud https:\/\/console.cloud.google.com\/\u00a0<\/strong><\/p>\n<p>&#8212; \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 (\u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d) > APIs &amp; Services > Credentials > Create credentials > OAuth Client ID\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435,\u00a0<br \/>&#8212; <strong>Application type<\/strong>: Web application<br \/>&#8212; <strong>Name<\/strong>: \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e client ID<br \/>&#8212; <strong>Authorized JavaScript origins<\/strong>: https:\/\/wiki.&lt;\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d><br \/>&#8212; <strong>Authorized redirect URIs<\/strong>: https:\/\/wiki.&lt;\u0412\u0430\u0448-\u0434\u043e\u043c\u0435\u043d>\/auth\/google.callback<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>6. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 Nginx-Proxy-Manager:<\/strong><\/p>\n<p>\u0412 NPM <code>http:\/\/{ip-\u0430\u0434\u0440\u0435\u0441-\u0441\u0435\u0440\u0432\u0435\u0440\u0430}:81<\/code> > Hosts > Add host<br \/>\u0414\u043b\u044f Outline \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 3 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442:<\/p>\n<ul>\n<li>\n<p>wiki.malov.tech &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441<\/p>\n<\/li>\n<li>\n<p>wikidata-admin.malov.tech &#8212; \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 MinIO<\/p>\n<\/li>\n<li>\n<p>wikidata.malov.tech &#8212; \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043c\u0435\u043d \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f MinIO<\/p>\n<\/li>\n<\/ul>\n<p><strong>6.1<\/strong> &#8212; wiki.malov.tech<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p><strong>6.2<\/strong> wikidata-admin.malov.tech<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p><strong>6.3<\/strong> wikidata.malov.tech<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p><strong>7<\/strong>. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c SMTP \u0434\u043b\u044f email \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 Outline, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f NPM \u0438 Portainer, \u0437\u0430\u043a\u0440\u044b\u0432 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u043f\u043e \u0430\u0439\u043f\u0438 \u0431\u0435\u0437 SSL.<\/p>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435! \u0412\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0431\u0430\u0437\u0443 \u0437\u043d\u0430\u043d\u0438\u0439 Outline \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0438 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043a\u0438\u043d\u0435\u0442 \u0432\u0430\u0441 \u043f\u043e \u043b\u0438\u0447\u043d\u044b\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u0430\u043c \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430. \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0441\u044e\u0434\u0430 \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430: \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u0441\u044b\u043b\u043a\u0438, \u0432\u044b\u0440\u0435\u0437\u043a\u0438, \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u2014 \u0432\u0441\u0435, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c \u0432 Confluence, Notion \u0438 Google Docs. \u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043b\u044e\u0441 \u2014 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0442\u043e\u0436\u0435 \u0441\u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0438\u043a\u0438-\u0441\u0438\u0441\u0442\u0435\u043c\u044b.  <\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/693594\/\"> https:\/\/habr.com\/ru\/post\/693594\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-340017","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340017","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=340017"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340017\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=340017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=340017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=340017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}