Самостійне розміщення
Початок роботи
Наше рішення електронної пошти, розміщене на власному хості, як і всі наші продукти, є на 100% відкритим кодом — і зовнішнім, і внутрішнім. Це означає:
- Повна прозорість: Кожен рядок коду, який обробляє ваші електронні листи, доступний для громадського ознайомлення
- Внески спільноти: будь-хто може зробити свій внесок у покращення або виправити проблеми
- Безпека через відкритість: уразливості можуть бути виявлені та виправлені глобальною спільнотою
- Відсутність блокування постачальника: Ви ніколи не залежите від існування нашої компанії
Уся кодова база доступна на GitHub за адресою https://github.com/forwardemail/forwardemail.net, ліцензований згідно з ліцензією MIT.
Архітектура містить контейнери для:
- Сервер SMTP для вихідної електронної пошти
- Сервери IMAP/POP3 для отримання електронної пошти
- Веб-інтерфейс для адміністрування
- База даних для зберігання конфігурації
- Redis для кешування та продуктивності
- SQLite для безпечного зашифрованого зберігання поштових скриньок
Вимоги
Перш ніж запускати сценарій встановлення, переконайтеся, що у вас є:
- Операційна система: сервер на базі Linux (наразі підтримує Ubuntu 22.04+).
- Ресурси: 1 vCPU і 2 ГБ оперативної пам’яті
- Кореневий доступ: адміністративні привілеї для виконання команд.
- Доменне ім'я: спеціальний домен, готовий для налаштування DNS.
- Чистий IP: переконайтеся, що ваш сервер має чисту IP-адресу без попередньої репутації спаму, перевіривши чорні списки. Більше інформації тут.
- Публічна IP-адреса з підтримкою порту 25
- Можливість набору зворотний ПТР
- Підтримка IPv4 і IPv6
[!ПОРАДА] Перегляньте наш список чудові постачальники поштових серверів
Cloud-init / User-data
Більшість постачальників хмарних технологій підтримують конфігурацію хмарної ініціалізації, коли надається віртуальний приватний сервер (VPS). Це чудовий спосіб завчасно встановити деякі файли та змінні середовища для використання логікою початкового налаштування сценаріїв, що дозволить уникнути необхідності запитувати додаткову інформацію під час виконання сценарію.
Опції
EMAIL
- електронна пошта, яка використовується для нагадувань про завершення терміну дії сертифікатаDOMAIN
- спеціальний домен (наприклад,example.com
) використовується для налаштування самостійного хостингуAUTH_BASIC_USERNAME
- ім'я користувача, використане під час першого налаштування для захисту сайтуAUTH_BASIC_PASSWORD
- пароль, який використовується під час першого налаштування для захисту сайту/root/.cloudflare.ini
- (Тільки для користувачів Cloudflare) файл конфігурації cloudflare, який використовується certbot для налаштування DNS. Вам потрібно встановити маркер 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
- Початкове налаштування: завантажте найновіший код пересилання електронної пошти, налаштуйте середовище, запитайте свій власний домен і налаштуйте всі необхідні сертифікати, ключі та секрети.
- Налаштувати резервне копіювання: налаштує cron для резервного копіювання mongoDB і redis за допомогою S3-сумісного сховища для безпечного віддаленого зберігання. Окремо буде створено резервну копію 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 для керування календарем |
MongoDB | 27017 | База даних MongoDB для управління більшістю даних |
Redis | 6379 | Redis для кешування та керування станом |
SQLite | Жодного | База даних SQLite для зашифрованих поштових скриньок |
Важливі шляхи до файлів
Примітка: Шлях хоста нижче відносно /root/forwardemail.net/self-hosting/
.
компонент | Шлях хоста | Контейнерний шлях |
---|---|---|
MongoDB | ./mongo-backups | /backups |
Redis | ./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 |
сертифікати ЦС | ./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 | "@", "." або порожній | <ip_address> | авто |
CNAME | api | <назва_домену> | авто |
CNAME | кальдав | <назва_домену> | авто |
CNAME | фе-підскоки | <назва_домену> | авто |
CNAME | imap | <назва_домену> | авто |
CNAME | mx | <назва_домену> | авто |
CNAME | поп3 | <назва_домену> | авто |
CNAME | smtp | <назва_домену> | авто |
MX | "@", "." або порожній | mx.<domain_name> (пріоритет 0) | авто |
TXT | "@", "." або порожній | "v=spf1 a -все" | авто |
Зворотний запис DNS / PTR
Зворотний DNS (rDNS) або записи зворотного вказівника (записи PTR) важливі для серверів електронної пошти, оскільки вони допомагають перевірити легітимність сервера, який надсилає електронний лист. Кожен хмарний постачальник робить це по-різному, тому вам потрібно буде знайти, як додати «Зворотний DNS», щоб зіставити хост та IP-адресу з відповідним іменем хоста. Швидше за все в мережевому розділі провайдера.
Порт 25 заблоковано
Деякі інтернет-провайдери та хмарні провайдери блокують 25, щоб уникнути зловмисників. Можливо, вам знадобиться подати заявку в службу підтримки, щоб відкрити порт 25 для SMTP/вихідної електронної пошти.
Онбордінг
-
Відкрийте цільову сторінку Перейдіть до https://<domain_name>, замінивши <domain_name> на домен, налаштований у ваших налаштуваннях DNS. Ви повинні побачити цільову сторінку «Переслати електронний лист».
-
Увійдіть і зареєструйте свій домен
- Увійдіть за допомогою дійсної електронної пошти та пароля.
- Введіть доменне ім’я, яке ви бажаєте налаштувати (воно повинно відповідати конфігурації DNS).
- Дотримуйтесь підказок, щоб додати необхідне MX і TXT записи для перевірки.
- Повна настройка
- Після перевірки перейдіть на сторінку псевдонімів, щоб створити свій перший псевдонім.
- За бажанням налаштуйте SMTP для вихідної електронної пошти в Налаштування домену. Для цього потрібні додаткові записи DNS.
[!ПРИМІТКА] Жодна інформація не надсилається за межі вашого сервера. Опція самостійного розміщення та початковий обліковий запис призначені лише для входу адміністратора та веб-перегляду для керування доменами, псевдонімами та пов’язаними конфігураціями електронної пошти.
Тестування
Створення вашого першого псевдоніма
- Перейдіть на сторінку псевдонімів Відкрийте сторінку керування псевдонімами:
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 | Звичайний пароль |
Надсилання/отримання вашого першого електронного листа
Після налаштування ви зможете надсилати та отримувати електронну пошту на свою щойно створену адресу електронної пошти!
Усунення несправностей
Чому це не працює за межами Ubuntu
Зараз ми шукаємо підтримку Debian, MacOS і будемо шукати інші. Будь ласка, відкрийте a обговорення або зробіть внесок, якщо хочете, щоб інші отримали підтримку.
Чому виклик 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 на вашому хості все ще використовує старе, застаріле значення або не отримав останні зміни.
Іншим варіантом є використання автоматичних змін DNS cerbot, встановивши /root/.cloudflare.ini
файл із маркером API у вашому cloud-init / user-data під час початкового налаштування VPS або створіть цей файл і знову запустіть сценарій. Це автоматично керуватиме змінами 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
файл налаштовано неправильно.
У веб-інтерфейсі ви можете переглядати /admin/emails
і /admin/logs
для журналів вихідної електронної пошти та журналів помилок відповідно.
Чому закінчується час очікування моїх вихідних електронних листів
Якщо під час підключення до MX-сервера ви бачите повідомлення на кшталт «Час очікування з’єднання минув», можливо, вам потрібно перевірити, чи не заблоковано порт 25. Інтернет-провайдери або хмарні провайдери зазвичай блокують це за замовчуванням, коли вам може знадобитися зв’язатися з підтримкою або подати заявку, щоб відкрити це.
Які інструменти слід використовувати, щоб перевірити найкращі методи конфігурації електронної пошти та репутацію IP
Подивіться на наш FAQ тут.