자체 호스팅 사용자를 위한 PostgreSQL 18 업데이트

표준 설치와 이중 컨테이너 환경에서 PostgreSQL 18을 설치했는데 아무런 문제 없이 잘 진행되었습니다. 쉬운 설명을 제공해 주신 @chrisr 님과 팀에 다시 한번 감사드립니다.

Cloudflare CDN 뒤에서 R2 업로드/백업 버킷을 사용하는 이중 컨테이너 구성을 위해 제가 사용한 단계는 다음과 같습니다:

1단계: 디스크 정리

# 사용하지 않는 docker 데이터 모두 삭제
docker system prune -a -f
# 오래된 로그와 apt 캐시 정리
journalctl --vacuum-time=2d
apt-get clean
apt-get autoremove -y
# 데이터베이스 크기 확인
du -sh /var/discourse/shared/data/postgres_data*
# 새로 확보된 여유 공간 확인
df -h -x tmpfs -x devtmpfs

2단계: 유지보수 및 백업

  1. Cloudflare 유지보수 페이지를 편집하여 15~20분간의 시스템 유지보수 업데이트라고 표시합니다(이 정도 시간이 걸리지는 않을 수 있지만, 안전을 위해 여유를 두는 것이 좋습니다!). 그리고 재로드 타이머를 30초 정도로 설정합니다. 유지보수 페이지를 표시하도록 Cloudflare 워커 라우트를 활성화합니다.

  1. 명령줄을 통해 백업을 트리거합니다:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
  1. Cloudflare R2 대시보드에 로그인하여 백업 폴더를 확인하고 백업 파일이 성공적으로 업로드되었는지 검증합니다

3단계: 안전 종료

  1. 먼저 활성 연결을 종료하기 위해 웹 컨테이너를 멈추고, 그 다음 데이터베이스 컨테이너를 멈춥니다:
cd /var/discourse
./launcher stop web_only
./launcher stop data
  1. PostgreSQL이 올바르게 종료되었는지 확인합니다:
tail -n 20 shared/data/log/var-log/postgres/current

4단계: 업그레이드 리빌드

다음 명령어를 순서대로 실행합니다:

./launcher rebuild data # postgresql 18 덤프, 마이그레이션 및 복원
./launcher rebuild data # 데이터베이스 컨테이너 리빌드
./launcher rebuild web_only # 웹 앱 리빌드

5단계: 최적화 및 정리

  1. 누락된 pg18 테이블 통계를 생성합니다. 그렇지 않으면 포럼이 평소보다 느려집니다:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
  1. 모든 것이 정상적으로 작동하는지 포럼을 테스트합니다 - 유지보수 페이지에 재로드 타이머가 설정되어 있다면 이제 유지보수 페이지가 로드되지 않아야 합니다.
  2. 유지보수 페이지로 향하는 Cloudflare 워커 라우트를 제거합니다(일일 100,000회 제한에 도달하는 것을 원치 않으므로!)
  3. 디스크 공간을 확보하기 위해 이전 pg18 데이터를 삭제합니다:
rm -fr /var/discourse/shared/data/postgres_data_old/

완료! :partying_face: :clinking_beer_mugs:

7개의 좋아요