{"id":298185,"date":"2020-02-04T15:00:23","date_gmt":"2020-02-04T15:00:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=298185"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=298185","title":{"rendered":"\u041a\u0430\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 RaspberryPI \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 docker"},"content":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/486928\/\">\n<p>\u0421\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 docker \u043d\u0430 Raspberry PI \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f.<\/p>\n<p>  <\/p>\n<h1 id=\"vvedenie-ili-kak-vsyo-nachinalos\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u043a\u0430\u043a \u0432\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c)<\/h1>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 <del>\u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e<\/del> \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0422\u0430\u043a \u0443\u0436 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u041a\u0438\u0442\u0430\u0435 \u0438 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c. \u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c VPN \u0438 \u043f\u0440\u043e\u043a\u0441\u0438 \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0432\u0435\u0440\u044f\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u043d\u044f\u0442\u044c DigitalOcean \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u043e\u043a\u0441\u0438. \u0422\u0430\u043a \u0443\u0436 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 \u043e\u0431\u0440\u043e\u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044f\u043c\u0438: \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (<code>Syncthing<\/code>) \u0434\u043e CI (<code>Jenkins<\/code>).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432 \u0420\u043e\u0441\u0441\u0438\u044e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0441 DO \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e self-hosting. \u041f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u2014 \u0434\u043e\u0440\u043e\u0433\u043e, \u0434\u0430 \u0438 \u043f\u043e\u043a\u0430 \u043d\u0435\u0437\u0430\u0447\u0435\u043c, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u0437\u044f\u043b Raspberry PI 4B. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 DO \u043d\u0430 \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u043a\u0443, \u043e \u0447\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"vvodnye\">\u0412\u0432\u043e\u0434\u043d\u044b\u0435<\/h1>\n<p>  <\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>Syncthing \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n<li>Jenkins \u2014 CI<\/li>\n<li>Telegraf \u2014 |<\/li>\n<li>Influxdb \u2014 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 CPU, GPU \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e<\/li>\n<li>Grafana \u2014 |<\/li>\n<li>Gogs \u2014 git<\/li>\n<li>Radicale \u2014 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u0439\/\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0435 \u0444\u043b\u0435\u0448\u0435\u043a <code>USB3<\/code> \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (<code>LUKS<\/code>)<\/li>\n<li>\u0412\u0441\u0435 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0431\u044b\u043b\u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0437\u0430 Nginx \u0440\u0435\u0432\u0435\u0440\u0441-\u043f\u0440\u043e\u043a\u0441\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<h1 id=\"problemy-i-nyuansy\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043d\u044e\u0430\u043d\u0441\u044b<\/h1>\n<p>  <\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430 \u0438\/\u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u043e\u044f Raspberry PI \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0445\u0430\u0440\u0434 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u0442\u043e\u043a\u043e\u043c \u0432 1A, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0435\u0448\u043a\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u0438, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u2014 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u0430\u043b\u0438\u043d\u043a\u0438 \u0438\u043b\u0438 \u0445\u0430\u0440\u0434\u0435<\/li>\n<li>\u041d\u0430 RaspberryPI 4B (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442) \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0441 USB \u0444\u043b\u0435\u0448\u0435\u043a. \u041a\u0430\u043a \u0438\u0442\u043e\u0433 \u2014 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c USB3 \u0444\u043b\u0435\u0448\u0435\u043a \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n<li>\u0412 \u0441\u0438\u043b\u0443 \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442. \u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430 (\u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u0434\u0430\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0433\u0443\u0433\u043b\u0435) \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 (\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &quot;\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0442\u0440\u0438\u0445\u0438&quot;)<\/li>\n<li>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u2014 <code>syncthing<\/code>, \u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0434\u0432\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u0430\u043b\u0438\u043d\u043a\u0430 \u043f\u0438\u0448\u0435\u0442\/\u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b<\/li>\n<li>\u0412 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0431\u0435\u0437 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u0438\u043d\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e 60 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0435\u0448\u0438\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u2014 \u0431\u0443\u0434\u044c\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a <code>502<\/code> \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043f\u043e\u0434\u0432\u0438\u0441\u0430\u043d\u0438\u044f\u043c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c <code>ssh<\/code>.<\/p>\n<p>  <\/p>\n<h1 id=\"gotovka\">\u0413\u043e\u0442\u043e\u0432\u043a\u0430<\/h1>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0444\u043b\u0435\u0448\u043a\u0443 Micro SD 16GB (\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430) \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Raspbian. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u043d\u0430 <a href=\"https:\/\/www.raspberrypi.org\" rel=\"nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li><a href=\"https:\/\/www.raspberrypi.org\/downloads\/noobs\/\" rel=\"nofollow\">\u041a\u0430\u0447\u0430\u0435\u043c Noobs<\/a><\/li>\n<li>\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c Micro SD \u0432 Fat32<\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043d\u043e\u0441\u0438\u043c\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b uNetbootin) \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u043d\u0430 \u0444\u043b\u0435\u0448\u043a\u0443<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Raspberry PI \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u043b\u0435\u0448\u043a\u043e\u0439<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e. \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438: \u0441 GUI \u0438 \u0431\u0435\u0437. \u042f \u0441\u0442\u0430\u0432\u0438\u043b \u0441 GUI, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <code>ssh<\/code> GUI \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0441\u044f.<\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"podgotovka-fleshkiek\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0424\u043b\u0435\u0448\u043a\u0438(\u0435\u043a)<\/h2>\n<p>  <\/p>\n<p>\u0424\u043b\u0435\u0448\u043a\u0438 \u044f \u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0447\u0435\u0440\u0435\u0437 Elementary OS \u0441 GUI (GParted \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 disks) \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>  <\/p>\n<p><strong> \u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415, \u041f\u041e\u0414\u041e\u0411\u041d\u042b\u0415 \u041c\u0410\u041d\u0418\u041f\u0423\u041b\u042f\u0426\u0418\u0418 \u0423\u0414\u0410\u041b\u042f\u042e\u0422 \u0412\u0421\u0415 \u0424\u0410\u0419\u041b\u042b \u0421 \u0423\u0421\u0422\u0420\u041e\u0419\u0421\u0422\u0412. \u0412\u042b\u0411\u0418\u0420\u0410\u0419\u0422\u0415 \u0426\u0415\u041b\u0415\u0412\u042b\u0415 \u0423\u0421\u0422\u0420\u041e\u0419\u0421\u0422\u0412\u0410 \u0410\u041a\u041a\u0423\u0420\u0410\u0422\u041d\u041e <\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0435\u0448\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>ext4<\/code> \u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LUKS.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>\u0427\u0435\u0440\u0435\u0437 <code>GParted<\/code><br \/> \n<ul>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/li>\n<li>\u0418\u0434\u0435\u043c \u043f\u043e \u043f\u0443\u0442\u0438 <code>Device<\/code> -&gt; <code>Create partition table...<\/code><\/li>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c <code>gpt<\/code><\/li>\n<li>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Apply<\/code><\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0440\u0430\u0437\u0434\u0435\u043b <code>ext4<\/code><\/li>\n<\/ul>\n<\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <code>gnome-disks<\/code> (\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>sudo apt install gnome-disk-utility<\/code>) (\u0432 \u043c\u0435\u043d\u044e \u043e\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>Disks<\/code>):<br \/> \n<ul>\n<li>\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/li>\n<li>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0448\u0435\u0441\u0442\u0435\u0440\u0451\u043d\u043a\u0438)<\/li>\n<li>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Format partition...<\/code><\/li>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0443\u043d\u043a\u0442 \u0441 \u043f\u0440\u0438\u043f\u0438\u0441\u043a\u043e\u0439 <code>Ext 4<\/code><\/li>\n<li>\u0421\u0442\u0430\u0432\u0438\u043c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 <code>Password protect volume<\/code><\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f <code>Next<\/code> \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<br \/> \n<ul>\n<li>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c <code>UUID<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c <code>Device<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u043b\u0435\u0448\u0435\u043a. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442, \u0447\u0442\u043e\u0431\u044b RaspberryPI \u043c\u043e\u0433\u043b\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/strong> \u0414\u0430\u043b\u0435\u0435 <code>\/dev\/sdb1<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u0438\u0437 <code>Device<\/code><\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">dd if=\/dev\/urandom bs=4M count=1 of=\/tmp\/usb_decrypt_file sudo cryptsetup luksAddKey \/dev\/sdb1 \/tmp\/usb_decrypt_file<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0410\u0416\u041d\u041e:<\/strong> \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u041d\u0418\u041a\u041e\u041c\u0423 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u043b\u0435\u0448\u043a\u0438, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b(\u044b)-\u043a\u043b\u044e\u0447\u0438 \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u0438<\/p>\n<p>  <\/p>\n<h2 id=\"podgotovka-placdarma-raspberry-pi\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 <del>\u043f\u043b\u0430\u0446\u0434\u0430\u0440\u043c\u0430<\/del> Raspberry PI<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0451 \u0434\u043e\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (<code>sudo apt update &amp;&amp; sudo apt -y dist-upgrade<\/code>)<\/li>\n<li>\u0414\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432:<br \/> \n<ul>\n<li>\u0421\u0442\u0430\u0432\u0438\u043c <code>docker<\/code> \u0438 <code>docker-compose<\/code> (<code>sudo apt -y install docker docker-compose<\/code>)<\/li>\n<li>\u0421\u0442\u0430\u0432\u0438\u043c <code>Nginx<\/code>(<code>sudo apt -y install nginx<\/code>). \u0411\u0443\u0434\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u044f reverse-proxy<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043b\u0435\u0448\u0435\u043a<\/p>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0444\u0430\u0439\u043b\u044b-\u043a\u043b\u044e\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u0444\u043b\u0435\u0448\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0430\u043f\u043a\u0443 <code>\/root\/cryptfiles<\/code>; \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440)<\/p>\n<p>  <\/li>\n<li>\n<p>\u0412 \u0444\u0430\u0439\u043b <code>\/etc\/crypttab<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">usb1_crypt UUID=\u0414\u0410\u041d\u041d\u042b\u0415_\u0418\u0417_\u041f\u041e\u041b\u042f_UUID \/root\/cryptfiles\/\u0438\u043c\u044f_\u0444\u0430\u0439\u043b\u0430-\u043a\u043b\u044e\u0447\u0430 luks<\/code><\/pre>\n<p>  <\/li>\n<li>\n<p>\u0412 \u0444\u0430\u0439\u043b <code>\/etc\/fstab<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/dev\/mapper\/usb1_crypt \/media\/pi\/usb1 ext4 defaults,nofail 0 2<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>\/dev\/mapper\/usb1_crypt<\/code> \u2014 \u044d\u0442\u043e <code>\/dev\/mapper\/<\/code> + \u0438\u043c\u044f (\u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e) \u0438\u0437 <code>\/etc\/crypttab<\/code><\/li>\n<li><code>\/media\/pi\/usb1<\/code> \u2014 \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e (<code>mkdir \/media\/pi\/usb1<\/code>). \u0412 \u0442\u0435\u043e\u0440\u0438\u0438 \u2014 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0432 <code>\/mnt<\/code> \u0438\u043b\u0438 <code>\/media\/$USER<\/code><\/li>\n<\/ul>\n<p>  <\/li>\n<li>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u043b\u0435\u0448\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c<\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"schepotka-skriptov-dlya-nginx\">\u0429\u0435\u043f\u043e\u0442\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f Nginx<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432\u043e\u0440\u043e\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043d\u0430 <code>bash<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 reverse-proxy \u0434\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/em>:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0423\u0416\u0415 \u043a\u0443\u043f\u0438\u043b\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0434\u043e\u043c\u0435\u043d, \u043b\u0438\u0431\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438<\/li>\n<li>\u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 letsencrypt \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0438 \u0438\u0445 <a href=\"https:\/\/certbot.eff.org\/\" rel=\"nofollow\">\u0431\u043e\u0442\u0430<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f reverse-proxy \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 nginx<\/b><\/p>\n<div class=\"spoiler_text\">\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d \u2014 <code>mydomain.com<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0443\u0442\u044c \u0434\u043e nginx \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/etc\/nginx<\/code>, \u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0442\u044c \u043f\u043e \u043f\u0443\u0442\u0438 <code>\/etc\/nginx\/autocompile<\/code>.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">compile_apps_configs.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash  # Use &quot;-pl&quot; key in subname to make it like https:\/\/hostname\/subname. # E.g.: for https:\/\/my.domain\/example will be used &quot;-pl example&quot;  APPS=(&quot;syncthing&quot; &quot;grafana&quot; &quot;radicale&quot; &quot;git&quot; &quot;jenkins&quot;) APPS_PROXIES=(http:\/\/localhost:8880 http:\/\/localhost:3000 http:\/\/localhost:8882 http:\/\/localhost:8883 http:\/\/localhost:8884) HOSTNAMES=(my.domain) # HOSTNAMES=()  conf_file=&quot;\/etc\/nginx\/sites-available\/autocompiled.conf&quot; ln_file=&quot;\/etc\/nginx\/sites-enabled\/autocompiled.conf&quot;  echo &quot;&quot; &gt; &quot;$conf_file&quot;  for app_index in ${!APPS[*]} do     app=&quot;${APPS[app_index]}&quot;     app_proxy=&quot;${APPS_PROXIES[app_index]}&quot;      for host in ${HOSTNAMES[*]}     do         echo &quot;`.\/compile_config.sh &quot;$host&quot; &quot;$app_proxy&quot; $app`&quot; &gt;&gt; &quot;$conf_file&quot;         echo &quot;&quot; &gt;&gt; &quot;$conf_file&quot;     done done  ln -s &quot;$conf_file&quot; &quot;$ln_file&quot;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">compile_config.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash  # FIRST ARG IS DOMAIN BASE  DOMAIN_BASE=&quot;$1&quot; shift  # THIRD ARG IS PROXY_PASS  PROXY_PATH=$(echo &quot;$1&quot; | sed -e &quot;s\/\\\/\/\\\\\\\\\\\/\/g&quot;) PROXY_LOCATION=&quot;&quot; shift  HOSTNAME=&quot;$DOMAIN_BASE&quot;  while [ -n &quot;$1&quot; ] do     case &quot;$1&quot; in         &quot;-pl&quot;) shift; PROXY_LOCATION=&quot;$(echo &quot;$1&quot; | sed -e &quot;s\/\\\/\/\\\\\\\\\\\/\/g&quot;)&quot; ;;         *) HOSTNAME=&quot;$1.$HOSTNAME&quot; ;;     esac      shift done  cat template.conf | sed &quot;s\/HOSTNAME_BASE\/$DOMAIN_BASE\/g&quot; | sed &quot;s\/HOSTNAME\/$HOSTNAME\/g&quot; | sed &quot;s\/PROXYPATH\/$PROXY_PATH\/g&quot; | sed &quot;s\/PROXYLOCATION\/$PROXY_LOCATION\/&quot;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">location_template.conf<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">    location \/PROXYLOCATION {         proxy_pass PROXYPATH;     }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">template.conf<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">server {     server_name &quot;HOSTNAME&quot;;      ssl_certificate \/etc\/letsencrypt\/live\/HOSTNAME_BASE\/fullchain.pem;     ssl_certificate_key \/etc\/letsencrypt\/live\/HOSTNAME_BASE\/privkey.pem;      listen 443 ssl;      keepalive_timeout 60;     ssl on;     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;     ssl_ciphers &quot;HIGH:!RC4:!aNULL:!MD5:!kEDH&quot;;     add_header Strict-Transport-Security 'max-age=604800';     proxy_set_header X-Forwarded-Server $host;     proxy_set_header X-Forwarded-Host $host;     proxy_set_header Host $host;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_set_header X-Forwarded-Proto $scheme;     proxy_set_header X-Real-IP $remote_addr;      # set max upload size     client_max_body_size 4000M;      sendfile on;     send_timeout 600s;     proxy_connect_timeout 600;      location \/PROXYLOCATION {         proxy_pass_request_headers on;         proxy_pass_request_body on;         proxy_pass PROXYPATH;     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043c\u0435\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 <code>.\/compile_apps_configs.sh<\/code> \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c nginx: <code>sudo systemd reload nginx<\/code>.<\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"podgotovka-docker-i-skriptov\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 Docker \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432<\/h2>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>docker<\/code> \u0438 <code>docker-compose<\/code>:<\/p>\n<p>  <\/p>\n<p><code>sudo apt install docker docker-compose<\/code><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>yml<\/code> \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">\u251c\u2500\u2500 doForAll \u251c\u2500\u2500 gogs \u2502\u00a0\u00a0 \u251c\u2500\u2500 docker-compose.yml \u2502\u00a0\u00a0 \u251c\u2500\u2500 Dockerfile \u2502\u00a0\u00a0 \u2514\u2500\u2500 .env \u251c\u2500\u2500 grafana \u2502\u00a0\u00a0 \u251c\u2500\u2500 configs \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 influxdb.conf \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 telegraf.conf \u2502\u00a0\u00a0 \u251c\u2500\u2500 docker-compose.yml \u2502\u00a0\u00a0 \u2514\u2500\u2500 .env \u251c\u2500\u2500 jenkins \u2502\u00a0\u00a0 \u251c\u2500\u2500 docker-compose.yml \u2502\u00a0\u00a0 \u251c\u2500\u2500 .env \u251c\u2500\u2500 makeFullUpdate \u251c\u2500\u2500 radicale \u2502\u00a0\u00a0 \u251c\u2500\u2500 docker-compose.yml \u2502\u00a0\u00a0 \u2514\u2500\u2500 .env \u2514\u2500\u2500 syncthing     \u251c\u2500\u2500 docker-compose.yml     \u2514\u2500\u2500 .env<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0421\u043c\u044b\u0441\u043b \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (\u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>grafana<\/code> \u2014 \u0442\u0430\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <code>influxdb<\/code>). \u0421\u0430\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/github.com\/InsanusMokrassar\/RPIHabrDockerConfigs\" rel=\"nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0412\u043e \u0432\u0441\u0435\u0445 <code>.env<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>DATA_PATH<\/code><\/li>\n<li>\u0414\u043b\u044f <code>Grafana<\/code> \u0438 \u0435\u0451 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0443\u0434\u0430-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<br \/> \n<ul>\n<li>\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f <code>Telegraf<\/code>. \u0412 \u0444\u0430\u0439\u043b\u0435 <code>.env<\/code> \u043e\u043d \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 \u043a\u043b\u044e\u0447\u043e\u043c <code>INFLUXDB_WRITE_USER_PASSWORD<\/code>, \u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>configs\/telegraf.conf<\/code> \u2014 <code>password<\/code><\/li>\n<li>\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f <code>Grafana<\/code>. \u0412 \u0444\u0430\u0439\u043b\u0435 <code>.env<\/code> \u043e\u043d \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 \u043a\u043b\u044e\u0447\u043e\u043c <code>INFLUXDB_READ_USER_PASSWORD<\/code>, \u0430 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 <code>Grafana<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"poslednie-shtrihi\">\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0442\u0440\u0438\u0445\u0438<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0448\u0442\u0440\u0438\u0445\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<p>\u0421\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <code>root<\/code>. \u0414\u043b\u044f \u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\"># \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 root sudo su mkdir -p \/root\/scripts\/ touch &quot;\/root\/scripts\/monitor_startup_docker_container&quot; chmod 700 &quot;\/root\/scripts\/monitor_startup_docker_container&quot; nano &quot;\/root\/scripts\/monitor_startup_docker_container&quot;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0444\u0430\u0439\u043b <code>\/root\/scripts\/monitor_startup_docker_container<\/code> \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  function log() {     echo `date`: &quot;$@&quot; }  container_name=&quot;$1&quot;  true=1 false=0  function restartContainer() {     docker container restart &quot;$1&quot; }  function checkContanerExitStatus() {     container_name=&quot;$1&quot;     status_line=&quot;`docker container ps -a --filter &quot;name=$container_name&quot; --filter &quot;exited=255&quot; | grep &quot;$container_name&quot;`&quot;     [[ -z &quot;$status_line&quot; ]] &amp;&amp; echo $false || echo $true }  function checkContanerStatusIsEqual() {     container_name=&quot;$1&quot;     container_dest_status=&quot;$2&quot;     status_line=&quot; `docker container ps -a --filter &quot;name=$container_name&quot; --filter &quot;status=$container_dest_status&quot; | grep &quot;$container_name&quot;`&quot;     [[ -z &quot;$status_line&quot; ]] &amp;&amp; echo $false || echo $true }  function isRunning() {     echo &quot;`checkContanerStatusIsEqual &quot;$container_name&quot; &quot;running&quot;`&quot; }  while [[ &quot;`isRunning`&quot; != &quot;$true&quot; ]]; do     log check cycle &quot;$container_name&quot;      if [ &quot;`checkContanerStatusIsEqual &quot;$container_name&quot; &quot;exited&quot;`&quot; == &quot;$true&quot; -o &quot;`checkContanerStatusIsEqual &quot;$container_name&quot; &quot;dead&quot;`&quot; == &quot;$true&quot; ]; then         log restart &quot;$container_name&quot;          restartContainer &quot;$container_name&quot;     fi      if [[ &quot;`isRunning`&quot; -eq &quot;$false&quot; ]]; then         sleep 5     else         sleep 120     fi  done  log started &quot;$container_name&quot;<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>crontab<\/code> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 <code>root<\/code>:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 `crontab -e`<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">@reboot rm \/root\/startup_docker_logs  0 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container telegraf &gt;&gt; \/root\/startup_docker_logs 10 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container influxdb &gt;&gt; \/root\/startup_docker_logs 20 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container grafana &gt;&gt; \/root\/startup_docker_logs 30 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container jenkins &gt;&gt; \/root\/startup_docker_logs 40 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container gogs &gt;&gt; \/root\/startup_docker_logs 50 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container radicale &gt;&gt; \/root\/startup_docker_logs 10 *\/5 * * * \/root\/scripts\/monitor_startup_docker_container syncthing &gt;&gt; \/root\/startup_docker_logs<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h1 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f <del>\u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c<\/del> \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u0427\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e <code>SSH<\/code> \u043a \u043c\u0430\u043b\u0438\u043d\u043a\u0435: \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443, \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-use-ssh-to-connect-to-a-remote-server-in-ubuntu\" rel=\"nofollow\">DigitalOcean<\/a><\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/li>\n<li>\u041f\u043e\u043a\u0443\u043f\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 DNS \u0434\u043b\u044f \u0434\u043e\u043c\u0435\u043d\u043e\u0432<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c.<\/p>\n<\/div>\n<p> \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\/486928\/\"> https:\/\/habr.com\/ru\/post\/486928\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/486928\/\">\n<p>\u0421\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 docker \u043d\u0430 Raspberry PI \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f.<\/p>\n<p>  <\/p>\n<h1 id=\"vvedenie-ili-kak-vsyo-nachinalos\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 (\u0438\u043b\u0438 \u043a\u0430\u043a \u0432\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c)<\/h1>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0451 <del>\u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e<\/del> \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0422\u0430\u043a \u0443\u0436 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u041a\u0438\u0442\u0430\u0435 \u0438 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c. \u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c VPN \u0438 \u043f\u0440\u043e\u043a\u0441\u0438 \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0432\u0435\u0440\u044f\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u043d\u044f\u0442\u044c DigitalOcean \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u043e\u043a\u0441\u0438. \u0422\u0430\u043a \u0443\u0436 \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0440\u043e\u043a\u0441\u0438 \u043e\u0431\u0440\u043e\u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044f\u043c\u0438: \u043e\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (<code>Syncthing<\/code>) \u0434\u043e CI (<code>Jenkins<\/code>).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432 \u0420\u043e\u0441\u0441\u0438\u044e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0441 DO \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e self-hosting. \u041f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u2014 \u0434\u043e\u0440\u043e\u0433\u043e, \u0434\u0430 \u0438 \u043f\u043e\u043a\u0430 \u043d\u0435\u0437\u0430\u0447\u0435\u043c, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u0437\u044f\u043b Raspberry PI 4B. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 DO \u043d\u0430 \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u043a\u0443, \u043e \u0447\u0435\u043c \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442.<\/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-298185","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298185","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=298185"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/298185\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=298185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=298185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=298185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}