DMV.community 운영자는 마스토돈 서버를 Vultr 가상 사설 서버(VPS)에서 집에 있는 서버로 옮겼다. 클라우드 호스팅 비용을 크게 낮출 수 있지만, 집의 인터넷·전원에 서버가 의존하고 데이터베이스 디스크 성능과 네트워크 보안을 직접 관리해야 한다.
서버 이전은 Vultr에서 마스토돈을 중지하고 pg_dump로 데이터베이스를 백업한 뒤 집 서버에 복원하고, 서비스를 켠 다음 DNS를 바꾸는 방식으로 진행했다. 예상 중단 시간은 20~35분이었다. 이미지와 동영상은 기존처럼 S3 버킷과 CDN에 남겨 이전하지 않았다. 집 네트워크의 포트는 외부에 열지 않고 Cloudflare Tunnel로 트래픽을 받았다. 서비스는 rootless Podman 컨테이너로 실행하며 각 컨테이너는 systemd 사용자 서비스로 관리한다. Elasticsearch 검색 인덱스를 새로 만드는 데는 백그라운드에서 약 한 시간이 걸렸고, 그동안 검색 기능이 다소 부정확했다.
운영자는 집 네트워크에 연결된 스마트홈 기기 등이 위험에 노출될 수 있어 컨테이너 네트워크를 제한했다. 데이터베이스·Redis·Elasticsearch·스트리밍 서버는 서로만 통신할 수 있는 내부 네트워크에 뒀다. 웹 서버와 작업자 컨테이너에는 인터넷 접근을 허용하되, 컨테이너 내부 방화벽이 사설 주소 대역과 호스트, LAN을 향하는 연결을 차단하도록 했다. 모든 컨테이너에서 Linux 권한을 줄이고 새 권한 획득을 막았으며, 메모리·CPU·프로세스 한도도 설정했다. 서비스별 비밀번호를 바꾸고 Redis도 잠갔다.
이전 뒤에는 게시물이 올라가는 데 몇 초씩 걸리는 문제가 생겼다. 집 서버의 btrfs 드라이브를 다른 작업과 함께 쓰면서 PostgreSQL의 안전한 디스크 쓰기가 때때로 지연된 것이 원인이었다. 운영자는 PostgreSQL 전용 SSD를 주문했다. SSD가 도착하기 전까지는 커밋이 디스크에 기록될 때까지 기다리지 않도록 설정해 임시로 대응했으며, 이 경우 정전이 나면 마지막 1초 안팎의 작업이 사라질 수 있다고 설명했다. 서버에는 UPS를 연결했다. 해당 드라이브에 쓰기 작업을 가장 많이 하던 GoToSocial은 새 SSD가 설치될 때까지 중단했다.
이후 Hermes 에이전트로 서버 구성을 점검하며 여러 문제를 손봤다. 캐시 미디어 정리 작업을 웹 서버 컨테이너에서 분리해 별도 메모리 한도를 갖는 컨테이너에서 실행하도록 바꿨다. 첫 정리 작업은 오브젝트 스토리지에서 캐시된 원격 미디어 19만 5,000개, 약 346GB를 삭제했다. 중복으로 기록되던 로그도 한 번만 남기도록 하고, 백그라운드 작업자는 경고와 오류만 기록하게 했다.
데이터베이스에서는 특정 서버의 계정에 설정이 있는지 확인하는 쿼리가 큰 서버에서 모든 계정을 살펴보느라 느렸다. 해당 서버의 데이터베이스에 계정이 15만 개 넘게 들어 있는 사례도 있었다. 운영자는 7.6MB 인덱스를 추가해 쿼리 시간을 352ms에서 약 8ms로 줄였다. Redis는 가득 찼을 때 작업 대기열의 항목까지 삭제할 수 있는 설정에서, 만료 시간이 지정된 키만 삭제하도록 바꿨다.
이전 뒤 일부 사용자 약 30명에게 ntfy.sh 푸시 알림이 전달되지 않는 문제도 있었다. 운영자는 새 IP에서 밀린 알림이 한꺼번에 전송되면서 남용 방지 필터가 작동했을 가능성을 제시했다. 알림 트래픽이 데이터센터에 있는 다른 서버를 거쳐 가도록 중계 구성을 추가했고, 그 서버는 암호화된 트래픽을 전달할 뿐 알림 내용을 볼 수 없다고 설명했다. 알림은 몇 분 안에 다시 전달되기 시작했다.
앞으로 데이터베이스를 전용 SSD로 옮기고 임시 설정을 되돌릴 예정이다. 24GB 데이터베이스의 약 절반을 차지하는 오래된 링크 미리보기 데이터도 정리하고, 새 SSD에 옮긴 뒤 GoToSocial을 다시 실행할 계획이다.
운영자는 집 서버가 VPS보다 여유 용량이 크고 월간 호스팅 비용도 크게 줄어들 것이라고 밝혔다. 다만 장시간 정전이 발생하면 DMV.community도 중단된다. 상태 페이지는 VPS에서 운영해 계속 확인할 수 있다. 운영자는 페디버스 서버를 집으로 옮기려는 이들에게 데이터베이스용 디스크를 처음부터 따로 두고, 컨테이너 런타임의 기본 네트워크 설정이 필요 이상으로 허용적일 수 있다고 경고했다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요