12 KiB
Деплой 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 на реальный домен:
"update_url": "https://updates.example.com/caps-enhancer/update.xml",
Шаг 2. Упаковать расширение в .crx
Способ A — через bat-скрипт (рекомендуется):
Запусти pack-crx.bat из папки проекта. Скрипт сам найдёт Chrome и упакует расширение.
Способ B — вручную через Chrome:
- Открой
chrome://extensions - Включи "Режим разработчика" (правый верхний угол)
- Нажми "Упаковать расширение"
- В поле "Корневой каталог расширения" укажи папку
caps-enhancer - Поле "Файл закрытого ключа" оставь пустым при первой упаковке
- Нажми "Упаковать расширение"
Chrome создаст два файла в папке рядом с caps-enhancer:
caps-enhancer.crx— файл расширенияcaps-enhancer.pem— приватный ключ
КРИТИЧНО: Сохрани
caps-enhancer.pemв надёжное место! Этот ключ определяет ID расширения. Если потеряешь — ID изменится, и все установленные у пользователей копии придётся переустанавливать вручную.
Шаг 3. Узнать ID расширения
После первой упаковки:
- Открой
chrome://extensions - Нажми "Загрузить распакованное расширение" → выбери папку
caps-enhancer - Скопируй ID расширения (длинная строка из 32 символов, например
abcdefghijklmnopqrstuvwxyzabcdef)
Или через файл ключа (если Chrome уже закрыт):
# На 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)
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='abcdefghijklmnopqrstuvwxyzabcdef'>
<updatecheck
status='ok'
codebase='https://updates.example.com/caps-enhancer/caps-enhancer.crx'
version='2.7'
/>
</app>
</gupdate>
Часть 2: Настройка сервера
Требования к серверу
- Любой веб-сервер (nginx, Apache, Caddy, даже GitHub Pages)
- HTTPS обязателен — Chrome отказывается скачивать
.crxпо HTTP - Корректные MIME-типы (см. ниже)
Вариант A: nginx
Скопируй server/nginx.conf на сервер и замени YOUR_DOMAIN:
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 или конфиг:
<Directory /var/www/caps-enhancer>
AddType application/x-chrome-extension .crx
AddType application/xml .xml
<Files "update.xml">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</Files>
</Directory>
Вариант 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 обычно справляется.
Загрузка файлов на сервер
# С локальной машины через 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/
Проверка сервера
После загрузки проверь:
# 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 файл (для ручной установки)
- Открой
server/install-client.reg - Замени
EXTENSION_IDиYOUR_DOMAIN - Дай пользователю этот файл
- Пользователь дважды кликает на
.reg→ соглашается → перезапускает Chrome
[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 и домен), запусти от имени администратора:
# Запуск от имени администратора:
Start-Process powershell -Verb RunAs -ArgumentList "-File C:\path\to\install-client.ps1"
Способ C: Групповые политики (GPO) — для домена
- Открой Group Policy Management Console (gpmc.msc)
- Создай или отредактируй GPO
- Перейди:
Computer Configuration→Administrative Templates→Google→Google Chrome→Extensions - Включи политику "Configure the list of force-installed apps and extensions"
- Добавь строку:
abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml
Если шаблонов Google нет — скачай ADMX: https://chromeenterprise.google/intl/ru/browser/download/
Что видит пользователь после установки
- Chrome автоматически устанавливает расширение при следующем запуске
- Иконка появляется в панели расширений
- Пользователь не может удалить принудительно установленное расширение (managed)
Часть 4: Выпуск обновления
При каждом обновлении расширения:
1. Обнови версию в manifest.json
"version": "2.8"
2. Упакуй расширение с тем же ключом
Запусти pack-crx.bat — скрипт автоматически использует существующий caps-enhancer.pem.
3. Обнови update.xml
<updatecheck
status='ok'
codebase='https://updates.example.com/caps-enhancer/caps-enhancer.crx'
version='2.8'
/>
4. Загрузи на сервер
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 |