서문
얼마 전 Miniflux로 RSS 서비스를 구축했는데, 데이터베이스는 PostgreSQL이며 Docker 컨테이너에서 실행 중입니다. 이제 이 데이터베이스를 다른 서버의 PostgreSQL로 마이그레이션하고, Miniflux가 Database URL을 통해 마이그레이션된 데이터베이스에 연결하도록 하려고 합니다.
상세 단계
- docker exec 명령어로 컨테이너에 접속
# 모든 컨테이너 나열
docker ps -a
# postgresql 컨테이너에 접속
docker exec -it 68b4 /bin/bash
# 참고: 여기서 68b4는 컨테이너 ID의 앞부분입니다
- pg_dump로 데이터베이스 백업
# 데이터베이스 백업 (admin: 사용자명, db_name: DB명)
pg_dump --username=admin \
--host=0.0.0.0 --port=5432 \
--format=plain --file=/var/lib/postgresql/data/backup.sql db_name
# 백업 파일 확인
cat /var/lib/postgresql/data/backup.sql
# 컨테이너 종료
exit
- 백업 파일을 호스트 머신으로 복사
docker cp 68b4cbec5817:/var/lib/postgresql/data/backup.sql ~/
# 참고: 여기서 68b4cbec5817은 컨테이너 ID, ~/는 호스트 머신의 현재 사용자 홈 디렉토리입니다
- 새 서버에 데이터베이스 생성
여기서는 PostgreSQL이 이미 설치되어 있다고 가정합니다. 튜토리얼은 How To Install and Use PostgreSQL on Ubuntu 24.04를 참고하세요.
# 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
- 백업 파일을 새 서버로 복사
scp ~/backup.sql username@ip:/home/username/
# 참고: username은 새 서버의 사용자 이름, ip는 새 서버의 IP 주소, backup.sql은 백업 파일 이름입니다
- 새 서버의 PostgreSQL에 데이터베이스 가져오기
# postgres 사용자로 전환
sudo su postgres
# 데이터베이스 가져오기
psql --host=localhost --port=5432 \
--username=miniflux --dbname=minifluxdb \
--file=/home/ubuntu/backup.sql
# 참고: miniflux는 데이터베이스 사용자 이름, minifluxdb는 데이터베이스 이름, backup.sql은 백업 파일 이름입니다
- 새 서버의 PostgreSQL 설정
# 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
# 수신 주소 수정
listen_address = 'localhost'
→ listen_address = '*'
# 저장 후 종료
ESC + :wq
# PostgreSQL 서비스 재시작
systemctl restart postgresql
# postgres 사용자 종료
exit
- Miniflux의 Database URL 수정 Miniflux의 compose 파일에서 데이터베이스 URL을 수정합니다.
# 데이터베이스 URL 스키마
postgres://DatabaseUserName:DatabasePassword@HostIP:5432/DatabaseName?sslmode=disable
- Miniflux 서비스 재시작
docker compose up -d