{"id":349442,"date":"2023-06-27T21:00:37","date_gmt":"2023-06-27T21:00:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=349442"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=349442","title":{"rendered":"<span>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0442\u0443\u043a\u0430\u043d\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u0438\u043b\u0438 \u0441\u0442\u0435\u043d\u0434 RuBackup 2.0<\/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>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\u00a0<\/p>\n<p>\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043e\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e  \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0441\u0444\u0435\u0440\u044b \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e  \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0431\u0438\u0437\u043d\u0435\u0441 \u043c\u043e\u0433 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432  \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u0435\u0432 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a.<\/p>\n<p>RuBackup  \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043b\u044f  \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 RuBackup,\u00a0\u0440\u0435\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043d\u043e\u0432\u0438\u043d\u043a\u0430\u043c\u0438 \u0432 \u0441\u0444\u0435\u0440\u0435 \u0431\u044d\u043a\u0430\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u0440\u0430\u0441\u043a\u0430\u0442\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 RuBackup 2.0.<\/p>\n<p>\u0414\u0430\u0442\u0430 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 2.0.49 \u2014 25 \u043c\u0430\u044f 2023 \u0433\u043e\u0434.<\/p>\n<p>\u0414\u043b\u044f  \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0421\u0420\u041a RuBackup,  \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1\u0422\u0431.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c RuBackup:<\/p>\n<ol>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker \u0421ompose.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0438 \u0432\u0436\u0438\u0432\u0443\u044e \u00ab\u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c\u00bb \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0421\u0420\u041a.<\/p>\n<h2>1. \u0421\u043a\u0440\u0438\u043f\u0442 \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c<\/h2>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443.<br \/> \u041f\u0440\u0435\u0434\u0443\u0441\u043b\u043e\u0432\u0438\u0435: \u043f\u0430\u043a\u0435\u0442\u044b rubackup-common_2.0.49-1_amd64.deb,<br \/> rubackup-client_2.0.49-1_amd64.deb, rubackup-server_2.0.49-1_amd64.deb,<br \/> rubackup-rbm_2.0.49-1_amd64.deb \u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435.<br \/> \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 Astra Linux 1.7.2 \u0438 Ubuntu 20.04.<\/p>\n<details class=\"spoiler\">\n<summary>install_rubackup.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/bash   userName=\"user\"   if [[ $(id -u) != 0 ]]; then   echo \"Please, as root\"   exit 1 fi   apt-get update   # Client dependencies apt-get -y install openssl   # Server dependencies debconf-set-selections &lt;&lt;&lt; \"postfix postfix\/mailname string rubackup-mail\" debconf-set-selections &lt;&lt;&lt; \"postfix postfix\/main_mailer_type string 'No configuration'\" apt-get -y install mailutils libcurl4   # Rbm dependencies apt-get -y install libqt5sql5-psql   # Specific dependencies PRETTY_NAME=$(grep \"PRETTY_NAME\" \/etc\/os-release) if [[ \"$PRETTY_NAME\" == *\"$Ubuntu 20.04\"* ]]; then    apt-get -y install libicu66 elif [[ \"$PRETTY_NAME\" == *\"$Astra Linux\"* ]]; then    apt-get -y install libicu63 parsec-base parsec-cap parsec-mac fi   \/usr\/bin\/dpkg -i rubackup-common_2.0.49-1_amd64.deb rubackup-client_2.0.49-1_amd64.deb rubackup-server_2.0.49-1_amd64.deb rubackup-rbm_2.0.49-1_amd64.deb   if [[ $? != 0 ]]; then   echo \"Error:  dpkg return not null! Exit\"   exit 1 fi     # Paths to \/opt\/rubackup\/lib and \/opt\/rubackup\/bin cat &lt;&lt; EOF >> \/root\/.bashrc PATH=$PATH:\/opt\/rubackup\/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:\/opt\/rubackup\/lib export PATH export LD_LIBRARY_PATH EOF   tail -n 4 \/root\/.bashrc >> \/home\/$userName\/.bashrc     # Add daemons systemctl enable \/opt\/rubackup\/etc\/systemd\/system\/rubackup_client.service systemctl enable \/opt\/rubackup\/etc\/systemd\/system\/rubackup_server.service systemctl daemon-reload     # Install and config postgres apt-get -y install postgresql postgresql-contrib sudo -u postgres psql -c \"alter user postgres password '12345';\"   if [[ \"$PRETTY_NAME\" == *\"$Astra Linux\"* ]]; then   sudo -u postgres psql -c \"create user rubackup with superuser createrole login password '12345';\"   sed -i 's\/zero_if_notfound: no\/zero_if_notfound: yes\/g' \/etc\/parsec\/mswitch.conf fi   pg_ver=$(psql --version) pg_ver=${pg_ver:18:2}   cat &lt;&lt; EOF > \/etc\/postgresql\/$pg_ver\/main\/pg_hba.conf local   all             postgres                                peer host    all             all             127.0.0.1\/32            md5 host    all             all             192.168.0.0\/16          md5 EOF   echo \"listen_addresses = '*'\" >> \/etc\/postgresql\/$pg_ver\/main\/postgresql.conf   systemctl restart postgresql   # Config RuBackup mkdir \/default_pool mkdir \/rubackup_tmp   iface=$(ip link | head -3 | tail -1 | grep -oP ': \\K.*?(?=:)') \/opt\/rubackup\/bin\/rb_init -y -n primary-server -H 127.0.0.1 -X 12345 -Y 12345 -i $iface -f \/default_pool -l \/rubackup_tmp   if [[ $? != 0 ]]; then   echo \"Error:  rb_init return not null! Exit\"   exit 1 fi   systemctl restart rubackup_server systemctl restart rubackup_client<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>2. Docker \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435<\/h2>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0441\u043a\u0440\u0438\u043f\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<\/p>\n<p><a href=\"https:\/\/hub.docker.com\/r\/rubackup\/rubackup_server\"><em>https:\/\/hub.docker.com\/r\/rubackup\/rubackup_server<\/em><\/a><\/p>\n<pre><code>docker run -d -p 10022:22 -h rubackup_server --name rubackup_server rubackup\/rubackup_server:2.0.49<\/code><\/pre>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e ssh, \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0443:<\/p>\n<pre><code>ssh -X -p 10022 user@localhost 1 rbm<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dcc\/c69\/02e\/dccc6902e983929cc8ebacf2e0928416.png\" width=\"1204\" height=\"746\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dcc\/c69\/02e\/dccc6902e983929cc8ebacf2e0928416.png\"\/><\/figure>\n<h2>3. Docker compose \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u041f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043a \u043d\u0435\u043c\u0443. \u041c\u043e\u0434\u0443\u043b\u044c PostgreSQL \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>docker-compose.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>version: \"3\"   services:     rubackup_server:     image: \"rubackup\/rubackup_server:2.0.49\"     container_name: rubackup_server     hostname: rubackup_server     networks:       rb_network:         ipv4_address: 172.18.0.10     ports:       - \"10022:22\"     expose:       - \"22\"       - \"5432\"       - \"9991\"       - \"9992\"       - \"9993\"       - \"9995\"     rubackup_client_1:     image: \"rubackup\/rubackup_client:2.0.49\"     container_name: rubackup_client_1     hostname: rubackup_client_1     networks:       - rb_network     links:       - rubackup_server     rubackup_client_2:     image: \"rubackup\/rubackup_client:2.0.49\"     container_name: rubackup_client_2     hostname: rubackup_client_2     networks:       - rb_network     links:       - rubackup_server   networks:   rb_network:     ipam:       driver: default       config:       - subnet: 172.18.0.0\/24<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u043b\u0438 \u0442\u0430\u043a:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>docker run -d --ip 172.17.0.2 -p 10022:22 -h rubackup_server --name rubackup_server rubackup\/rubackup_server:2.0.49 docker run -d --add-host=rubackup_server:172.17.0.2 -h rubackup_client_1  --name rubackup_client_1 rubackup\/rubackup_client:2.0.49 docker run -d --add-host=rubackup_server:172.17.0.2 -h rubackup_client_2  --name rubackup_client_2 rubackup\/rubackup_client:2.0.49<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b \u0432\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430!<\/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\/companies\/astralinux\/articles\/744032\/\"> https:\/\/habr.com\/ru\/companies\/astralinux\/articles\/744032\/<\/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>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\u00a0<\/p>\n<p>\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043e\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e  \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0441\u0444\u0435\u0440\u044b \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e  \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0431\u0438\u0437\u043d\u0435\u0441 \u043c\u043e\u0433 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432  \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u0435\u0432 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043a\u0438\u0431\u0435\u0440\u0430\u0442\u0430\u043a.<\/p>\n<p>RuBackup  \u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043b\u044f  \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043b\u044e\u0434\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 RuBackup,\u00a0\u0440\u0435\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043d\u043e\u0432\u0438\u043d\u043a\u0430\u043c\u0438 \u0432 \u0441\u0444\u0435\u0440\u0435 \u0431\u044d\u043a\u0430\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u0440\u0430\u0441\u043a\u0430\u0442\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 RuBackup 2.0.<\/p>\n<p>\u0414\u0430\u0442\u0430 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 2.0.49 \u2014 25 \u043c\u0430\u044f 2023 \u0433\u043e\u0434.<\/p>\n<p>\u0414\u043b\u044f  \u043f\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0421\u0420\u041a RuBackup,  \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1\u0422\u0431.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c RuBackup:<\/p>\n<ol>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>C \u043f\u043e\u043c\u043e\u0449\u044c\u044e Docker \u0421ompose.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0438 \u0432\u0436\u0438\u0432\u0443\u044e \u00ab\u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c\u00bb \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0421\u0420\u041a.<\/p>\n<h2>1. \u0421\u043a\u0440\u0438\u043f\u0442 \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c<\/h2>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043b\u0438\u0435\u043d\u0442, \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0431\u0443\u0434\u0443\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u043e\u0434\u043d\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443.<br \/> \u041f\u0440\u0435\u0434\u0443\u0441\u043b\u043e\u0432\u0438\u0435: \u043f\u0430\u043a\u0435\u0442\u044b rubackup-common_2.0.49-1_amd64.deb,<br \/> rubackup-client_2.0.49-1_amd64.deb, rubackup-server_2.0.49-1_amd64.deb,<br \/> rubackup-rbm_2.0.49-1_amd64.deb \u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435.<br \/> \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043d\u0430 Astra Linux 1.7.2 \u0438 Ubuntu 20.04.<\/p>\n<details class=\"spoiler\">\n<summary>install_rubackup.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/bin\/bash   userName=\"user\"   if [[ $(id -u) != 0 ]]; then   echo \"Please, as root\"   exit 1 fi   apt-get update   # Client dependencies apt-get -y install openssl   # Server dependencies debconf-set-selections &lt;&lt;&lt; \"postfix postfix\/mailname string rubackup-mail\" debconf-set-selections &lt;&lt;&lt; \"postfix postfix\/main_mailer_type string 'No configuration'\" apt-get -y install mailutils libcurl4   # Rbm dependencies apt-get -y install libqt5sql5-psql   # Specific dependencies PRETTY_NAME=$(grep \"PRETTY_NAME\" \/etc\/os-release) if [[ \"$PRETTY_NAME\" == *\"$Ubuntu 20.04\"* ]]; then    apt-get -y install libicu66 elif [[ \"$PRETTY_NAME\" == *\"$Astra Linux\"* ]]; then    apt-get -y install libicu63 parsec-base parsec-cap parsec-mac fi   \/usr\/bin\/dpkg -i rubackup-common_2.0.49-1_amd64.deb rubackup-client_2.0.49-1_amd64.deb rubackup-server_2.0.49-1_amd64.deb rubackup-rbm_2.0.49-1_amd64.deb   if [[ $? != 0 ]]; then   echo \"Error:  dpkg return not null! Exit\"   exit 1 fi     # Paths to \/opt\/rubackup\/lib and \/opt\/rubackup\/bin cat &lt;&lt; EOF >> \/root\/.bashrc PATH=$PATH:\/opt\/rubackup\/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:\/opt\/rubackup\/lib export PATH export LD_LIBRARY_PATH EOF   tail -n 4 \/root\/.bashrc >> \/home\/$userName\/.bashrc     # Add daemons systemctl enable \/opt\/rubackup\/etc\/systemd\/system\/rubackup_client.service systemctl enable \/opt\/rubackup\/etc\/systemd\/system\/rubackup_server.service systemctl daemon-reload     # Install and config postgres apt-get -y install postgresql postgresql-contrib sudo -u postgres psql -c \"alter user postgres password '12345';\"   if [[ \"$PRETTY_NAME\" == *\"$Astra Linux\"* ]]; then   sudo -u postgres psql -c \"create user rubackup with superuser createrole login password '12345';\"   sed -i 's\/zero_if_notfound: no\/zero_if_notfound: yes\/g' \/etc\/parsec\/mswitch.conf fi   pg_ver=$(psql --version) pg_ver=${pg_ver:18:2}   cat &lt;&lt; EOF > \/etc\/postgresql\/$pg_ver\/main\/pg_hba.conf local   all             postgres                                peer host    all             all             127.0.0.1\/32            md5 host    all             all             192.168.0.0\/16          md5 EOF   echo \"listen_addresses = '*'\" >> \/etc\/postgresql\/$pg_ver\/main\/postgresql.conf   systemctl restart postgresql   # Config RuBackup mkdir \/default_pool mkdir \/rubackup_tmp   iface=$(ip link | head -3 | tail -1 | grep -oP ': \\K.*?(?=:)') \/opt\/rubackup\/bin\/rb_init -y -n primary-server -H 127.0.0.1 -X 12345 -Y 12345 -i $iface -f \/default_pool -l \/rubackup_tmp   if [[ $? != 0 ]]; then   echo \"Error:  rb_init return not null! Exit\"   exit 1 fi   systemctl restart rubackup_server systemctl restart rubackup_client<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>2. Docker \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435<\/h2>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 \u0441\u043a\u0440\u0438\u043f\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<\/p>\n<p><a href=\"https:\/\/hub.docker.com\/r\/rubackup\/rubackup_server\"><em>https:\/\/hub.docker.com\/r\/rubackup\/rubackup_server<\/em><\/a><\/p>\n<pre><code>docker run -d -p 10022:22 -h rubackup_server --name rubackup_server rubackup\/rubackup_server:2.0.49<\/code><\/pre>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e ssh, \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0443:<\/p>\n<pre><code>ssh -X -p 10022 user@localhost 1 rbm<\/code><\/pre>\n<figure class=\"full-width\"><\/figure>\n<h2>3. Docker compose \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u041f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0442\u043e\u0442 \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043a \u043d\u0435\u043c\u0443. \u041c\u043e\u0434\u0443\u043b\u044c PostgreSQL \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>docker-compose.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>version: \"3\"   services:     rubackup_server:     image: \"rubackup\/rubackup_server:2.0.49\"     container_name: rubackup_server     hostname: rubackup_server     networks:       rb_network:         ipv4_address: 172.18.0.10     ports:       - \"10022:22\"     expose:       - \"22\"       - \"5432\"       - \"9991\"       - \"9992\"       - \"9993\"       - \"9995\"     rubackup_client_1:     image: \"rubackup\/rubackup_client:2.0.49\"     container_name: rubackup_client_1     hostname: rubackup_client_1     networks:       - rb_network     links:       - rubackup_server     rubackup_client_2:     image: \"rubackup\/rubackup_client:2.0.49\"     container_name: rubackup_client_2     hostname: rubackup_client_2     networks:       - rb_network     links:       - rubackup_server   networks:   rb_network:     ipam:       driver: default       config:       - subnet: 172.18.0.0\/24<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418\u043b\u0438 \u0442\u0430\u043a:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>docker run -d --ip 172.17.0.2 -p 10022:22 -h rubackup_server --name rubackup_server rubackup\/rubackup_server:2.0.49 docker run -d --add-host=rubackup_server:172.17.0.2 -h rubackup_client_1  --name rubackup_client_1 rubackup\/rubackup_client:2.0.49 docker run -d --add-host=rubackup_server:172.17.0.2 -h rubackup_client_2  --name rubackup_client_2 rubackup\/rubackup_client:2.0.49<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b \u0432\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412\u0441\u0435\u043c \u0434\u043e\u0431\u0440\u0430!<\/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\/companies\/astralinux\/articles\/744032\/\"> https:\/\/habr.com\/ru\/companies\/astralinux\/articles\/744032\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-349442","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349442","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=349442"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349442\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}