fix: Correct media permissions via docker exec after deploy
- Remove 2>/dev/null || true from chown/chmod in entrypoint.sh - Add write test for media directory in entrypoint.sh - Add Step 8 in deploy script: fix permissions via docker exec - This ensures media files remain accessible after auto-deploy Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -113,18 +113,27 @@ setup_directories() {
|
||||
|
||||
# Создаем папки если их нет (рекурсивно)
|
||||
# Важно: создаем структуру папок для tenants
|
||||
mkdir -p "$MEDIA_ROOT/tenants" "$STATIC_ROOT" 2>/dev/null || true
|
||||
|
||||
# Пытаемся установить права доступа
|
||||
mkdir -p "$MEDIA_ROOT/tenants" "$STATIC_ROOT"
|
||||
|
||||
# Устанавливаем права доступа (без скрытия ошибок - чтобы увидеть проблемы)
|
||||
# Сначала меняем владельца на appuser (так как мы root)
|
||||
chown -R appuser:appuser "$MEDIA_ROOT" "$STATIC_ROOT" 2>/dev/null || true
|
||||
|
||||
chown -R appuser:appuser "$MEDIA_ROOT" "$STATIC_ROOT"
|
||||
|
||||
# Используем 777 для папок media, чтобы контейнер мог писать независимо от прав на хосте
|
||||
# Это безопасно, так как доступ контролируется на уровне Docker volume
|
||||
# Устанавливаем права рекурсивно на все существующие файлы и папки
|
||||
find "$MEDIA_ROOT" -type d -exec chmod 777 {} \; 2>/dev/null || true
|
||||
find "$MEDIA_ROOT" -type f -exec chmod 666 {} \; 2>/dev/null || true
|
||||
chmod -R 755 "$STATIC_ROOT" 2>/dev/null || true
|
||||
find "$MEDIA_ROOT" -type d -exec chmod 777 {} \;
|
||||
find "$MEDIA_ROOT" -type f -exec chmod 666 {} \;
|
||||
chmod -R 755 "$STATIC_ROOT"
|
||||
|
||||
# Проверка что media доступна для записи
|
||||
if ! touch "$MEDIA_ROOT/.test" 2>/dev/null; then
|
||||
echo "ERROR: Cannot write to $MEDIA_ROOT"
|
||||
ls -la "$MEDIA_ROOT"
|
||||
exit 1
|
||||
fi
|
||||
rm -f "$MEDIA_ROOT/.test"
|
||||
echo "Media directory is writable: $MEDIA_ROOT"
|
||||
|
||||
echo "Media directory created/checked: $MEDIA_ROOT (permissions set)"
|
||||
echo "Static directory created/checked: $STATIC_ROOT"
|
||||
|
||||
@@ -37,6 +37,9 @@ cp /Volume1/DockerAppsData/git/octopus/docker/docker-compose.yml "$DOCKER_COMPOS
|
||||
echo "Step 5: Setting permissions..." >> "$LOG_FILE"
|
||||
chown -R 1000:1000 "$APP_ROOT" >> "$LOG_FILE" 2>&1
|
||||
chmod +x "$APP_ROOT/docker/entrypoint.sh" >> "$LOG_FILE" 2>&1
|
||||
|
||||
# Гарантируем существование media папки с правильными правами
|
||||
mkdir -p /Volume1/DockerAppsData/mixapp/media >> "$LOG_FILE" 2>&1
|
||||
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/media >> "$LOG_FILE" 2>&1
|
||||
chown -R 1000:1000 /Volume1/DockerAppsData/mixapp/static >> "$LOG_FILE" 2>&1
|
||||
|
||||
@@ -57,8 +60,18 @@ echo "Step 7: Restarting ALL containers..." >> "$LOG_FILE"
|
||||
docker-compose down >> "$LOG_FILE" 2>&1
|
||||
docker-compose up -d >> "$LOG_FILE" 2>&1
|
||||
|
||||
# 8. Ждём запуска и исправляем права через docker exec (внутри контейнера от root)
|
||||
echo "Step 8: Waiting for containers and fixing permissions..." >> "$LOG_FILE"
|
||||
sleep 10 # Даём контейнерам время для запуска entrypoint.sh
|
||||
|
||||
# Исправляем права внутри контейнера (entrypoint.sh запускается от root)
|
||||
docker exec mix_web chown -R appuser:appuser /app/myproject/media >> "$LOG_FILE" 2>&1
|
||||
docker exec mix_web chown -R appuser:appuser /app/myproject/staticfiles >> "$LOG_FILE" 2>&1
|
||||
docker exec mix_web chmod -R 777 /app/myproject/media >> "$LOG_FILE" 2>&1
|
||||
echo "Permissions fixed inside container" >> "$LOG_FILE"
|
||||
|
||||
# Проверка
|
||||
echo "Step 8: Check status..." >> "$LOG_FILE"
|
||||
echo "Step 9: Check status..." >> "$LOG_FILE"
|
||||
docker-compose ps >> "$LOG_FILE" 2>&1
|
||||
|
||||
echo "=== Deploy finished at $(date) ===" >> "$LOG_FILE"
|
||||
|
||||
Reference in New Issue
Block a user