−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS

Mastodon용 VPS: 나만의 작은 인스턴스

VPS에서 작은 Mastodon 인스턴스를 운영하세요. 메모리와 디스크에 대한 솔직한 산정, Docker 설치, SMTP 릴레이를 통한 메일, 디스크가 차지 않게 하는 미디어 정리.

내 소셜 계정을 직접 소유한다는 건 멋진 생각입니다. 그 계정이 남의 서버에서, 남의 규칙과 가동 시간에 따라 살고 있다는 걸 깨닫기 전까지는요. 나만의 Mastodon 인스턴스는 이 문제를 풀어 줍니다. 핸들은 @you@your-domain이고, 끌 수 있는 사람은 나뿐입니다. 다만 Mastodon은 작은 앱이 아닙니다. 무엇을 떠맡는지 알고 시작하는 게 좋습니다.

누구에게 맞나

그보다 크면 모더레이션 의무, 신고 처리, 제대로 된 인프라를 갖춘 서비스를 운영하는 셈입니다. 그건 또 다른 이야기입니다.

실제로 필요한 것

Mastodon은 여러 프로세스를 동시에 돌립니다. Rails 웹 앱, 백그라운드 Sidekiq 워커, 스트리밍 서버, PostgreSQL, Redis. 연합 구조 때문에 내가 자는 동안에도 서버는 다른 서버에서 글과 미디어를 계속 가져옵니다.

인스턴스요금제
1인, 팔로우 적음Small-IP — 2 vCPU, 4 GB, 월 $16
작은 커뮤니티, 활발한 연합Medium-IP — 4 vCPU, 6 GB, 월 $20

4 GB로도 돌아가지만 빠듯합니다. 팔로우하는 인기 글에 답글이 수천 개 달리면 Sidekiq 큐가 밀립니다. 6 GB면 숨 쉴 여유가 생깁니다. 또 다른 제약은 디스크로, 아래 미디어 항목을 보세요.

도메인과 전용 IP도 필요합니다. 다른 서버들이 443번 포트로 내 서버에 전달합니다.

Docker로 설치하기

공식 저장소에 docker-compose.yml이 들어 있습니다. Docker가 설치된 새 Ubuntu 24.04 서버에서:

git clone https://github.com/mastodon/mastodon.git
cd mastodon
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
touch .env.production
docker compose run --rm -v $(pwd)/.env.production:/opt/mastodon/.env.production \
  web bundle exec rake mastodon:setup
docker compose up -d

설정 작업은 도메인, 데이터베이스와 Redis 설정(기본값이 compose 파일과 맞습니다), 메일 설정, 첫 관리자 계정을 묻고, 모든 것을 .env.production에 씁니다. 체크아웃한 태그의 릴리스 노트는 꼭 읽으세요. 메이저 버전 사이에 절차가 바뀌기도 합니다.

Mastodon에는 dist/nginx.conf에 nginx 템플릿이 들어 있습니다. /etc/nginx/sites-available/에 복사하고, 도메인을 바꾸고, certbot으로 인증서를 받으세요. 리버스 프록시와 도메인 가이드가 둘 다 다룹니다.

메일: 릴레이를 쓰세요

Mastodon은 가입 확인과 비밀번호 재설정 메일을 보냅니다. 저희 서버에서는 25번과 465번 포트가 닫혀 있으니, 587번 포트로 외부 트랜잭션 메일 서비스를 가리키세요.

SMTP_SERVER=smtp.your-provider.example
SMTP_PORT=587
SMTP_LOGIN=apikey
SMTP_PASSWORD=your-smtp-password
SMTP_FROM_ADDRESS=notifications@your-domain.example

솔직히 어차피 릴레이를 원하게 될 겁니다. 갓 만든 서버 IP에서 보낸 메일은 스팸함으로 가기 쉽고, 릴레이에는 아직 내게 없는 평판이 있습니다.

미디어: 디스크 먹는 괴물

서버가 보는 계정들의 이미지와 동영상은 전부 로컬에 캐시됩니다. 활발한 인스턴스라면 일주일에 몇 GB씩입니다. 오래된 원격 미디어를 정기적으로 정리하세요.

docker compose exec web tootctl media remove --days 7
docker compose exec web tootctl preview_cards remove --days 30

이걸 매일 도는 cron 작업에 넣으세요. 인스턴스가 커지면 .env.production의 S3_* 설정으로 미디어를 S3 호환 오브젝트 스토리지에 옮기세요. 그러면 VPS 디스크에는 데이터베이스만 남습니다.

운영

팀 채팅용으로 더 가벼운 게 필요하다면 Matrix 서버가 더 잘 맞을 수 있습니다.

배포할 준비가 되셨나요? 암호화폐로 결제, KYC 없음 — 약 1분 만에 온라인.

지금 배포 →

FAQ

Mastodon 인스턴스에는 메모리가 얼마나 필요한가요?

1인용이나 작은 인스턴스라면 현실적인 최소치는 4 GB, 넉넉한 건 6 GB입니다. Mastodon은 웹 프로세스, Sidekiq 워커, PostgreSQL, Redis를 동시에 돌리고, 연합 때문에 아무도 글을 쓰지 않아도 Sidekiq은 계속 바쁩니다.

Mastodon에는 왜 전용 IP가 필요한가요?

다른 서버들이 443번 포트의 HTTPS로 내 서버에 글을 전달하고, 사람들은 브라우저로 내 인스턴스를 엽니다. 그러려면 내 IP로 443번 포트의 인바운드 트래픽을 받아야 하는데, NAT 요금제에는 그게 없습니다.

Mastodon에서 메일은 어떻게 보내나요?

외부 트랜잭션 메일 서비스를 587번 포트의 SMTP로 사용하세요. 저희 서버에서는 25번과 465번 포트가 닫혀 있고, 어차피 릴레이를 쓰는 편이 새 IP에서 직접 보내는 것보다 훨씬 잘 도착합니다.

디스크가 왜 이렇게 빨리 차나요?

서버는 보이는 모든 계정의 미디어를 캐시합니다. 'tootctl media remove --days 7'을 정기적으로 실행하거나, 미디어를 S3 호환 오브젝트 스토리지로 옮기세요.

나중에 도메인을 바꿀 수 있나요?

없습니다. 도메인은 페디버스 전체에서 모든 계정의 정체성 일부입니다. 첫 계정을 만들기 전에 신중하게 고르세요.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.