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

131 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ИНСТРУКЦИЯ ПО ОБНОВЛЕНИЮ ПРОЕКТА
В связи с реструктуризацией проекта (перенос конфигов внутрь `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
```