# ИНСТРУКЦИЯ ПО ОБНОВЛЕНИЮ ПРОЕКТА В связи с реструктуризацией проекта (перенос конфигов внутрь `myproject`), процедура обновления изменилась. ## 1. Подготовка файлов Скопируйте обновленную папку `myproject` на сервер. Она должна заменить (или обновить) текущую папку `.../app/myproject` на сервере. > **ВАЖНО:** > Папки с данными (`postgres`, `redis`) и медиа-файлами (`media`, `static`) теперь живут: > - База и Redis: Внутри `myproject/postgres` и `myproject/redis` (если вы ставили с нуля по новой схеме). > - Медиа и Статика: На уровень выше, в папке `app/media` и `app/static`. > > **При копировании кода НЕ ЗАТРИТЕ папку `postgres` внутри `myproject`, если она там есть!** > Лучше всего копировать с помощью `rsync` или заменять только файлы кода, не трогая папки данных. ## 2. Настройка прав доступа **⚠️ КРИТИЧЕСКИ ВАЖНО:** После КАЖДОГО копирования файлов на сервер ОБЯЗАТЕЛЬНО настраивайте права доступа! Выполните следующие команды (путь может отличаться): ```bash # Установить владельца для всех файлов проекта (UID 1000 = пользователь appuser внутри контейнера) chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/app/myproject # Установить права доступа chmod -R u+rwX /Volume1/DockerAppsData/mixapp/app/myproject ``` > **Почему это нужно?** > Docker-контейнер работает от пользователя с UID 1000 (appuser). Если файлы принадлежат другому пользователю, > могут возникнуть проблемы с доступом к файлам, записью логов, созданием медиа-файлов и т.д. > > **Признаки проблемы:** > - Ошибка `python: can't open file '/app/manage.py': [Errno 13] Permission denied` > - Контейнер `web` постоянно перезапускается (crash loop) > - Новые поддомены тенантов возвращают 404 (контейнер не успевает запуститься) > > **⚠️ ВАЖНО:** Это нужно делать после КАЖДОГО обновления кода на сервере! ## 3. Запуск обновления Весь запуск теперь производится из папки, где лежит `docker-compose.yml`. 1. Зайдите в папку docker (на сервере это `/Volume1/DockerYAML/mix`): ```bash cd /Volume1/DockerYAML/mix ``` 2. Остановите текущие контейнеры (если нужно): ```bash docker-compose down ``` 3. Соберите и запустите контейнеры: ```bash docker-compose up -d --build ``` ## 4. Проверка Посмотрите статус контейнеров: ```bash docker-compose ps ``` Все должны быть `Up (healthy)`. ## 5. Полезные команды **Все команды выполняются из `/Volume1/DockerYAML/mix`** (где лежит `docker-compose.yml`): ```bash cd /Volume1/DockerYAML/mix ``` **Посмотреть логи веб-сервера:** ```bash docker-compose logs -f web ``` **Проверить переменные окружения внутри контейнера:** ```bash # Для PostgreSQL docker exec -it mix_postgres env | grep -E 'POSTGRES|DB_' # Для Django docker exec -it mix_web env | grep -E 'DB_|SECRET' ``` **Принудительно перезапустить базу (с удалением данных!):** Если нужно сбросить базу полностью: ```bash docker-compose down rm -rf /Volume1/DockerAppsData/mixapp/postgres docker-compose up -d --build ``` ⚠️ **Это удалит все данные в БД!** ## 6. Возможные проблемы ### Ошибка "password authentication failed for user postgres" **Причина:** Пароли `DB_PASSWORD` и `POSTGRES_PASSWORD` в `.env.docker` не совпадают. **Решение:** 1. Откройте `/Volume1/DockerAppsData/mixapp/app/myproject/docker/.env.docker` 2. Убедитесь, что `DB_PASSWORD` и `POSTGRES_PASSWORD` **ОДИНАКОВЫЕ** 3. Пересоздайте базу: ```bash cd /Volume1/DockerYAML/mix docker-compose down rm -rf /Volume1/DockerAppsData/mixapp/postgres docker-compose up -d --build ``` ### Ошибка "Permission denied" для /app/manage.py **Причина:** Файлы проекта принадлежат не UID 1000. **Решение:** ```bash cd /Volume1/DockerAppsData/mixapp/app chown -R 1000:1000 myproject chmod -R u+rwX myproject cd /Volume1/DockerYAML/mix docker-compose restart web celery-worker celery-beat ```