# Деплой CAPS Enhancer — Self-Hosted Auto-Update ## Как это работает ``` [Сервер] [Браузер пользователя] update.xml <── Chrome опрашивает каждые ~5 часов caps-enhancer.crx <── Chrome скачивает при новой версии ``` Chrome сравнивает `version` в `update.xml` с версией установленного расширения. Если версия на сервере выше — скачивает `.crx` и устанавливает обновление автоматически. Пользователь устанавливает расширение **один раз** через реестр Windows — дальше всё автоматически. --- ## Часть 1: Первоначальная упаковка (делается один раз) ### Шаг 1. Прописать URL обновления в manifest.json Открой `manifest.json` и замени `YOUR_DOMAIN` на реальный домен: ```json "update_url": "https://updates.example.com/caps-enhancer/update.xml", ``` ### Шаг 2. Упаковать расширение в .crx **Способ A — через bat-скрипт (рекомендуется):** Запусти `pack-crx.bat` из папки проекта. Скрипт сам найдёт Chrome и упакует расширение. **Способ B — вручную через Chrome:** 1. Открой `chrome://extensions` 2. Включи "Режим разработчика" (правый верхний угол) 3. Нажми "Упаковать расширение" 4. В поле "Корневой каталог расширения" укажи папку `caps-enhancer` 5. Поле "Файл закрытого ключа" оставь пустым при первой упаковке 6. Нажми "Упаковать расширение" Chrome создаст два файла **в папке рядом с `caps-enhancer`**: - `caps-enhancer.crx` — файл расширения - `caps-enhancer.pem` — приватный ключ > **КРИТИЧНО:** Сохрани `caps-enhancer.pem` в надёжное место! > Этот ключ определяет ID расширения. Если потеряешь — ID изменится, > и все установленные у пользователей копии придётся переустанавливать вручную. ### Шаг 3. Узнать ID расширения **После первой упаковки:** 1. Открой `chrome://extensions` 2. Нажми "Загрузить распакованное расширение" → выбери папку `caps-enhancer` 3. Скопируй ID расширения (длинная строка из 32 символов, например `abcdefghijklmnopqrstuvwxyzabcdef`) **Или через файл ключа (если Chrome уже закрыт):** ```bash # На Linux/Mac: openssl rsa -in caps-enhancer.pem -pubout | openssl dgst -sha256 -binary | base32 | head -c 32 | tr '[:upper:]' '[:lower:]' ``` ### Шаг 4. Обновить update.xml Открой `server/update.xml` и замени: - `EXTENSION_ID` — ID из предыдущего шага - `YOUR_DOMAIN` — твой домен - `version` — текущая версия (из manifest.json) ```xml ``` --- ## Часть 2: Настройка сервера ### Требования к серверу - Любой веб-сервер (nginx, Apache, Caddy, даже GitHub Pages) - **HTTPS обязателен** — Chrome отказывается скачивать `.crx` по HTTP - Корректные MIME-типы (см. ниже) ### Вариант A: nginx Скопируй `server/nginx.conf` на сервер и замени `YOUR_DOMAIN`: ```bash sudo cp server/nginx.conf /etc/nginx/sites-available/caps-enhancer sudo ln -s /etc/nginx/sites-available/caps-enhancer /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx ``` Структура файлов на сервере: ``` /var/www/caps-enhancer/ └── caps-enhancer/ ├── update.xml └── caps-enhancer.crx ``` ### Вариант B: Apache Добавь в `.htaccess` или конфиг: ```apache AddType application/x-chrome-extension .crx AddType application/xml .xml Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0 ``` ### Вариант C: Caddy (самый простой, HTTPS автоматически) ``` updates.example.com { root * /var/www/caps-enhancer file_server @xml path *.xml header @xml Cache-Control "no-cache, no-store, must-revalidate" } ``` ### Вариант D: GitHub Pages / любой статический хостинг Положи `update.xml` и `caps-enhancer.crx` в репозиторий. GitHub Pages раздаёт файлы по HTTPS автоматически. > Убедись что хостинг отдаёт `.crx` с типом `application/x-chrome-extension` > или `application/octet-stream`. GitHub Pages обычно справляется. ### Загрузка файлов на сервер ```bash # С локальной машины через scp scp server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ # Или через rsync rsync -av server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ ``` ### Проверка сервера После загрузки проверь: ```bash # update.xml должен вернуть XML с версией curl -I https://updates.example.com/caps-enhancer/update.xml # .crx должен вернуть 200 и Content-Type: application/x-chrome-extension curl -I https://updates.example.com/caps-enhancer/caps-enhancer.crx ``` --- ## Часть 3: Установка на компьютеры пользователей Chrome не позволяет устанавливать сторонние расширения вручную через stable-канал. Единственный способ — через **Windows Policy (реестр)**. ### Способ A: .reg файл (для ручной установки) 1. Открой `server/install-client.reg` 2. Замени `EXTENSION_ID` и `YOUR_DOMAIN` 3. Дай пользователю этот файл 4. Пользователь дважды кликает на `.reg` → соглашается → перезапускает Chrome ```reg [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist] "1"="abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml" ``` > Требует прав администратора (HKLM). > Для установки без прав — использовать HKCU (только для текущего пользователя). ### Способ B: PowerShell скрипт Отредактируй `server/install-client.ps1` (замени ID и домен), запусти от имени администратора: ```powershell # Запуск от имени администратора: Start-Process powershell -Verb RunAs -ArgumentList "-File C:\path\to\install-client.ps1" ``` ### Способ C: Групповые политики (GPO) — для домена 1. Открой **Group Policy Management Console** (gpmc.msc) 2. Создай или отредактируй GPO 3. Перейди: `Computer Configuration` → `Administrative Templates` → `Google` → `Google Chrome` → `Extensions` 4. Включи политику **"Configure the list of force-installed apps and extensions"** 5. Добавь строку: `abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml` > Если шаблонов Google нет — скачай ADMX: https://chromeenterprise.google/intl/ru/browser/download/ ### Что видит пользователь после установки - Chrome автоматически устанавливает расширение при следующем запуске - Иконка появляется в панели расширений - Пользователь **не может удалить** принудительно установленное расширение (managed) --- ## Часть 4: Выпуск обновления При каждом обновлении расширения: ### 1. Обнови версию в manifest.json ```json "version": "2.8" ``` ### 2. Упакуй расширение с тем же ключом Запусти `pack-crx.bat` — скрипт автоматически использует существующий `caps-enhancer.pem`. ### 3. Обнови update.xml ```xml ``` ### 4. Загрузи на сервер ```bash scp caps-enhancer.crx update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/ ``` ### 5. Готово Chrome проверяет обновления примерно каждые **5 часов** в фоне. Обновление применяется при следующем перезапуске браузера (или при перезагрузке расширения). Форсировать проверку обновлений вручную можно в `chrome://extensions` → "Обновить расширения". --- ## Итоговая структура файлов ``` caps-enhancer/ ├── manifest.json ← update_url прописан ├── pack-crx.bat ← запускать для упаковки ├── caps-enhancer.pem ← ХРАНИТЬ В БЕЗОПАСНОМ МЕСТЕ (создаётся при первой упаковке) ├── DEPLOY.md ← эта инструкция ├── ...остальные файлы расширения... └── server/ ├── update.xml ← загружать на сервер при каждом обновлении ├── caps-enhancer.crx ← загружать на сервер при каждом обновлении ├── nginx.conf ← конфиг для nginx (один раз) ├── deploy.sh ← скрипт деплоя на сервере ├── install-client.reg ← раздать пользователям для установки └── install-client.ps1 ← альтернатива .reg файлу ``` --- ## Troubleshooting | Проблема | Причина | Решение | |----------|---------|---------| | Chrome не устанавливает расширение | Нет ключа реестра | Проверь `HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist` | | "Extension not from Chrome Web Store" | Расширение установлено не через policy | Используй реестр, не ручную установку | | Обновление не прилетает | update.xml закэширован или неверный ID | Очисти кэш, проверь EXTENSION_ID в update.xml | | Chrome отказывается качать .crx | HTTP вместо HTTPS | Настрой SSL на сервере | | .crx не скачивается | Неверный MIME-тип | Добавь `application/x-chrome-extension` для `.crx` | | ID расширения изменился | Потерян .pem файл | Перераспространить .reg с новым ID |