68 lines
3.7 KiB
Markdown
68 lines
3.7 KiB
Markdown
# DC CMS
|
||
|
||
Отдельный сервис администрирования сайтов DCTOUCH / NODE.DC.
|
||
|
||
## Первый подключенный проект
|
||
|
||
`projects/nodedc.json` подключает существующий сайт:
|
||
|
||
- `siteRoot`: локальный путь к репозиторию сайта.
|
||
- `previewUrl`: локальный адрес предпросмотра.
|
||
- `publicUrl`: публичный домен сайта.
|
||
- `deploy`: настройки будущей публикации на хостинг.
|
||
|
||
Пароль хостинга не хранится в JSON. В конфиге указывается имя переменной окружения, например `MCHOST_PASSWORD`.
|
||
|
||
## Локальный запуск
|
||
|
||
```bash
|
||
PORT=8210 npm run admin
|
||
```
|
||
|
||
Админка будет доступна на `http://127.0.0.1:8210/`. Подключенный сайт хранится как управляемый проект, но не является корневым UI этого сервиса.
|
||
|
||
## Запуск с Authentik
|
||
|
||
Полная локальная связка лежит в `infra/`: CMS, отдельный Authentik, Postgres и Caddy reverse proxy. Секреты хранятся только в локальном `infra/.env`; файл игнорируется git и Docker build context.
|
||
|
||
Для локальных доменов нужны host aliases:
|
||
|
||
```bash
|
||
127.0.0.1 cms.local.nodedc cms-auth.local.nodedc cms-auth-admin.local.nodedc
|
||
```
|
||
|
||
Старт:
|
||
|
||
```bash
|
||
docker compose --env-file infra/.env -f infra/docker-compose.yml up -d --build
|
||
```
|
||
|
||
Адреса:
|
||
|
||
- CMS: `http://cms.local.nodedc:8210/`
|
||
- Authentik login: `http://cms-auth.local.nodedc:8210/`
|
||
- Authentik admin: `http://cms-auth-admin.local.nodedc:8210/if/admin/`
|
||
|
||
Compose-сервис `authentik-bootstrap` создает OIDC-приложение `dc-cms`, группы `dc-cms:*` и стартового администратора из `infra/.env`. После первичного входа временный пароль нужно заменить в Authentik; следующие deploy не перетрут пароль, пока `CMS_BOOTSTRAP_FORCE_PASSWORD=false`.
|
||
|
||
CMS обращается к OIDC discovery внутри compose-сети через host-alias Authentik-домена (`CMS_AUTH_DOMAIN`), а не напрямую в контейнер `authentik-server`. Это сохраняет тот же Host/issuer-контекст, который видит браузер.
|
||
|
||
## Synology
|
||
|
||
Для Synology используется отдельный env-шаблон `infra/.env.synology.example`. Рабочий файл должен лежать рядом как `infra/.env.synology` и не должен попадать в artifact.
|
||
|
||
Публичные host routes:
|
||
|
||
- `cms.dcserve.ru` -> CMS.
|
||
- `auth.dcserve.ru` -> Authentik login/OIDC issuer.
|
||
- `auth-admin.dcserve.ru` -> Authentik admin, опционально и лучше не открывать публично без необходимости.
|
||
|
||
DNS-записи должны вести на внешний IP NAS. В Synology Reverse Proxy:
|
||
|
||
- `cms.dcserve.ru` -> `http://172.22.0.222:9918`
|
||
- `auth.dcserve.ru` -> `http://172.22.0.222:9919`
|
||
|
||
Оба target-порта ведут в один Caddy контейнер внутри compose-проекта `dc-cms`; Caddy разводит запросы по Host.
|
||
|
||
На Synology bootstrap Authentik выполняется автоматически внутри compose-проекта при `nodedc-deploy apply`. Ручной вход в worker, `VENV_PATH`, отдельный `apply_blueprint` и shell-скрипты не являются штатным сценарием.
|