셀프호스팅

당사의 자체 호스팅 이메일 솔루션은 모든 제품과 마찬가지로 프런트엔드와 백엔드 모두 100% 오픈 소스입니다. 즉, 다음을 의미합니다.

  1. 완전한 투명성: 이메일을 처리하는 모든 코드 줄은 대중의 감시를 받습니다.
  2. 커뮤니티 기여: 누구나 개선에 기여하거나 문제를 해결할 수 있습니다.
  3. 개방성을 통한 보안: 취약점은 글로벌 커뮤니티에서 식별 및 수정될 수 있습니다.
  4. 공급업체 잠금 없음: 당신은 결코 우리 회사의 존재에 의존하지 않습니다

전체 코드베이스는 GitHub에서 사용할 수 있습니다. https://github.com/forwardemail/forwardemail.net, MIT 라이선스에 따라 라이선스가 부여되었습니다.

아키텍처에는 다음을 위한 컨테이너가 포함됩니다.

  • 아웃바운드 이메일을 위한 SMTP 서버
  • 이메일 검색을 위한 IMAP/POP3 서버
  • 관리를 위한 웹 인터페이스
  • 구성 저장을 위한 데이터베이스
  • 캐싱 및 성능을 위한 Redis
  • 안전하고 암호화된 사서함 저장을 위한 SQLite

설치 스크립트를 실행하기 전에 다음 사항이 있는지 확인하세요.

  • 운영 체제: Linux 기반 서버(현재 Ubuntu 22.04+ 지원)
  • 자료: 1 vCPU 및 2GB RAM
  • 루트 액세스: 명령을 실행하기 위한 관리자 권한.
  • 도메인 이름: DNS 구성을 위한 사용자 정의 도메인입니다.
  • 깨끗한 IP: 블랙리스트를 확인하여 서버에 이전 스팸 평판이 없는 깨끗한 IP 주소가 있는지 확인하세요. 자세한 정보 여기.
  • 포트 25를 지원하는 공용 IP 주소
  • 설정 가능 역 PTR
  • IPv4 및 IPv6 지원

[!TIP] 다음 목록을 참조하세요. 굉장한 메일 서버 제공자

클라우드 초기화 / 사용자 데이터

대부분의 클라우드 공급업체는 가상 사설 서버(VPS)가 프로비저닝될 때 클라우드 초기화 구성을 지원합니다. 이는 스크립트 초기 설정 로직에서 사용할 일부 파일과 환경 변수를 미리 설정하는 좋은 방법으로, 스크립트가 실행되는 동안 추가 정보를 묻는 메시지를 표시할 필요가 없습니다.

옵션

  • EMAIL - certbot 만료 알림에 사용되는 이메일
  • DOMAIN - 사용자 정의 도메인(예: example.com) 셀프 호스팅 설정에 사용됨
  • 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모든 관리자 상호 작용을 위한 웹 인터페이스
API4000추상 데이터베이스를 위한 API 계층
브리없음백그라운드 작업 및 작업 실행자
SMTP465/587발신 이메일을 위한 SMTP 서버
SMTP 브리없음SMTP 백그라운드 작업
MX2525수신 이메일 및 이메일 전달을 위한 메일 교환
IMAP993/2993수신 이메일 및 사서함 관리를 위한 IMAP 서버
POP3995/2995수신 이메일 및 사서함 관리를 위한 POP3 서버
SQLite3456SQLite 데이터베이스와의 상호작용을 위한 SQLite 서버
SQLite 브리없음SQLite 백그라운드 작업
칼다브(CalDAV)5000캘린더 관리를 위한 CalDAV 서버
몽고DB27017대부분의 데이터 관리를 위한 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칼다브<도메인_이름>자동차
CNAMEfe-바운스<도메인_이름>자동차
CNAME아이맵<도메인_이름>자동차
CNAME엠엑스<도메인_이름>자동차
CNAME팝3<도메인_이름>자동차
CNAMESMTP(스팸메일)<도메인_이름>자동차
MX"@", "." 또는 공백mx.<도메인_이름> (우선순위 0)자동차
TXT"@", "." 또는 공백"v=spf1 a -all"자동차

역방향 DNS / PTR 레코드

역방향 DNS(rDNS) 또는 역방향 포인터 레코드(PTR 레코드)는 이메일을 보내는 서버의 합법성을 확인하는 데 도움이 되기 때문에 이메일 서버에 필수적입니다. 각 클라우드 공급자는 이를 다르게 수행하므로 호스트와 IP를 해당 호스트 이름에 매핑하기 위해 "역방향 DNS"를 추가하는 방법을 찾아야 합니다. 공급자의 네트워킹 섹션에서 가장 가능성이 높습니다.

포트 25 차단됨

