매니지드 PostgreSQL이 더 이상 편리하지 않게 되는 순간이 있습니다: 티어가 제공하지 않는 확장을 원할 때, 실제 쿼리 플랜을 보고 work_mem을 튜닝하고 싶을 때, 슈퍼유저를 원할 때. Postgres를 소유하고 싶을 때 — 설정, 버전, 확장, 백업 일정 — 완전한 root를 가진 VPS가 솔직한 답입니다. 이것은 PostgreSQL에 특화된 설정입니다; 더 넓은 "데이터베이스를 셀프호스팅하라" 그림(Postgres 대 Redis, 공유 머신이 잘못된 경우)은 일반 데이터베이스 유스케이스를 보세요.
왜 PostgreSQL을 셀프호스팅하나
당신의 머신에서는 매니지드 티어가 배급하는 것을 얻습니다:
- 전체
postgresql.conf—shared_buffers,work_mem,max_connections, WAL 설정을 벤더 기본값이 아니라 당신의 워크로드에 맞춰 튜닝. - 어떤 확장이든. 임베딩에는
pgvector, 지리공간에는PostGIS, 시계열에는TimescaleDB,pg_cron,pg_stat_statements— 필요한 것을 설치하세요. 여기가 매니지드 티어가 가장 자주 안 된다고 하는 지점입니다. - 당신의 메이저 버전, 제공자가 아니라 당신의 일정에 맞춰 업그레이드.
- 슈퍼유저와 그 아래 OS — 데이터 디렉터리를 옮기고, 커널을 튜닝하고, 두 번째 머신으로 스트리밍 복제를 실행.
pgvector가 여기 온 이유라면, Postgres 더하기 pgvector가 한 머신 위의 완전한 벡터 스토어라는 점에 주목하세요 — 셀프호스팅 RAG 스택과 에이전트 메모리 뒤에 있는 것과 같은 빌딩 블록입니다.
설정하기 (Ubuntu 24.04, Docker)
# docker-compose.yml — PostgreSQL 16 (+ pgvector via the pgvector image)
services:
db:
image: pgvector/pgvector:pg16
restart: always
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: change-me-strong
POSTGRES_DB: app
command: ["postgres", "-c", "shared_buffers=512MB", "-c", "work_mem=32MB"]
volumes: ["/srv/pg:/var/lib/postgresql/data"]
ports: ["127.0.0.1:5432:5432"] # localhost only; see below to expose safely
docker compose up -d
docker compose exec db psql -U app -c "CREATE EXTENSION IF NOT EXISTS vector;"
127.0.0.1에 바인딩되어, 아무것도 노출하지 않고 같은 머신의 앱을 서비스합니다. 다른 서버를 들여보내려면, 그것이 다음 섹션입니다.
다른 서버가 연결하게 하기 — 안전하게
다른 머신이 데이터베이스를 필요로 하는 순간, 두 가지가 바뀝니다:
- 안정적이고 라우팅 가능한 주소 — 전용 IPv4 플랜(Small-IP $16, Medium-IP $20). NAT 플랜은 아웃바운드 IP를 공유하므로 아웃바운드에는 좋지만 다른 이들이 다이얼하는 데이터베이스가 되기에는 아닙니다.
- 방화벽을 강하게. 5432를 특정 클라이언트 IP에만 열고, 절대
0.0.0.0/0은 아니며, TLS를 요구하세요. 공개 인터넷에서 열린 Postgres 포트는 몇 분 만에 발견됩니다 — UFW 방화벽으로 잠그세요.
백업은 당신의 일
셀프호스팅은 백업이 당신 몫이라는 뜻이고, 규칙은 이렇습니다: 필요해지기 전에 하라. 논리 백업에는 cron의 pg_dump, 소중한 무엇이든 시점 복구에는 WAL 아카이빙. 덤프를 머신 밖으로 보내고, 복원을 최소 한 번은 테스트하세요 — 한 번도 복원해 본 적 없는 백업은 희망이지 백업이 아닙니다. 직접 운영하고 싶지 않다면 매니지드 백업 애드온이 있습니다.
왜 PostgreSQL에 EQVPS인가
- 완전한 root, 슈퍼유저, 당신의 설정 — 월 $8부터, 데이터베이스와 그 WAL이 동시에 쓸 때 의미가 살아나는 NVMe(RAID1).
- KYC 없음, 암호화폐 결제. 등록에 이메일, 결제에 USDC/USDT.
- EU(독일, 핀란드), 약 60초 만에 root. 스키마를 가져와 시작하세요.
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.