
1. Redmine简介与核心价值Redmine作为一款开源的项目管理工具已经在全球范围内被各种规模的企业和团队广泛采用。它基于Ruby on Rails框架开发采用GPL v2许可协议这意味着你可以自由地使用、修改和分发它。我最早在2013年接触Redmine时就被它的灵活性所吸引当时我们团队正在寻找一个能够同时处理多个项目的解决方案。Redmine最核心的价值在于它集成了项目管理中的多个关键功能模块。不同于那些功能单一的issue跟踪系统Redmine提供了一个完整的生态系统。它包含了问题跟踪、甘特图、日历、新闻、文档管理、文件存储、Wiki以及论坛等功能。特别值得一提的是它的多项目支持能力这让我们可以在一个平台上管理数十个不同性质的项目而无需为每个项目单独部署系统。在实际使用中我发现Redmine的权限系统设计得非常精细。你可以为不同角色的用户设置不同级别的访问权限甚至可以精确控制某个用户对特定项目的特定功能模块的访问权限。这种灵活性对于需要处理敏感项目或客户数据的团队来说尤为重要。另一个Redmine的杀手级功能是它的插件体系。通过安装各种社区开发的插件你可以扩展Redmine的功能比如添加敏捷看板、时间跟踪、报表生成等特性。我在过去几年里尝试过不下20个插件有些已经成为我们日常工作流程中不可或缺的部分。2. 安装前的环境准备2.1 硬件与操作系统要求在开始安装Redmine之前我们需要确保系统满足基本要求。根据我的经验即使是小团队使用也建议至少配置2核CPU和4GB内存的服务器。Redmine对数据库的依赖较重当issue数量超过1万条时性能差异就会显现出来。操作系统方面Redmine可以运行在大多数Linux发行版上。我个人偏好使用Ubuntu LTS版本目前是22.04因为它的长期支持特性和广泛的社区资源。CentOS/RHEL也是不错的选择特别是在企业环境中。以下是一个基本的环境检查清单Ruby版本2.7或3.0Redmine 5.x支持数据库MySQL 5.7/MariaDB 10.3 或 PostgreSQL 10Web服务器Apache或Nginx内存至少4GB生产环境建议8GB存储SSD硬盘至少20GB可用空间考虑附件存储2.2 依赖包安装在Ubuntu系统上我们需要先安装一些基础依赖包。这些包包括编译工具、数据库客户端库和其他必要的系统组件sudo apt update sudo apt install -y build-essential libssl-dev libyaml-dev libreadline-dev \ openssl curl git-core zlib1g-dev libffi-dev libxml2-dev libxslt1-dev \ libcurl4-openssl-dev libmagickwand-dev imagemagick libsqlite3-dev对于使用MySQL/MariaDB作为后端数据库的情况还需要安装对应的开发包sudo apt install -y default-libmysqlclient-dev如果是选择PostgreSQL则安装以下包sudo apt install -y libpq-dev postgresql-client2.3 数据库准备数据库是Redmine的核心组件正确的配置对系统性能至关重要。以MySQL为例我们需要先创建数据库和用户CREATE DATABASE redmine CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER redminelocalhost IDENTIFIED BY your_strong_password; GRANT ALL PRIVILEGES ON redmine.* TO redminelocalhost; FLUSH PRIVILEGES;对于生产环境我强烈建议进行以下优化配置在MySQL的my.cnf中[mysqld] innodb_buffer_pool_size 1G innodb_log_file_size 256M innodb_flush_log_at_trx_commit 2 innodb_flush_method O_DIRECT character-set-server utf8mb4 collation-server utf8mb4_unicode_ci这些配置将显著提升Redmine在处理大量issue时的性能表现。3. Ruby环境配置3.1 使用RVM或rbenv管理Ruby版本Redmine对Ruby版本有特定要求使用版本管理器可以方便地切换不同Ruby版本。我个人偏好使用rbenv因为它更轻量且易于管理# 安装rbenv git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo export PATH$HOME/.rbenv/bin:$PATH ~/.bashrc echo eval $(rbenv init -) ~/.bashrc source ~/.bashrc # 安装ruby-build插件 git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build # 安装Ruby 3.0.4Redmine 5.x兼容版本 rbenv install 3.0.4 rbenv global 3.0.4安装完成后验证Ruby版本ruby -v3.2 Bundler和Gem配置Ruby的包管理工具Bundler是管理Redmine依赖的关键。首先安装Bundlergem install bundler为了提高gem安装速度我们可以配置国内镜像源bundle config set --local mirror.https://rubygems.org https://gems.ruby-china.com这个配置会显著加快后续的依赖安装过程特别是在国内网络环境下。4. Redmine核心安装步骤4.1 获取Redmine源代码Redmine提供了多种安装方式但从源代码安装能给我们最大的灵活性。我建议从官方下载最新稳定版本wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz tar xvf redmine-5.0.5.tar.gz sudo mv redmine-5.0.5 /opt/redmine cd /opt/redmine4.2 配置数据库连接在/opt/redmine/config目录下我们需要创建database.yml文件。以下是MySQL配置示例production: adapter: mysql2 database: redmine host: localhost username: redmine password: your_strong_password encoding: utf8mb4对于PostgreSQL配置略有不同production: adapter: postgresql database: redmine host: localhost username: redmine password: your_strong_password encoding: utf8 schema_search_path: public4.3 安装依赖包在Redmine根目录下运行bundle install --without development test这个过程可能会花费一些时间因为它需要下载和编译所有必要的Ruby gem。如果遇到libssl或libmysqlclient问题请确保之前已经正确安装了开发包。4.4 生成密钥和数据库迁移接下来我们需要生成会话存储密钥并初始化数据库bundle exec rake generate_secret_token RAILS_ENVproduction bundle exec rake db:migrate RAILS_ENVproduction bundle exec rake redmine:load_default_data在加载默认数据时系统会提示选择语言。输入zh可以选择中文作为默认语言。5. Web服务器集成5.1 使用Passenger NginxPassenger是一个优秀的Ruby应用服务器与Nginx集成良好。首先安装Passengersudo apt install -y dirmngr gnupg sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 sudo apt-get install -y apt-transport-https ca-certificates sudo sh -c echo deb https://oss-binaries.phusionpassenger.com/apt/passenger $(lsb_release -cs) main /etc/apt/sources.list.d/passenger.list sudo apt-get update sudo apt-get install -y passenger nginx然后配置Nginx站点。在/etc/nginx/sites-available/redmine中添加server { listen 80; server_name redmine.yourdomain.com; passenger_enabled on; passenger_ruby /home/youruser/.rbenv/versions/3.0.4/bin/ruby; root /opt/redmine/public; client_max_body_size 10m; location ~ ^/assets/ { expires 1y; add_header Cache-Control public; add_header ETag ; break; } }启用站点并重启Nginxsudo ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx5.2 使用Puma作为应用服务器如果你更喜欢Puma可以这样配置。首先在Gemfile中添加gem puma然后运行bundle install。创建config/puma.rbworkers 2 threads 1, 6 app_dir /opt/redmine shared_dir #{app_dir}/shared environment production daemonize true bind unix://#{shared_dir}/tmp/sockets/puma.sock pidfile #{shared_dir}/tmp/pids/puma.pid state_path #{shared_dir}/tmp/pids/puma.state stdout_redirect #{shared_dir}/log/puma.stdout.log, #{shared_dir}/log/puma.stderr.log, true preload_app!然后创建一个systemd服务文件/etc/systemd/system/redmine.service[Unit] DescriptionRedmine Puma Server Afternetwork.target [Service] Typesimple Userredmine Groupredmine WorkingDirectory/opt/redmine EnvironmentRAILS_ENVproduction ExecStart/home/redmine/.rbenv/shims/bundle exec puma -C /opt/redmine/config/puma.rb Restartalways [Install] WantedBymulti-user.target启动服务sudo systemctl daemon-reload sudo systemctl start redmine sudo systemctl enable redmine6. 邮件通知配置Redmine的邮件通知功能对于团队协作至关重要。以下是通过Gmail SMTP发送邮件的配置示例config/configuration.ymlproduction: email_delivery: delivery_method: :smtp smtp_settings: address: smtp.gmail.com port: 587 domain: yourdomain.com authentication: :plain user_name: yourgmail.com password: your_app_specific_password enable_starttls_auto: true openssl_verify_mode: none对于企业环境可能需要配置本地邮件服务器或使用其他SMTP服务提供商。测试邮件配置RAILS_ENVproduction bundle exec rake redmine:email:test[recipientexample.com]7. 安全加固与优化7.1 文件权限设置正确的文件权限可以防止安全漏洞sudo chown -R redmine:redmine /opt/redmine sudo chmod -R 755 /opt/redmine/public sudo chmod -R 755 /opt/redmine/tmp sudo chmod -R 644 /opt/redmine/config/{configuration.yml,database.yml}7.2 启用HTTPS使用Lets Encrypt免费SSL证书sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d redmine.yourdomain.com自动续期测试sudo certbot renew --dry-run7.3 备份策略创建备份脚本/opt/redmine/backup.sh#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/backups/redmine # 备份数据库 mysqldump -u redmine -pyour_password redmine | gzip $BACKUP_DIR/redmine_db_$DATE.sql.gz # 备份文件 tar czf $BACKUP_DIR/redmine_files_$DATE.tar.gz /opt/redmine/files /opt/redmine/plugins /opt/redmine/public/themes # 保留最近30天备份 find $BACKUP_DIR -type f -mtime 30 -delete设置cron任务每天凌晨执行0 2 * * * /opt/redmine/backup.sh8. 插件安装与管理Redmine的强大之处在于其插件生态系统。以下是安装常用插件的步骤8.1 安装Redmine Agile插件cd /opt/redmine/plugins git clone https://github.com/RCRM/redmine_agile.git cd .. bundle install RAILS_ENVproduction bundle exec rake redmine:plugins:migrate8.2 安装Redmine Checklists插件cd /opt/redmine/plugins git clone https://github.com/RCRM/redmine_checklists.git cd .. bundle install RAILS_ENVproduction bundle exec rake redmine:plugins:migrate安装插件后需要重启Redmine服务sudo systemctl restart redmine9. 常见问题排查9.1 502 Bad Gateway错误这通常是由于应用服务器没有正确运行导致的。检查步骤确认Puma/Passenger是否运行sudo systemctl status redmine检查socket文件权限ls -la /opt/redmine/shared/tmp/sockets/查看应用日志tail -n 100 /opt/redmine/log/production.log9.2 数据库连接问题如果遇到ActiveRecord::ConnectionTimeoutError可以尝试增加数据库连接池大小config/database.ymlproduction: pool: 20 timeout: 5000检查MySQL最大连接数SHOW VARIABLES LIKE max_connections;9.3 性能优化技巧启用缓存config/environments/production.rbconfig.cache_store :mem_cache_store, localhost安装memcachedsudo apt install memcached定期清理旧会话RAILS_ENVproduction bundle exec rake db:sessions:trim10. 升级与维护10.1 升级流程备份当前安装cp -r /opt/redmine /opt/redmine_backup下载新版本wget https://www.redmine.org/releases/redmine-5.1.0.tar.gz tar xvf redmine-5.1.0.tar.gz迁移配置和文件cp /opt/redmine_backup/config/database.yml /opt/redmine-5.1.0/config/ cp -r /opt/redmine_backup/files /opt/redmine-5.1.0/ cp -r /opt/redmine_backup/plugins /opt/redmine-5.1.0/ cp -r /opt/redmine_backup/public/themes /opt/redmine-5.1.0/public/执行升级cd /opt/redmine-5.1.0 bundle install --without development test RAILS_ENVproduction bundle exec rake db:migrate RAILS_ENVproduction bundle exec rake tmp:cache:clear RAILS_ENVproduction bundle exec rake tmp:sessions:clear切换目录并重启服务sudo rm /opt/redmine sudo ln -s /opt/redmine-5.1.0 /opt/redmine sudo systemctl restart redmine10.2 日常维护任务定期清理日志find /opt/redmine/log -type f -name *.log -mtime 30 -delete监控磁盘空间df -h /opt/redmine/files检查cron任务crontab -l更新插件cd /opt/redmine/plugins/redmine_agile git pull origin master cd /opt/redmine RAILS_ENVproduction bundle exec rake redmine:plugins:migrate在实际运维中我发现每周进行一次简单的系统检查可以预防大多数问题。这包括检查日志文件大小、数据库连接数、磁盘空间和备份完整性等基本指标。