{"id":353804,"date":"2024-05-20T22:35:32","date_gmt":"2024-05-20T22:35:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=353804"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=353804","title":{"rendered":"<span>1.1.\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 Object Cloud<\/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<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c. \u0412\u0441\u0435\u0445 \u0441 \u0434\u043d\u0435\u043c \u0437\u043d\u0430\u043d\u0438\u0439 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0441\u0435\u043d\u0438! <\/p>\n<p>\u041a\u0430\u043a <em>\u0411\u0435\u043b\u0438\u043d\u0441\u043a\u0438\u0439 \u0412\u0438\u0441\u0441\u0430\u0440\u0438\u043e\u043d \u0413\u0440\u0438\u0433\u043e\u0440\u044c\u0435\u0432\u0438\u0447<\/em>, \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0438 \u0441\u0430\u043c <em>\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0418\u043b\u044c\u0438\u0447 \u041b\u0435\u043d\u0438\u043d<\/em> \u0433\u043e\u0432\u043e\u0440\u0438\u043b :<\/p>\n<blockquote>\n<p>&#171;\u0423\u0447\u0438\u0442\u0435\u0441\u044c, \u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u0443\u0447\u0438\u0442\u0435\u0441\u044c! \u0414\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0443\u043a\u0430!&#187;<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u0438 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c\u0441\u044f \u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u044f, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0434\u0435\u0437\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 &#8212; <a href=\"https:\/\/github.com\/NixOS\/nixpkgs\/tree\/master\" rel=\"noopener noreferrer nofollow\">Github <\/a>\u0438 \u043a\u0443\u0441\u043a\u0438 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0430\u043c\u0438\u0445 \u0433\u043b\u0443\u0431\u0438\u043d \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043d\u0443\u0430\u043b\u043e\u0432 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u043a\u0430\u043b\u043a\u0438.<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/756976\/\" rel=\"noopener noreferrer nofollow\">\u041c\u044b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u0432 NixOS,\u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 &#171;\u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0435\u0439&#187; \u041d\u0438\u043a\u0441\u043e\u0432, \u043a\u0430\u043a \u0441 \u0411\u0430\u0448\u0421\u0438\u0431\u043b\u043e\u043c(Ansible playbook \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 bash-\u0432\u0441\u0442\u0430\u0432\u043e\u043a ) \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0431\u0435\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043a\u0438 (\u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0432\u043c &#8212; \u0443\u0436\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0435\u0435 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0431\u0435\u0434\u043d\u043e\u0439 \u0445\u0440\u0430\u043d\u0438\u043b\u043a\u0438 \u0438 \u0447\u0442\u043e-\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043c, \u0447\u0442\u043e-\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c ).<\/p>\n<p>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432 \u043c\u0435\u043d\u044e:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c &#171;\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439&#187;( Nix-channel ) \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 (\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u0438) \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438  \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u043c configuration.nix<\/p>\n<\/li>\n<li>\n<p>Grafana+Prometheus<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 Nix&#8217;\u043e\u0432:<\/h4>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c ,\u0442\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 <s>\u0442\u0435\u043c\u043d\u0443\u044e<\/s> \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043d\u0430\u043c \u0438 \u043f\u043b\u044e\u0441\u044b ,\u0442\u0430\u043a \u0438 \u043c\u0438\u043d\u0443\u0441\u044b<\/p>\n<p>       \u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0437\u0430\u043b\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u044b\u0440 \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u041f\u041e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f<\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0435, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432(\u0442\u0430\u043a\u043e\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0434\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 &#8212; \u043a\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0443\u0431\u0440\u0430\u043b\u0438 \u0438(\u0438\u043b\u0438) \u043d\u0430 \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438.<\/p>\n<p>\u0412\u0437\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 &#171;\u0437\u0430&#187; \u0438 &#171;\u043f\u0440\u043e\u0442\u0438\u0432&#187; \u043c\u044b \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439:<\/p>\n<pre><code># nix-channel --list nixos https:\/\/nixos.org\/channels\/nixos-23.05<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043d\u0430\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c &#171;\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435&#187; \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code>nix-channel --add https:\/\/nixos.org\/channels\/nixpkgs-unstable unstable <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c Unstable channel:<\/p>\n<pre><code>{ config, pkgs, lib, modulesPath, ... }:   let   unstableTarball =     fetchTarball       https:\/\/github.com\/NixOS\/nixpkgs\/archive\/nixos-unstable.tar.gz; in ##### {   imports =     [ # Include the results of the hardware scan.       .\/hardware-configuration.nix #      .\/apps\/minio-server.nix     ]; ######<\/code><\/pre>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432:<\/p>\n<pre><code># nix-channel --update  unpacking channels... \u0438 <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0438\u0441\u043a \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># nix search package<\/code><\/pre>\n<pre><code># nix-env -f channel:nixpkgs-unstable -iA<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u043b\u043e\u043a \u0441 caddy:<\/p>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u043b\u043e :<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>Systemd service <\/summary>\n<div class=\"spoiler__content\">\n<pre><code>systemd.services.caddy = {       description = \"Caddy\" ;       wantedBy = [ \"multi-user.target\" ];        serviceConfig = {         EnvironmentFile= \"\/etc\/caddy\/Caddyfile\";         ExecStart = \"${pkgs.caddy}\/bin\/caddy  run --environ --config \/etc\/caddy\/Caddyfile\";         ExecStop = \" ${pkgs.caddy}\/bin\/caddy stop\";         ExecReload = \"${pkgs.caddy}\/bin\/caddy --config \/etc\/caddy\/Caddyfile --force\";         Type = \"notify\";         Restart   = \"always\";         LimitNOFILE=\"1048576\";         TimeoutStopSec=\"infinity\";         SendSIGKILL=\"no\";         User=\"root\"; #caddy         Group=\"root\"; #caddy         ProtectProc=\"invisible\";         PrivateTmp=\"true\";         AmbientCapabilities=\"CAP_NET_BIND_SERVICE\";     }; }; systemd.services.caddy.enable=true;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Caddyfile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>localhost {         header \/* {                 -Server                 Permissions-Policy interest-cohort=()                 Strict-Transport-Security max-age=31536000;                 X-Content-Type-Options nosniff                 X-Frame-Options DENY                Referrer-Policy no-referrer-when-downgrade         }         route \/console\/* {                 uri strip_prefix \/console                 reverse_proxy http:\/\/127.0.0.1:9001         }  }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u0430\u043b\u043e:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>services.caddy = {   enable = true;     extraConfig =     ''       localhost {         header \/* {                 -Server                 Permissions-Policy interest-cohort=()                 Strict-Transport-Security max-age=31536000;                 X-Content-Type-Options nosniff                 X-Frame-Options DENY                Referrer-Policy no-referrer-when-downgrade         }         route \/console\/* {                 uri strip_prefix \/console                 reverse_proxy http:\/\/127.0.0.1:9001         }''; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0423 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u043b\u044e\u0441\u044b :<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 -\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0432\u0438\u0434\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c <s>\u043c\u0443\u0447\u0438\u0442\u044c<\/s> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0448\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c Minio.<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u044b \u043f\u043e\u043c\u043d\u0438\u043c \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f minio-server,\u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0438\u0437 unstable-channel <\/p>\n<pre><code>nix-env -f channel:nixpkgs-unstable -iA minio<\/code><\/pre>\n<p>\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u044e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u0441\u0432\u0435\u0436\u0435\u0439:<\/p>\n<pre><code># minio -v minio version RELEASE.2023-08-16T20-17-30Z (commit-id=RELEASE.2023-08-16T20-17-30Z) Runtime: go1.20.7 linux\/amd64 License: GNU AGPLv3 &lt;https:\/\/www.gnu.org\/licenses\/agpl-3.0.html> Copyright: 2015-0000 MinIO, Inc.<\/code><\/pre>\n<p>\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e :<\/p>\n<pre><code>nix-env --uninstall minio<\/code><\/pre>\n<pre><code>\u0438 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0438: #       minio #       minio-client \u0418 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u0448 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 nixos-rebuild switch &amp;&amp; nix-collect-garbage <\/code><\/pre>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>\u0437\u0430\u0439\u0434\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 <\/p>\n<pre><code>nano \/etc\/nixos\/configuration.nix <\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u043c \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Minio<\/p>\n<p>\u041f\u043e\u0447\u0438\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435(\u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u044b ,\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0448\u0430\u0433\u0438 )<\/p>\n<pre><code>#       unstable.minio #       unstable.minio-client \u0418 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u0448 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 nixos-rebuild switch &amp;&amp; nix-collect-garbage <\/code><\/pre>\n<p>\u0440\u0430\u0441\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043d\u0430\u0448\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438<\/p>\n<pre><code>       unstable.minio        unstable.minio-client<\/code><\/pre>\n<p>\u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433<\/p>\n<pre><code>systemd.services.minioserver = {       enable = true;       description = \"MinioServer\" ;       wantedBy = [ \"default.target\" ];       serviceConfig = {         EnvironmentFile= \"\/etc\/default\/minio\";         ExecStart = \"${pkgs.minio}\/bin\/minio server --json $MINIO_OPTS $MINIO_VOLUMES \";# ExecStop = \" \";         Type = \"notify\";         Restart   = \"always\";         LimitNOFILE=\"1048576\";         TimeoutStopSec=\"infinity\";         SendSIGKILL=\"no\";         User=\"root\";;         Group= \"root\";          ProtectProc=\"invisible\";     }; }; \u0430 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e \u043d\u043e\u0432\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441 \u043d\u0430 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u0430 \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438,\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440- \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439. systemd.services.minio-config = {     enable = true;     path = [ pkgs.minio pkgs.minio-client];     requiredBy = [ \"multi-user.target\" ];     after = [ \"minioserver.service\" ];     serviceConfig = {       Type = \"simple\";       User = \"root\";       Group = \"root\";     };     script = ''       set -e       mc alias set mys3 http:\/\/localhost:9000 barsik barsikpassword     ''; }; <\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e .<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c Prometheus<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 minio \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code>\u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e prometheus environment.systemPackages = with pkgs; [    ...   unstable.prometheus #prometheus    ... ];<\/code><\/pre>\n<p>\u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448\u0438 credentials (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e) \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0430\u043b\u0438\u0430\u0441 <\/p>\n<pre><code>#\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u043f\u0443\u0442\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f, # \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 1000%,\u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0433\u043e \u0438\u043c\u0435\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b. #\u041d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438,\u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432 1\u0439 \u0447\u0430\u0441\u0442\u0438. mc alias set mylocal http:\/\/localhost:3000 barsik barsikpassword<\/code><\/pre>\n<p>\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f prometheus:<\/p>\n<pre><code># mc admin prometheus generate mylocal scrape_configs: - job_name: minio-job   bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiYmFyc2lrIiwiZXhwIjo0ODQ2OTE2OTU2fQ.TBElC01EHRxMdjmbSmgaZsbA3scZS3FnxCP2CGZacmHEbOCSPj5YWHyLnayWsgK56QwNNSd8OJvrV8sU3t9wbw   metrics_path: \/minio\/v2\/metrics\/cluster   scheme: http   static_configs:   - targets: ['localhost:9000']<\/code><\/pre>\n<p>\u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<pre><code>services.prometheus = {         enable = true;         scrapeConfigs = [{                 job_name = \"minio-job\";                 bearer_token = \"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiYmFyc2lrIiwiZXhwIjo0ODQ2OTE2OTU2fQ.TBElC01EHRxMdjmbSmgaZsbA3scZS3FnxCP2CGZacmHEbOCSPj5YWHyLnayWsgK56QwNNSd8OJvrV8sU3t9w>                metrics_path = \"\/minio\/v2\/metrics\/cluster\";                 scheme = \"http\";                 static_configs = [{                                  targets = [\"localhost:9000\"];                                  labels = { alias = \"minio\"; };                         }];         }]; };<\/code><\/pre>\n<p>\u041d\u0430\u0448\u0435 \u043a\u043e\u0440\u043e\u043d\u043d\u043e\u0435 :<\/p>\n<pre><code>nixos-rebuild switch \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c ,\u0447\u0442\u043e \u0441 \u043f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441\u043e\u043c: # systemctl status prometheus.service \u25cf prometheus.service      Loaded: loaded (\/etc\/systemd\/system\/prometheus.service; enabled; preset: enabled)      Active: active (running) since Tue 2023-08-29 20:07:12 MSK; 3s ago    Main PID: 60628 (prometheus)          IP: 0B in, 0B out          IO: 140.0K read, 0B written       Tasks: 7 (limit: 4694)      Memory: 15.6M         CPU: 432ms      CGroup: \/system.slice\/prometheus.service<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 Web-\u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<\/div>\n<\/details>\n<p>\u0423\u043b\u0443\u0447\u0448\u0438\u043c \u043d\u0430\u0448 Postgresql.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418 \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u043c service.postgres \u043f\u043e\u0434 \u0435\u0434\u0438\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>services.postgresql = {   enable = true;   ensureDatabases = [ \"miniodb\" ];   enableTCPIP = true;    authentication = pkgs.lib.mkOverride 10 ''       #type database  DBuser  auth-method       local all       all     trust       host  all      all     127.0.0.1\/32   trust     # ipv6       host all       all     ::1\/128        trust     '';   initialScript = pkgs.writeText \"backend-initScript\" ''       CREATE ROLE minio WITH LOGIN PASSWORD 'minio' CREATEDB;       CREATE DATABASE minio;       GRANT ALL PRIVILEGES ON DATABASE minio TO minio;   ''; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0418 \u0438\u0434\u0435\u043c \u0432 \u0432\u0435\u0431-\u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c Events:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c79\/2c7\/721\/c792c7721c5d8ae0f6018b9b67174bc3.png\" width=\"247\" height=\"421\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c79\/2c7\/721\/c792c7721c5d8ae0f6018b9b67174bc3.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/515\/38e\/20c\/51538e20cb38a8a45c4c2845acdf7ce9.png\" width=\"1580\" height=\"395\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/515\/38e\/20c\/51538e20cb38a8a45c4c2845acdf7ce9.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>C\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/80c\/602\/a95\/80c602a95d3a612bb29d4f4faadf3c5d.png\" width=\"561\" height=\"95\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80c\/602\/a95\/80c602a95d3a612bb29d4f4faadf3c5d.png\"\/><\/figure>\n<p>\u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0411\u0414 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<pre><code># sudo -u postgres psql psql (14.9) Type \"help\" for help.  postgres=# \\l                                   List of databases    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges -----------+----------+----------+-------------+-------------+-----------------------  minio     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc\/postgres         +            |          |          |             |             | postgres=CTc\/postgres+            |          |          |             |             | minio=CTc\/postgres  miniodb   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |  postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |  template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +            |          |          |             |             | postgres=CTc\/postgres  template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +            |          |          |             |             | postgres=CTc\/postgres (5 rows)<\/code><\/pre>\n<pre><code>minio=#  \\dt        List of relations  Schema | Name  | Type  | Owner --------+-------+-------+-------  public | minio | table | minio (1 row)  minio=#  \\dt+                                     List of relations  Schema | Name  | Type  | Owner | Persistence | Access method |    Size    | Description --------+-------+-------+-------+-------------+---------------+------------+-------------  public | minio | table | minio | permanent   | heap          | 8192 bytes | (1 row)<\/code><\/pre>\n<pre><code># SELECT * FROM minio;  key | value -----+------- (0 rows)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u0434\u0435\u043c \u0432 \u0432\u0435\u0431-\u043a\u043e\u043d\u0441\u043e\u043b\u044c->Buckets \u0438 \u0443\u0432\u0438\u0434\u0438\u043c,:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/51d\/407\/5f8\/51d4075f8653fc4c8e4fbf4fa1097b93.png\" width=\"1611\" height=\"217\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/51d\/407\/5f8\/51d4075f8653fc4c8e4fbf4fa1097b93.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0411\u0430\u043a\u0435\u0442<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/61a\/9f8\/be4\/61a9f8be4a618479a87fd3762a47e822.png\" width=\"1010\" height=\"594\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/61a\/9f8\/be4\/61a9f8be4a618479a87fd3762a47e822.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0432\u0435\u043d\u0442\u044b <\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cac\/79f\/d54\/cac79fd54a3e8de258cd72be792ea09b.png\" width=\"1603\" height=\"248\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cac\/79f\/d54\/cac79fd54a3e8de258cd72be792ea09b.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 Subscribe to event (\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f) \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 :<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5d8\/457\/69c\/5d845769c0500235130ecf44300fab02.png\" width=\"1584\" height=\"598\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d8\/457\/69c\/5d845769c0500235130ecf44300fab02.png\"\/><\/figure>\n<p>\u0438\u043b\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code>\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c jq:  nixos-env -i jq \u0418\u0449\u0435\u043c \u043d\u0430\u0448 ARN   mc admin info --json mys3\/backup | jq .info.sqsARN arn:minio:sqs::PG1:postgresql \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c ARN mc event add --event \"put,get,delete\" mys3\/backup arn:minio:sqs::PG1:postgresql<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u0430\u043f\u043a\u0438 &#171;Download&#187;:<\/p>\n<pre><code> mc cp . mys3\/backup --recursive<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u0448\u0438 \u044d\u0432\u0435\u043d\u0442\u044b:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>sudo -u postgres psql psql (14.9) Type \"help\" for help.  postgres=#\\c minio You are now connected to database \"minio\" as user \"postgres\". minio=# SELECT * FROM minio1; minio=# minio=# SELECT * FROM minio;<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cfd\/ff6\/298\/cfdff6298430168ffc409b4d233ef024.png\" width=\"1902\" height=\"619\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cfd\/ff6\/298\/cfdff6298430168ffc409b4d233ef024.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Backup&#8217;\u0430\u043c\u0438<\/h2>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438 restic.<\/p>\n<pre><code>environment.systemPackages = with pkgs; [   unstable.restic ];<\/code><\/pre>\n<p>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u043a\u0435\u0442:<\/p>\n<pre><code>export AWS_ACCESS_KEY_ID=barsik export AWS_SECRET_ACCESS_KEY=barsikpassword # restic -r s3:http:\/\/localhost:9000\/resticbackup init enter password for new repository: enter password again: created restic repository f906e494c7 at s3:http:\/\/localhost:9000\/resticbackup<\/code><\/pre>\n<p>\u0418 \u043f\u0438\u0448\u0435\u043c \u0421\u0430\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0431\u044d\u043a\u0430\u043f\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441(\u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0434\u0435\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u043e):<\/p>\n<pre><code>systemd.services.s3backup= {   enable = true;   script = ''     export AWS_ACCESS_KEY_ID=barsik     export AWS_SECRET_ACCESS_KEY=barsikpassword     ${pkgs.restic}\/bin\/restic -r s3:http:\/\/localhost:9000\/resticbackup backup \/home\/vasya -p \/home\/vasya\/password     ${pkgs.restic}\/bin\/restic -r s3:http:\/\/localhost:9000\/resticbackup forget -p \/home\/vasya\/password --keep-last 1   ''; };  systemd.timers.s3backup = {   wantedBy = [ \"timers.target\" ];   partOf = [ \"s3backup.service\" ];   timerConfig = {     OnCalendar = \"OnCalendar=*:0\/15\"; #every 15 minutes     Unit = \"s3backup.service\";   }; };<\/code><\/pre>\n<h3>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c Grafana:<\/h3>\n<p>\u0432 \/etc\/nixos\/configuration.nix \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c:<\/p>\n<pre><code>\u0432 environment.systemPackages = with pkgs; [ ... unstable.grafana ... ]; \u0412 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 Caddy \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c: ... route \/grafana* {                 uri strip_prefix \/grafana                 reverse_proxy  http:\/\/127.0.0.1:3000                      } ... \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441: services.grafana = {   enable = true;   settings = {     server = {       http_addr = \"0.0.0.0\";       http_port = 3000;       root_url = \"https:\/\/localhost\/grafana\";       own_from_sub_path=\"true\";       };   }; };<\/code><\/pre>\n<p>\u043d\u0430\u0441 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c admin\/admin<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bba\/edb\/84a\/bbaedb84af2dba2ac1ecc15c88357d54.png\" width=\"1235\" height=\"712\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bba\/edb\/84a\/bbaedb84af2dba2ac1ecc15c88357d54.png\"\/><\/figure>\n<p>\u041c\u0435\u043d\u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u043e <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b3b\/c8e\/25d\/b3bc8e25db489665eb2f543059f75f51.png\" width=\"1579\" height=\"659\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b3b\/c8e\/25d\/b3bc8e25db489665eb2f543059f75f51.png\"\/><\/figure>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0440\u0430\u0434\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u0448\u0435\u043c\u0443 Dashboard:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ac\/0a7\/16e\/2ac0a716e36b0e17269a6a3178d947e5.png\" width=\"1280\" height=\"665\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ac\/0a7\/16e\/2ac0a716e36b0e17269a6a3178d947e5.png\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>networking.firewall.allowedTCPPorts = [22 9000 80 443 ];<\/code><\/pre>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0438 \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u043e \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0432\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439.<\/p>\n<p>\u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0434\u0443\u0445 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c 3 \u0447\u0430\u0441\u0442\u044c.<\/p>\n<p>P.S. \u0425\u043e\u0447\u0443 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0435\u043c \u043a\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0438 \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b (\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u043f\u043e\u0434\u043d\u044f\u043b \u0443\u0437\u043a\u0443\u044e \u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435) \u0438  <a href=\"https:\/\/t.me\/ru_nixos\" rel=\"noopener noreferrer nofollow\">NixOS Ru Community<\/a> &#8212; \u0437\u0430 \u0442\u043e \u0447\u0442\u043e \u043d\u0430\u0432\u0435\u043b\u0438 \u043c\u0435\u043d\u044f \u043d\u0430 \u043c\u044b\u0441\u043b\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b. <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/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\/articles\/758418\/\"> https:\/\/habr.com\/ru\/articles\/758418\/<\/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<p>\u041f\u0440\u0438\u0432\u0435\u0442 \u0432\u0441\u0435\u043c. \u0412\u0441\u0435\u0445 \u0441 \u0434\u043d\u0435\u043c \u0437\u043d\u0430\u043d\u0438\u0439 \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043e\u0441\u0435\u043d\u0438! <\/p>\n<p>\u041a\u0430\u043a <em>\u0411\u0435\u043b\u0438\u043d\u0441\u043a\u0438\u0439 \u0412\u0438\u0441\u0441\u0430\u0440\u0438\u043e\u043d \u0413\u0440\u0438\u0433\u043e\u0440\u044c\u0435\u0432\u0438\u0447<\/em>, \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0438 \u0441\u0430\u043c <em>\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0418\u043b\u044c\u0438\u0447 \u041b\u0435\u043d\u0438\u043d<\/em> \u0433\u043e\u0432\u043e\u0440\u0438\u043b :<\/p>\n<blockquote>\n<p>&#171;\u0423\u0447\u0438\u0442\u0435\u0441\u044c, \u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u0443\u0447\u0438\u0442\u0435\u0441\u044c! \u0414\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0443\u043a\u0430!&#187;<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u0438 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c\u0441\u044f \u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u044f, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0434\u0435\u0437\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 &#8212; <a href=\"https:\/\/github.com\/NixOS\/nixpkgs\/tree\/master\" rel=\"noopener noreferrer nofollow\">Github <\/a>\u0438 \u043a\u0443\u0441\u043a\u0438 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 \u0441\u0430\u043c\u0438\u0445 \u0433\u043b\u0443\u0431\u0438\u043d \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043d\u0443\u0430\u043b\u043e\u0432 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u043a\u0430\u043b\u043a\u0438.<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/756976\/\" rel=\"noopener noreferrer nofollow\">\u041c\u044b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u0432 NixOS,\u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 &#171;\u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0435\u0439&#187; \u041d\u0438\u043a\u0441\u043e\u0432, \u043a\u0430\u043a \u0441 \u0411\u0430\u0448\u0421\u0438\u0431\u043b\u043e\u043c(Ansible playbook \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 bash-\u0432\u0441\u0442\u0430\u0432\u043e\u043a ) \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0431\u0435\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043a\u0438 (\u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0432\u043c &#8212; \u0443\u0436\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0435\u0435 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0431\u0435\u0434\u043d\u043e\u0439 \u0445\u0440\u0430\u043d\u0438\u043b\u043a\u0438 \u0438 \u0447\u0442\u043e-\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043c, \u0447\u0442\u043e-\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c ).<\/p>\n<p>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432 \u043c\u0435\u043d\u044e:<\/p>\n<ul>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c &#171;\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439&#187;( Nix-channel ) \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 (\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u0438) \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438  \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u043c configuration.nix<\/p>\n<\/li>\n<li>\n<p>Grafana+Prometheus<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 Nix&#8217;\u043e\u0432:<\/h4>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c ,\u0442\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 <s>\u0442\u0435\u043c\u043d\u0443\u044e<\/s> \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043d\u0430\u043c \u0438 \u043f\u043b\u044e\u0441\u044b ,\u0442\u0430\u043a \u0438 \u043c\u0438\u043d\u0443\u0441\u044b<\/p>\n<p>       \u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0437\u0430\u043b\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u044b\u0440 \u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u041f\u041e \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f<\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0435, \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432(\u0442\u0430\u043a\u043e\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0434\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 &#8212; \u043a\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0443\u0431\u0440\u0430\u043b\u0438 \u0438(\u0438\u043b\u0438) \u043d\u0430 \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438.<\/p>\n<p>\u0412\u0437\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 &#171;\u0437\u0430&#187; \u0438 &#171;\u043f\u0440\u043e\u0442\u0438\u0432&#187; \u043c\u044b \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439:<\/p>\n<pre><code># nix-channel --list nixos https:\/\/nixos.org\/channels\/nixos-23.05<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043d\u0430\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c &#171;\u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435&#187; \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code>nix-channel --add https:\/\/nixos.org\/channels\/nixpkgs-unstable unstable <\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c Unstable channel:<\/p>\n<pre><code>{ config, pkgs, lib, modulesPath, ... }:   let   unstableTarball =     fetchTarball       https:\/\/github.com\/NixOS\/nixpkgs\/archive\/nixos-unstable.tar.gz; in ##### {   imports =     [ # Include the results of the hardware scan.       .\/hardware-configuration.nix #      .\/apps\/minio-server.nix     ]; ######<\/code><\/pre>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432:<\/p>\n<pre><code># nix-channel --update  unpacking channels... \u0438 <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0438\u0441\u043a \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># nix search package<\/code><\/pre>\n<pre><code># nix-env -f channel:nixpkgs-unstable -iA<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u043b\u043e\u043a \u0441 caddy:<\/p>\n<details class=\"spoiler\">\n<summary>\u0411\u044b\u043b\u043e :<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>Systemd service <\/summary>\n<div class=\"spoiler__content\">\n<pre><code>systemd.services.caddy = {       description = \"Caddy\" ;       wantedBy = [ \"multi-user.target\" ];        serviceConfig = {         EnvironmentFile= \"\/etc\/caddy\/Caddyfile\";         ExecStart = \"${pkgs.caddy}\/bin\/caddy  run --environ --config \/etc\/caddy\/Caddyfile\";         ExecStop = \" ${pkgs.caddy}\/bin\/caddy stop\";         ExecReload = \"${pkgs.caddy}\/bin\/caddy --config \/etc\/caddy\/Caddyfile --force\";         Type = \"notify\";         Restart   = \"always\";         LimitNOFILE=\"1048576\";         TimeoutStopSec=\"infinity\";         SendSIGKILL=\"no\";         User=\"root\"; #caddy         Group=\"root\"; #caddy         ProtectProc=\"invisible\";         PrivateTmp=\"true\";         AmbientCapabilities=\"CAP_NET_BIND_SERVICE\";     }; }; systemd.services.caddy.enable=true;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Caddyfile<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>localhost {         header \/* {                 -Server                 Permissions-Policy interest-cohort=()                 Strict-Transport-Security max-age=31536000;                 X-Content-Type-Options nosniff                 X-Frame-Options DENY                Referrer-Policy no-referrer-when-downgrade         }         route \/console\/* {                 uri strip_prefix \/console                 reverse_proxy http:\/\/127.0.0.1:9001         }  }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u0442\u0430\u043b\u043e:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>services.caddy = {   enable = true;     extraConfig =     ''       localhost {         header \/* {                 -Server                 Permissions-Policy interest-cohort=()                 Strict-Transport-Security max-age=31536000;                 X-Content-Type-Options nosniff                 X-Frame-Options DENY                Referrer-Policy no-referrer-when-downgrade         }         route \/console\/* {                 uri strip_prefix \/console                 reverse_proxy http:\/\/127.0.0.1:9001         }''; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0423 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u043b\u044e\u0441\u044b :<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 -\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0432\u0438\u0434\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c <s>\u043c\u0443\u0447\u0438\u0442\u044c<\/s> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u0448\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c Minio.<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u044b \u043f\u043e\u043c\u043d\u0438\u043c \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f minio-server,\u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0438\u0437 unstable-channel <\/p>\n<pre><code>nix-env -f channel:nixpkgs-unstable -iA minio<\/code><\/pre>\n<p>\u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u044e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u0441\u0432\u0435\u0436\u0435\u0439:<\/p>\n<pre><code># minio -v minio version RELEASE.2023-08-16T20-17-30Z (commit-id=RELEASE.2023-08-16T20-17-30Z) Runtime: go1.20.7 linux\/amd64 License: GNU AGPLv3 &lt;https:\/\/www.gnu.org\/licenses\/agpl-3.0.html> Copyright: 2015-0000 MinIO, Inc.<\/code><\/pre>\n<p>\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e :<\/p>\n<pre><code>nix-env --uninstall minio<\/code><\/pre>\n<pre><code>\u0438 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0438: #       minio #       minio-client \u0418 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u0448 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 nixos-rebuild switch &amp;&amp; nix-collect-garbage <\/code><\/pre>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>\u0437\u0430\u0439\u0434\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 <\/p>\n<pre><code>nano \/etc\/nixos\/configuration.nix <\/code><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u043c \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 Minio<\/p>\n<p>\u041f\u043e\u0447\u0438\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435(\u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u044b ,\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0438\u0441\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0448\u0430\u0433\u0438 )<\/p>\n<pre><code>#       unstable.minio #       unstable.minio-client \u0418 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u0448 \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0430\u0448\u0443 \u043b\u044e\u0431\u0438\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0447\u0438\u0441\u0442\u0438\u043c \u043a\u044d\u0448 nixos-rebuild switch &amp;&amp; nix-collect-garbage <\/code><\/pre>\n<p>\u0440\u0430\u0441\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043d\u0430\u0448\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438<\/p>\n<pre><code>       unstable.minio        unstable.minio-client<\/code><\/pre>\n<p>\u043e\u0431\u043d\u043e\u0432\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433<\/p>\n<pre><code>systemd.services.minioserver = {       enable = true;       description = \"MinioServer\" ;       wantedBy = [ \"default.target\" ];       serviceConfig = {         EnvironmentFile= \"\/etc\/default\/minio\";         ExecStart = \"${pkgs.minio}\/bin\/minio server --json $MINIO_OPTS $MINIO_VOLUMES \";# ExecStop = \" \";         Type = \"notify\";         Restart   = \"always\";         LimitNOFILE=\"1048576\";         TimeoutStopSec=\"infinity\";         SendSIGKILL=\"no\";         User=\"root\";;         Group= \"root\";          ProtectProc=\"invisible\";     }; }; \u0430 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e \u043d\u043e\u0432\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441 \u043d\u0430 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u0430 \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438,\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440- \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439. systemd.services.minio-config = {     enable = true;     path = [ pkgs.minio pkgs.minio-client];     requiredBy = [ \"multi-user.target\" ];     after = [ \"minioserver.service\" ];     serviceConfig = {       Type = \"simple\";       User = \"root\";       Group = \"root\";     };     script = ''       set -e       mc alias set mys3 http:\/\/localhost:9000 barsik barsikpassword     ''; }; <\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e .<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c Prometheus<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 minio \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code>\u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e prometheus environment.systemPackages = with pkgs; [    ...   unstable.prometheus #prometheus    ... ];<\/code><\/pre>\n<p>\u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448\u0438 credentials (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e) \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0430\u043b\u0438\u0430\u0441 <\/p>\n<pre><code>#\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u043f\u0443\u0442\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f, # \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 1000%,\u0447\u0442\u043e \u043d\u0430 \u043d\u0435\u0433\u043e \u0438\u043c\u0435\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b. #\u041d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438,\u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432 1\u0439 \u0447\u0430\u0441\u0442\u0438. mc alias set mylocal http:\/\/localhost:3000 barsik barsikpassword<\/code><\/pre>\n<p>\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f prometheus:<\/p>\n<pre><code># mc admin prometheus generate mylocal scrape_configs: - job_name: minio-job   bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiYmFyc2lrIiwiZXhwIjo0ODQ2OTE2OTU2fQ.TBElC01EHRxMdjmbSmgaZsbA3scZS3FnxCP2CGZacmHEbOCSPj5YWHyLnayWsgK56QwNNSd8OJvrV8sU3t9wbw   metrics_path: \/minio\/v2\/metrics\/cluster   scheme: http   static_configs:   - targets: ['localhost:9000']<\/code><\/pre>\n<p>\u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<pre><code>services.prometheus = {         enable = true;         scrapeConfigs = [{                 job_name = \"minio-job\";                 bearer_token = \"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiYmFyc2lrIiwiZXhwIjo0ODQ2OTE2OTU2fQ.TBElC01EHRxMdjmbSmgaZsbA3scZS3FnxCP2CGZacmHEbOCSPj5YWHyLnayWsgK56QwNNSd8OJvrV8sU3t9w>                metrics_path = \"\/minio\/v2\/metrics\/cluster\";                 scheme = \"http\";                 static_configs = [{                                  targets = [\"localhost:9000\"];                                  labels = { alias = \"minio\"; };                         }];         }]; };<\/code><\/pre>\n<p>\u041d\u0430\u0448\u0435 \u043a\u043e\u0440\u043e\u043d\u043d\u043e\u0435 :<\/p>\n<pre><code>nixos-rebuild switch \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c ,\u0447\u0442\u043e \u0441 \u043f\u0440\u043e\u043c\u0435\u0442\u0435\u0443\u0441\u043e\u043c: # systemctl status prometheus.service \u25cf prometheus.service      Loaded: loaded (\/etc\/systemd\/system\/prometheus.service; enabled; preset: enabled)      Active: active (running) since Tue 2023-08-29 20:07:12 MSK; 3s ago    Main PID: 60628 (prometheus)          IP: 0B in, 0B out          IO: 140.0K read, 0B written       Tasks: 7 (limit: 4694)      Memory: 15.6M         CPU: 432ms      CGroup: \/system.slice\/prometheus.service<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 Web-\u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/p>\n<\/div>\n<\/details>\n<p>\u0423\u043b\u0443\u0447\u0448\u0438\u043c \u043d\u0430\u0448 Postgresql.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418 \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u043c service.postgres \u043f\u043e\u0434 \u0435\u0434\u0438\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>services.postgresql = {   enable = true;   ensureDatabases = [ \"miniodb\" ];   enableTCPIP = true;    authentication = pkgs.lib.mkOverride 10 ''       #type database  DBuser  auth-method       local all       all     trust       host  all      all     127.0.0.1\/32   trust     # ipv6       host all       all     ::1\/128        trust     '';   initialScript = pkgs.writeText \"backend-initScript\" ''       CREATE ROLE minio WITH LOGIN PASSWORD 'minio' CREATEDB;       CREATE DATABASE minio;       GRANT ALL PRIVILEGES ON DATABASE minio TO minio;   ''; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0418 \u0438\u0434\u0435\u043c \u0432 \u0432\u0435\u0431-\u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c Events:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>C\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0411\u0414 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<pre><code># sudo -u postgres psql psql (14.9) Type \"help\" for help.  postgres=# \\l                                   List of databases    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges -----------+----------+----------+-------------+-------------+-----------------------  minio     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc\/postgres         +            |          |          |             |             |<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-353804","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353804","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=353804"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/353804\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=353804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=353804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=353804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}