일부 ISP와 클라우드 제공자는 악의적인 행위자를 피하기 위해 25를 차단합니다. SMTP/발신 이메일에 대해 포트 25를 열려면 지원 티켓을 제출해야 할 수도 있습니다.

  1. 랜딩 페이지 열기 https://<domain_name>으로 이동하고, <domain_name>을 DNS 설정에서 구성한 도메인으로 바꿉니다. Forward Email 랜딩 페이지가 표시되어야 합니다.

  2. 로그인하고 도메인에 등록하세요

  • 유효한 이메일과 비밀번호로 로그인하세요.
  • 설정하려는 도메인 이름을 입력하세요(DNS 구성과 일치해야 합니다).
  • 필요한 항목을 추가하려면 프롬프트를 따르세요. MX 그리고 TXT 검증을 위한 기록.
  1. 설정 완료
  • 확인이 완료되면 별칭 페이지에 접속하여 첫 번째 별칭을 만드세요.
  • 선택적으로 구성 아웃바운드 이메일을 위한 SMTP 에서 도메인 설정. 추가 DNS 레코드가 필요합니다.

[!NOTE] 서버 외부로 정보가 전송되지 않습니다. 자체 호스팅 옵션과 초기 계정은 도메인, 별칭 및 관련 이메일 구성을 관리하기 위한 관리자 로그인 및 웹 보기에만 해당됩니다.

첫 번째 별칭 만들기

  1. 별칭 페이지로 이동 별칭 관리 페이지를 엽니다.
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
  1. 새 별칭 추가
  • 딸깍 하는 소리 별명 추가 (오른쪽 상단).
  • 별칭을 입력하고 필요에 따라 이메일 설정을 조정하세요.
  • (선택 사항) 활성화 IMAP/POP3/CalDAV 체크박스를 선택하여 지원하세요.
  • 딸깍 하는 소리 별칭을 만듭니다.
  1. 비밀번호 설정
  • 딸깍 하는 소리 비밀번호 생성 안전한 비밀번호를 생성하세요.
  • 이 비밀번호는 이메일 클라이언트에 로그인하는 데 필요합니다.
  1. 이메일 클라이언트 구성
  • Thunderbird와 같은 이메일 클라이언트를 사용하세요.
  • 별칭 이름과 생성된 비밀번호를 입력하세요.
  • 구성 IMAP 그리고 SMTP 설정을 적절히 변경하세요.

이메일 서버 설정

사용자 이름: <alias name>

유형호스트 이름포트연결 보안입증
SMTPsmtp.<도메인_이름>465SSL / TLS일반 비밀번호
IMAPimap.<도메인_이름>993SSL / TLS일반 비밀번호

첫 번째 이메일 보내기/받기

구성이 완료되면 새로 생성하고 직접 호스팅한 이메일 주소로 이메일을 보내고 받을 수 있게 됩니다!

왜 이게 우분투 밖에서는 작동하지 않는 걸까요?

현재 Debian, MacOS를 지원하려고 하며 다른 것도 살펴볼 것입니다. 논의 다른 사람들이 지원받는 것을 보고 싶으시다면 기여해 주세요.

certbot acme 챌린지가 실패하는 이유는 무엇입니까?

가장 흔한 함정은 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 변경 사항을 관리하고 업데이트를 자동으로 챌린지합니다.

기본 인증 사용자 이름과 비밀번호는 무엇입니까?

셀프 호스팅의 경우 간단한 사용자 이름과 함께 첫 번째 브라우저 기본 인증 팝업을 추가합니다.admin) 및 비밀번호(초기 설정 시 무작위로 생성됨). 자동화/스크래퍼가 어떻게든 웹 경험에 처음 가입하도록 당신을 속였을 경우를 대비해 보호책으로 이것을 추가합니다. 초기 설정 후 이 비밀번호를 찾을 수 있습니다. .env 아래에 파일 AUTH_BASIC_USERNAME 그리고 AUTH_BASIC_PASSWORD.

무엇이 실행 중인지 어떻게 알 수 있나요?

당신은 실행할 수 있습니다 docker ps 스핀업되고 있는 모든 실행 중인 컨테이너를 보려면 docker-compose-self-hosting.yml 파일입니다. 또한 실행할 수도 있습니다. docker ps -a (실행 중이 아닌 컨테이너를 포함하여) 모든 것을 확인합니다.

실행 중이 아닌 것이 있는지 어떻게 알 수 있습니까?

당신은 실행할 수 있습니다 docker ps -a 모든 것을 보려면(실행 중이 아닌 컨테이너 포함). 종료 로그나 메모가 표시될 수 있습니다.

로그를 어떻게 찾을 수 있나요?

더 많은 로그를 얻을 수 있습니다 docker logs -f <container_name>. 무엇인가가 종료된 경우, 그것은 아마도 다음과 관련이 있을 것입니다. .env 파일이 잘못 구성되었습니다.

웹 UI 내에서 다음을 볼 수 있습니다. /admin/emails 그리고 /admin/logs 각각 아웃바운드 이메일 로그와 오류 로그에 대한 것입니다.

발신 이메일 시간이 초과되는 이유는 무엇입니까?

MX 서버에 연결할 때 연결 시간이 초과되었습니다...와 같은 메시지가 표시되면 포트 25가 차단되었는지 확인해야 할 수 있습니다. ISP 또는 클라우드 제공업체가 기본적으로 이를 차단하는 경우가 많으며, 이 경우 지원팀에 문의하거나 티켓을 제출하여 이를 열어야 할 수 있습니다.

이메일 구성 모범 사례 및 IP 평판을 테스트하는 데 어떤 도구를 사용해야 합니까?

우리의 것을 살펴보세요 FAQ 여기.