- ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md: * Усилено предупреждение о необходимости настройки прав после КАЖДОГО обновления * Добавлены признаки проблемы: crash loop контейнера, 404 на тенантах * Подчёркнута критичность выполнения chown/chmod - DEPLOY_NAS.md: * Добавлены команды chown/chmod в раздел 'Обновление приложения' * Новый раздел 'Проблема 7': новый тенант возвращает 404 * Пошаговая диагностика: проверка домена в БД и логов контейнера * Объяснение причины: контейнер падает из-за Permission denied Теперь при проблемах после обновления кода пользователь сразу увидит, что нужно проверить права доступа на файлы проекта.
5.3 KiB
ИНСТРУКЦИЯ ПО ОБНОВЛЕНИЮ ПРОЕКТА
В связи с реструктуризацией проекта (перенос конфигов внутрь myproject), процедура обновления изменилась.
1. Подготовка файлов
Скопируйте обновленную папку myproject на сервер.
Она должна заменить (или обновить) текущую папку .../app/myproject на сервере.
ВАЖНО: Папки с данными (
postgres,redis) и медиа-файлами (media,static) теперь живут:
- База и Redis: Внутри
myproject/postgresиmyproject/redis(если вы ставили с нуля по новой схеме).- Медиа и Статика: На уровень выше, в папке
app/mediaиapp/static.При копировании кода НЕ ЗАТРИТЕ папку
postgresвнутриmyproject, если она там есть! Лучше всего копировать с помощьюrsyncили заменять только файлы кода, не трогая папки данных.
2. Настройка прав доступа
⚠️ КРИТИЧЕСКИ ВАЖНО: После КАЖДОГО копирования файлов на сервер ОБЯЗАТЕЛЬНО настраивайте права доступа!
Выполните следующие команды (путь может отличаться):
# Установить владельца для всех файлов проекта (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.
-
Зайдите в папку docker (на сервере это
/Volume1/DockerYAML/mix):cd /Volume1/DockerYAML/mix -
Остановите текущие контейнеры (если нужно):
docker-compose down -
Соберите и запустите контейнеры:
docker-compose up -d --build
4. Проверка
Посмотрите статус контейнеров:
docker-compose ps
Все должны быть Up (healthy).
5. Полезные команды
Все команды выполняются из /Volume1/DockerYAML/mix (где лежит docker-compose.yml):
cd /Volume1/DockerYAML/mix
Посмотреть логи веб-сервера:
docker-compose logs -f web
Проверить переменные окружения внутри контейнера:
# Для PostgreSQL
docker exec -it mix_postgres env | grep -E 'POSTGRES|DB_'
# Для Django
docker exec -it mix_web env | grep -E 'DB_|SECRET'
Принудительно перезапустить базу (с удалением данных!): Если нужно сбросить базу полностью:
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 не совпадают.
Решение:
- Откройте
/Volume1/DockerAppsData/mixapp/app/myproject/docker/.env.docker - Убедитесь, что
DB_PASSWORDиPOSTGRES_PASSWORDОДИНАКОВЫЕ - Пересоздайте базу:
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.
Решение:
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