caps_enhancer/DEPLOY.md
2026-03-23 15:36:40 +03:00

289 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Деплой 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
<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`:
```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
<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 обычно справляется.
### Загрузка файлов на сервер
```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
<updatecheck
status='ok'
codebase='https://updates.example.com/caps-enhancer/caps-enhancer.crx'
version='2.8'
/>
```
### 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 |