一、什么是 Redmine:给团队找一个项目管理“管家”

入门

Redmine 是一套开源的 Web 项目管理工具,可以把它理解成团队共用的“任务台账 + 协作看板”。它能把分散在邮件、表格、聊天记录里的任务集中到一个地方,让每个人都知道今天该干什么、哪件事卡住了、谁在负责。

它基于 Ruby on Rails 框架开发,但用起来完全不需要懂 Ruby。对新手最友好的方式是用 Docker(一种把软件打包成“集装箱”、随处可运行的工具)部署,省去手动搭建环境的麻烦。

Redmine 适合中小型团队,尤其是开发团队:既能跟踪软件缺陷,也能管理需求、文档和工时。因为是自托管,所有数据都保存在你自己的服务器上,不会受第三方平台限制。

二、快速部署:用 Docker 一条命令跑起来

入门

部署前需要准备一台能联网的 Linux 服务器(推荐 Ubuntu 22.04 或更高版本),至少 1GB 内存。如果你还没有服务器,可以先用本地电脑上的 Linux 虚拟机练习。还需要在服务器上安装 Docker 和 Docker Compose。

Docker 就像把应用及其运行环境装进一个标准化集装箱,不需要手动安装 Ruby、数据库等一堆依赖。Docker Compose 则负责同时启动 Redmine 和它需要的 PostgreSQL 数据库(一种适合存结构化数据的仓库)。

先在你的服务器上创建项目目录并进入:

mkdir redmine && cd redmine

然后新建一个名为 docker-compose.yml 的文件,内容如下:

services:
  redmine:
    image: redmine:5.1
    container_name: redmine
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      REDMINE_DB_POSTGRES: db
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: change_this_password
      REDMINE_DB_DATABASE: redmine
    volumes:
      - redmine_files:/usr/src/redmine/files
      - redmine_plugins:/usr/src/redmine/plugins
      - redmine_themes:/usr/src/redmine/public/themes
    depends_on:
      - db
  db:
    image: postgres:16-alpine
    container_name: redmine_db
    restart: unless-stopped
    environment:
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: change_this_password
      POSTGRES_DB: redmine
    volumes:
      - redmine_db_data:/var/lib/postgresql/data
volumes:
  redmine_files:
  redmine_plugins:
  redmine_themes:
  redmine_db_data:

保存后执行启动命令:

docker compose up -d

第一次启动会拉取镜像并初始化数据库,大约需要一两分钟。完成后在浏览器访问 http://服务器IP:3000,看到 Redmine 登录页就代表部署成功。默认管理员账号是 admin,密码也是 admin,首次登录后系统会要求你修改密码。

Redmine 项目管理界面预览

三、配置详解:把数据库、文件存储和端口弄清楚

进阶 · 推荐细读

上面的 docker-compose.yml 里有两个服务:redmine 和 db。redmine 是应用本体,db 是 PostgreSQL 数据库。两者通过 depends_on 关联,确保数据库先启动。

端口映射 3000:3000 的含义是:把服务器外部的 3000 端口,转发到容器内部的 3000 端口。如果你服务器上的 3000 端口已经被其他程序占用,可以把左侧数字改成别的,例如 8080:3000,然后访问 http://IP:8080。

环境变量表如下:

变量名 作用
REDMINE_DB_POSTGRES 数据库主机名,对应 compose 里的 db 服务名
REDMINE_DB_USERNAME 数据库用户名
REDMINE_DB_PASSWORD 数据库密码,需要与下面 db 服务的密码一致
REDMINE_DB_DATABASE 数据库名称
POSTGRES_USER PostgreSQL 初始化时创建的用户
POSTGRES_PASSWORD PostgreSQL 初始化密码
POSTGRES_DB PostgreSQL 初始化数据库名

数据卷(volume)是 Docker 用来持久化数据的“外接硬盘”。即使容器删除或升级,只要数据卷还在,项目、附件、插件等数据就不会丢。上面定义了四个卷:redmine_files 保存上传的附件,redmine_plugins 存放插件,redmine_themes 存放主题,redmine_db_data 保存数据库文件。

