projects: модуль проектов с шагами по отделам и Task.

Шаблоны/ручное создание, access_projects, сид «Открытие аптеки». Плюс SILO/S3 для Django media.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-23 16:26:45 +03:00
parent 69ae14f65e
commit 030bbc98fd
28 changed files with 2129 additions and 3 deletions
+6 -2
View File
@@ -15,8 +15,9 @@
- **Traefik** терминирует TLS и проксирует на LXC по HTTP с заголовком `X-Forwarded-Proto: https`
(`production.py` уже настроен на `SECURE_PROXY_SSL_HEADER`).
- **nginx внутри LXC** отдаёт `/static/` и `/media/`, остальное проксирует в gunicorn.
- **nginx внутри LXC** отдаёт `/static/` (и `/media/` только пока media на локальном диске).
- **PostgreSQL** и **Redis** — отдельные сервисы (могут быть на других хостах).
- **SILO (S3)** — опционально: Django media + primary store Nextcloud; см. [silo.md](silo.md).
---
@@ -252,6 +253,7 @@ server {
client_max_body_size 110m; # аплоады до 100 МБ (документы)
location /static/ { alias /opt/acore/app/staticfiles/; access_log off; expires 30d; }
# При SILO (S3_ENDPOINT в .env) /media/ с диска не нужен — URL подписанные.
location /media/ { alias /opt/acore/app/media/; access_log off; }
location / {
@@ -284,6 +286,8 @@ TLS-termination + редирект на HTTPS. Убедитесь, что Traefi
- **Mattermost** — bot-токен + `MATTERMOST_SLASH_COMMAND_TOKEN`/`INTERACTIVE_TOKEN` в `.env`.
Команды: `create_mattermost_bot`, `import_mattermost_teams/channels`, `sync_users_to_teams`.
- **Nextcloud** — `ConnectorConfig(nextcloud)`: host/логин/пароль сервисного аккаунта (WebDAV).
Файлы NC лучше держать в SILO (primary object store) — [silo.md](silo.md).
- **SILO / media** — при `S3_ENDPOINT` + ключах в `.env` фото и прочий `MEDIA` пишутся в бакет `acore-media`; nginx `/media/` с диска не нужен.
- **OnlyOffice** (`ConnectorConfig(onlyoffice)`):
- `host/port/use_ssl` → публичный URL Document Server (браузер грузит `api.js`);
- **«Токен»** = `JWT_SECRET` Document Server (`JWT_ENABLED=true`, `JWT_HEADER=Authorization`);
@@ -308,7 +312,7 @@ cd /opt/acore/app
```
- [ ] `https://portal.example.local/` открывается, редирект c http на https работает;
- [ ] логин, принудительная 2FA у staff;
- [ ] `/static/` и `/media/` отдаёт nginx (не 404);
- [ ] `/static/` отдаёт nginx; `/media/` — nginx **или** подписанные URL SILO (см. [silo.md](silo.md));
- [ ] `systemctl status acore-web acore-celery acore-celery-beat` — все `active (running)`;
- [ ] `redis-cli -a … -n 1 dbsize` растёт при попытках логина (кэш-троттлинг жив);
- [ ] загрузка документа в аптеке и открытие в OnlyOffice → правка сохраняется в Nextcloud.