はじめに
先日、Miniflux を使って RSS サービスを構築しました。そのデータベースには PostgreSQL を使用していましたが、Docker コンテナ内で動作していました。今回、このデータベースを別のサーバーの PostgreSQL に移行し、Miniflux が Database URL を使って移行後のデータベースに接続するようにします。
詳細手順
docker execコマンドでコンテナに入る# 全コンテナを一覧表示 docker ps -a # PostgreSQL コンテナに入る docker exec -it 68b4 /bin/bash # 注意: ここでの 68b4 はコンテナ ID の先頭数桁ですpg_dumpでデータベースをバックアップ# データベースをバックアップ pg_dump --username=admin \ --host=0.0.0.0 --port=5432 \ --format=plain --file=/var/lib/postgresql/data/backup.sql db_name # 注意: admin はデータベースのユーザー名、db_name はデータベース名です
バックアップファイルを確認
cat /var/lib/postgresql/data/backup.sql
コンテナから退出
exit
3. バックアップファイルをホストマシンにコピー
bash docker cp 68b4cbec5817:/var/lib/postgresql/data/backup.sql ~/
注意: 68b4cbec5817 はコンテナ ID、~/ はホストマシンのカレントユーザーのホームディレクトリです
4. 新しいサーバーでデータベースを作成
ここでは PostgreSQL がインストール済みであることを前提とします。チュートリアルは [How To Install and Use PostgreSQL on Ubuntu 24.04](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-24-04) を参照してください。
bash
postgres ユーザーに切り替え
sudo su postgres
postgres CLI に入る
psql
ユーザーを作成
postgres=# CREATE USER username WITH PASSWORD '*';
ここで postgres=# は PostgreSQL のプロンプトです。入力する必要はありません。
username はデータベースのユーザー名、* はデータベースのパスワードです
データベースを作成
postgres=# CREATE DATABASE dbname OWNER dbuser;
dbname はデータベース名、dbuser は先ほど作成したユーザー名です
権限を付与
postgres=# GRANT ALL PRIVILEGES ON DATABASE dbname TO dbuser;
dbname はデータベース名、dbuser は先ほど作成したユーザー名です
データベース一覧を表示
postgres=# \l
ユーザー一覧を表示
postgres=# \du
postgres CLI を終了
postgres=# \q
postgres ユーザーから退出
exit
5. バックアップファイルを新しいサーバーにコピー
bash scp ~/backup.sql username@ip:/home/username/
注意: username は新しいサーバーのユーザー名、ip は新しいサーバーの IP アドレス、backup.sql はバックアップファイル名です
6. 新しいサーバーの PostgreSQL にデータベースをインポート
bash
postgres ユーザーに切り替え
sudo su postgres
データベースをインポート
psql --host=localhost --port=5432 \ --username=miniflux --dbname=minifluxdb \ --file=/home/unbuntu/backup.sql
注意: miniflux はデータベースのユーザー名、minifluxdb はデータベース名、backup.sql はバックアップファイル名です
7. 新しいサーバーの PostgreSQL を設定
bash
postgres ユーザーに切り替え
sudo su postgres
postgres CLI に入る
psql
hba_file のパスを表示
SHOW hba_file;
出力例
/etc/postgresql/14/main/pg_hba.conf
postgres CLI を終了
\q
hba_file を編集
vim /etc/postgresql/14/main/pg_hba.conf
リッスン設定を変更
host all all 0.0.0.0/0 md5 host all all ::/0 md5
保存して終了
ESC + :wq
postgresql.conf ファイルを編集
vim /etc/postgresql/14/main/postgresql.conf
リッスンアドレスを変更
listenaddress = 'localhost' を listenaddress = '*' に変更
保存して終了
ESC + :wq
PostgreSQL サービスを再起動
systemctl restart postgresql
postgres ユーザーから退出
exit
8. Miniflux の Database URL を変更
Miniflux の compose ファイルでデータベースの URL を変更します
yaml
データベース URL スキーマ
postgres://DatabaseUserName:DatabasePassword@HostIP:5432/DatabaseName?sslmode=disable
9. Miniflux サービスを再起動
bash docker compose up -d