Debian Redmine 备份与恢复

Posted on Jan 23, 2019

几年前装了 Debian 作为服务器,顺便把以前的 Bitnami Redmine (Windows) 迁移了过来。好多年过去也没再去干预,系统一直稳定运行,每周定时备份。最近因为考虑迁移这些工具到Docker上,重新整理一遍备份和恢复流程,以备不时之需。

系统需求

  1. Redmine 3.3 installed with apt on Debian 9 (stretch).
  2. 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 

插件

  1. 恢复插件至路径 /usr/share/redmine/plugins
  2. 更新插件
    cd /usr/share/redmine
    rake redmine:plugins:migrate RAILS_ENV=production
    
  3. 重启 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!"