설치
빈 서버에 rousme-mailer 를 설치합니다. 명령은 복사해 붙여 넣을 수 있게 적었습니다.
example.com 은 여러분의 도메인으로, 203.0.113.10 은 서버 IP 로 바꿔 읽으세요. 버전 번호가 들어간 예(1.2.3)는 받은 버전으로 읽습니다.
- 예시는 root 로 접속한다고 보고
root@…로 적었습니다. 서버 업체가 root 로그인을 막아 두었으면(AWS Ubuntu 의ubuntu등) 그 계정 이름으로 바꾸면 되고, 명령 앞의sudo가 관리자 권한으로 실행해 줍니다. - Windows 10·11 은 PowerShell 에서
ssh·scp를 그대로 쓸 수 있습니다.
서버 고르기
| 조건 | 이유 |
|---|---|
| 리눅스 (Ubuntu 24.04 권장), x86_64 | 메일 서버 실행 도구가 x86_64 전용입니다. ARM 서버(AWS Graviton 등)는 안 됩니다 |
| 메모리 2GB 이상 (4GB 권장) | 메일 서버(Java) + 관리 화면. 2GB 상품은 1.9GB 쯤으로 잡혀도 통과합니다. 2GB 면 스왑 2GB 를 만들어 두세요 (사전 점검) |
| 디스크 여유 10GB 이상 | 프로그램 이미지·백업·로그 |
| 25번 포트 발송 가능 | 받는 메일 서버는 모두 25번으로 받습니다. 업체가 막아 두면 보낼 수 없습니다 (25번 포트) |
| 고정 공인 IP, PTR 설정 가능 | IP 가 바뀌면 평판을 처음부터 다시 쌓아야 합니다 |
| 이 서버는 메일 전용 | 25·587·80·443 포트를 씁니다 |
서버 업체의 방화벽(보안 그룹) 에서 들어오는 포트를 여세요: 22(SSH), 25, 587, 80, 443.
설치하기 전에 사전 점검부터 돌려 보기를 권합니다. 서버를 읽기만 하고 아무것도 바꾸지 않으므로, 25번이 막혔는지 등을 서버를 더 만지기 전에 알 수 있습니다.
배포 묶음을 올린 뒤(배포 묶음 받기) sudo ./install.sh check — Docker 가 아직 없으면 그 줄만 [실패] 로 나오는 것이 정상입니다 (설치할 때 깔림).
새로 받은 IP 가 예전 사용자 때문에 스팸 차단 목록에 올라 있을 수 있습니다. 사전 점검이 확인해 주고, 올라 있으면 서버 업체에 IP 교체를 요청하는 것이 가장 빠릅니다.
25번 포트
많은 클라우드 업체가 스팸을 막으려고 나가는 25번을 기본으로 막아 둡니다. 사전 점검에 이렇게 나오면 막힌 것입니다.
[ 실패 ] 25번 발송이 막혀 있습니다 — 이대로는 외부로 메일을 보낼 수 없습니다 (587·443 은 나감)
| 업체 | 해제 방법 |
|---|---|
| Vultr | 지원 요청(티켓)으로 해제 신청. 계정 사용 기간·결제 이력을 보기도 합니다 |
| AWS (EC2) | "이메일 발송 제한 해제" 요청 양식 |
| DigitalOcean | 대부분 풀어 주지 않습니다 — 메일 서버용으로는 권하지 않음 |
| GCP·Azure (일반 구독) | 해제되지 않습니다 — 다른 업체를 쓰세요 |
| 그 밖의 업체 | 업체마다 다릅니다. 서버를 만들기 전에 "외부 25번 발송 가능 여부" 를 문의하세요 |
해제 신청에는 보통 무엇을 보내는지(청구서·가입 안내 등), 수신 동의를 받았는지, 수신거부 방법이 있는지를 적습니다. 이 제품에는 수신거부 링크·발송 제외 목록·수신 동의 기록이 들어 있다고 적으면 됩니다. 업체 정책은 바뀔 수 있으니 신청 전에 업체 안내를 확인하세요.
배포 묶음 받기
판매자에게 받은 배포 묶음 mailer-kit-<버전>.tar.gz (예: mailer-kit-1.2.3.tar.gz)를 서버에 올립니다. 내 PC 에서 (파일이 있는 폴더에서, 묶음 파일이 하나일 때):
scp mailer-kit-*.tar.gz root@203.0.113.10:
서버에 접속해 풉니다 (접속한 계정의 홈 폴더에 mailer-kit 폴더가 생깁니다):
ssh root@203.0.113.10
tar xzf mailer-kit-*.tar.gz
cd mailer-kit
ls
install.sh, compose.yaml, mailer.env.example, 가이드 PDF 가 보이면 됩니다.
이 mailer-kit 폴더가 설치 폴더입니다. 설정(mailer.env)이 여기 저장되고, 백업·업데이트 명령도 여기서 실행하므로 지우거나 옮기지 마세요.
업데이트는 새 묶음을 받지 않고 이 폴더에서 sudo ./install.sh update 로 합니다 (업데이트).
이미지 받기
설치 중에 프로그램 이미지(메일 서버·관리 화면)를 인터넷에서 받습니다. 이미지가 비공개면 설치가 이렇게 묻습니다.
[ 참고 ] 비공개 이미지입니다 — 판매자 GitHub 토큰(read:packages)으로 잠깐 로그인합니다 (받은 뒤 바로 로그아웃)
GitHub 아이디:
토큰 (화면에 안 보임):
- 설치 대행이면 판매자가 이 단계를 합니다.
- 직접 설치하면 판매자가 알려 준 아이디·토큰을 넣습니다 (구매할 때 판매자에게 "이미지 받기 정보" 를 받아 두세요). 받은 뒤 바로 로그아웃하므로 서버에 남지 않습니다.
- "로그인 실패" 가 나오면 아이디·토큰을 다시 확인하고, 토큰이 만료되었을 수 있으니 판매자에게 새 것을 요청하세요.
docker login으로 직접 로그인하지 마세요 (토큰이 서버에 남음). - 업데이트(
./install.sh update) 때도 같은 것을 묻습니다.
install.sh 실행
sudo ./install.sh
이렇게 진행됩니다.
- Docker 설치 — 없으면 설치할지 묻습니다 (Enter = 예). Docker 공식 저장소에서 1~2분
- 사전 점검 — 서버를 읽기만 합니다 (설정을 바꾸거나 메일을 보내지 않음). [실패] 가 있으면 멈춥니다 (실패 항목)
- 서버 방화벽 — ufw(Ubuntu 방화벽)가 켜져 있고 25·587·80·443 규칙이 없으면 추가할지 묻습니다. Rocky·RHEL 의 firewalld 는 따로 할 일이 없습니다 (Docker 가 여는 포트는 firewalld 규칙과 따로 열림). 서버 업체 방화벽은 서버 고르기 대로 직접 엽니다
- 설정 질문 — 아래 표. [ ] 안이 기본값이고 Enter 를 누르면 그대로 씁니다. 다 답하면 "이 값으로 저장할까요? [Y/n]" 에 Enter
- 실행 — 이미지를 받고 띄웁니다 (처음 2~5분)
- 안내 — DNS 에 넣을 레코드 (DKIM 값 포함), 관리 화면 주소, 비밀번호 보는 법. 이 레코드를 바로 도메인에 넣으면 됩니다 (DNS 와 인증). 나중에 다시 볼 때는 관리 화면 [설치 확인] 탭
| 질문 | 넣을 값 | 예 |
|---|---|---|
| 발신 도메인 | 보낸사람 주소의 @ 뒤. 여러 개면 쉼표로 (첫 번째가 대표) |
example.com |
| 메일 서버 이름 | 이 서버의 이름. PTR·인증서에 씁니다. 보통 mail. + 도메인 |
mail.example.com |
| 관리 화면 주소 | 브라우저로 여는 주소 (https:// 없이 이름만). 수신거부 링크에도 들어갑니다 |
mailer.example.com |
| DMARC 보고서 받을 주소 | 받는 쪽들이 보내는 인증 결과 보고서. 기본값 dmarc@<첫 발신 도메인> 이면 이 서버가 받아 [발송 결과] 탭에 보여 줍니다. 이 도메인 메일을 이미 다른 서비스(Google Workspace·네이버 웍스 등)로 받고 있으면 보고서는 그쪽으로 갑니다 (MX) |
dmarc@example.com |
| 관리자 메일 | HTTPS 인증서 발급 계정 연락처. 비워도 됩니다 | |
| 이 서버 공인 IP | 자동으로 찾은 값이 맞으면 Enter | 203.0.113.10 |
| 587 발송 계정 아이디 | 다른 프로그램이 이 서버로 SMTP 발송할 때의 아이디. 비밀번호는 자동으로 만듭니다 | sender |
| 시간대 | 로그 시각·하루 발송 한도의 날짜 기준 | Asia/Seoul |
답한 값은 설치 폴더의 mailer.env 에 저장됩니다 (root 만 읽을 수 있음). 고치려면 sudo ./install.sh --reconfigure 로 다시 묻게 합니다.
sudo ./install.sh 는 여러 번 실행해도 안전합니다 (데이터·설정은 그대로).
처음에는 테스트 모드로 시작합니다. 모든 메일이 서버 안 Mailpit 으로만 가고 외부로 나가지 않습니다.
사전 점검 실패 항목
점검만 따로 돌릴 수도 있습니다: sudo ./install.sh check. 항목마다 [통과]·[주의]·[실패] 로 나오고, [실패] 가 하나라도 있으면 설치하지 않습니다.
[주의] 는 설치는 되지만 실제 발송 전까지 해결하기를 권하는 것입니다.
| 나오는 말 | 해결 |
|---|---|
| CPU 종류: aarch64 — x86_64(amd64) 서버만 됩니다 | x86_64 서버로 다시 만듭니다 |
| 메모리 … 2GB 이상이 필요합니다 | 서버 사양을 올립니다 |
| 메모리 … 스왑 2GB 를 만들어 두기를 권장합니다 (주의) | 아래 스왑 만들기 |
| 시간 동기화: 꺼져 있거나 확인 안 됨 (주의) | sudo timedatectl set-ntp true |
| 디스크: … 여유 …GB | 디스크를 늘리거나 필요 없는 파일을 지웁니다 |
| 25 번 이미 사용 중 (master·postfix·exim 등) | 서버에 기본으로 깔린 메일 프로그램입니다: sudo systemctl disable --now postfix (또는 exim4, sendmail) |
| 80 번·443 번 이미 사용 중 (nginx·apache 등) | 이 서버에 웹 서버가 있습니다. 메일 전용 서버를 쓰거나 그 웹 서버를 끕니다 |
| 25번 발송이 막혀 있습니다 | 25번 포트 |
| 외부 접속 확인 실패 — 25번도 587번도 나가지 않습니다 | 서버의 인터넷 연결·DNS·나가는 방향 방화벽을 확인합니다 |
| PTR(역방향 DNS): 없음 또는 다름 (주의) | 설치 뒤 PTR 넣기 — 설치는 먼저 해도 됩니다 |
| Spamhaus 등: 확인 불가 (참고) | 서버의 DNS 로는 조회가 막힌 것입니다. 목록 사이트(Spamhaus 는 check.spamhaus.org)에서 서버 IP 를 직접 조회해 보세요 |
| Spamhaus 등: 등록됨 (주의) | 서버 업체에 IP 교체 요청(가장 빠름) 또는 목록 사이트에서 해제 요청 (차단 목록) |
| MAIL_HOSTNAME … A 레코드가 없습니다 (주의) | 설치 뒤 A 레코드 넣기 — 설치는 먼저 해도 됩니다. 이 줄은 설치 질문에 답한 뒤(mailer.env 가 생긴 뒤) 점검할 때부터 나옵니다 |
| Docker 가 설치되어 있지 않습니다 | 설치 전 점검이면 정상입니다. sudo ./install.sh 가 설치합니다 |
스왑 만들기
메모리가 모자랄 때 디스크를 대신 쓰게 합니다 (2GB 서버에 권장). 한 줄씩 실행:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
마지막 줄은 서버를 다시 켜도 스왑이 남게 합니다. free -h 의 Swap 줄에 2.0Gi 가 보이면 됩니다.
첫 로그인
설치가 끝나면 관리 화면 주소가 나옵니다: https://mailer.example.com
- 주소가 열리려면 관리 화면 주소의 A 레코드가 이 서버를 가리켜야 합니다. 그러면 HTTPS 인증서를 몇 분 안에 자동으로 받습니다 (A 레코드).
- 처음 관리자 아이디는
admin이고, 비밀번호는 서버의 설치 폴더(mailer-kit)에서 봅니다 (web은 관리 화면 꾸러미 이름):
sudo docker compose exec web cat /control/admin-password
- 처음 로그인하면 새 비밀번호(10자 이상)를 정합니다.
- 같이 쓰는 사람마다 [계정] 탭에서 계정을 만드세요 (관리자·발송 담당·보기 전용) — 계정과 역할
- 관리자 비밀번호를 모두 잊었으면 서버에서
sudo ./install.sh password— 비밀번호를 잊었을 때
다른 프로그램(쇼핑몰 등)이 587 포트로 이 서버에 메일을 넘길 때의 계정은 설치 때 정한 아이디(기본 sender)이고, 비밀번호는:
sudo docker compose exec james cat /control/smtp-password
DNS 를 넣기 전에 화면을 먼저 보고 싶으면, 내 PC 에서 SSH 터널을 열고 브라우저로 http://127.0.0.1:8070 을 엽니다:
ssh -L 8070:127.0.0.1:8070 root@203.0.113.10
다음은 DNS 와 인증 입니다.