셀프호스팅
설치
요구 사항
설치 스크립트를 실행하기 전에 다음 사항이 있는지 확인하세요.
- 운영 체제: Linux 기반 서버(예: Ubuntu 22.04+).
- 자료: 1 vCPU 및 2GB RAM
- 루트 액세스: 명령을 실행하기 위한 관리자 권한.
- 도메인 이름: DNS 구성을 위한 사용자 정의 도메인입니다.
- 깨끗한 IP: 블랙리스트를 확인하여 서버에 이전 스팸 평판이 없는 깨끗한 IP 주소가 있는지 확인하세요. 자세한 정보 여기.
[!TIP] 다음 목록을 참조하세요. 굉장한 메일 서버 제공자
클라우드 초기화 / 사용자 데이터
대부분의 클라우드 공급업체는 가상 사설 서버(VPS)가 프로비저닝될 때 클라우드 초기화 구성을 지원합니다. 이는 스크립트 초기 설정 로직에서 사용할 일부 파일과 환경 변수를 미리 설정하는 좋은 방법으로, 스크립트가 실행되는 동안 추가 정보를 묻는 메시지를 표시할 필요가 없습니다.
옵션
EMAIL
-EMAIL
certbot 만료 알림에 사용되는 환경 변수DOMAIN
- 셀프 호스팅 설정에 사용되는 사용자 정의 도메인AUTH_BASIC_USERNAME
- 사이트를 보호하기 위해 처음 설정할 때 사용되는 사용자 이름AUTH_BASIC_PASSWORD
- 사이트를 보호하기 위해 처음 설정할 때 사용되는 암호/root/.cloudflare.ini
- (Cloudflare 사용자만 해당) certbot이 DNS 구성을 위해 사용하는 cloudflare 구성 파일입니다. API 토큰을 다음을 통해 설정해야 합니다.dns_cloudflare_api_token
. 더 읽기 여기.
예:
#cloud-config
write_files:
- path: /root/.cloudflare.ini
content: |
dns_cloudflare_api_token = "xxx"
owner: root:root
permissions: '0600'
- path: /etc/profile.d/env.sh
content: |
export EMAIL="test@myemail.com"
export DOMAIN="mydomain.com"
runcmd:
- chmod +x /etc/profile.d/env.sh
설치하다
서버에서 다음 명령을 실행하여 설치 스크립트를 다운로드하고 실행하세요.
bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
디버그 설치 스크립트
자세한 출력을 위해 설치 스크립트 앞에 DEBUG=true를 추가합니다.
DEBUG=true bash <(curl -fsSL https://raw.githubusercontent.com/forwardemail/forwardemail.net/master/self-hosting/setup.sh)
프롬프트
1. Initial setup
2. Setup Backups
3. Setup Auto Upgrades
4. Renew certificates
5. Restore from Backup
6. Help
7. Exit
- 초기 설정: 최신 전달 이메일 코드를 다운로드하고, 환경을 구성하고, 사용자 지정 도메인을 묻고 모든 필수 인증서, 키, 비밀을 설정합니다.
- 백업 설정: S3 호환 스토어를 사용하여 mongoDB와 redis를 백업하는 cron을 설정하여 안전한 원격 저장소로 사용합니다. 별도로, sqlite는 로그인 시 변경 사항이 있는 경우 안전하고 암호화된 백업으로 백업됩니다.
- 설정 업그레이드: 인프라 구성 요소를 안전하게 재구성하고 다시 시작할 수 있도록 야간 업데이트를 찾는 cron을 설정합니다.
- 인증서 갱신: Certbot / lets encrypt는 SSL 인증서에 사용되며 키는 3개월마다 만료됩니다. 이렇게 하면 도메인의 인증서가 갱신되고 관련 구성 요소가 사용할 수 있도록 필요한 폴더에 저장됩니다. 참조 중요한 파일 경로
- 백업에서 복원: mongodb와 redis가 백업 데이터에서 복원되도록 합니다.
초기 설정(옵션 1)
옵션을 선택하세요 1. Initial setup
시작하다.
완료되면 성공 메시지가 표시됩니다. 실행할 수도 있습니다. docker ps
보기 위해 그만큼 구성 요소가 회전되었습니다. 구성 요소에 대한 자세한 내용은 아래를 참조하세요.
서비스
서비스 이름 | 기본 포트 | 기술 |
---|---|---|
편물 | 443 | 모든 관리자 상호 작용을 위한 웹 인터페이스 |
API | 4000 | 추상 데이터베이스를 위한 API 계층 |
브리 | 없음 | 백그라운드 작업 및 작업 실행자 |
SMTP | 465/587 | 발신 이메일을 위한 SMTP 서버 |
SMTP 브리 | 없음 | SMTP 백그라운드 작업 |
MX | 2525 | 수신 이메일 및 이메일 전달을 위한 메일 교환 |
IMAP | 993/2993 | 수신 이메일 및 사서함 관리를 위한 IMAP 서버 |
POP3 | 995/2995 | 수신 이메일 및 사서함 관리를 위한 POP3 서버 |
SQLite | 3456 | SQLite 데이터베이스와의 상호작용을 위한 SQLite 서버 |
SQLite 브리 | 없음 | SQLite 백그라운드 작업 |
칼다브(CalDAV) | 5000 | 캘린더 관리를 위한 CalDAV 서버 |
몽고DB | 27017 | 대부분의 데이터 관리를 위한 MongoDB 데이터베이스 |
레디스 | 6379 | 캐싱 및 상태 관리를 위한 Redis |
SQLite | 없음 | 암호화된 사서함을 위한 SQLite 데이터베이스 |
중요한 파일 경로
메모: 호스트 경로 아래는 상대적입니다 /root/forwardemail.net/self-hosting/
.
요소 | 호스트 경로 | 컨테이너 경로 |
---|---|---|
몽고DB | ./mongo-backups | /backups |
레디스 | ./redis-data | /data |
SQLite(스큐라이트) | ./sqlite-data | /mnt/{SQLITE_STORAGE_PATH} |
Env 파일 | ./.env | /app/.env |
SSL 인증서/키 | ./ssl | /app/ssl/ |
개인 키 | ./ssl/privkey.pem | /app/ssl/privkey.pem |
풀 체인 인증서 | ./ssl/fullchain.pem | /app/ssl/fullchain.pem |
인증된 CA | ./ssl/cert.pem | /app/ssl/cert.pem |
DKIM 개인 키 | ./ssl/dkim.key | /app/ssl/dkim.key |
[!중요] 저장
.env
파일을 안전하게 보관하세요. 실패 시 복구에 필수적입니다. 여기에서 찾을 수 있습니다./root/forwardemail.net/self-hosting/.env
.
구성
초기 DNS 설정
선택한 DNS 공급자에서 적절한 DNS 레코드를 구성합니다. 괄호 안의 모든 내용을 기록하세요(<>
)은 동적이므로 사용자의 가치에 따라 업데이트되어야 합니다.
유형 | 이름 | 콘텐츠 | TTL |
---|---|---|---|
A | "@", "." 또는 공백 | <아이피 주소> | 자동차 |
CNAME | 아피 | <도메인_이름> | 자동차 |
CNAME | 칼다브 | <도메인_이름> | 자동차 |
CNAME | fe-바운스 | <도메인_이름> | 자동차 |
CNAME | 아이맵 | <도메인_이름> | 자동차 |
CNAME | 엠엑스 | <도메인_이름> | 자동차 |
CNAME | 팝3 | <도메인_이름> | 자동차 |
CNAME | SMTP(스팸메일) | <도메인_이름> | 자동차 |
MX | "@", "." 또는 공백 | mx.<도메인_이름> (우선순위 0) | 자동차 |
TXT | "@", "." 또는 공백 | "v=spf1 a -all" | 자동차 |
역방향 DNS / PTR 레코드
역방향 DNS(rDNS) 또는 역방향 포인터 레코드(PTR 레코드)는 이메일을 보내는 서버의 합법성을 확인하는 데 도움이 되기 때문에 이메일 서버에 필수적입니다. 각 클라우드 공급자는 이를 다르게 수행하므로 호스트와 IP를 해당 호스트 이름에 매핑하기 위해 "역방향 DNS"를 추가하는 방법을 찾아야 합니다. 공급자의 네트워킹 섹션에서 가장 가능성이 높습니다.
포트 25 차단됨
일부 ISP와 클라우드 제공자는 악의적인 행위자를 피하기 위해 25를 차단합니다. SMTP/발신 이메일에 대해 포트 25를 열려면 지원 티켓을 제출해야 할 수도 있습니다.
온보딩
-
랜딩 페이지 열기 https://<domain_name>으로 이동하고, <domain_name>을 DNS 설정에서 구성한 도메인으로 바꿉니다. Forward Email 랜딩 페이지가 표시되어야 합니다.
-
로그인하고 도메인에 등록하세요
- 유효한 이메일과 비밀번호로 로그인하세요.
- 설정하려는 도메인 이름을 입력하세요(DNS 구성과 일치해야 합니다).
- 필요한 항목을 추가하려면 프롬프트를 따르세요. MX 그리고 TXT 검증을 위한 기록.
- 설정 완료
- 확인이 완료되면 별칭 페이지에 접속하여 첫 번째 별칭을 만드세요.
- 선택적으로 구성 아웃바운드 이메일을 위한 SMTP 에서 도메인 설정. 추가 DNS 레코드가 필요합니다.
[!NOTE] 서버 외부로 정보가 전송되지 않습니다. 자체 호스팅 옵션과 초기 계정은 도메인, 별칭 및 관련 이메일 구성을 관리하기 위한 관리자 로그인 및 웹 보기에만 해당됩니다.
테스트
첫 번째 별칭 만들기
- 별칭 페이지로 이동 별칭 관리 페이지를 엽니다.
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- 새 별칭 추가
- 딸깍 하는 소리 별명 추가 (오른쪽 상단).
- 별칭을 입력하고 필요에 따라 이메일 설정을 조정하세요.
- (선택 사항) 활성화 IMAP/POP3/CalDAV 체크박스를 선택하여 지원하세요.
- 딸깍 하는 소리 별칭을 만듭니다.
- 비밀번호 설정
- 딸깍 하는 소리 비밀번호 생성 안전한 비밀번호를 생성하세요.
- 이 비밀번호는 이메일 클라이언트에 로그인하는 데 필요합니다.
- 이메일 클라이언트 구성
- Thunderbird와 같은 이메일 클라이언트를 사용하세요.
- 별칭 이름과 생성된 비밀번호를 입력하세요.
- 구성 IMAP 그리고 SMTP 설정을 적절히 변경하세요.
이메일 서버 설정
사용자 이름: <alias name>
유형 | 호스트 이름 | 포트 | 연결 보안 | 입증 |
---|---|---|---|---|
SMTP | smtp.<도메인_이름> | 465 | SSL / TLS | 일반 비밀번호 |
IMAP | imap.<도메인_이름> | 993 | SSL / TLS | 일반 비밀번호 |
첫 번째 이메일 보내기/받기
구성이 완료되면 새로 생성하고 직접 호스팅한 이메일 주소로 이메일을 보내고 받을 수 있게 됩니다!
유지
How do I backup my data
따르다 설치 스크립트 그리고 선택하다 option 2
프롬프트에서.
How do I renew my certificates
따르다 설치 스크립트 그리고 선택하다 option 3
프롬프트에서.
How do I upgrade to the latest forward email code
따르다 설치 스크립트 그리고 선택하다 option 4
프롬프트에서.
How do I restore from a backup
따르다 설치 스크립트 그리고 선택하다 option 6
프롬프트에서.
문제 해결
Why is the certbot acme challenge failing
가장 흔한 함정은 certbot/letsencrypt가 때때로 요청한다는 것입니다. 2 도전. 반드시 추가해야 합니다. BOTH txt 레코드.
예: 다음과 같은 두 가지 챌린지가 표시될 수 있습니다. _acme-challenge.example.com -> "randomstring1" _acme-challenge.example.com -> "randomstring2"
DNS 전파가 완료되지 않았을 수도 있습니다. 다음과 같은 도구를 사용할 수 있습니다. https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.<your_domain>
. 이렇게 하면 TXT 레코드 변경 사항을 반영해야 하는지에 대한 아이디어를 얻을 수 있습니다. 호스트의 로컬 DNS 캐시가 여전히 오래되고 오래된 값을 사용하거나 최근 변경 사항을 선택하지 않았을 수도 있습니다.
또 다른 옵션은 다음을 설정하여 자동화된 cerbot DNS 변경을 사용하는 것입니다. /root/.cloudflare.ini
초기 VPS 설정 시 cloud-init/user-data에 api 토큰이 있는 파일을 만들거나 이 파일을 만들고 스크립트를 다시 실행하세요. 이렇게 하면 DNS 변경 사항을 관리하고 업데이트를 자동으로 챌린지합니다.
What is the basic auth username and password
셀프 호스팅의 경우 간단한 사용자 이름과 함께 첫 번째 브라우저 기본 인증 팝업을 추가합니다.admin
) 및 비밀번호(초기 설정 시 무작위로 생성됨). 자동화/스크래퍼가 어떻게든 웹 경험에 처음 가입하도록 당신을 속였을 경우를 대비해 보호책으로 이것을 추가합니다. 초기 설정 후 이 비밀번호를 찾을 수 있습니다. .env
아래에 파일 AUTH_BASIC_USERNAME
그리고 AUTH_BASIC_PASSWORD
.
How do I know what is running
당신은 실행할 수 있습니다 docker ps
스핀업되고 있는 모든 실행 중인 컨테이너를 보려면 docker-compose-self-hosting.yml
파일입니다. 또한 실행할 수도 있습니다. docker ps -a
(실행 중이 아닌 컨테이너를 포함하여) 모든 것을 확인합니다.
How do I know if something isn't running that should be
당신은 실행할 수 있습니다 docker ps -a
모든 것을 보려면(실행 중이 아닌 컨테이너 포함). 종료 로그나 메모가 표시될 수 있습니다.
How do I find logs
더 많은 로그를 얻을 수 있습니다 docker logs -f <container_name>
. 무엇인가가 종료된 경우, 그것은 아마도 다음과 관련이 있을 것입니다. .env
파일이 잘못 구성되었습니다.
웹 UI 내에서 다음을 볼 수 있습니다. /admin/emails
그리고 /admin/logs
각각 아웃바운드 이메일 로그와 오류 로그에 대한 것입니다.
Why are my outgoing emails timing out
MX 서버에 연결할 때 연결 시간이 초과되었습니다...와 같은 메시지가 표시되면 포트 25가 차단되었는지 확인해야 할 수 있습니다. ISP 또는 클라우드 제공업체가 기본적으로 이를 차단하는 경우가 많으며, 이 경우 지원팀에 문의하거나 티켓을 제출하여 이를 열어야 할 수 있습니다.
What tool(s) should I use to test email configuration best practices and IP reputation
우리의 것을 살펴보세요 FAQ 여기.
서버 IP 주소를 사용하여 다음 사이트가 블랙리스트에 있는지 확인하세요. 불행히도 일반적인 클라우드 제공업체가 이메일 스팸 사용으로 인해 IP 평판 문제가 발생하는 것은 드문 일이 아닙니다. 블랙리스트에 IP가 있는 경우 새 서버를 가동하고 새 IP 주소를 확인하는 것이 좋습니다.