Автор: Chibilyaev Alexandr | Company: AAChibilyaev LTD | Email: [email protected]
Высокопроизводительный CDN сервер для Битрикс с автоматической конвертацией изображений в WebP формат.
- Сервер 1: Битрикс с оригинальными файлами в
/upload/ - Сервер 2: CDN который через SSHFS читает оригиналы и создает WebP версии в локальном кеше
Снижает нагрузку на основной сервер на 95% и ускоряет загрузку изображений в 3 раза.
- 🎯 Экономия 40-55% размера изображений
- ⚡ Ускорение загрузки страниц в 2-3 раза
- 🔄 Автоматическая конвертация в WebP на лету
- 📊 Полный мониторинг через Grafana
- 🛡️ Отказоустойчивость с auto-recovery
- 🐳 Docker-ready решение
# 1. Клонирование и настройка
git clone https://github.com/AAChibilyaev/bitrix-cdn.git
cd bitrix-cdn
# 2. Конфигурация окружения
cp .env.example .env
nano .env # Настройте параметры вашего сервера
# 3. Генерация SSH ключей и запуск
./docker-manage.sh setup
docker-compose up -d
# 4. Добавьте публичный ключ на Битрикс сервер:
cat docker/ssh/bitrix_mount.pub
# >> Скопируйте в ~/.ssh/authorized_keys на сервере Битрикс
# 5. Запуск системы (выберите вариант):
docker-compose up -d # 🏭 Production (полный стек)
docker-compose -f docker-compose.dev.yml up -d # 🛠️ Development (упрощенный)
docker-compose -f docker-compose.local.yml up -d # 🏠 Local (тестирование)
# 6. Проверка статуса
./docker-manage.sh statusgraph TB
subgraph "🖥️ СЕРВЕР 1 - БИТРИКС"
Upload["/var/www/bitrix/upload/<br/>📁 Оригиналы изображений"]
PHP["🔧 PHP/MySQL/Apache"]
SSH["🔐 SSH Server :22"]
end
subgraph "⚡ СЕРВЕР 2 - CDN"
subgraph "🐳 Docker Контейнеры"
NGINX["🌐 NGINX<br/>:80/:443<br/>cdn-nginx"]
Converter["🔄 WebP Converter<br/>Python Service<br/>cdn-webp-converter"]
SSHFS["📂 SSHFS Mount<br/>cdn-sshfs"]
Redis["📊 Redis<br/>:6379<br/>cdn-redis"]
Varnish["🚀 Varnish Cache<br/>:8080<br/>cdn-varnish"]
end
Mount["/mnt/bitrix/upload/<br/>📂 SSHFS Mount (READ-ONLY)"]
WebPCache["/var/cache/webp/<br/>💾 Локальные WebP версии"]
subgraph "📊 Мониторинг (опционально)"
Prometheus["📈 Prometheus :9090"]
Grafana["📊 Grafana :3000"]
end
end
User["👤 Пользователь<br/>Браузер"]
Upload -.->|SSHFS SSH/22| Mount
SSHFS --> Mount
User -->|"🌍 HTTPS/443<br/>cdn.termokit.ru"| NGINX
NGINX -->|"map $webp_suffix<br/>try_files"| WebPCache
WebPCache -->|"✅ HIT"| User
NGINX -->|"❌ MISS"| Converter
Converter -->|Читает оригинал| Mount
Converter -->|"🔄 cwebp convert"| WebPCache
Converter -->|Метаданные| Redis
NGINX -->|Опционально| Varnish
Upload --> SSH
SSH --> SSHFS
| Контейнер | Описание | Порты | Обязательность |
|---|---|---|---|
| cdn-nginx | Веб-сервер с WebP логикой | 80, 443 | ✅ Обязательно |
| cdn-webp-converter | Python сервис конвертации | - | ✅ Обязательно |
| cdn-sshfs | SSHFS монтирование Битрикс | - | ✅ Обязательно |
| cdn-redis | Кеширование метаданных | 6379 | ✅ Обязательно |
| cdn-varnish | HTTP кеш-акселератор | 8080 | 🔶 Опционально |
| cdn-prometheus | Сбор метрик | 9090 | 🔶 Опционально |
| cdn-grafana | Дашборды мониторинга | 3000 | 🔶 Опционально |
| cdn-nginx-exporter | Метрики NGINX | 9113 | 🔶 Опционально |
| cdn-redis-exporter | Метрики Redis | 9121 | 🔶 Опционально |
| cdn-node-exporter | Системные метрики | 9100 | 🔶 Опционально |
| cdn-certbot | Автообновление SSL | - | 🔶 Опционально |
| Метрика | До CDN | После CDN | Улучшение |
|---|---|---|---|
| Размер изображений | 100 MB | 45-60 MB | -45% |
| Время загрузки | 3.2 сек | 1.1 сек | -65% |
| Нагрузка на Битрикс | 80% CPU | 25% CPU | -68% |
| Экономия трафика | - | 4.2 TB/мес | 55% |
# 🔧 Основные команды
./docker-manage.sh setup # Первоначальная настройка (SSH ключи, директории)
./docker-manage.sh start # Запустить все сервисы
./docker-manage.sh stop # Остановить сервисы
./docker-manage.sh restart # Перезапустить сервисы
./docker-manage.sh status # Статус всех контейнеров
./docker-manage.sh logs -f # Просмотр логов в реальном времени
# 🧹 Управление кешем
./docker-manage.sh clean # Очистить WebP кеш
./docker-manage.sh stats # Статистика использования кеша
# 🔐 SSL и безопасность
./docker-manage.sh ssl # Настройка SSL сертификатов
./docker-manage.sh backup # Резервная копия конфигураций
# 🐳 Docker команды
./docker-manage.sh shell nginx # Зайти в контейнер NGINX
./docker-manage.sh shell converter # Зайти в контейнер конвертера# ⚙️ Native установка
make install # Полная установка на сервер
make health # Проверка состояния всех сервисов
make stats # Статистика кеша WebP
make monitor # Мониторинг в реальном времени
make mount # Перемонтировать SSHFS
make unmount # Размонтировать SSHFS
make clean # Очистить кеш
make backup # Создать резервную копию
make restore BACKUP=filename # Восстановить из backup- 📖 Полная архитектура системы
- 🚀 Варианты развертывания
- 🛠️ Детальная установка
- 🔄 Поток обработки данных
- Docker 20.10+ и Docker Compose 2.0+
- 4 GB RAM
- 50 GB свободного места
- Debian 11/12 или Ubuntu 20.04/22.04
- 8 GB RAM
- 100 GB SSD для кеша
- Выделенный сервер или VPS
- 1 Gbps сетевое подключение
Добавьте в /bitrix/php_interface/init.php:
// CDN для изображений cdn.termokit.ru
define("BX_IMG_SERVER", "https://cdn.termokit.ru");
// Автоматическая замена URL изображений
AddEventHandler("main", "OnEndBufferContent", "ReplaceCDNImages");
function ReplaceCDNImages(&$content) {
$content = str_replace(
'src="/upload/',
'src="https://cdn.termokit.ru/upload/',
$content
);
}📖 Детальная настройка Битрикс: см. docs/BITRIX_SETUP.md
После запуска доступны:
- Grafana Dashboard:
http://localhost:3000(admin/TErmokit2024CDN!) - Prometheus Metrics:
http://localhost:9090 - Health Check:
https://cdn.termokit.ru/health - NGINX Status:
https://cdn.termokit.ru/nginx_status
📊 Подробная настройка мониторинга: см. docs/MONITORING.md
- 👨💻 Автор: Chibilyaev Alexandr ([email protected])
- 🏢 AAChibilyaev LTD
- 🐛 Issues: GitHub Issues
- 📖 Документация: docs/
MIT License - свободное использование и модификация
Chibilyaev Alexandr
📧 Email: [email protected]
🏢 Company: AAChibilyaev LTD
💼 GitHub: @AAChibilyaev
⭐ Если проект был полезен, поставьте звезду на GitHub!