Debian 10: Debian 8からRedmine + PostgreSQLを移行する

Debian 8で運用していたPostgreSQLを使ったRedmineをDebian 10へ移行した際の手順を記載する。MySQLを使っている場合でも、データベースのバックアップとリストアのコマンドは異なるが、同様の手順になると思う。

1 Debian 8でRedmineのデータをバックアップする

データベースをバックアップする。

$ sudo -u postgres pg_dump redmine_default > /tmp/redmine_default.pgsql

/var/lib/redmineをバックアップする。

$ cd /var/lib
$ sudo tar czfp /tmp/redmine.tgz redmine

この記事ではこれらのファイルをDebian 10の/tmpに転送している。

2 Debian 10にredmineをインストールする

Redmineをインストールする。 Debian 10ではRedmineはbuster-backportsリポジトリに入っており、Redmineが必要とするruby-xxxパッケージもbuster-backportsリポジトリに入っているバージョンを使用する必要がある。

#!/bin/sh -e

# Database passwd for redmine_default table.
[ -z "${REDMINE_PASSWD}" ] && REDMINE_PASSWD=redmine

pgsql_install()
{
    sudo apt install -y postgresql
}

redmine_install()
{
    # Enable buster-backports repository.
    echo "deb http://deb.debian.org/debian buster-backports main" | \
        sudo tee /etc/apt/sources.list.d/backports.list
    sudo apt update -y

    cat <<EOF | sudo debconf-set-selections
redmine redmine/instances/default/dbconfig-install boolean true
redmine redmine/instances/default/database-type select pgsql
redmine redmine/instances/default/remote/host select localhost
redmine redmine/instances/default/pgsql/app-pass password ${REDMINE_PASSWD}
redmine redmine/instances/default/pgsql/admin-pass password
redmine redmine/instances/default/password-confirm password
redmine redmine/instances/default/app-password-confirm password ${REDMINE_PASSWD}
EOF

    # The redmine/buster-backports needs ruby-xxx package in buster-backports
    # repository.
    sudo apt install -y redmine/buster-backports redmine-pgsql/buster-backports \
         ruby-rouge/buster-backports
}

apache_install()
{
    sudo apt install -y apache2 libapache2-mod-passenger bundler

    # Overwrite passenger.conf.
    cat << EOF | sudo tee /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
    PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
    PassengerDefaultRuby /usr/bin/ruby
    PassengerDefaultUser www-data
    RailsBaseURI /redmine
</IfModule>
EOF

    cd /var/www/html
    sudo ln -s /usr/share/redmine/public redmine
    sudo chown -R www-data:www-data /usr/share/redmine
    cat << EOF | sudo tee /etc/apache2/sites-available/redmine.conf
<VirtualHost _default_:443>
    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

    <Directory /redmine>
        Options FollowSymLinks
        PassengerResolveSymlinksInDocumentRoot on
        AllowOverride None
    </Directory>
</VirtualHost>
EOF

    sudo a2enmod passenger
    sudo a2enmod ssl
    sudo a2ensite redmine

    sudo systemctl enable apache2
    sudo systemctl restart apache2
}

redmine_main()
{
    pgsql_install
    redmine_install
    apache_install
}

redmine_main

3 Debian 10でRedmineのデータをリストアする

Apacheを停止する。

$ sudo systemctl stop apache2

redmineのインストールで作成されたredmine_defaultテーブルを削除し、空の redmine_defaultテーブルを作成する。

$ cat <<EOF | sudo -u postgres psql
DROP DATABASE redmine_default;
CREATE DATABASE redmine_default OWNER = "redmine/instances/default" \
TEMPLATE = template0 ENCODING = 'UTF8';
EOF

Debian 8のredmine_defaultテーブルからデータをリストアする。テーブルにアクセスできるユーザをredmine_defaultを"redmine/instances/default"に変更する(/etc/redmine/default/database.ymlのusernameを "redmine/instances/default"からredmine_defaultに変更しても良い)。

$ sed -e 's;redmine_default;"redmine/instances/default";g' \
-i redmine_default.pgsql
$ sudo -u postgres psql redmine_default < /tmp/redmine_default.pgsql

データベースのマイグレーションを実行する。

$ wget https://www.redmine.org/projects/redmine/repository/raw/tags/3.4.2/db/migrate/20170309214320_add_project_default_assigned_to_id.rb
$ sudo mv 20170309214320_add_project_default_assigned_to_id.rb \
/usr/share/redmine/db/migrate/
$ cd /usr/share/redmine/
$ sudo bundle exec rake db:migrate RAILS_ENV=production

/var/lib/redmineを展開する。 Gemfile.lockがある場合は削除しておく。

$ cd /var/lib
$ sudo tar zxf /tmp/redmine.tgz
$ sudo rm -f /var/lib/redmine/Gemfile.lock

Apacheを起動する。これでDebian 10でRedmineが動くようになった。

$ sudo systemctl start apache2