diff --git a/README.md b/README.md
index 8557031..dec9a65 100644
--- a/README.md
+++ b/README.md
@@ -1,119 +1,154 @@
-# ============================================================
-# bitrix-vps-infra — native Bitrix stack on Ubuntu 24.04 VPS
-# nginx (static+TLS) → php-fpm → Percona MySQL (unix socket)
-# + memcached x2 + fail2ban + CrowdSec + ufw + backups
-#
-#docker analogue of paskal/bitrix.infra, without containers.
-# ============================================================
+
-## Services
+# bitrix-vps-infra
-| Service | What | Where |
-|----------------|-----------------------------------------------|-------|
-| nginx | front, static files, urlrewrite, rate-limit zones | `/etc/nginx/` |
-| php8.4-fpm | Bitrix runtime, pool `bitrix` | `/etc/php/8.4/fpm/pool.d/bitrix.conf` |
-| Percona MySQL | socket-only (`localhost`), buffer pool 4G | `/etc/mysql/conf.d/99-bitrix.cnf` |
-| memcached x2 | cache `127.0.0.1:11211`, sessions `11212` | systemd units `memcached-cache/-sessions` |
-| fail2ban | sshd + nginx-http-auth jails | `/etc/fail2ban/jail.local` |
-| CrowdSec | parses nginx combined logs + sshd journal | `/etc/crowdsec/acquis.yaml` |
-| cron | Bitrix agents CLI, exchange, nightly backup | `/etc/cron.d/bitrix` |
-| ufw | OpenSSH/80/443 | `/etc/ufw/` |
+**Нативная инфраструктура для Bitrix на VPS: один скрипт, ноль Docker**
-## Quickstart (fresh Ubuntu 24.04)
+nginx · php-fpm · Percona MySQL через сокет · memcached ×2 · fail2ban · CrowdSec
+
+[Ubuntu 24.04](https://releases.ubuntu.com/noble/) · [PHP 8.4-FPM](https://rpms.remirepo.net/) · [Percona 8.0](https://www.percona.com/software/mysql-database/percona-server)
+
+
+
+---
+
+## Что это
+
+Полный набор конфигов и идемпотентный `install.sh`, который превращает свежую Ubuntu 24.04
+в рабочую площадку под 1С-Битрикс: веб-сервер, база только по unix-сокету, два memcached,
+агенты в cron, бэкапы по расписанию, защита на fail2ban и CrowdSec.
+
+Конфигурация поднята на реальном магазине и закрывает типовые проблемы классического
+Bitrix VM: prefork-Apache держит пул воркеров, которые съедают всю память к обеду;
+MySQL слушает TCP и ловит сканеры портянкой aborted connects. Здесь воркеры создаются
+под нагрузку и умирают сами (`pm.max_requests`), а база недоступна по сети физически.
+
+## Архитектура
+
+```mermaid
+flowchart TB
+ U["Браузер"] -->|"HTTPS :443"| NG
+
+ subgraph VPS["Ubuntu 24.04, без Docker"]
+ NG["nginx
TLS · статика · urlrewrite
limit_req zones"]
+
+ NG -->|"fastcgi, unix-сокет
/run/php/bitrix-fpm.sock"| PHP["php-fpm pool 'bitrix'
dynamic, max 30, max_requests 500"]
+ PHP -->|"localhost = сокет"| DB[("Percona MySQL 8.0
bind 127.0.0.1 only")]
+ PHP --> MC1[("memcached cache
127.0.0.1:11211")]
+ PHP --> MC2[("memcached sessions
127.0.0.1:11212")]
+
+ CRON["cron (CLI php)
agents · exchange · backup"]
+ CRON --> PHP
+ CRON --> DB
+ end
+
+ LOGS["nginx access.log (combined)"] -.->|parse| CS["CrowdSec + firewall-bouncer"]
+ SSHD["sshd journal"] -.-> F2B["fail2ban"]
+ CRON --> BAK["backups:
mysqldump + code tarball
retention 14 дней"]
+ CS -.->|"блокирует"| U
+```
+
+Ключевые отличия от «Bitrix VM по умолчанию»:
+
+| Проблема VM | Решение здесь |
+|---|---|
+| 60 постоянных воркеров mod_php съедают RAM | fpm dynamic: создаются под трафик, верхняя граница 30 |
+| MySQL на TCP, Aborted_connects десятками тысяч | сеть отключена, доступ только локальный сокет |
+| Сессии в файлах на одном диске с сайтом | отдельный memcached-инстанс |
+| Агенты через веб-хиты | CLI cron раз в минуту |
+| Ручные бэкапы | nightly mysqldump + tarball, авторотация |
+
+## Быстрый старт
```bash
apt update && apt install -y git
-git clone /opt/bitrix-vps-infra && cd /opt/bitrix-vps-infra
+git clone https://git.hlam.su/free/bitrix-vps-infra.git /opt/bitrix-vps-infra
+cd /opt/bitrix-vps-infra
-# 1) edit variables at top of install.sh (DOMAIN first!)
-nano scripts/../install.sh # DOMAIN=..., FPM_MAX_CHILDREN=30, TZ
+# обязательный минимум перед запуском:
+nano install.sh # DOMAIN=..., при желании TZ, FPM_MAX_CHILDREN, DB_PASS
sudo ./install.sh
-# creds printed and saved to /root/bitrix-install-creds.txt (chmod 600)
+# креды печатаются и сохраняются (chmod 600):
cat /root/bitrix-install-creds.txt
```
-## Migrate site from old server
+Скрипт ставит пакеты (ondrej PPA → php8.4-fpm, Percona repo → mysql-server, memcached,
+fail2ban, CrowdSec + firewall-bouncer, certbot), раскладывает все конфиги из `config/`,
+создаёт БД и пользователя, настраивает ufw (22/80/443), swap 4G и swappiness=10.
+Повторный запуск безопасен: конфиги перезаписываются, ничего не удаляется.
+
+## Миграция сайта со старого сервера
```bash
-# on OLD server: dump db
+# на старом сервере: дамп базы
mysqldump --single-transaction --routines --triggers sitemanager | gzip > sitemanager.sql.gz
-# copy content
+# перенос содержимого
rsync -avz /home/bitrix/www/bitrix newvps:/home/bitrix/www/
rsync -avz /home/bitrix/www/{local,upload} newvps:/home/bitrix/www/
-# import on NEW server
+# импорт на новом
gunzip < sitemanager.sql.gz | mysql sitemanager
./scripts/fix-rights.sh /home/bitrix/www
-# bitrix app-configs: take examples, insert DB pass from creds file
-cp config/bitrix-app/dbconn.php.example /home/bitrix/www/bitrix/php_interface/dbconn.php
+# конфиги приложения из примеров репы
+cp config/bitrix-app/dbconn.php.example /home/bitrix/www/bitrix/php_interface/dbconn.php
cp config/bitrix-app/settings_extra.php.example /home/bitrix/www/bitrix/.settings_extra.php
-# then edit .settings.php: host=localhost, add 'session' block from settings_extra comment
+# пароль БД взять из creds, 'session'-блок перенести в .settings.php (см. комментарий в примере)
```
-After that:
+TLS одним ходом:
```bash
apt-get install -y certbot python3-certbot-nginx
DOMAIN=$(grep '^DOMAIN=' /root/bitrix-install-creds.txt | cut -d= -f2)
-certbot --nginx -d "$DOMAIN" -d "www.$DOMAIN" # upgrades vhost to TLS + redirect
+certbot --nginx -d "$DOMAIN" -d "www.$DOMAIN"
systemctl reload nginx
```
-## Verify checklist
+certbot допишет 443-блок и редирект прямо в существующий vhost.
+
+## Проверка после установки
```bash
-curl -I http://DOMAIN # 200 or 301
-mysqladmin status # socket alive, TCP not listening:
-ss -tlnp | grep -E '3306|33060' # expect EMPTY output
-free -m # swap ~0 used, available >3G
-php-fpm8.4 -tt # pool syntax ok
-tail -f /var/log/php/bitrix-slow.log # requests >5s land here
-fail2ban-client status sshd # jail active
-cscli metrics # crowdsec parsing access.log
-/usr/bin/php -d memory_limit=1024M -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
- # agents run manually without error
+curl -I http://$DOMAIN # ожидаем 200 или 301
+ss -tlnp | grep -E ':3306|:33060' # пусто: TCP у базы выключен
+free -m # swap почти пуст, available > 3G
+fail2ban-client status sshd # jail активен
+cscli metrics # crowdsec читает access.log
+/usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
+ # агенты вручную, без ошибок
+tail -f /var/log/php/bitrix-slow.log # всё, что дольше 5 секунд
```
-Site smoke: main page → catalog section → cart → admin login. Check exchange via admin
-or manual flock command from `/etc/cron.d/bitrix`.
+Дымовой тест сайта: главная → каталог → корзина → вход в админку → обмен с 1С.
-## Tuning knobs
+## Ручки тюнинга
-| Knob | File | Default | When change |
-|------|------|---------|-------------|
-| pm.max_children | fpm pool | 30 | OOM/slow under peak → raise if RAM free; 503 → lower concurrency |
-| innodb_buffer_pool_size | mysql cnf | 4G | sized for 12GB box |
-| memcached cache MB | unit file | 1024 | raise on cache churn |
-| limit_req rate | nginx.conf zone | 10 r/s | enforce per-location when needed |
-| backup retention | backup.sh | 14 days | disk budget |
+| Ручка | Где | По умолчанию | Когда крутить |
+|---|---|---|---|
+| `FPM_MAX_CHILDREN` | install.sh / pool | 30 | 503 под пиком: свободной RAM мало, снижайте; «висит» и есть память: повышайте |
+| `innodb_buffer_pool_size` | mysql cnf | 4G | рассчитано на бокс ~12 GB RAM |
+| memcached cache MB | systemd unit | 1024 | частая инвалидация кэша |
+| rate limit | nginx.conf zone | 10 r/s | включать пер-локацией по необходимости |
+| retention бэкапов | backup.sh | 14 дней | бюджет диска |
-## Restore from backup
+## Восстановление из бэкапа
```bash
gunzip < /var/backups/bitrix/db/_sitemanager.sql.gz | mysql sitemanager
-cd /home/bitrix/www
-tar xzf /var/backups/bitrix/code/_site.tar.gz --strip-components=0 # replaces webroot files except upload/
+cd /home/bitrix/www && tar xzf /var/backups/bitrix/code/_site.tar.gz
./scripts/fix-rights.sh
```
-Upload directory is NOT in backups by design (bulky). Sync it separately
-(e.g. weekly `rsync -a /home/bitrix/www/upload /var/backups/bitrix/upload`) if size permits.
+Каталог `upload/` в бэкапы не входит намеренно: он громоздкий. При нехватке места
+на проде синхронизируйте его отдельно раз в неделю.
-## Notes / trade-offs taken deliberately ("no overskill")
+## Осознанные упрощения
-* No HTTP/3/brotli modules — gzip covers 95% benefit; upgrade path documented below.
-* No composite-site nginx layer yet — enable after basic migration proved stable
- (add `$bx_composite_file` map + try_files per paskal/bitrix.infra pattern).
-* No Zabbix/Sentry — CrowdSec metrics + slowlog + system journal are the floor;
- consider netdata later if growth demands.
-* CrowdSec firewall-bouncer replaces host iptables scripting entirely.
-
-### Optional upgrades later
-```bash
-apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static # brotli
-add brotli line into nginx.conf http{} block after gzips.
-```
+Взято «как в лучших традициях», но без overengineering: ни HTTP/3, ни brotli (gzip
+покрывает основной выигрыш), ни Zabbix/Sentry, ни composite-слой в nginx. Расширять
+просто: brotli ставится двумя пакетами, composite-схема берётся из paskal/bitrix.infra
+как образец. Идеология та же, только нативные пакеты вместо контейнеров.