105 lines
6.5 KiB
Markdown
105 lines
6.5 KiB
Markdown
# ERP WaterSurf
|
||
|
||
Веб-приложение класса ERP для компании WaterSurf: справочники, документы (заказы клиентов и поставщикам, поступления/перемещения/расход денежных средств), авторизация пользователей.
|
||
|
||
## Требования
|
||
|
||
- Docker и Docker Compose
|
||
- Доступ к порту 8010 на localhost (для reverse proxy)
|
||
|
||
## Установка и настройка
|
||
|
||
```bash
|
||
cd /opt/watersurf-erp
|
||
cp .env.example .env
|
||
# Отредактировать .env: пароли, SECRET_KEY, ALLOWED_HOSTS
|
||
docker compose up -d db
|
||
docker compose run --rm app python manage.py migrate --noinput
|
||
docker compose run --rm app python manage.py createsuperuser # первый пользователь
|
||
docker compose up -d app
|
||
```
|
||
|
||
## Конфигурация
|
||
|
||
Переменные в `.env` (см. `.env.example`):
|
||
|
||
- `POSTGRES_*` — учётные данные PostgreSQL для контейнера db
|
||
- `DB_*` — подключение приложения к БД
|
||
- `SECRET_KEY` — секрет Django (не менее 50 символов)
|
||
- `ALLOWED_HOSTS` — через запятую (например `erp.gen7x.ru,localhost`)
|
||
- `DEBUG` — true/false
|
||
- `REQUIRE_LOGIN` — по умолчанию `false`: доступ без входа (для отладки); `true` — включить авторизацию
|
||
|
||
## Использование
|
||
|
||
- Веб-интерфейс: после настройки Nginx — https://erp.gen7x.ru/
|
||
- Вход по логину/паролю (пользователи Django). При `REQUIRE_LOGIN=false` доступ без входа (для отладки).
|
||
- Меню: Справочники (валюты, виды заказов, клиенты, организации, поставщики, сотрудники, счета, товары), Документы (заказы клиентов, заказы поставщику, поступления, перемещения, расходы).
|
||
- Поле «Автор» в документах подставляется из профиля пользователя (связь User → Сотрудник в разделе «Пользователи» / админка).
|
||
|
||
## Структура проекта
|
||
|
||
- `app/config/` — настройки Django
|
||
- `app/references/` — справочники (модели, админка, CRUD)
|
||
- `app/documents/` — документы (модели, формы, представления, автогенерация номера)
|
||
- `app/users/` — профиль пользователя (связь с сотрудником)
|
||
- `app/templates/` — шаблоны
|
||
- `manage.py` — точка входа для команд Django
|
||
|
||
## Docker Compose
|
||
|
||
- Сервис `db`: PostgreSQL 16, volume `watersurf_erp_data`
|
||
- Сервис `app`: Django + Gunicorn, порт 8010:8000
|
||
|
||
Запуск: `./manage.sh start` или `docker compose up -d`
|
||
Остановка: `./manage.sh stop`
|
||
Логи: `./manage.sh logs app`
|
||
|
||
## Volumes
|
||
|
||
- `watersurf_erp_data` — данные PostgreSQL. Добавлен в `/opt/gen7x/backup/include-volumes.txt` для бэкапа.
|
||
|
||
## Логирование
|
||
|
||
- Логи приложения: stdout контейнера; при наличии каталога `app/logs` — также в `app/logs/app.log`.
|
||
- Просмотр: `docker compose logs -f app`
|
||
|
||
## Резервное копирование и восстановление
|
||
|
||
- Volume БД включён в список бэкапов платформы Gen7x. Восстановление — по инструкции платформы (restore.sh и т.д.).
|
||
|
||
## Troubleshooting
|
||
|
||
- Ошибка подключения к БД: проверить, что контейнер `db` запущен и переменные `DB_*` в `.env` совпадают с `POSTGRES_*`.
|
||
- 502 от Nginx: проверить, что приложение слушает на 8010 (`docker compose ps`, `docker compose logs app`).
|
||
- После добавления полей в модели: `docker compose run --rm app python manage.py makemigrations && docker compose run --rm app python manage.py migrate`.
|
||
|
||
## Команды управления
|
||
|
||
- Запуск: `./manage.sh start`
|
||
- Остановка: `./manage.sh stop`
|
||
- Перезапуск: `./manage.sh restart`
|
||
- Логи: `./manage.sh logs [service]`
|
||
|
||
## Git и пуш
|
||
|
||
Репозиторий: https://git.gen7x.ru/cursor-agent/watersurf-erp (клонирование по SSH: `git@git.gen7x.ru:cursor-agent/watersurf-erp.git`).
|
||
|
||
На сервере настроен SSH-доступ к Gitea (ключ cursor-agent, см. `/root/docs/secrets/mysecrets.md`), поэтому с этого сервера можно выполнять `git push` и `git pull` без ввода пароля.
|
||
|
||
## Планы развития фронтенда
|
||
|
||
Текущий интерфейс — Django-шаблоны + CSS (Material Design 3), один деплой, простая поддержка. В перспективе планируется:
|
||
|
||
- **Канбан заказов** (drag-and-drop по стадиям)
|
||
- **Живые уведомления** (обновления без перезагрузки)
|
||
- **Дашборды** (сводные виджеты, графики)
|
||
|
||
Для этого потребуется введение **отдельного SPA-фронтенда** (React + MUI или аналог) и **REST API** (Django REST Framework или расширение текущих views JSON-ответами). Рекомендуемый путь при переходе:
|
||
|
||
1. Выделить REST API для сущностей (заказы, документы, справочники), аутентификация (JWT или session/cookies для того же домена).
|
||
2. Создать отдельное приложение фронтенда (например `frontend/` или отдельный репозиторий), подключать его к `erp.gen7x.ru` или отдельному поддомену.
|
||
3. Постепенная миграция: сначала дашборд и канбан как отдельные страницы SPA, остальное можно оставить на шаблонах (гибрид) или перенести позже.
|
||
|
||
Текущая кодовая база (модели, формы, логика) остаётся основой; API будет оборачивать те же данные.
|