# mes_core Система управления производством (ShiftFlow MES) ## 📥 Как пушить код (Шпаргалка) Если внес изменения в проект и готов отправить их на сервер `ProdServ`: 1. **Подготовь файлы**: git add . 2. **Запечатай изменения**: git commit -m "Подправил докерфайл сборки контейнера" 3. **Отправляй в полет**: git push origin main ### 💊 Таблетка: Если не пушится (сброс авторизации) Если Git "забыл" пароль или выдает ошибку Permission Denied: # Очищаем старые привязки ```bash git config --global --unset credential.helper ``` # Устанавливаем менеджер заново (для Windows) ```bash git config --global credential.helper manager ``` # Снова пушим и вводим логин/пароль в окне ```bash git push origin main ``` # 🚀 ShiftFlow MES - Инструкция по деплою (Production) ### 🧩 Общая архитектура Система работает в связке из 3-х контейнеров: 1. **db**: PostgreSQL 15 (хранит все данные). 2. **web**: Django + Gunicorn (логика приложения). 3. **nginx**: Веб-сервер (раздает статику и проксирует запросы на Django). --- ### 🛠 Как это работает (Автоматизация) Мы используем **CI/CD через Gitea Actions**. Тебе не нужно заходить на сервер руками. 1. **Push в main**: Как только ты пушишь код, раннер на `ProdServ` просыпается. 2. **Сборка**: Docker пересобирает образ `web`, если изменились `requirements.txt` или код. 3. **Запуск**: - `entrypoint.sh` автоматически накатывает миграции (`migrate`). - `collectstatic` собирает все стили в общую папку для Nginx. - Создается суперпользователь (если его еще нет) из данных `.env`. --- ### 📁 Важные папки на сервере `ProdServ` Проект живет здесь: `/home/ack/projects/mes_core/` * **staticfiles/** — здесь лежат стили и скрипты. Если админка стала "белой", проверь права этой папки (`chmod 755`). * **media/** — здесь будут лежать загруженные фото и файлы. * **.env** — здесь лежат все пароли. **Никогда не удаляй его!** --- ### 🆘 Что делать, если "все упало"? Если сайт по адресу `192.168.1.108` не открывается: 1. Проверь логи контейнеров: `docker compose logs -f`. 2. Убедись, что порты в `docker-compose.yml` стоят `80:80`. 3. Перезапусти всё одной командой: `docker compose up -d --build`. --- # 👤 Роли и доступ (Django Admin) В проекте используются **Django Groups как роли** (можно назначать несколько ролей одному пользователю). ## 1) Роли (Groups) Имена групп должны совпадать с кодами ролей: - `operator` - `master` - `technologist` - `clerk` - `supply` - `prod_head` - `director` - `observer` - `admin` Важно: - Название группы — это "код роли" и используется прямо в коде (чувствительно к регистру). - Писать строчными латиницей, без пробелов. - Для панели снабженца используется группа `supply` (экран `/procurement/`). Как выдать роль пользователю: 1. Открой Django admin: `/admin/` 2. `Users` → выбери пользователя 3. Поле `Groups` → добавь нужные группы 4. `Save` Примечание: на переходном этапе может использоваться fallback на `EmployeeProfile.role`, чтобы при деплое до раздачи групп доступ не "слетал". ## 2) Назначение станков и цехов пользователю Станки/цеха назначаются через профиль сотрудника (Shiftflow): 1. Django admin: `/admin/` 2. `Shiftflow` → `Employee profiles` → выбрать профиль пользователя 3. Поля: - `Machines` — закреплённые станки (обычно для операторов) - `Allowed workshops` — доступные цеха (ограничение видимости/действий) - `Is readonly` — режим "только просмотр" (удобно для руководителя/наблюдателя) 4. `Save`