Обновлена документация: добавлены предупреждения о правах доступа
- ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md: * Усилено предупреждение о необходимости настройки прав после КАЖДОГО обновления * Добавлены признаки проблемы: crash loop контейнера, 404 на тенантах * Подчёркнута критичность выполнения chown/chmod - DEPLOY_NAS.md: * Добавлены команды chown/chmod в раздел 'Обновление приложения' * Новый раздел 'Проблема 7': новый тенант возвращает 404 * Пошаговая диагностика: проверка домена в БД и логов контейнера * Объяснение причины: контейнер падает из-за Permission denied Теперь при проблемах после обновления кода пользователь сразу увидит, что нужно проверить права доступа на файлы проекта.
This commit is contained in:
130
ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md
Normal file
130
ИНСТРУКЦИЯ_ОБНОВЛЕНИЕ.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# ИНСТРУКЦИЯ ПО ОБНОВЛЕНИЮ ПРОЕКТА
|
||||
|
||||
В связи с реструктуризацией проекта (перенос конфигов внутрь `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
|
||||
```
|
||||
Reference in New Issue
Block a user