首页
/ wger项目Docker化部署指南:基于Apache与WSGI的演示环境搭建

wger项目Docker化部署指南:基于Apache与WSGI的演示环境搭建

2025-07-08 05:00:23作者:柯茵沙

概述

wger是一个开源的健身管理系统,本文详细介绍如何使用Docker容器化技术快速部署wger的演示环境。该部署方案采用Apache作为Web服务器,通过WSGI接口与Python应用通信,适合用于演示、测试或小型生产环境。

环境准备

在开始部署前,请确保您的系统已安装以下组件:

  • Docker引擎(版本18.06或更高)
  • 基本的Linux命令行操作知识
  • 约1GB的可用磁盘空间

构建过程解析

1. 多阶段构建设计

该Dockerfile采用多阶段构建策略,分为builder和final两个阶段:

builder阶段

  • 基于wger/base基础镜像
  • 安装Node.js 22.x及相关构建工具
  • 处理Python依赖项和前端资源
  • 使用yarn构建CSS样式

final阶段

  • 同样基于wger/base基础镜像
  • 安装Apache2、WSGI模块等运行时依赖
  • 配置Apache虚拟主机
  • 设置定时任务(cron)
  • 复制builder阶段生成的前端资源

2. 关键配置说明

Apache配置

  • 禁用默认站点
  • 启用headers模块
  • 加载自定义的wger站点配置
  • 设置服务器名称为localhost
  • 将www-data用户加入wger用户组

应用配置

  • 创建Python虚拟环境
  • 安装所有Python依赖包
  • 初始化数据库(sqlite)
  • 设置媒体文件和静态文件路径
  • 加载初始数据(包括练习和图片)

详细部署步骤

1. 构建Docker镜像

在项目根目录执行以下命令构建镜像:

docker build -f extras/docker/demo/Dockerfile --tag wger/demo .

构建过程可能需要5-10分钟,具体取决于网络速度和系统性能。

2. 运行容器

构建完成后,使用以下命令启动容器:

docker run --rm --name wger.demo --publish 8000:80 wger/demo

参数说明:

  • --rm:容器停止后自动删除
  • --name wger.demo:为容器指定名称
  • --publish 8000:80:将容器80端口映射到主机8000端口

3. 访问应用

容器启动后,在浏览器中访问:

http://localhost:8000

您将看到wger的登录界面。首次使用时,可以使用以下默认凭据:

  • 用户名:admin
  • 密码:adminadmin

4. 容器管理

停止容器

docker container stop wger.demo

重新启动容器

docker container start --attach wger.demo

技术细节解析

1. 权限管理

该部署方案特别注意了文件系统权限问题:

  • 确保Apache进程(www-data)可以访问必要的目录
  • 数据库文件和静态文件目录设置了适当的组权限
  • 使用专门的wger系统用户运行应用

2. 定时任务

容器内配置了cron服务,用于执行定期任务:

  • 通过/home/wger/venvwrapper脚本确保在虚拟环境中执行Python代码
  • 定时任务定义在/etc/cron.d/wger

3. 静态文件处理

静态文件处理采用以下策略:

  • 使用collectstatic命令集中管理静态文件
  • 静态文件存储在/home/wger/static目录
  • 通过符号链接使Apache可以访问这些文件

常见问题排查

  1. 构建失败

    • 确保从项目根目录执行构建命令
    • 检查网络连接,特别是下载Node.js和Python包时
  2. 无法访问应用

    • 确认容器正在运行(docker ps)
    • 检查端口映射是否正确
    • 查看容器日志(docker logs wger.demo)
  3. 权限问题

    • 如果出现权限错误,检查/home/wger/db/home/wger/static的权限设置
    • 确保这些目录对www-data用户可读写

生产环境建议

虽然此配置适合演示用途,但在生产环境中建议考虑:

  1. 使用PostgreSQL或MySQL替代SQLite
  2. 配置HTTPS加密
  3. 设置定期备份策略
  4. 考虑使用更强大的WSGI服务器如uWSGI或Gunicorn

总结

本文详细介绍了wger项目的Docker化部署方案,该方案结合了Apache和WSGI,提供了一个完整的演示环境。通过多阶段构建优化了镜像大小,通过精心设计的权限系统确保了安全性。这种部署方式既适合快速体验wger功能,也可作为小型生产环境的基础。