四、功能导览:从建项目到跟踪任务

入门

登录后台后,先创建一个“项目”。项目可以理解为一个独立的工作空间,比如一个软件版本或一个客户项目。创建时勾选你需要的模块:问题跟踪、日历、甘特图、新闻、文档、Wiki、论坛、工时等。

Redmine 里的任务统一叫“问题(Issue)”,但这不只是缺陷,而是所有待办事项的单位。你可以创建任务、缺陷、支持请求等类型,设置负责人、优先级、状态、目标版本和预计工时。多人协作时,每个人都能在“我的工作台”看到自己被指派的事项。

甘特图用来展示项目的时间安排,日历视图适合看里程碑和版本发布计划。Wiki 和文档模块让你直接在线写团队手册,论坛和新闻模块则可以发公告和讨论。

在项目中点击“新建问题”即可开始录入任务,字段可以根据实际需要灵活调整。管理员还能在“管理”菜单里自定义跟踪器、状态和工作流程。

Redmine 项目仪表盘概览

五、常见问题:端口冲突、权限和备份

进阶 · 推荐细读

端口冲突是最常见的问题。如果启动时提示 address already in use,说明宿主机端口被占用。找到占用程序并停掉,或者修改 compose 里的宿主机端口号即可。

附件上传失败通常与数据卷权限有关。Redmine 容器里默认以 UID 1000 运行,如果宿主机的挂载目录属于其他用户,就会出现无法写入的情况。建议执行下面的命令将 redmine_files 卷的属主改为 1000:

docker run --rm -v redmine_files:/data alpine chown -R 1000:1000 /data

数据库连接失败多是因为密码不一致或数据库容器还没就绪。确认 REDMINE_DB_PASSWORD 和 POSTGRES_PASSWORD 完全相同,并可以先用 docker compose logs db 查看数据库日志。

忘记管理员密码时,可以进入 Redmine 容器并通过 Rails 控制台重置。但更简单的做法是提前在系统里设置 SMTP 邮箱,用“忘记密码”邮件找回。生产环境建议启用 SMTP,这样团队成员也能自助重置密码。

数据备份是必须养成的习惯。关键数据包括数据库卷和附件卷。你可以定期用下面的命令把数据库压缩备份:

docker run --rm -v redmine_db_data:/data -v $(pwd)/backup:/backup alpine tar czf /backup/redmine_db_$(date +%F).tgz -C /data .

附件和插件卷也可以用同样方式备份,或直接把文件复制到其他存储位置。

六、运维进阶:配置域名和 HTTPS 证书

深入 · 老手可选

直接用 IP 加端口访问虽然方便,但生产环境通常需要绑定域名并启用 HTTPS(加密传输,防止数据被窃听)。这里需要用到反向代理:它像一个前台接待,把来自外部的域名请求转交给内部 3000 端口的 Redmine。

推荐使用 Caddy,因为它能自动申请和续期免费 HTTPS 证书,配置极简。在服务器上安装 Caddy 后,只需写两行配置:

yourdomain.com {
    reverse_proxy localhost:3000
}

保存后执行 caddy reload,Caddy 会自动向 Let’s Encrypt 申请证书。你只需把域名解析到服务器 IP,就能通过 https://yourdomain.com 安全访问 Redmine。

升级 Redmine 版本前,先备份数据库和附件。然后修改 compose 文件中的镜像标签为新版本,比如从 redmine:5.1 改为 redmine:6.0。执行 docker compose pull 拉取新镜像,再执行 docker compose up -d 重建容器。官方镜像启动时会自动执行数据库迁移,不需要手动干预。

如果担心升级失败,建议先在测试环境演练一遍。正式升级时保留旧镜像标签,出现异常可以快速回滚到上一个版本,把业务影响降到最低。

项目信息

项目 值
仓库 redmine/redmine
语言 Ruby
Star 6,049
Fork 2,473
主页 https://www.redmine.org

参考链接

延伸阅读

想继续探索?这些同领域的教程可能也适合你: