You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成Wagtail的Django项目迁移Docker后页面数据丢失求助

问题

按照Wagtail官方文档将Wagtail集成到现有Django项目后,迁移到Docker环境部署:已将SQL备份导入PostgreSQL,使用uWSGI运行无报错,但前端页面无内容,后台管理页也没有原有页面,需重新创建。

使用的命令:

  • docker-compose -f docker-compose-deploy.yml build
  • docker-compose -f docker-compose-deploy.yml up
  • docker-compose -f docker-compose-deploy.yml run --rm app sh -c "python manage.py createsuperuser"

相关配置文件:

Dockerfile

FROM python:3.9-slim-bookworm
LABEL maintainer="londonappdeveloper.com"

ENV PYTHONUNBUFFERED=1

# Install dependencies
RUN apt-get update && apt-get install --no-install-recommends -y \
    build-essential \
    libpq-dev \
    gcc \
    exiftool \
    imagemagick \
    libmagickwand-dev \
    libmagic1 \
    redis-tools \
    && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
    && rm -rf /var/lib/apt/lists/*


# Set up virtual environment
RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip

# Copy application files
COPY ./requirements.txt /requirements.txt
COPY . /app
COPY ./scripts /scripts

WORKDIR /app
EXPOSE 8000

# Install Python dependencies
RUN /py/bin/pip install -r /requirements.txt

# Set up directories for static and media files
RUN adduser --disabled-password --no-create-home app && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media && \
    chown -R app:app /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts


ENV PATH="/scripts:/py/bin:$PATH"

USER app

CMD ["run.sh"]

docker-compose-deploy.yml

version: '3.9'

services:
  app:
    build:
      context: .
    restart: always
    volumes:
      - static-data:/vol/web
    environment:
      - DB_HOST=db
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASS=${DB_PASS}
      - SECRET_KEY=${SECRET_KEY}
      - ALLOWED_HOSTS=${ALLOWED_HOSTS}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - db
      - redis
    links:
      - db:db
      - redis:redis
  
  db:
    image: postgres:13-alpine
    restart: always
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}
  
  proxy:
    build:
      context: ./proxy
    restart: always
    depends_on:
      - app
    ports:
      - 80:8000
    volumes:
      - static-data:/vol/static
  
  redis:
    image: redis:alpine
  
volumes:
  postgres-data:
  static-data:

解决方案

1. 验证数据库备份是否正确导入

容器内的PostgreSQL使用独立卷postgres-data,需确认备份确实导入到该容器的数据库中:

  • 进入PostgreSQL容器:
    docker-compose -f docker-compose-deploy.yml exec db psql -U ${DB_USER} -d ${DB_NAME}
    
  • 查询Wagtail页面表数据量,确认是否有记录:
    SELECT COUNT(*) FROM wagtailcore_page;
    
  • 如果结果为0,重新导入备份:
    1. 将本地备份文件拷贝到容器:
      docker cp /path/to/your/backup.sql $(docker-compose -f docker-compose-deploy.yml ps -q db):/tmp/
      
    2. 进入容器执行导入:
      docker-compose -f docker-compose-deploy.yml exec db psql -U ${DB_USER} -d ${DB_NAME} -f /tmp/backup.sql
      

2. 确保静态文件已正确收集

Wagtail后台和前端依赖静态文件,需确认容器启动时执行了collectstatic:

  • 手动执行静态文件收集:
    docker-compose -f docker-compose-deploy.yml run --rm app sh -c "python manage.py collectstatic --noinput"
    
  • 检查run.sh脚本,确保包含上述命令,避免每次启动都需要手动执行。

3. 迁移媒体文件

如果原项目存在上传的媒体文件(图片、文档等),需将这些文件同步到容器的媒体目录:

  • 将本地媒体文件拷贝到容器的/vol/web/media目录:
    docker cp /path/to/local/media/ $(docker-compose -f docker-compose-deploy.yml ps -q app):/vol/web/media/
    
  • 生产环境建议将本地媒体目录挂载到容器,或使用对象存储存储媒体文件。

4. 验证数据库连接配置

确认Django配置文件settings.py中的数据库设置正确读取环境变量:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASS'),
        'HOST': os.environ.get('DB_HOST'),
        'PORT': 5432,
    }
}

同时检查wagtailcore_site表是否有站点记录,若缺失可从备份恢复或在后台手动创建。

5. 清除Redis缓存

Redis可能缓存了空数据,导致页面无法正常显示:

  • 清除Redis缓存:
    docker-compose -f docker-compose-deploy.yml exec redis redis-cli FLUSHALL
    
  • 重启app容器:
    docker-compose -f docker-compose-deploy.yml restart app
    

内容的提问来源于stack exchange,提问作者Thehiddenguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:18:09