Debian Redmine 备份与恢复
几年前装了 Debian 作为服务器,顺便把以前的 Bitnami Redmine (Windows) 迁移了过来。好多年过去也没再去干预,系统一直稳定运行,每周定时备份。最近因为考虑迁移这些工具到Docker上,重新整理一遍备份和恢复流程,以备不时之需。
系统需求
- Redmine 3.3 installed with apt on Debian 9 (stretch).
- Database: PostgreSQL
备份
配置文件
配置文件包含路径:/etc/redmine/{instance}
例如,默认实例名称为default
,则配置文件路径为/etc/redmine/{default}
。包含以下配置文件:
- configuration.yml
- database.xml
- secret_key.txt
数据库
在备份脚本执行用户的主目录创建 .pgpass
文件,加入连接数据库的用户名密码等连接信息。
echo "HOST:PORT:DB_NAME:USERNAME:PASSWORD" > ~/.pgpass
例如:
echo "localhost:5432:redmine_default:redmine/instances/default:PASSWORD" > ~/.pgpass
# 赋予权限
chmod 600 ~/.pgpass
使用 pg_dump 导出数据:
pg_dump -U redmine/instances/default -d redmine_default -h localhost -Fc --file=/home/redmine/redmine_backup/db_dumps/redmine_`date +%Y-%m-%d`.sqlc
附件
路径:/var/lib/redmine/${instance}/files
rsync -a /var/lib/redmine/default/files /home/redmine/redmine_backup/
插件
路径:/usr/share/redmine/plugins
主题
路径:/usr/share/redmine/public/themes
备份脚本
#!/bin/bash
# Redmine Backup Shell
# Author: Han Qian
# Version: 1.0
# Reference:
#1. https://www.redmine.org/projects/redmine/wiki/RedmineBackupRestore
#2. https://wiki.debian.org/Redmine
echo "Redmine backup start..."
# variables
redmine_instance=default
backup_root_dir=/home/redmine/redmine_backup/${redmine_instance}
echo "Instance:" ${redmine_instance}
echo "Backup dir:" ${backup_root_dir}
echo "------------------------------"
# Configs
echo "backing up configs..."
backup_config_dir=${backup_root_dir}/config
mkdir -p ${backup_config_dir}
sudo rsync -a /etc/redmine/${redmine_instance}/* ${backup_config_dir}
echo "backup configs finished"
# Database
echo "backing up database..."
backup_db_dir=${backup_root_dir}/db_dumps
mkdir -p ${backup_db_dir}
pg_dump -U redmine/instances/${redmine_instance} -d redmine_${redmine_instance} -h localhost -Fc --file=${backup_db_dir}/redmine_`date +%Y-%m-%d`.sqlc
echo "backup database finished"
# Attachments
echo "backing up attachments..."
rsync -a /var/lib/redmine/${redmine_instance}/files ${backup_root_dir}
echo "backup attachments finished"
echo "------------------------------"
echo "backup completed!"
恢复
数据库
检查 ~/.pgass
文件是否包含数据库连接信息,若没有则需要创建加入数据连接信息。见上述“备份数据库”步骤。
pg_restore -U redmine/instances/default -d redmine_default -h localhost -c redmine_bak.sqlc
附件
rsync -a /home/redmine/redmine_backup/ /var/lib/redmine/default/files
插件
- 恢复插件至路径
/usr/share/redmine/plugins
- 更新插件
cd /usr/share/redmine rake redmine:plugins:migrate RAILS_ENV=production
- 重启 Redmine
cd /var/lib/redmine/default/tmp touch restart.txt
主题
恢复主题文件路径:/usr/share/redmine/public/themes
恢复脚本
#!/bin/bash
# Redmine Restore Shell
# Author: Han Qian
# Version: 1.0
# Reference:
#1. https://www.redmine.org/projects/redmine/wiki/RedmineBackupRestore
#2. https://wiki.debian.org/Redmine
echo "Redmine restore start..."
# variables
redmine_instance=default
backup_root_dir=/home/redmine/redmine_backup/${redmine_instance}
echo "Instance:" ${redmine_instance}
echo "Backup dir:" ${backup_root_dir}
echo "------------------------------"
# Configs
echo "restoring configs..."
backup_config_dir=${backup_root_dir}/config
sudo rsync -a ${backup_config_dir}/* /etc/redmine/${redmine_instance}/
echo "restore configs finished"
# Database
echo "restoring database..."
backup_db_dir=${backup_root_dir}/db_dumps
pg_restore -U redmine/instances/default -d redmine_default -h localhost -c ${backup_db_dir}/redmine_`date +%Y-%m-%d`.sqlc .sqlc
echo "restore database finished"
# Attachments
echo "restoring attachments..."
sudo rsync -a ${backup_root_dir}/files/* /var/lib/redmine/${redmine_instance}/files/
echo "restore attachments finished"
echo "------------------------------"
echo "restore completed!"