Files
octopus/ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md
Andrey Smakotin f5130a79fd Обновлена документация: добавлены предупреждения о правах доступа
- ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md:
  * Усилено предупреждение о необходимости настройки прав после КАЖДОГО обновления
  * Добавлены признаки проблемы: crash loop контейнера, 404 на тенантах
  * Подчёркнута критичность выполнения chown/chmod

- DEPLOY_NAS.md:
  * Добавлены команды chown/chmod в раздел 'Обновление приложения'
  * Новый раздел 'Проблема 7': новый тенант возвращает 404
  * Пошаговая диагностика: проверка домена в БД и логов контейнера
  * Объяснение причины: контейнер падает из-за Permission denied

Теперь при проблемах после обновления кода пользователь сразу увидит,
что нужно проверить права доступа на файлы проекта.
2026-01-07 20:50:35 +03:00

5.3 KiB
Raw Blame History

ИНСТРУКЦИЯ ПО ОБНОВЛЕНИЮ ПРОЕКТА

В связи с реструктуризацией проекта (перенос конфигов внутрь 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.

  1. Зайдите в папку docker (на сервере это /Volume1/DockerYAML/mix):

    cd /Volume1/DockerYAML/mix
    
  2. Остановите текущие контейнеры (если нужно):

    docker-compose down
    
  3. Соберите и запустите контейнеры:

    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 не совпадают.

Решение:

  1. Откройте /Volume1/DockerAppsData/mixapp/app/myproject/docker/.env.docker
  2. Убедитесь, что DB_PASSWORD и POSTGRES_PASSWORD ОДИНАКОВЫЕ
  3. Пересоздайте базу:
    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