<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Автоматизация &#8211; Community</title>
	<atom:link href="https://cloudvps.by/community/category/avtomatizacziya/feed/" rel="self" type="application/rss+xml" />
	<link>https://cloudvps.by/community</link>
	<description></description>
	<lastBuildDate>Thu, 11 Sep 2025 11:58:17 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</title>
		<link>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/</link>
					<comments>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 11:57:26 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4385</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/">Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</a>">%POSTTITLE%</a></p>
<p>Когда я впервые столкнулась с задачей автоматизации доставки кода на VPS, выбор пал на Bitbucket Pipelines. Он простой, встроен в репозиторий и не требует отдельной установки Jenkins, GitLab CI или других тяжеловесных решений. На выходе получился удобный и устойчивый CI/CD пайплайн, который я с тех пор многократно масштабировала под разные проекты. Что нам нужно: Что [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/">Создание CI/CD пайплайна с Bitbucket + VPS: автоматизация деплоя по‑человечески</a>">%POSTTITLE%</a></p>

<p>Когда я впервые столкнулась с задачей автоматизации доставки кода на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, выбор пал на <strong>Bitbucket Pipelines</strong>. Он <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a>, встроен в репозиторий и не требует отдельной установки <a href="https://cloudvps.by/community/docs/glossarij/terminy/jenkins/" data-internallinksmanager029f6b8e52c="371" title="Jenkins (Инструмент CI/CD с открытым исходным кодом)">Jenkins</a>, GitLab <a href="https://cloudvps.by/community/docs/glossarij/terminy/continuous-integration/" data-internallinksmanager029f6b8e52c="369" title="Continuous Integration (CI)">CI</a> или других тяжеловесных решений. На выходе получился удобный и устойчивый <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/gitlab-ci-cd/" data-internallinksmanager029f6b8e52c="372" title="GitLab CI/CD (Непрерывная интеграция и доставка в GitLab)">CI/CD</a> пайплайн</strong>, который я с тех пор многократно масштабировала под разные проекты.</p>



<h3 class="wp-block-heading">Что нам нужно:</h3>



<ul class="wp-block-list">
<li>Bitbucket-репозиторий с включёнными Pipelines</li>



<li>VPS с доступом по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a></li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">Docker</a> или Nginx (по желанию)</li>



<li>Скрипт деплоя или <code>rsync</code>, если проект не в контейнерах</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое pipeline?</h2>



<p><strong>Pipeline — это последовательность шагов</strong>, которые выполняются при каждом коммите, пуше или pull-запросе. В контексте CI/CD (Continuous Integration/<a href="https://cloudvps.by/community/docs/glossarij/terminy/continuous-delivery/" data-internallinksmanager029f6b8e52c="370" title="Continuous Delivery (CD)">Continuous Delivery</a>) пайплайн автоматизирует сборку, тестирование и деплой проекта.</p>



<p>В Bitbucket пайплайны описываются в YAML-файле <code>.bitbucket-pipelines.yml</code>, который лежит в корне проекта. Всё, что нужно — задать шаги: сборка, тесты, деплой, уведомления и т. д.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой конфиг <code>.bitbucket-pipelines.yml</code></h2>



<p>Вот пример того, как я настраиваю CI/CD pipeline для обычного Python + Flask проекта:</p>



<pre class="wp-block-code"><code>image: python:3.11

pipelines:
  branches:
    main:
      - step:
          name: Deploy to VPS
          caches:
            - pip
          script:
            - pip install -r requirements.txt
            - scp -o StrictHostKeyChecking=no -r ./ myuser@your.vps.<a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">ip</a>:/home/myuser/project
            - ssh myuser@your.vps.ip 'cd /home/myuser/project &amp;&amp; systemctl restart flask-app'
</code></pre>



<p>Здесь:</p>



<ul class="wp-block-list">
<li>устанавливаем зависимости,</li>



<li>копируем проект на VPS по SSH,</li>



<li>и перезапускаем systemd-сервис приложения.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Переменные окружения и SSH-доступ</h2>



<p>Bitbucket позволяет <strong>безопасно хранить SSH-ключи и <a href="https://cloudvps.by/community/docs/glossarij/terminy/token-based-authentication/" data-internallinksmanager029f6b8e52c="311" title="Token-based Authentication">токены</a></strong> через интерфейс <em>Repository Settings → Pipelines → Repository variables</em>. Чтобы соединение <code>scp</code> и <code>ssh</code> в пайплайне работало, я:</p>



<ol class="wp-block-list">
<li>Создаю SSH-ключ командой:</li>
</ol>



<pre class="wp-block-code"><code>ssh-keygen -t rsa -b 4096 -C "ci@bitbucket"
</code></pre>



<ol start="2" class="wp-block-list">
<li>Публичный ключ (<code>.pub</code>) добавляю на VPS в <code>~/.ssh/authorized_keys</code>.</li>



<li>Приватный ключ (<code>id_rsa</code>) добавляю в Bitbucket как <code>DEPLOY_KEY</code>.</li>



<li>В скрипте прописываю:</li>
</ol>



<pre class="wp-block-code"><code>script:
  - echo "$DEPLOY_KEY" &gt; id_rsa
  - chmod 600 id_rsa
  - ssh -i id_rsa ...
</code></pre>



<p>Теперь <strong>деплой полностью автоматизирован</strong>, а доступ — защищён.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Деплой через Docker</h2>



<p>Если проект упакован в Docker, пайплайн становится чище. Я обычно пушу образ в Docker Hub, а VPS тянет его сам:</p>



<pre class="wp-block-code"><code>pipelines:
  default:
    - step:
        name: Build and Push Docker Image
        script:
          - docker build -t mydockerhubuser/myproject:latest .
          - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
          - docker push mydockerhubuser/myproject:latest
</code></pre>



<p>А на сервере:</p>



<pre class="wp-block-code"><code>docker pull mydockerhubuser/myproject:latest
docker compose up -d
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Нюансы и удобства</h2>



<p>Bitbucket Pipelines умеет:</p>



<ul class="wp-block-list">
<li>делать <strong>разные пайплайны по веткам</strong> (<code>main</code>, <code>dev</code>, <code>release</code>);</li>



<li>триггерить пайплайны вручную;</li>



<li>интегрироваться с <strong>Slack / Telegram</strong> через webhook;</li>



<li>логировать каждый шаг для отладки.</li>
</ul>



<p>Также удобно, что можно задать <strong>startLimitBurst</strong>, <code>restart=on-failure</code>, <code>RestartSec=5s</code> в <code>systemd</code>, чтобы сервис перезапускался сам при падении (см. <a>статью про auto-healing с systemd</a>).</p>



<p>Отлично! Вот <strong>Часть 3/3</strong> статьи по теме <strong>«Создание CI/CD пайплайна с Bitbucket + VPS»</strong> — логично завершённая, с финальными разделами и SEO-блоком.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мониторинг CI/CD и логика откатов</h2>



<p>Когда пайплайн готов, важно <strong>наблюдать за ним</strong>: вдруг один из шагов будет падать после обновлений зависимостей, изменения <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>, банального <code>timeout</code>.</p>



<p>Я использую Telegram-бота, который присылает мне сообщения об успехе или провале:</p>



<pre class="wp-block-code"><code>- curl -X POST <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://api.telegram.org/bot$TG_TOKEN/sendMessage \
  -d chat_id=$TG_CHAT_ID \
  -d text=" Деплой успешно завершён на $BITBUCKET_BRANCH"
</code></pre>



<p>Добавляю это в <code>after-script</code>, чтобы знать, <strong>даже если всё упало</strong>.</p>



<p>Также на сервере у меня настроено:</p>



<ul class="wp-block-list">
<li><strong>fail2ban</strong> — блокирует IP при подозрительной активности;</li>



<li><strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/uptime/" data-internallinksmanager029f6b8e52c="232" title="Uptime (Аптайм)">Uptime</a> Kuma</strong> — следит за тем, что сайт доступен;</li>



<li><strong>systemd</strong> с <code>Restart=on-failure</code>, чтобы приложение не падало навсегда.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Когда стоит выбрать не Bitbucket Pipelines</h2>



<p>Bitbucket отлично справляется с CI/CD, но у него есть ограничения:</p>



<ul class="wp-block-list">
<li>бесплатный тариф ограничен 50 минутами в месяц (хватает для простых проектов);</li>



<li>иногда сложно настроить развёртывание на несколько серверов или сложные пайплайны.</li>
</ul>



<p>В таких случаях можно:</p>



<ul class="wp-block-list">
<li>перейти на <strong>GitHub Actions</strong> (больше интеграций и шаблонов);</li>



<li>использовать <strong>GitLab CI</strong> — там всё в одном: git + CI/CD + registry.</li>
</ul>



<p>Я использовала Bitbucket Pipelines, когда:</p>



<ul class="wp-block-list">
<li>проект был <strong>на Flask или Laravel</strong>, с одним VPS;</li>



<li>нужен был <strong>простой и понятный конфиг</strong>;</li>



<li>хотелось <strong>не тратить лишнее время</strong> на Jenkins и т.д.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что я думаю&#8230;</h2>



<p>Создание CI/CD пайплайна через Bitbucket и VPS — это не так страшно, как кажется. Нужно один раз всё собрать, протестировать — и дальше разработка идёт <strong>в удовольствие</strong>: никаких «заходи на сервер, перезагрузи руками», никаких «ой, забыла скопировать .env».</p>



<p>На проекте у меня это выглядит так:</p>



<ul class="wp-block-list">
<li>пушу код → пайплайн собирает и деплоит → Telegram уведомляет → сайт обновлён.</li>
</ul>



<p>Экономия времени? Колоссальная.<br>Ошибок? Почти нет.<br>Покой? Почти дзен <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60c.png" alt="😌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/sozdanie-ci-cd-pajplajna-s-bitbucket-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как использовать VPS как API-ретранслятор (Flask + Nginx)</title>
		<link>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/</link>
					<comments>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 15:09:53 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4329</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/">Как использовать VPS как API-ретранслятор (Flask + Nginx)</a>">%POSTTITLE%</a></p>
<p>Бывает, что нужно спрятать основной API, разнести нагрузку или просто построить надёжный промежуточный слой между клиентом и основным сервисом. В одном из таких случаев я подняла VPS как API-ретранслятор с использованием Flask и Nginx. Расскажу, как я это делала, на реальном примере. Писать буду, как всегда, от души и по-человечески — без заумностей, но с [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/">Как использовать VPS как API-ретранслятор (Flask + Nginx)</a>">%POSTTITLE%</a></p>

<p>Бывает, что нужно спрятать основной <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>, разнести нагрузку или просто построить надёжный промежуточный слой между клиентом и основным сервисом. В одном из таких случаев я подняла <strong><a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> как API-ретранслятор</strong> с использованием <strong>Flask</strong> и <strong>Nginx</strong>. Расскажу, как я это делала, на реальном примере. Писать буду, как всегда, от души и по-человечески — без заумностей, но с практикой.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Когда и зачем нужен API-ретранслятор</h2>



<p>Я впервые начала использовать VPS как API-<a href="https://cloudvps.by/community/docs/glossarij/terminy/proxy-server/" data-internallinksmanager029f6b8e52c="210" title="Proxy Server (Прокси-сервер)">прокси</a>, когда у клиента был закрытый внутренний API, а мобильное приложение требовало открытой точки входа. Основные задачи были:</p>



<ul class="wp-block-list">
<li>защитить основной API от перегрузки;</li>



<li>добавить промежуточную авторизацию;</li>



<li>кэшировать часть запросов;</li>



<li>логировать трафик.</li>
</ul>



<p>Проще всего в таких случаях использовать связку <strong>Flask</strong> + <strong>Nginx</strong>. Flask — для обработки логики, авторизации, ограничения доступа и пр., Nginx — для балансировки и отдачи статики, если надо.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 1: Готовим VPS</h2>



<p>Я взяла обычный <strong>VPS на Ubuntu 22.04</strong>, 1 vCPU, 1 ГБ RAM — больше не надо. Убедитесь, что установлен Python:</p>



<pre class="wp-block-code"><code>python3 --version
</code></pre>



<p>Если нет — ставим:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install python3 python3-pip
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 2: Пишем Flask-приложение</h2>



<p>Создаём минимальный прокси-сервер на Flask. Пусть он просто принимает запросы и пересылает их дальше:</p>



<pre class="wp-block-code"><code>from flask import Flask, request, jsonify
import requests

app = Flask(__name__)
UPSTREAM_API = '<a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://api.example.com'

@app.route('/api/&lt;path:path&gt;', methods=&#91;'GET', 'POST'])
def proxy(path):
    headers = dict(request.headers)
    if request.method == 'GET':
        r = requests.get(f"{UPSTREAM_API}/{path}", headers=headers, params=request.args)
    else:
        r = requests.post(f"{UPSTREAM_API}/{path}", headers=headers, data=request.data)
    return (r.content, r.status_code, r.headers.items())

if __name__ == '__main__':
    app.run(host='127.0.0.1', <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">port</a>=5000)
</code></pre>



<p>Сохраняем как <code>app.py</code> и запускаем:</p>



<pre class="wp-block-code"><code>python3 app.py
</code></pre>



<p>Можно протестировать запросом:</p>



<pre class="wp-block-code"><code>curl http://localhost:5000/api/<a href="https://cloudvps.by/community/docs/glossarij/terminy/ping/" data-internallinksmanager029f6b8e52c="326" title="Ping">ping</a>
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 3: Настройка Gunicorn + systemd</h2>



<p>Чтобы Flask работал как сервис, поднимаем его через Gunicorn:</p>



<pre class="wp-block-code"><code>pip3 install gunicorn
gunicorn -w 2 -b 127.0.0.1:5000 app:app
</code></pre>



<p>Теперь добавим systemd-сервис:</p>



<pre class="wp-block-code"><code>sudo nano /etc/systemd/system/flask-proxy.service
</code></pre>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Flask Proxy Service
After=network.target

&#91;Service]
User=<a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root</a>
WorkingDirectory=/root
ExecStart=/usr/bin/gunicorn -w 2 -b 127.0.0.1:5000 app:app
Restart=always

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p>Активируем:</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reexec
sudo systemctl enable flask-proxy
sudo systemctl start flask-proxy
</code></pre>



<p>Проверяем:</p>



<pre class="wp-block-code"><code>sudo systemctl status flask-proxy
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шаг 4: Настройка Nginx</h2>



<p>Теперь всё направим через Nginx. Устанавливаем:</p>



<pre class="wp-block-code"><code>sudo apt install nginx
</code></pre>



<p>Добавляем конфиг:</p>



<pre class="wp-block-code"><code>sudo nano /etc/nginx/sites-available/flask-proxy
</code></pre>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name your.domain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-<a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a> $remote_addr;
    }
}
</code></pre>



<p>Активируем:</p>



<pre class="wp-block-code"><code>sudo ln -s /etc/nginx/sites-available/flask-proxy /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как я использую эту схему</h2>



<p>Я запускала такую прокси-связку для:</p>



<ul class="wp-block-list">
<li><strong>ретрансляции запросов к Telegram API</strong>, скрывая токен;</li>



<li><strong>добавления кэширования</strong> на уровне Flask + Redis;</li>



<li><strong>ограничения скорости и логирования</strong> через custom middleware.</li>
</ul>



<p>Однажды это реально спасло прод — основной API упал, а я быстро подменила <code>UPSTREAM_API</code> в Flask на резервный адрес. Клиенты даже не заметили.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Примеры задач, где работает идеально:</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Задача</th><th>Решается ретранслятором</th></tr></thead><tbody><tr><td>Скрытие приватного API</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><a href="https://cloudvps.by/community/docs/glossarij/terminy/caching/" data-internallinksmanager029f6b8e52c="272" title="Caching (Кэширование)">Кэширование</a> на уровне запроса</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td>Добавление авторизации</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td>Балансировка нагрузки</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Только через Nginx</td></tr><tr><td>Защита от DDoS</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Лучше использовать <a href="https://cloudvps.by/community/docs/glossarij/terminy/cloudflare/" data-internallinksmanager029f6b8e52c="320" title="Cloudflare">Cloudflare</a></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что можно улучшить</h2>



<ul class="wp-block-list">
<li><strong>Подключить HTTPS через <a href="https://cloudvps.by/community/docs/glossarij/terminy/lets-encrypt/" data-internallinksmanager029f6b8e52c="319" title="Let’s Encrypt">Let’s Encrypt</a></strong> — просто и бесплатно.</li>



<li><strong>Добавить Redis для кэша</strong> и ограничения частоты.</li>



<li><strong>Вынести конфиги в .env-файл</strong> — не жёстко хардкодить.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/kak-ispolzovat-vps-kak-api-retranslyator-flask-nginx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</title>
		<link>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 13:42:42 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4325</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/">Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</a>">%POSTTITLE%</a></p>
<p>Защита почтового сервера от спама — одна из самых важных задач для любого администратора. Особенно, если вы настраиваете собственный mail-сервер на VPS. В этой статье я расскажу, как я внедрила мощную систему фильтрации спама с помощью Rspamd и Postfix, что учла по ходу настройки и какие нюансы могут подстерегать вас на практике. Зачем нужен антиспам-фильтр? [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/">Настройка фильтрации спама через Rspamd и Postfix на VPS: пошаговое руководство</a>">%POSTTITLE%</a></p>

<p><strong>Защита почтового сервера от спама</strong> — одна из самых важных задач для любого администратора. Особенно, если вы настраиваете собственный mail-сервер на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>. В этой статье я расскажу, как я внедрила мощную систему фильтрации спама с помощью <strong>Rspamd</strong> и <strong>Postfix</strong>, что учла по ходу настройки и какие нюансы могут подстерегать вас на практике.</p>



<h2 class="wp-block-heading">Зачем нужен антиспам-фильтр?</h2>



<p>Если у вас нет защиты, почтовый сервер моментально становится жертвой:</p>



<ul class="wp-block-list">
<li>рассылки спама с вашей стороны (если скомпрометирован аккаунт),</li>



<li>приёма тысяч мусорных писем (если открыт вход),</li>



<li>попадания в блэклисты, после чего письма вообще не доставляются.</li>
</ul>



<p>Поэтому связка <strong>Postfix + Rspamd</strong> — это почти must-have. Особенно если вы хотите избежать сложностей со старыми решениями вроде SpamAssassin. Я пробовала оба варианта — разница в скорости, точности и гибкости просто колоссальная.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему Rspamd, а не SpamAssassin?</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Параметр</th><th>Rspamd</th><th>SpamAssassin</th></tr></thead><tbody><tr><td>Скорость</td><td>Высокая, на C языке</td><td>Низкая, на Perl</td></tr><tr><td>Обновления</td><td>Активно поддерживается</td><td>Обновляется медленно</td></tr><tr><td>Расширяемость</td><td>Lua-скрипты, интеграция с Redis</td><td>Ограничена</td></tr><tr><td>UI/Панель управления</td><td>Есть (Web-интерфейс)</td><td>Нет</td></tr><tr><td>Поддержка DKIM/ARC</td><td>Встроена</td><td>Требует сторонние модули</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что нужно для старта?</h2>



<ul class="wp-block-list">
<li>VPS с Linux (у меня — Debian 12, подойдёт и Ubuntu 22.04)</li>



<li>Установленный и настроенный <strong>Postfix</strong> (MTA)</li>



<li>Доступ по <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a> с <a href="https://cloudvps.by/community/docs/glossarij/terminy/root-dostup/" data-internallinksmanager029f6b8e52c="234" title="Root-доступ">root</a>-доступом</li>



<li>Желание копаться в конфигах <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка Rspamd</h2>



<p>Я ставила Rspamd из официальных репозиториев:</p>



<pre class="wp-block-code"><code># Добавим репозиторий Rspamd
echo "deb &#91;arch=amd64] http://rspamd.com/apt/debian bookworm main" | tee /etc/apt/sources.list.d/rspamd.list
curl -1sLf '<a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://rspamd.com/apt-stable/gpg.key' | apt-key add -

# Установка
apt update &amp;&amp; apt install rspamd redis-server -y
</code></pre>



<p>Rspamd будет использовать Redis для кэширования. Без него часть функций просто не работает — имейте в виду.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Интеграция Rspamd с Postfix</h2>



<p>Самое интересное начинается, когда мы &#8220;вшиваем&#8221; Rspamd в поток почты. Вот основные изменения, которые нужно внести в <strong>/etc/postfix/main.cf</strong>:</p>



<pre class="wp-block-code"><code>smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 6
</code></pre>



<p>Теперь письма, проходящие через Postfix, будут анализироваться Rspamd до приёма.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Настройка Rspamd</h2>



<p>Файлы конфигурации Rspamd находятся в <code>/etc/rspamd/local.d/</code>. Важные модули:</p>



<ul class="wp-block-list">
<li><code>dkim_signing.conf</code> — для DKIM-подписей</li>



<li><code>milter_headers.conf</code> — управление заголовками</li>



<li><code>surbl.conf</code> и <code>rbl.conf</code> — для работы с блэклистами</li>



<li><code>greylist.conf</code> — серый список</li>



<li><code>antivirus.conf</code> — подключение ClamAV</li>



<li><code>neural.conf</code> — машинное обучение (!)</li>
</ul>



<p>Советую включить <strong>Web-интерфейс</strong>, это очень помогает:</p>



<pre class="wp-block-code"><code># Включение WebUI
nano /etc/rspamd/local.d/worker-controller.inc
</code></pre>



<pre class="wp-block-code"><code>bind_socket = "127.0.0.1:11334";
password = "$2$randomsalt$hash";
enable_password = true;
</code></pre>



<p>Затем перезапуск:</p>



<pre class="wp-block-code"><code>systemctl restart rspamd
</code></pre>



<p>Теперь по адресу <code>http://127.0.0.1:11334</code> можно будет смотреть метрики, тренировать бейесовский фильтр и управлять конфигурацией.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Обучение антиспама</h2>



<p>Rspamd может обучаться на письмах вручную. Я добавила в <strong>Roundcube</strong> возможность пометки письма как &#8220;спам&#8221; и &#8220;не спам&#8221;, и настроила <code>rspamc</code> для отправки образцов:</p>



<pre class="wp-block-code"><code>rspamc learn_spam &lt; spam.eml
rspamc learn_ham &lt; notspam.eml
</code></pre>



<p>Важно делать это регулярно, особенно в первое время — тогда фильтр начнёт работать как надо.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">DKIM, SPF и DMARC</h2>



<p>Антиспам — это не только фильтрация входящих, но и защита репутации отправляемых писем.</p>



<ul class="wp-block-list">
<li>Для <strong>DKIM</strong> я использовала встроенный модуль Rspamd (<code>dkim_signing.conf</code>).</li>



<li>SPF и DMARC настроены через <a href="https://cloudvps.by/community/docs/glossarij/terminy/dns/" data-internallinksmanager029f6b8e52c="199" title="DNS (Domain Name System)">DNS</a>-записи.</li>



<li>Можно добавить отчёты DMARC на почту и мониторить доменную репутацию.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Возможные ошибки</h2>



<ul class="wp-block-list">
<li><strong>Не работает веб-интерфейс</strong>? Проверь <code>worker-controller.inc</code>, правильный <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">порт</a>, нет ли <a href="https://cloudvps.by/community/docs/glossarij/terminy/firewall/" data-internallinksmanager029f6b8e52c="198" title="Firewall (Брандмауэр)">firewall</a>&#8217;а.</li>



<li><strong>Письма не проходят</strong>? Возможно, слишком агрессивные настройки (например, выставлен <code>reject</code> вместо <code>add header</code>).</li>



<li><strong>Rspamd не запускается</strong>? Логи в <code>journalctl -u rspamd</code> помогут понять, что не так.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой итог</h2>



<p>Я протестировала связку Rspamd + Postfix на 3 VPS — работает стабильно. Ловит 95% спама, ложно положительных почти нет. Интерфейс понятный, управление гибкое, можно кастомизировать под любые нужды.</p>



<p>Если раньше я мучилась с настройками SpamAssassin и Amavis, то теперь честно не понимаю, зачем тратить время — <strong>Rspamd реально лучше</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-filtraczii-spama-cherez-rspamd-i-postfix-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Автоматизация резервных копий Docker с Borg и cron: как я это делаю на своём VPS</title>
		<link>https://cloudvps.by/community/avtomatizacziya-rezervnyh-kopij-docker-s-borg-i-cron/</link>
					<comments>https://cloudvps.by/community/avtomatizacziya-rezervnyh-kopij-docker-s-borg-i-cron/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Thu, 21 Aug 2025 00:38:15 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4310</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/avtomatizacziya-rezervnyh-kopij-docker-s-borg-i-cron/">Автоматизация резервных копий Docker с Borg и cron: как я это делаю на своём VPS</a>">%POSTTITLE%</a></p>
<p>Когда я только начала активно разворачивать контейнеры на своём VPS, мне казалось, что бэкапы — это что-то громоздкое, требующее отдельной системы, жёстких дисков и кучи времени. Но однажды ночью, когда я почти потеряла важный контейнер с клиентскими данными после неудачного обновления, я поняла: без автоматизации бэкапов жить просто нельзя. Особенно когда ты работаешь с Docker [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/avtomatizacziya-rezervnyh-kopij-docker-s-borg-i-cron/">Автоматизация резервных копий Docker с Borg и cron: как я это делаю на своём VPS</a>">%POSTTITLE%</a></p>

<p>Когда я только начала активно разворачивать контейнеры на своём <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, мне казалось, что <a href="https://cloudvps.by/community/docs/glossarij/terminy/disaster-recovery/" data-internallinksmanager029f6b8e52c="238" title="Disaster Recovery (Аварийное восстановление)">бэкапы</a> — это что-то громоздкое, требующее отдельной системы, жёстких дисков и кучи времени. Но однажды ночью, когда я почти потеряла важный контейнер с клиентскими данными после неудачного обновления, я поняла: без автоматизации бэкапов жить просто нельзя. Особенно когда ты работаешь с <a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">Docker</a> и у тебя крутятся приложения, важные для бизнеса или личных проектов.</p>



<p>Так начался мой путь с <strong>BorgBackup</strong> и старым добрым <strong>cron</strong>. Сейчас расскажу, как я это всё настроила — по-человечески и без заумных скриптов.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему не стоит откладывать бэкапы Docker-контейнеров</h2>



<p>Если ты когда-либо теряла файлы или сбивала <code>docker-compose</code> конфиг, ты понимаешь, как быстро может пойти всё не по плану. Резервные копии нужны не только сайтам, но и контейнерам с БД, пользовательскими настройками, даже обычным <code>volume</code> с файлами.</p>



<p>Вот примеры, что стоит бэкапить в Docker-проектах:</p>



<ul class="wp-block-list">
<li>Файлы сайта (html, css, js, uploads)</li>



<li>Базы данных (через docker exec mysqldump, например)</li>



<li>Файлы конфигурации (.env, docker-compose.yml, nginx.conf)</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/certificate-pinning/" data-internallinksmanager029f6b8e52c="284" title="Certificate Pinning (Защита канала связи)">Сертификаты</a> и ключи (letsencrypt, <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">ssh</a>)</li>



<li>Docker volumes (их можно тарить напрямую, если монтируются)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое Borg и почему я выбрала именно его</h2>



<p><strong>BorgBackup (или просто Borg)</strong> — это утилита для дедупликации данных и безопасного создания архивов. Он не просто делает копии файлов — он:</p>



<ul class="wp-block-list">
<li>сохраняет только изменения (экономит место),</li>



<li>шифрует данные (AES),</li>



<li>сжимает архивы,</li>



<li>легко интегрируется с cron и shell.</li>
</ul>



<p>Я сравнивала его с rsync и duplicity, но Borg оказался проще в настройке и мощнее по возможностям. И ещё — он нативно работает в CLI, что мне особенно близко <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2764.png" alt="❤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка Borg на VPS</h2>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install borgbackup -y
</code></pre>



<p>На локальной машине (или другом VPS — если у вас есть репозиторий для бэкапов) — делаем то же самое.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Создание репозитория для бэкапов</h2>



<p>Допустим, у меня есть второй VPS с хранилищем (пусть будет <code><a href="https://cloudvps.by/community/docs/glossarij/terminy/backup/" data-internallinksmanager029f6b8e52c="228" title="Backup (Резервное копирование)">backup</a>.mydomain.ru</code>). Я использую SSH и ключи для соединения.</p>



<pre class="wp-block-code"><code>borg init --encryption=repokey borg@backup.mydomain.ru:/home/borg/docker_backups
</code></pre>



<p>После этого будет создан шифрованный репозиторий. Пароль стоит сохранить в <code>~/.borg-passphrase</code> (если доверяете себе автоматизацию).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что именно бэкапить из Docker</h2>



<p>Один из примеров — бэкап volume с данными сайта и конфигурацией:</p>



<pre class="wp-block-code"><code>docker run --rm \
  -v my_volume:/volume \
  -v $(pwd)/backup:/backup \
  alpine \
  tar czf /backup/site_backup.tar.gz /volume
</code></pre>



<p>Можно и проще: если монтировали volume в файловую систему, бэкапить его как обычную папку.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Автоматизация через cron</h2>



<p>Вот пример скрипта <code>backup_docker.sh</code>, который я кладу в <code>/usr/local/bin/</code>:</p>



<pre class="wp-block-code"><code>#!/bin/bash

export BORG_PASSPHRASE='мой_пароль'
export BORG_REPO=borg@backup.mydomain.ru:/home/borg/docker_backups

backup_name="docker-$(date +%Y-%m-%d_%H-%M)"
backup_path="/srv/docker_data"

borg create --stats --compression lz4 ::${backup_name} ${backup_path}

borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=3

unset BORG_PASSPHRASE
</code></pre>



<p>И добавляю в cron:</p>



<pre class="wp-block-code"><code>crontab -e
</code></pre>



<pre class="wp-block-code"><code>0 3 * * * /usr/local/bin/backup_docker.sh &gt;&gt; /var/log/backup_docker.log 2&gt;&amp;1
</code></pre>



<p>Теперь каждую ночь в 3:00 мои данные в надёжных руках <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Восстановление при необходимости</h2>



<p>Borg умеет легко восстанавливать данные:</p>



<pre class="wp-block-code"><code>borg list $BORG_REPO
borg extract $BORG_REPO::docker-2025-08-14_03-00
</code></pre>



<p>Если архив зашифрован — он спросит пароль. После этого все файлы будут извлечены в текущую директорию.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Несколько практических советов</h2>



<ul class="wp-block-list">
<li>Раз в месяц <strong>проверяйте бэкапы вручную</strong> — восстанавливайте хотя бы один архив.</li>



<li>Используйте <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/grafana/" data-internallinksmanager029f6b8e52c="356" title="Grafana (Cвободная программная система визуализации данных)">мониторинг</a> на лог-файлы</strong> — я иногда отправляю алерты в Telegram при ошибках бэкапа.</li>



<li>Не храните бэкапы на том же VPS. Хоть это и дешевле, но риск выше.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Заключение: автоматизация бэкапов — это не &#8220;опционально&#8221;</h2>



<p>С тех пор как я автоматизировала бэкапы через Borg и cron, я сплю спокойно. Серьёзно. Даже если я обновляю <code>docker-compose</code>, пересобираю образ или случайно удаляю volume — всё можно вернуть.</p>



<p>Если вы, как и я, работаете с Docker на VPS — не откладывайте. Настроить это можно за вечер, а спасти может целый проект.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Вот наглядная таблица сравнения <strong>Borg</strong>, <strong>Rsync</strong>, <strong>Duplicity</strong> и <strong>Restic</strong> — с точки зрения резервного копирования Docker-контейнеров на VPS:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Характеристика</th><th><strong>BorgBackup</strong></th><th><strong>Rsync</strong></th><th><strong>Duplicity</strong></th><th><strong>Restic</strong></th></tr></thead><tbody><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Скорость</td><td>Высокая (сжатие + дедупликация)</td><td>Средняя</td><td>Средняя</td><td>Высокая</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Дедупликация данных</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Нет</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Нет</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Шифрование</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> AES</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (только через SSH)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> GnuPG</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> AES</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Сжатие</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да (lz4, zlib и др.)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Нет</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Простота настройки</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (самый <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a>)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Инкрементальные бэкапы</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Проверка целостности</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Встроена</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Только вручную</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Через GPG</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Встроена</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Поддержка SSH</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/23f1.png" alt="⏱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Автоматизация (cron)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Легко</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Легко</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Легко</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Легко</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Поддержка облаков</td><td>Через <code>sshfs</code> или <code>rclone</code></td><td>Через <code>ssh</code></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Amazon S3, GDrive и др.</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Amazon S3, GDrive и др.</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f40b.png" alt="🐋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Подходит для Docker</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Идеально</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Частично (без архивации)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Да</td></tr><tr><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Активность проекта</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Активно развивается</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Стабильный</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Меньше обновлений</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Активно развивается</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Мой личный выбор</h2>



<p>Я пробовала все четыре — и осталась с <strong>Borg</strong>, потому что он:</p>



<ul class="wp-block-list">
<li>не требует костылей,</li>



<li>шустро архивирует docker volume&#8217;ы,</li>



<li>не &#8220;жрёт&#8221; лишнее место,</li>



<li>и просто работает.</li>
</ul>



<p>Для кого-то rsync подойдёт лучше — если нужен просто копипаст в папку. Но если вам важна <strong>надежность</strong>, <strong>дедупликация</strong> и <strong>шифрование</strong> — Borg — лучший друг разработчицы на VPS <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/avtomatizacziya-rezervnyh-kopij-docker-s-borg-i-cron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как я автоматизировала перезапуск сервисов на VPS с помощью systemd (и почему без этого нельзя)</title>
		<link>https://cloudvps.by/community/kak-ya-avtomatizirovala-perezapusk-servisov-na-vps-s-pomoshhyu-systemd/</link>
					<comments>https://cloudvps.by/community/kak-ya-avtomatizirovala-perezapusk-servisov-na-vps-s-pomoshhyu-systemd/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Tue, 19 Aug 2025 15:31:26 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4293</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ya-avtomatizirovala-perezapusk-servisov-na-vps-s-pomoshhyu-systemd/">Как я автоматизировала перезапуск сервисов на VPS с помощью systemd (и почему без этого нельзя)</a>">%POSTTITLE%</a></p>
<p>Однажды у меня на проде «упал» процесс, и это случилось как раз в пятницу вечером — конечно же, я уже отключилась от работы. Сайт, завязанный на этом процессе, просто перестал отвечать. И всё это время, пока я пила чай и смотрела сериал, никто не понимал, что случилось. В понедельник — ах да, извините, забыли поставить [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-ya-avtomatizirovala-perezapusk-servisov-na-vps-s-pomoshhyu-systemd/">Как я автоматизировала перезапуск сервисов на VPS с помощью systemd (и почему без этого нельзя)</a>">%POSTTITLE%</a></p>

<p>Однажды у меня на проде «упал» процесс, и это случилось как раз в пятницу вечером — конечно же, я уже отключилась от работы. Сайт, завязанный на этом процессе, просто перестал отвечать. И всё это время, пока я пила чай и смотрела сериал, никто не понимал, что случилось. В понедельник — ах да, извините, забыли поставить авто‑перезапуск в <code>systemd</code>. Больше таких ситуаций я себе не позволяла.</p>



<p>Сегодня расскажу, как <strong>настроить auto-healing на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> с помощью systemd</strong>, чтобы сервисы сами восстанавливались при сбоях. Подойдёт для Ubuntu, Debian, CentOS — везде, где есть <code>systemd</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Зачем вообще нужен auto-healing?</h2>



<p>Если приложение или скрипт внезапно упал, а вы об этом узнаёте спустя сутки — это <strong>упущенные пользователи, ошибки в логах и стресс</strong>. Особенно если VPS используется для:</p>



<ul class="wp-block-list">
<li>микросервисов,</li>



<li>веб-серверов (nginx, Apache),</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/proxy-server/" data-internallinksmanager029f6b8e52c="210" title="Proxy Server (Прокси-сервер)">прокси</a>,</li>



<li>Telegram-ботов,</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/vpn/" data-internallinksmanager029f6b8e52c="211" title="VPN (Virtual Private Network)">VPN</a>-сервисов (<a href="https://cloudvps.by/community/docs/glossarij/terminy/wireguard/" data-internallinksmanager029f6b8e52c="301" title="WireGuard">WireGuard</a>, <a href="https://cloudvps.by/community/docs/glossarij/terminy/openvpn/" data-internallinksmanager029f6b8e52c="300" title="OpenVPN">OpenVPN</a>),</li>



<li>cron-скриптов.</li>
</ul>



<p>Решение — <strong><code>systemd restart on failure</code></strong> и несколько строчек, которые буквально спасают прод.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Пример из моей практики: auto-restart для Node.js</h2>



<p>У меня был <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a> сервис на <a href="https://cloudvps.by/community/docs/glossarij/terminy/node-v-kubernetes/" data-internallinksmanager029f6b8e52c="349" title="Node (в Kubernetes)">Node</a>.js, который обрабатывал <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>-запросы. Иногда он крашился при особых типах данных, пока я не нашла баг. Чтобы не ждать, пока я починю всё, я добавила auto-restart в его юнит:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=My Node.js API
After=network.target

&#91;Service]
ExecStart=/usr/bin/node /home/myuser/my-api/index.js
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitIntervalSec=60
User=myuser
Environment=NODE_ENV=production

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p>Сохраняем файл как <code>/etc/systemd/system/my-api.service</code>.</p>



<p>Теперь, если процесс &#8220;падает&#8221;, <code>systemd</code> перезапускает его через 5 секунд. А если он упадёт 3 раза за минуту — перезапуск приостанавливается (защита от бесконечного цикла).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Расшифровка параметров:</h2>



<ul class="wp-block-list">
<li><code>Restart=on-failure</code> — перезапускать, если процесс завершился с ошибкой.</li>



<li><code>RestartSec=5</code> — ждать 5 секунд перед перезапуском.</li>



<li><code>StartLimitBurst=3</code> и <code>StartLimitIntervalSec=60</code> — максимум 3 перезапуска за 60 секунд.</li>



<li><code>ExecStart</code> — путь до исполняемого файла.</li>
</ul>



<p>Также поддерживаются другие значения <code>Restart</code>, например:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Параметр</th><th>Что означает</th></tr></thead><tbody><tr><td><code>no</code></td><td>Не перезапускать (по умолчанию)</td></tr><tr><td><code>always</code></td><td>Перезапускать всегда, даже при <code>exit 0</code></td></tr><tr><td><code>on-failure</code></td><td>Только если завершилось с ошибкой</td></tr><tr><td><code>on-abnormal</code></td><td>Только при сигнале или core dump</td></tr><tr><td><code>on-watchdog</code></td><td>При watchdog timeout</td></tr><tr><td><code>on-abort</code></td><td>Только если завершено сигналом</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как отследить ошибки: <code>systemctl</code> и логи</h2>



<p>После настройки можно наблюдать поведение:</p>



<pre class="wp-block-code"><code>sudo systemctl status my-api
</code></pre>



<p>Если хотите увидеть, почему сервис «упал» — смотрим:</p>



<pre class="wp-block-code"><code>journalctl -u my-api
</code></pre>



<p>Если сервис упал слишком часто, и systemd его «заморозил», нужно сбросить счётчик:</p>



<pre class="wp-block-code"><code>sudo systemctl reset-failed my-api
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ещё примеры из жизни</h2>



<h4 class="wp-block-heading">Telegram-бот</h4>



<pre class="wp-block-code"><code>&#91;Service]
ExecStart=/usr/bin/python3 /home/user/bot/main.py
Restart=always
RestartSec=10
</code></pre>



<h4 class="wp-block-heading">WireGuard туннель</h4>



<pre class="wp-block-code"><code>&#91;Service]
ExecStart=/usr/bin/wg-quick up wg0
ExecStop=/usr/bin/wg-quick down wg0
Restart=on-failure
RestartSec=3
</code></pre>



<h4 class="wp-block-heading">Прокси на Go</h4>



<pre class="wp-block-code"><code>&#91;Service]
ExecStart=/usr/local/bin/myproxy
Restart=always
RestartSec=5
User=proxyuser
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">systemd health-check (ждём как родного)</h2>



<p>Если вы хотите ещё более продвинуто — можно настроить <strong><code>WatchdogSec</code></strong> и использовать <code>NotifyAccess=all</code>, чтобы приложение «пинговало» systemd и показывало, что оно живо. Но это уже для тех, кто пишет свои сервисы с <code>sd_notify</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вопрос: а что если VPS ребутнулся?</h2>



<p>Тогда просто добавьте:</p>



<pre class="wp-block-code"><code>&#91;Install]
WantedBy=multi-user.target
</code></pre>



<p>И выполните:</p>



<pre class="wp-block-code"><code>sudo systemctl enable my-api
</code></pre>



<p>Теперь сервис запустится при старте системы.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">В результате&#8230;</h2>



<p>Если бы мне кто-то сказал ещё на старте моей практики, что одна строчка <code>Restart=on-failure</code> избавит от десятков часов головной боли… я бы настроила её везде сразу. Теперь на <strong>всех VPS, где у меня крутятся сервисы</strong>, я обязательно прописываю auto-restart через <code>systemd</code>. Это просто, надёжно и по-настоящему спасает.</p>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/kak-ya-avtomatizirovala-perezapusk-servisov-na-vps-s-pomoshhyu-systemd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Проверка и настройка sysctl: производительность и безопасность</title>
		<link>https://cloudvps.by/community/proverka-i-nastrojka-sysctl-proizvoditelnost-i-bezopasnost/</link>
					<comments>https://cloudvps.by/community/proverka-i-nastrojka-sysctl-proizvoditelnost-i-bezopasnost/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Sat, 16 Aug 2025 00:25:02 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4283</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/proverka-i-nastrojka-sysctl-proizvoditelnost-i-bezopasnost/">Проверка и настройка sysctl: производительность и безопасность</a>">%POSTTITLE%</a></p>
<p>Когда я только начинала разворачивать свои первые VPS, честно говоря, файл /etc/sysctl.conf вообще не входил в мою зону внимания. Ну работает и ладно, не трогаем. Но однажды после очередной нагрузки база начала вести себя странно — тормозила на ровном месте, а сеть будто «захлёбывалась». Тогда один знакомый админ мимоходом спросил: «Ты sysctl вообще трогала?» И [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/proverka-i-nastrojka-sysctl-proizvoditelnost-i-bezopasnost/">Проверка и настройка sysctl: производительность и безопасность</a>">%POSTTITLE%</a></p>

<p>Когда я только начинала разворачивать свои первые <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, честно говоря, файл <code>/etc/sysctl.conf</code> вообще не входил в мою зону внимания. Ну работает и ладно, не трогаем. Но однажды после очередной нагрузки база начала вести себя странно — тормозила на ровном месте, а сеть будто «захлёбывалась». Тогда один знакомый админ мимоходом спросил: «Ты <code>sysctl</code> вообще трогала?» И вот с того момента у меня началась целая история — не просто трогала, а научилась использовать <code>sysctl</code> как инструмент тонкой настройки ядра Linux. Сейчас расскажу, как и зачем его настраивать, и на что он влияет.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое sysctl?</h2>



<p><code>sysctl</code> — это утилита в Linux, которая позволяет управлять параметрами ядра ОС в реальном времени. Она работает с так называемыми <em>sysctl-переменными</em>, которые определяют поведение сетевых стеков, управления памятью, безопасности и многого другого.</p>



<p>Значения переменных можно увидеть и поменять на лету. Это особенно важно, когда ты хочешь оптимизировать сервер под свою задачу — будь то высоконагруженный <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>, <a href="https://cloudvps.by/community/docs/glossarij/terminy/vpn/" data-internallinksmanager029f6b8e52c="211" title="VPN (Virtual Private Network)">VPN</a>-туннель или просто безопасный <a href="https://cloudvps.by/community/docs/glossarij/terminy/ssh/" data-internallinksmanager029f6b8e52c="197" title="SSH (Secure Shell)">SSH</a>-доступ.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Где живут параметры sysctl?</h2>



<p>Основной файл конфигурации — это:</p>



<pre class="wp-block-code"><code>/etc/sysctl.conf
</code></pre>



<p>Также система может загружать параметры из:</p>



<pre class="wp-block-code"><code>/etc/sysctl.d/*.conf
</code></pre>



<p>А если хочется что-то быстро протестировать:</p>



<pre class="wp-block-code"><code>sudo sysctl -w net.<a href="https://cloudvps.by/community/docs/glossarij/terminy/ipv4/" data-internallinksmanager029f6b8e52c="205" title="IPv4 (Internet Protocol version 4)">ipv4</a>.ip_forward=1
</code></pre>



<p>Этот параметр включит маршрутизацию между интерфейсами, и сразу же, без ребута. Но после перезагрузки он слетит, если не прописать его в <code>sysctl.conf</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему важно настраивать sysctl?</h2>



<p>Настройки ядра напрямую влияют на:</p>



<ul class="wp-block-list">
<li>пропускную способность сети (<code>net.core.rmem_max</code>, <code>net.core.wmem_max</code>);</li>



<li>безопасность (<code>net.ipv4.conf.all.accept_source_route</code>, <code>kernel.kptr_restrict</code>);</li>



<li>стабильность при DDoS-атаках (<code>net.ipv4.tcp_syncookies</code>);</li>



<li>работу <a href="https://cloudvps.by/community/docs/glossarij/terminy/nat/" data-internallinksmanager029f6b8e52c="207" title="NAT (Network Address Translation)">NAT</a> и VPN (<code>net.ipv4.ip_forward</code>);</li>



<li>поведение <a href="https://cloudvps.by/community/docs/glossarij/terminy/tcp/" data-internallinksmanager029f6b8e52c="222" title="TCP (Transmission Control Protocol)">TCP</a>-соединений (<code>net.ipv4.tcp_fin_timeout</code>, <code>net.ipv4.tcp_tw_reuse</code>).</li>
</ul>



<p>Если ты работаешь с VPS и держишь, например, свой VPN-сервер, или пробрасываешь трафик через туннель, тебе обязательно нужно зайти в <code>sysctl</code> и вычистить то, что ставится по умолчанию, особенно на дистрибутивах вроде Ubuntu Server 22.04 — там половина параметров просто отключены или устарели.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Проверка текущих значений</h2>



<p>Чтобы посмотреть текущее значение переменной, вводим:</p>



<pre class="wp-block-code"><code>sysctl net.ipv4.tcp_syncookies
</code></pre>



<p>А если хотим посмотреть всё, что связано с TCP:</p>



<pre class="wp-block-code"><code>sysctl -a | grep tcp
</code></pre>



<p>Можно быстро выгрузить все параметры и сохранить:</p>



<pre class="wp-block-code"><code>sysctl -a &gt; sysctl-before.txt
</code></pre>



<p>Очень удобно сравнивать с «после».</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Пример настроек для повышения безопасности и производительности</h2>



<p>Вот пример, который я использую на одном из своих публичных серверов (где работает <a href="https://cloudvps.by/community/docs/glossarij/terminy/wireguard/" data-internallinksmanager029f6b8e52c="301" title="WireGuard">WireGuard</a> и <a href="https://cloudvps.by/community/docs/glossarij/terminy/dns/" data-internallinksmanager029f6b8e52c="199" title="DNS (Domain Name System)">DNS</a> over <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">HTTPS</a>):</p>



<pre class="wp-block-code"><code># Сеть
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.log_martians = 1

# TCP оптимизация
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# Защита
kernel.kptr_restrict = 2
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
</code></pre>



<p>После внесения изменений применяю:</p>



<pre class="wp-block-code"><code>sudo sysctl -p
</code></pre>



<p>Если всё ок — сразу чувствуешь прирост в стабильности, особенно на активных соединениях.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Настройка под WireGuard, VPN и маршрутизацию</h2>



<p>Если вы используете WireGuard VPN на VPS, не забудьте включить <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>-переадресацию:</p>



<pre class="wp-block-code"><code>net.ipv4.ip_forward = 1
net.<a href="https://cloudvps.by/community/docs/glossarij/terminy/ipv6/" data-internallinksmanager029f6b8e52c="206" title="IPv6 (Internet Protocol version 6)">ipv6</a>.conf.all.forwarding = 1
</code></pre>



<p>Без этого туннель просто не будет маршрутизировать трафик.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">Файл <code>/etc/sysctl.conf</code> vs <code>sysctl -w</code></h4>



<p>Важно понимать: <code>sysctl -w</code> — это временно. После ребута всё сбросится. Поэтому если вы нашли нужный параметр и убедились, что он вам подходит — обязательно прописывайте его в конфигурационный файл:</p>



<pre class="wp-block-code"><code>sudo nano /etc/sysctl.conf
</code></pre>



<p>Потом сохраняем и:</p>



<pre class="wp-block-code"><code>sudo sysctl -p
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Личный опыт</h2>



<p>На одном из проектов, где мы держим mini-K3s кластер на VPS для микросервисов, неправильно выставленный <code>tcp_tw_reuse</code> вызывал перегрузку порта, и из-за этого приходили таймауты в самом API. Я бы и не подумала на <code>sysctl</code>, если бы не случайный диалог с DevOps в чате, где он бросил ссылку: «А ты <a href="https://cloudvps.by/community/docs/glossarij/terminy/port/" data-internallinksmanager029f6b8e52c="225" title="Port (Порт )">порт</a> TIME_WAIT не чистишь случайно?» — оказалось, да, и плохо.</p>



<p>С тех пор я внимательно отслеживаю любые изменения в <code>sysctl.conf</code>, особенно перед выкладкой чего-то на прод.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>Отдельно про <code>net.ipv4.tcp_syncookies</code></strong></p>



<p>Это буквально спасение от SYN-флуд атак. Если у вас открыт порт (например, веб или SSH), включите это:</p>



<pre class="wp-block-code"><code>net.ipv4.tcp_syncookies = 1
</code></pre>



<p>Сервер будет корректно обрабатывать фальшивые соединения, не тратя память.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Частые ошибки</h2>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Ошибка:</strong> поставили <code>ip_forward = 1</code>, но не применили <code>sysctl -p</code>. → Не работает VPN.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Ошибка:</strong> добавили <code>tcp_tw_reuse</code>, но не проверили <code>tcp_fin_timeout</code>. → Порты забиваются.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Ошибка:</strong> изменили параметр через <code>sysctl -w</code>, но забыли сохранить в файл. → После ребута всё пропало.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Итого в сухом остатке</h2>



<p><code>sysctl</code> — это не что-то для «очень умных DevOps». Это просто мощный инструмент для настройки своего VPS под конкретную задачу. И да, он может пугать, особенно когда не знаешь, что за <code>net.ipv4.conf.default.rp_filter</code>, но шаг за шагом можно выстроить конфигурацию, которая не только быстрее работает, но и безопаснее.</p>



<p>Если вы держите сервер под VPN, <a href="https://cloudvps.by/community/docs/glossarij/terminy/proxy-server/" data-internallinksmanager029f6b8e52c="210" title="Proxy Server (Прокси-сервер)">прокси</a>, git или просто под веб-приложение — настройте <code>sysctl</code>. Даже базовые параметры уже дадут плюс в стабильности. А главное — это бесплатно и под полным контролем.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Чек-лист <code>sysctl</code> по задачам</h2>



<h4 class="wp-block-heading"><strong>VPN-сервер (WireGuard/OpenVPN/IPSec)</strong></h4>



<pre class="wp-block-code"><code>net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
</code></pre>



<p><em>Обязательно проверяй: работает ли маршрут и пробрасывается ли NAT.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Web-сервер (Nginx/Apache/Node.js)</strong></h4>



<pre class="wp-block-code"><code>net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
</code></pre>



<p><em>Сильно повышает <a href="https://cloudvps.by/community/docs/glossarij/terminy/fault-tolerance/" data-internallinksmanager029f6b8e52c="359" title="Fault Tolerance (Отказоустойчивость)">отказоустойчивость</a> под нагрузкой и при DDoS.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Git-сервер (Gitea, GitBucket, bare repo)</strong></h4>



<pre class="wp-block-code"><code>fs.inotify.max_user_watches = 1048576
fs.file-max = 2097152
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
</code></pre>



<p><em>Важно для большого количества одновременных соединений и операций git push/pull.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Monitoring &amp; Logging (Zabbix, ELK, Prometheus)</strong></h4>



<pre class="wp-block-code"><code><a href="https://cloudvps.by/community/docs/glossarij/terminy/virtual-machine/" data-internallinksmanager029f6b8e52c="260" title="VM (Virtual Machine)">vm</a>.max_map_count = 262144
fs.file-max = 2097152
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
</code></pre>



<p><em>Обязательные параметры, если используешь Elasticsearch или Logstash.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Kubernetes / K3s / Контейнеры</strong></h4>



<pre class="wp-block-code"><code>net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
vm.overcommit_memory = 1
</code></pre>



<p><em>Без этого K3s и kube-proxy могут работать некорректно.</em></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/proverka-i-nastrojka-sysctl-proizvoditelnost-i-bezopasnost/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как отправлять алерты с VPS в Telegram через webhook: мой путь от хаоса к контролю</title>
		<link>https://cloudvps.by/community/kak-otpravlyat-alerty-s-vps-v-telegram-cherez-webhook/</link>
					<comments>https://cloudvps.by/community/kak-otpravlyat-alerty-s-vps-v-telegram-cherez-webhook/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Fri, 01 Aug 2025 12:20:54 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4243</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-otpravlyat-alerty-s-vps-v-telegram-cherez-webhook/">Как отправлять алерты с VPS в Telegram через webhook: мой путь от хаоса к контролю</a>">%POSTTITLE%</a></p>
<p>Когда ты управляешь несколькими VPS, со временем возникает один закономерный вопрос: а как я узнаю, если что-то пойдёт не так? Особенно если у тебя мониторинг настроен, но не настроено уведомление о проблеме. Я долго полагалась на «проверю завтра» — и в какой-то момент один из серверов просто лёг. Причина — банально закончился диск. А я [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/kak-otpravlyat-alerty-s-vps-v-telegram-cherez-webhook/">Как отправлять алерты с VPS в Telegram через webhook: мой путь от хаоса к контролю</a>">%POSTTITLE%</a></p>

<p>Когда ты управляешь несколькими <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>, со временем возникает один закономерный вопрос: <em>а как я узнаю, если что-то пойдёт не так?</em> Особенно если у тебя <a href="https://cloudvps.by/community/docs/glossarij/terminy/grafana/" data-internallinksmanager029f6b8e52c="356" title="Grafana (Cвободная программная система визуализации данных)">мониторинг</a> настроен, но не настроено <strong>уведомление о проблеме</strong>. Я долго полагалась на «проверю завтра» — и в какой-то момент один из серверов просто лёг. Причина — банально закончился диск. А я не узнала об этом двое суток. После этого инцидента я решила: всё, пора автоматизировать оповещения через <strong>Telegram</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему Telegram?</h2>



<p>Мессенджер у меня всегда открыт. Телефон всегда под рукой. И самое главное — <strong>Telegram поддерживает Webhooks</strong>, а значит можно настроить автоматическую отправку сообщений из любых систем мониторинга: <strong>Grafana</strong>, <strong><a href="https://cloudvps.by/community/docs/glossarij/terminy/prometheus/" data-internallinksmanager029f6b8e52c="355" title="Prometheus (База данных временных рядов)">Prometheus</a> + Alertmanager</strong>, <strong>Zabbix</strong> — или вообще кастомный Bash-скрипт.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вариант 1: Telegram-оповещения через Alertmanager + Prometheus</h2>



<p>Если у вас уже крутится стек Prometheus, то подключить <strong>alertmanager telegram</strong> — дело пары шагов.</p>



<h4 class="wp-block-heading">Создание Telegram-бота</h4>



<ol class="wp-block-list">
<li>В Telegram откройте <strong>@BotFather</strong>.</li>



<li>Создайте нового бота: <code>/newbot</code></li>



<li>Скопируйте токен — он вам понадобится.</li>



<li>Отправьте любое сообщение вашему боту, чтобы он начал вас «видеть».</li>



<li>Получите свой <code>chat_id</code>, например, через curl:</li>
</ol>



<pre class="wp-block-code"><code>curl <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://<a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">api</a>.telegram.org/bot&lt;YOUR_TOKEN&gt;/getUpdates
</code></pre>



<h4 class="wp-block-heading">Конфигурация Alertmanager</h4>



<p>Файл <code>alertmanager.yml</code>:</p>



<pre class="wp-block-code"><code>receivers:
  - name: 'telegram'
    telegram_configs:
      - bot_token: '&lt;YOUR_TOKEN&gt;'
        chat_id: '&lt;YOUR_CHAT_ID&gt;'
        message: '{{ .CommonAnnotations.summary }}'

route:
  receiver: 'telegram'
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Убедитесь, что у вас в Alertmanager включена поддержка Telegram. Если нет — придётся использовать webhook.</p>
</blockquote>



<h4 class="wp-block-heading">Перезапустите Alertmanager</h4>



<pre class="wp-block-code"><code>systemctl restart alertmanager
</code></pre>



<p>Теперь при срабатывании алерта вы будете получать сообщение <strong>прямо в Telegram</strong>. Очень удобно. Главное — не забыть про правильную настройку меток в Prometheus и шаблонов.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вариант 2: Grafana → Telegram через webhook</h2>



<p>Если вы используете <strong>Grafana</strong> (а я её обожаю за визуализацию), то там всё ещё проще.</p>



<h4 class="wp-block-heading">Настройка webhook в Grafana:</h4>



<ol class="wp-block-list">
<li>В Telegram создайте бота (через @BotFather) и получите токен.</li>



<li>Создайте свой Webhook-приёмник (например, через <code>alertmanager webhook</code> или middleware скрипт).</li>



<li>В Grafana:</li>
</ol>



<ul class="wp-block-list">
<li>Перейдите в <strong>Alerting > Contact points</strong></li>



<li>Выберите тип <strong>Webhook</strong></li>



<li>Укажите URL: например <code>http://localhost:4000/telegram-alert</code></li>



<li>Ваш backend-скрипт должен при получении данных от Grafana пересылать их в Telegram:</li>
</ul>



<pre class="wp-block-code"><code>#!/bin/bash
curl -s -X POST https://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/sendMessage \
  -d chat_id="&lt;YOUR_CHAT_ID&gt;" \
  -d text="$1"
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вариант 3: Zabbix и Telegram: просто, но мощно</h2>



<p>Если у вас <strong>Zabbix</strong>, то здесь всё тоже достаточно просто:</p>



<h4 class="wp-block-heading">Шаги:</h4>



<ol class="wp-block-list">
<li>Создайте Telegram-бота.</li>



<li>Получите <code>chat_id</code>.</li>



<li>Скачайте готовый скрипт <a href="https://github.com/ableev/Zabbix-integration-with-Telegram" target="_blank" rel="noopener">zabbix-alert-telegram.sh</a>.</li>



<li>Пропишите путь к скрипту в <strong>Admin > Media types</strong>.</li>



<li>Создайте пользователя, добавьте медиа Telegram, и укажите <code>chat_id</code>.</li>
</ol>



<p>Zabbix теперь будет радостно слать вам уведомления об ошибках, нагрузках и других событиях. <strong>Zabbix Telegram notification</strong> — реально удобная штука, особенно если вы админите много хостов.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Альтернативы и бонус: свой Telegram DDOS-блокировщик</h2>



<p>Некоторые коллеги идут дальше и пишут <strong>ddos telegram bot</strong> — т.е. интеграцию между фаерволом (например, iptables) и Telegram-ботом, чтобы получать сообщение при резком скачке входящего трафика. Я пока так не заморачивалась, но идея интересная — можно будет заскриптовать fail2ban + Telegram.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Общие советы из опыта</h2>



<ul class="wp-block-list">
<li><strong>Не отправляйте слишком много алертов</strong>. Telegram может временно ограничить бота.</li>



<li>Используйте <strong>разные чаты</strong> или группы, если у вас несколько проектов.</li>



<li>Делайте фильтрацию на уровне Alertmanager или самого скрипта.</li>



<li>Не забывайте про <strong>логирование ошибок отправки</strong> — чтобы потом не было сюрпризов.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>С тех пор, как я настроила <strong>уведомления в Telegram через webhook</strong>, моя тревожность сильно снизилась. Я наконец-то сплю спокойно, зная, что если с VPS что-то случится — мне прилетит пуш в Telegram через <strong>alertmanager webhook</strong> или <strong>grafana telegram alert</strong>. А уж проверить состояние по ссылке — дело пары секунд. Надеюсь, этот гайд поможет и вам организовать надёжную систему алертов и сэкономить время (и нервы).</p>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/kak-otpravlyat-alerty-s-vps-v-telegram-cherez-webhook/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Облачное резервное копирование через Rclone и облака (S3, GDrive)</title>
		<link>https://cloudvps.by/community/oblachnoe-rezervnoe-kopirovanie-cherez-rclone-i-oblaka-s3-gdrive/</link>
					<comments>https://cloudvps.by/community/oblachnoe-rezervnoe-kopirovanie-cherez-rclone-i-oblaka-s3-gdrive/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Tue, 15 Jul 2025 11:21:35 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=4183</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/oblachnoe-rezervnoe-kopirovanie-cherez-rclone-i-oblaka-s3-gdrive/">Облачное резервное копирование через Rclone и облака (S3, GDrive)</a>">%POSTTITLE%</a></p>
<p>Когда ты работаешь с VPS и на нём крутится хоть что-то важное — будь то сайт, база данных, pet-проект или вообще клиентские данные — ты рано или поздно приходишь к осознанию: резервные копии не просто важны, они критичны. И вот я в один момент подумала — «а что, если мой сервер упадёт завтра?» Не дай [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/oblachnoe-rezervnoe-kopirovanie-cherez-rclone-i-oblaka-s3-gdrive/">Облачное резервное копирование через Rclone и облака (S3, GDrive)</a>">%POSTTITLE%</a></p>

<p>Когда ты работаешь с <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> и на нём крутится хоть что-то важное — будь то сайт, база данных, pet-проект или вообще клиентские данные — ты рано или поздно приходишь к осознанию: <strong>резервные копии не просто важны, они критичны</strong>. И вот я в один момент подумала — «а что, если мой сервер упадёт завтра?» Не дай бог, конечно. Но ведь может. И вот тогда я начала разбираться в бэкапах — и пришла к Rclone.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">Почему именно Rclone?</h4>



<p>Потому что он:</p>



<ul class="wp-block-list">
<li>умеет работать почти со всеми облаками (Google Drive, S3, Dropbox, Yandex.Disk, Mega, даже FTP и WebDAV),</li>



<li>консольный, лёгкий, ставится в пару строк,</li>



<li>умеет шифровать файлы на лету и синхронизировать каталоги в одну или обе стороны,</li>



<li>и просто… работает. Без магии и танцев с бубном.</li>
</ul>



<p>Я протестировала много вариантов — и GUI-программы, и rsync со своими скриптами, но именно <strong>rclone sync</strong> в связке с Google Drive и S3 оказался самым надёжным решением. А ещё — с минимальными затратами.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка Rclone на VPS</h2>



<p>В моём случае это Ubuntu 22.04:</p>



<pre class="wp-block-code"><code>curl <a href="https://cloudvps.by/community/docs/glossarij/terminy/https/" data-internallinksmanager029f6b8e52c="221" title="HTTPS (Hyper Text Transfer Protocol Secure)">https</a>://rclone.org/install.sh | sudo bash
</code></pre>



<p>После установки можно проверить версию:</p>



<pre class="wp-block-code"><code>rclone version
</code></pre>



<p>Всё, готово.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Настройка доступа к облаку: Google Drive и S3</h2>



<h4 class="wp-block-heading">Google Drive</h4>



<p>Запускаем интерактивный конфигуратор:</p>



<pre class="wp-block-code"><code>rclone config
</code></pre>



<p>Создаём новый remote, выбираем <code>drive</code>, авторизуемся в браузере (да, даже с сервера это можно сделать через копирование ссылки в локальный браузер), задаём имя (например, <code>gdrive</code>), и всё.</p>



<h4 class="wp-block-heading">S3 (например, Backblaze B2, Amazon S3 или Yandex Object Storage)</h4>



<p>Тоже через <code>rclone config</code>, но выбираем <code>s3</code>, вводим ключ и секрет, регион, endpoint (если используете не Amazon, например, <code>https://storage.yandexcloud.net</code>), и сохраняем.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Синхронизация данных: команды на каждый день</h2>



<p>Обычная синхронизация каталога <code>/var/www</code> с облаком:</p>



<pre class="wp-block-code"><code>rclone sync /var/www gdrive:backups/www --progress
</code></pre>



<p>Если используешь S3:</p>



<pre class="wp-block-code"><code>rclone sync /var/www s3:mybucket/backups/www --progress
</code></pre>



<p>Я всегда добавляю <code>--progress</code> — люблю видеть, что именно сейчас копируется.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Расписание и автоматизация через Cron</h2>



<p>В crontab добавляем задачу, чтобы делать бэкап каждый день в 3 ночи:</p>



<pre class="wp-block-code"><code>0 3 * * * /usr/bin/rclone sync /var/www gdrive:backups/www --log-file=/var/log/rclone.log
</code></pre>



<p>Логи тоже полезны — пару раз мне помогали понять, почему что-то не скопировалось (спойлер: я забыла про <code>chmod</code> и права на файлы).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Пример: резервное копирование баз данных</h2>



<p>Если вы, как и я, используете PostgreSQL или MySQL, нужно сначала сделать дамп:</p>



<pre class="wp-block-code"><code>pg_dump mydb &gt; /tmp/mydb.sql
rclone copy /tmp/mydb.sql gdrive:backups/db
</code></pre>



<p>Аналогично и с <code>mysqldump</code>.</p>



<p>Я храню только 3 последних дампа — остальное очищаю через скрипт, чтобы не переполнить хранилище. Хотя в GDrive можно и разгуляться — 15 ГБ бесплатно.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Шифрование: безопасные бэкапы — спокойная жизнь</h2>



<p>Rclone поддерживает <strong>crypt</strong>. Вот как я настроила:</p>



<ol class="wp-block-list">
<li>Создала новый remote типа <code>crypt</code>, выбрав в качестве базы — <code>gdrive:backups/secure</code></li>



<li>Указала пароль (можно сгенерировать безопасный)</li>



<li>Копирую данные туда:</li>
</ol>



<pre class="wp-block-code"><code>rclone copy /etc/letsencrypt cryptremote:etc/
</code></pre>



<p>Теперь даже если кто-то получит доступ к облаку — ничего не расшифрует без пароля.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что ещё можно сделать с Rclone?</h2>



<ul class="wp-block-list">
<li><strong>Смонтировать облако как диск:</strong></li>
</ul>



<pre class="wp-block-code"><code>rclone mount gdrive: ~/mnt/gdrive
</code></pre>



<ul class="wp-block-list">
<li><strong>Проверить отличия между локальным и облачным:</strong></li>
</ul>



<pre class="wp-block-code"><code>rclone check /var/www gdrive:backups/www
</code></pre>



<ul class="wp-block-list">
<li><strong>Сравнить, сколько места занято:</strong></li>
</ul>



<pre class="wp-block-code"><code>rclone size gdrive:backups
</code></pre>



<ul class="wp-block-list">
<li><strong>Лимит скорости, если боишься перегрузить сеть:</strong></li>
</ul>



<pre class="wp-block-code"><code>rclone sync /var/www gdrive:backups/www --bwlimit 5M
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Пример моего сценария (простой bash-скрипт)</h2>



<pre class="wp-block-code"><code>#!/bin/bash
DATE=$(date +%F)
mkdir -p /tmp/backups
pg_dump mydb &gt; /tmp/backups/mydb-$DATE.sql
tar czf /tmp/backups/etc-$DATE.tar.gz /etc
rclone copy /tmp/backups gdrive:backups/$(hostname)/$DATE --log-file=/var/log/rclone_backup.log
rm -rf /tmp/backups
</code></pre>



<p>И этот скрипт крутится в cron&#8217;е. Мне не нужно думать — просто проверяю раз в неделю лог, что всё прошло.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>Rclone — это та самая палочка-выручалочка</strong>, которая даёт тебе спокойствие: данные сохранены, резервные копии есть, доступ есть откуда угодно, и всё это бесплатно (если использовать Google Drive или Yandex Disk).</p>



<p>Уже было несколько случаев, когда что-то на VPS ломалось — и благодаря бэкапу через Rclone я восстанавливала всё за полчаса. Лучше один раз настроить, чем потом жалеть.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Отлично! Вот продолжение — <strong>таблица сравнения облачных хранилищ для Rclone</strong> + <strong>мини-кейсы</strong> для большей полезности и &#8220;человечности&#8221; статьи:</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Таблица: с какими облаками лучше всего использовать Rclone</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Облако</th><th>Бесплатный объём</th><th>Поддержка Rclone</th><th>Подходит для бэкапов?</th><th>Скорость доступа</th><th>Комментарий</th></tr></thead><tbody><tr><td>Google Drive</td><td>15 ГБ</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Полная</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Отлично</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f53c.png" alt="🔼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Быстрая</td><td>Идеальный вариант для начала</td></tr><tr><td>Dropbox</td><td>2 ГБ</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Частичная</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Только малые файлы</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f53d.png" alt="🔽" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Средняя</td><td>Урезанная функциональность</td></tr><tr><td>Yandex Disk</td><td>10 ГБ</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Через WebDAV</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Нормально</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f53c.png" alt="🔼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Хорошая</td><td>Нужно настроить вручную</td></tr><tr><td>Amazon S3</td><td>Платно</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Полная</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Надёжно</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Высокая</td><td>Лучше для бизнеса и крупных проектов</td></tr><tr><td>Backblaze B2</td><td>10 ГБ</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Полная</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Отлично</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f53c.png" alt="🔼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Умеренная</td><td>Очень выгодный тариф за терабайты</td></tr><tr><td>Mega.nz</td><td>20 ГБ</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Частичная</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Медленно</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f53d.png" alt="🔽" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Низкая</td><td>Есть ограничения по <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Кейсы из моей практики</h2>



<ul class="wp-block-list">
<li><strong>Google Drive для сайтов</strong>: использую для регулярных бэкапов сайтов на WordPress. Синхронизация — раз в день, отдельно выгружаю папку <code>/var/www</code> и базу.</li>



<li><strong>S3 (Yandex Cloud) для клиентских данных</strong>: на проектах, где есть чувствительная информация, использую шифрование и заливаю на S3. Там можно гибко настраивать права доступа и ретеншн.</li>



<li><strong>Backblaze — для архива</strong>: туда складываю всё, что не хочется потерять: старые проекты, фотографии, даже логи. 1 ТБ за пару баксов — отличная альтернатива внешнему жёсткому диску.</li>



<li><strong>Yandex Disk для быстрых драфтов</strong>: когда делаю тестовые сервера или прототипы, удобно сохранять дампы туда — не нужно платить, и всё под рукой.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Восстановление VPS из резервной копии с помощью Rclone: пошаговое руководство</h2>



<p>Когда-то давно, ещё в начале моей работы с VPS, я думала, что резервные копии — это как страховка: вроде нужны, но вряд ли пригодятся. А потом однажды я обновила ядро, не сделала <a href="https://cloudvps.by/community/docs/glossarij/terminy/snapshot/" data-internallinksmanager029f6b8e52c="229" title="Snapshot (Мгновенный снимок)">снапшот</a> и… осталась без важной клиентской базы. Именно тогда я впервые на практике оценила важность не только <strong>резервного копирования</strong>, но и умения быстро восстановить всё, как было.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что нужно, чтобы восстановиться?</h2>



<p>Прежде всего, у вас должен быть:</p>



<ul class="wp-block-list">
<li>Доступ к VPS (даже если новый, “чистый” после сбоя)</li>



<li>Установленный <code>rclone</code> (настраивается по инструкции из предыдущей статьи)</li>



<li>Доступ к облаку (S3, GDrive и т. п.), где лежит ваша резервная копия</li>



<li>Знание структуры резервной директории (например, <code>rclone remote:backups/myserver-2025-07-01/</code>)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 1: Проверяем, что <code>rclone</code> установлен</h3>



<p>Если вы только что подняли VPS после сбоя — начнём с установки:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt install rclone -y
</code></pre>



<p>И сразу подключаем нужное облако (если ещё не подключали):</p>



<pre class="wp-block-code"><code>rclone config
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 2: Просматриваем содержимое архива</h3>



<p>Прежде чем что-либо восстанавливать, полезно убедиться, что резерв есть и он целый:</p>



<pre class="wp-block-code"><code>rclone ls remote:backups/myserver-2025-07-01/
</code></pre>



<p>Если видите знакомые файлы и директории — всё хорошо. А если не видите — проверьте дату или подключение к облаку.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 3: Восстанавливаем файлы</h3>



<p>Теперь самое главное — перенести всё обратно на VPS. Лучше начинать с базовых конфигураций, а уже потом переносить большие массивы данных.</p>



<p>Например, восстановим <code>/etc/nginx/</code>:</p>



<pre class="wp-block-code"><code>sudo rclone sync remote:backups/myserver-2025-07-01/etc/nginx/ /etc/nginx/
</code></pre>



<p>Или базу данных:</p>



<pre class="wp-block-code"><code>sudo rclone copy remote:backups/myserver-2025-07-01/var/lib/mysql/ /var/lib/mysql/ --copy-links
</code></pre>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>Не используйте <code>sync</code>, если не уверены — он может удалить несоответствующие файлы на стороне VPS. Лучше <code>copy</code> для начала.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Шаг 4: Перезапуск сервисов</h3>



<p>После восстановления не забудьте перезапустить нужные сервисы:</p>



<pre class="wp-block-code"><code>sudo systemctl restart nginx
sudo systemctl restart mysql
</code></pre>



<p>Проверьте работу сайта или приложения. Если всё работает — поздравляю, вы только что спасли свой проект!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Практический совет</h2>



<p>Я храню резервные копии в формате <code>rsync + tar.gz</code> и выгружаю их через <code>rclone</code> в GDrive. Вот мой скрипт восстановления для конфигов Nginx:</p>



<pre class="wp-block-code"><code>#!/bin/bash
rclone copy gdrive:backups/nginx.tar.gz /tmp/
cd /etc/nginx &amp;&amp; sudo tar -xzf /tmp/nginx.tar.gz
sudo systemctl restart nginx
</code></pre>



<p>И такие скрипты у меня для всего: баз данных, <a href="https://cloudvps.by/community/docs/glossarij/terminy/docker/" data-internallinksmanager029f6b8e52c="258" title="Docker">docker</a>, сайтов и даже crontab.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ошибки, которые я допускала</h2>



<ul class="wp-block-list">
<li>Восстанавливала в запущенную систему — и всё конфликтовало</li>



<li>Удаляла старые логи и перезаписывала их, забывая про права доступа</li>



<li>Один раз восстановила <code>.bashrc</code> от другого сервера — и получила неожиданный shell</li>
</ul>



<p>Так что — <strong>восстанавливайте аккуратно</strong>, тестируйте локально, если есть возможность, и не спешите.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/oblachnoe-rezervnoe-kopirovanie-cherez-rclone-i-oblaka-s3-gdrive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка watchdog для перезапуска сервисов на VPS</title>
		<link>https://cloudvps.by/community/nastrojka-watchdog-dlya-perezapuska-servisov-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-watchdog-dlya-perezapuska-servisov-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Tue, 17 Jun 2025 00:33:35 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=3887</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-watchdog-dlya-perezapuska-servisov-na-vps/">Настройка watchdog для перезапуска сервисов на VPS</a>">%POSTTITLE%</a></p>
<p>Однажды у меня завис nginx на VPS в момент, когда я уехала на два дня. Почту с алертом я не прочитала, а сайт лежал. С тех пор у меня на сервере всегда включён watchdog — тот самый &#8220;сторожевой таймер&#8221;, который не даст сервису молча упасть. В этой статье расскажу, как я настроила watchdog на своём [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-watchdog-dlya-perezapuska-servisov-na-vps/">Настройка watchdog для перезапуска сервисов на VPS</a>">%POSTTITLE%</a></p>

<p>Однажды у меня завис nginx на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a> в момент, когда я уехала на два дня. Почту с алертом я не прочитала, а сайт лежал. С тех пор у меня на сервере всегда включён <strong>watchdog</strong> — тот самый &#8220;сторожевой таймер&#8221;, который не даст сервису молча упасть. В этой статье расскажу, как я настроила watchdog на своём VPS, чтобы автоматически перезапускать важные сервисы вроде nginx, MySQL, или любого другого демона.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое watchdog?</h2>



<p><strong>Watchdog</strong> — это системный инструмент, который следит за состоянием системы или процессов. Если они не отвечают, он может перезапустить конкретный сервис или даже перезагрузить всю машину. На уровне ядра работает <strong>watchdog timer</strong>, который отсчитывает время: если за определённый период не пришёл «сигнал жизни», он сработает.</p>



<p>Используется для:</p>



<ul class="wp-block-list">
<li>мониторинга состояния сервисов,</li>



<li>автоматического перезапуска зависших процессов,</li>



<li>предотвращения полной заморозки сервера,</li>



<li>поддержки критически важных приложений.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Установка watchdog в Linux</h2>



<p>На большинстве VPS (будь то Ubuntu, Debian или CentOS) установка происходит через пакетный менеджер.</p>



<p><strong>Для Ubuntu/Debian:</strong></p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install watchdog
</code></pre>



<p><strong>Для CentOS/AlmaLinux/Rocky:</strong></p>



<pre class="wp-block-code"><code>sudo yum install watchdog
</code></pre>



<p>После установки не забудьте включить и добавить в автозагрузку:</p>



<pre class="wp-block-code"><code>sudo systemctl enable watchdog
sudo systemctl start watchdog
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Конфигурация watchdog</h2>



<p>Файл конфигурации обычно лежит здесь: <code>/etc/watchdog.conf</code></p>



<p>Типичный пример минимальной конфигурации:</p>



<pre class="wp-block-code"><code>watchdog-device = /dev/watchdog
max-load-1 = 24
interval = 10
realtime = yes
priority = 1
file = /tmp/testfile
change = 1407
</code></pre>



<p>Что тут важно:</p>



<ul class="wp-block-list">
<li><code>watchdog-device</code> — устройство, которое используется для мониторинга.</li>



<li><code>max-load-1</code> — максимальная загрузка системы (load average), при превышении которой будет инициирован рестарт.</li>



<li><code>file</code> и <code>change</code> — проверка на изменение файла (например, лог-файла), если не изменяется — считаем, что сервис завис.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Перезапуск конкретного сервиса</h2>



<p>Вместо перезагрузки всей системы можно настроить watchdog так, чтобы он перезапускал конкретный сервис. Для этого лучше использовать скрипты или встроенный systemd + cron.</p>



<p><strong>Пример проверки и перезапуска nginx:</strong><br>Добавьте в crontab:</p>



<pre class="wp-block-code"><code>*/2 * * * * systemctl is-active nginx || systemctl restart nginx
</code></pre>



<p>Но можно и через watchdog использовать пользовательский скрипт. Для этого добавьте в <code>/etc/watchdog.conf</code>:</p>



<pre class="wp-block-code"><code>test-binary = /usr/local/bin/check-nginx.sh
</code></pre>



<p>А в <code>check-nginx.sh</code>:</p>



<pre class="wp-block-code"><code>#!/bin/bash
if ! systemctl is-active --quiet nginx; then
    systemctl restart nginx
fi
</code></pre>



<p>Не забудьте:</p>



<pre class="wp-block-code"><code>chmod +x /usr/local/bin/check-nginx.sh
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Продвинутая проверка: ping, tcp, memory</h2>



<p>В конфиге можно использовать и другие параметры:</p>



<pre class="wp-block-code"><code><a href="https://cloudvps.by/community/docs/glossarij/terminy/ping/" data-internallinksmanager029f6b8e52c="326" title="Ping">ping</a> = 8.8.8.8
ping-count = 2
<a href="https://cloudvps.by/community/docs/glossarij/terminy/tcp/" data-internallinksmanager029f6b8e52c="222" title="TCP (Transmission Control Protocol)">tcp</a> = 127.0.0.1:80
memory = 2048
</code></pre>



<ul class="wp-block-list">
<li><code>ping</code> — если сервер не может достучаться до внешнего <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>, считается, что есть проблемы с сетью.</li>



<li><code>tcp</code> — проверка доступности порта (например, HTTP).</li>



<li><code>memory</code> — если свободной памяти меньше указанной, сервер будет перезагружен.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что важно помнить</h2>



<ul class="wp-block-list">
<li>Watchdog — мощный инструмент. Если его неправильно настроить, можно случайно устроить перезагрузки по кругу.</li>



<li>Всегда тестируйте конфигурацию в изолированной среде.</li>



<li>Следите за логами: <code>journalctl -u watchdog</code> и <code>/var/log/syslog</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Получается, что&#8230;</h2>



<p>После настройки watchdog я наконец-то перестала бояться, что сервис упадёт в самый неподходящий момент. Особенно если уехать куда-нибудь без интернета. Этот инструмент — отличный помощник для любого администратора VPS, который хочет автоматизировать восстановление и уменьшить простои. Обязательно попробуйте — он лёгкий, надёжный и незаменимый.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-watchdog-dlya-perezapuska-servisov-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка CDN (Cloudflare, QUIC.cloud) на VPS: ускоряем сайты и снижаем нагрузку</title>
		<link>https://cloudvps.by/community/nastrojka-cdn-cloudflare-quic-cloud-na-vps/</link>
					<comments>https://cloudvps.by/community/nastrojka-cdn-cloudflare-quic-cloud-na-vps/#respond</comments>
		
		<dc:creator><![CDATA[Марина Кольцова]]></dc:creator>
		<pubDate>Mon, 09 Jun 2025 13:29:21 +0000</pubDate>
				<category><![CDATA[Автоматизация]]></category>
		<guid isPermaLink="false">https://cloudvps.by/community/?p=3859</guid>

					<description><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-cdn-cloudflare-quic-cloud-na-vps/">Настройка CDN (Cloudflare, QUIC.cloud) на VPS: ускоряем сайты и снижаем нагрузку</a>">%POSTTITLE%</a></p>
<p>Если вы когда-нибудь ловили себя на мысли: &#8220;Почему мой сайт тормозит, хотя хостинг мощный и настройки вроде бы нормальные?&#8221;, — возможно, пришло время разобраться с CDN. Сегодня расскажу, как я настраивала Content Delivery Network на VPS: сравню Cloudflare и QUIC.cloud, покажу, как подключить, и поделюсь, когда что лучше. Что такое CDN и зачем он нужен [&#8230;]</p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></description>
										<content:encoded><![CDATA[<p>Читайте эту новость на нашем сайте: <a href="<a rel="nofollow" href="https://cloudvps.by/community/nastrojka-cdn-cloudflare-quic-cloud-na-vps/">Настройка CDN (Cloudflare, QUIC.cloud) на VPS: ускоряем сайты и снижаем нагрузку</a>">%POSTTITLE%</a></p>

<p>Если вы когда-нибудь ловили себя на мысли: &#8220;Почему мой сайт тормозит, хотя хостинг мощный и настройки вроде бы нормальные?&#8221;, — возможно, пришло время разобраться с <a href="https://cloudvps.by/community/docs/glossarij/terminy/cdn/" data-internallinksmanager029f6b8e52c="212" title="CDN (Content Delivery Network)">CDN</a>. Сегодня расскажу, как я настраивала Content Delivery Network на <a href="https://cloudvps.by/servers/vps/vps_server.php" data-internallinksmanager029f6b8e52c="4" title="VPS хостинг">VPS</a>: сравню <a href="https://cloudvps.by/community/docs/glossarij/terminy/cloudflare/" data-internallinksmanager029f6b8e52c="320" title="Cloudflare">Cloudflare</a> и QUIC.cloud, покажу, как подключить, и поделюсь, когда что лучше.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое CDN и зачем он нужен</h2>



<p>CDN (Content Delivery Network) — это сеть серверов, которые кэшируют ваш контент и раздают его пользователям из ближайшей к ним геолокации. Вместо того чтобы посетитель из Новосибирска тянул данные с VPS в Нидерландах, он получает их с ближайшего узла CDN. Результат — меньше задержек, быстрее загрузка, ниже нагрузка на сервер.</p>



<p>Если говорить по-простому, CDN — это как дубликаты вашего сайта, разложенные по разным уголкам мира.</p>



<p>Плюсы:</p>



<ul class="wp-block-list">
<li>Быстрая загрузка для пользователей по всему миру</li>



<li>Защита от DDoS (особенно у Cloudflare)</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/caching/" data-internallinksmanager029f6b8e52c="272" title="Caching (Кэширование)">Кэширование</a> статики и экономия трафика</li>



<li><a href="https://cloudvps.by/community/docs/glossarij/terminy/ssl/" data-internallinksmanager029f6b8e52c="219" title="SSL (Secure Sockets Layer)">SSL</a> бесплатно (у Cloudflare)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Cloudflare: настройка и особенности</h2>



<p>Cloudflare — один из самых популярных CDN-сервисов. Он работает как <a href="https://cloudvps.by/community/docs/glossarij/terminy/reverse-proxy/" data-internallinksmanager029f6b8e52c="248" title="Reverse Proxy (Обратный прокси)">обратный прокси</a>: вы направляете <a href="https://cloudvps.by/community/docs/glossarij/terminy/dns/" data-internallinksmanager029f6b8e52c="199" title="DNS (Domain Name System)">DNS</a>-записи на их <a href="https://cloudvps.by/community/docs/glossarij/terminy/ip-adres/" data-internallinksmanager029f6b8e52c="204" title="IP-адрес (Internet Protocol)">IP</a>, и они фильтруют/оптимизируют трафик.</p>



<h5 class="wp-block-heading">Как настроить Cloudflare на VPS:</h5>



<ol class="wp-block-list">
<li>Зарегистрируйтесь на <a href="https://cloudflare.com/" target="_blank" rel="noopener">cloudflare.com</a> и добавьте свой сайт.</li>



<li>Cloudflare автоматически подтянет текущие DNS-записи. Проверьте их и подтвердите.</li>



<li>Измените NS-записи у своего домена на те, что предложит Cloudflare.</li>



<li>В панели Cloudflare:
<ul class="wp-block-list">
<li>Включите &#8220;Proxy&#8221; (оранжевые облачка) для нужных поддоменов.</li>



<li>Перейдите в раздел SSL/<a href="https://cloudvps.by/community/docs/glossarij/terminy/tls/" data-internallinksmanager029f6b8e52c="220" title="TLS (Transport Layer Security)">TLS</a> и выберите режим &#8220;Full&#8221; или &#8220;Full (strict)&#8221;.</li>
</ul>
</li>



<li>Настройте правила кэширования (Caching > Configuration).</li>
</ol>



<h5 class="wp-block-heading">Что даёт:</h5>



<ul class="wp-block-list">
<li>Автоматическая выдача SSL-сертификата</li>



<li>Защита по <a href="https://cloudvps.by/community/docs/glossarij/terminy/waf/" data-internallinksmanager029f6b8e52c="305" title="WAF (Web Application Firewall)">WAF</a> и rate-limiting</li>



<li>Возможность Page Rules и редиректов</li>
</ul>



<p>Особенно ценен Cloudflare Clickflow — инструмент для анализа поведения пользователей (в платных тарифах).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">QUIC.cloud: альтернатива для WordPress и LiteSpeed</h2>



<p>QUIC.cloud — CDN-платформа, созданная под LiteSpeed-серверы. Если вы используете OpenLiteSpeed на своём VPS, это чуть ли не идеальный вариант.</p>



<h5 class="wp-block-heading">В чём отличие от Cloudflare:</h5>



<ul class="wp-block-list">
<li>Кэширует не только статику, но и HTML-страницы (динамику)</li>



<li>Глубже интегрирован с LiteSpeed Cache</li>



<li>Поддерживает HTTP/3 через протокол QUIC</li>
</ul>



<h5 class="wp-block-heading">Как подключить:</h5>



<ol class="wp-block-list">
<li>Установите LiteSpeed или OpenLiteSpeed на VPS.</li>



<li>Поставьте и настройте плагин LiteSpeed Cache (LSCWP).</li>



<li>Зарегистрируйтесь на <a href="https://quic.cloud/" target="_blank" rel="noopener">quic.cloud</a> и свяжите сайт через <a href="https://cloudvps.by/community/docs/glossarij/terminy/api/" data-internallinksmanager029f6b8e52c="226" title="API (Application Programming Interface)">API</a>.</li>



<li>Измените DNS у домена (аналогично Cloudflare).</li>
</ol>



<h5 class="wp-block-heading">Минусы:</h5>



<ul class="wp-block-list">
<li>Не такой гибкий как Cloudflare</li>



<li>Без полноценного WAF, но есть базовая фильтрация</li>
</ul>



<p>Если у вас WordPress + OpenLiteSpeed, то QUIC.cloud даёт заметное ускорение, особенно с включённым HTML-кэшем.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Сравнение Cloudflare и QUIC.cloud</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Функция</th><th>Cloudflare</th><th>QUIC.cloud</th></tr></thead><tbody><tr><td>Кэш HTML</td><td>Нет (на бесплатном)</td><td>Да</td></tr><tr><td>HTTP/3</td><td>Да</td><td>Да</td></tr><tr><td>DDoS защита</td><td>Да</td><td>Базовая</td></tr><tr><td>SSL</td><td>Бесплатно</td><td>Бесплатно</td></tr><tr><td>Кэш API-ответов</td><td>Да (через правила)</td><td>Ограниченно</td></tr><tr><td>Интеграция с WordPress</td><td>Есть</td><td>Глубокая</td></tr><tr><td>Поддержка WAF</td><td>Да (на платных)</td><td>Нет</td></tr><tr><td>Протокол QUIC</td><td>Частично</td><td>Полноценно</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Практическая часть: как я подключала оба CDN</h2>



<p>На одном проекте у меня стоял VPS на Ubuntu 22.04 + Nginx. Один сайт работал на WordPress + OpenLiteSpeed, другой — обычный HTML + PHP. Я решила сравнить:</p>



<ul class="wp-block-list">
<li><strong>Для WordPress</strong>: поставила OpenLiteSpeed, LSCWP и QUIC.cloud. Получила шикарную производительность, особенно при большом трафике.</li>



<li><strong>Для HTML/PHP</strong>: включила Cloudflare. Всё стало стабильнее, меньше запросов к VPS, и сайт стал грузиться быстрее на мобильных в Азии.</li>
</ul>



<p>Cloudflare оказался универсальнее, а QUIC — узкоспециализирован, но эффективный.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Дополнительные советы</h2>



<ol class="wp-block-list">
<li><strong>Используйте CDN вместе с gzip/brotli</strong> на Nginx — это даст прирост в скорости.</li>



<li><strong>Ставьте fail2ban</strong> или аналоги — CDN не заменяет защиту от локальных атак.</li>



<li><strong>Мониторьте <a href="https://cloudvps.by/community/docs/glossarij/terminy/uptime/" data-internallinksmanager029f6b8e52c="232" title="Uptime (Аптайм)">Uptime</a> и загрузку VPS</strong>: если всё в порядке, CDN действительно снимает нагрузку.</li>



<li><strong>Проверяйте Cloudflare <a href="https://cloudvps.by/community/docs/glossarij/terminy/ips/" data-internallinksmanager029f6b8e52c="310" title="IPS (Intrusion Prevention System)">IPs</a></strong>: они часто меняются. Добавьте весь пул в <code>allow</code> на вашем <a href="https://cloudvps.by/community/docs/glossarij/terminy/firewall/" data-internallinksmanager029f6b8e52c="198" title="Firewall (Брандмауэр)">firewall</a>.</li>



<li><strong>Не злоупотребляйте кэшем HTML</strong>, особенно если сайт динамический — будьте аккуратны с формами и авторизацией.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Подключение CDN — <a href="https://cloudvps.by/community/docs/glossarij/terminy/downtime/" data-internallinksmanager029f6b8e52c="233" title="Downtime (Время простоя)">простой</a> и мощный способ ускорить работу сайта, уменьшить нагрузку на VPS и повысить стабильность. Cloudflare — гибкий и надёжный, особенно для обычных сайтов. QUIC.cloud — маст-хэв для WordPress на LiteSpeed. Оба легко подключаются, а выгода заметна сразу. Главное — подобрать под свой стек.</p>



<p></p>
<p>Источник: <a href="<a rel="nofollow" href="https://cloudvps.by/community">Community</a>">%BLOGTITLE%</a>. Все права защищены.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cloudvps.by/community/nastrojka-cdn-cloudflare-quic-cloud-na-vps/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
