Власне розміщено
Початок роботи
Наше рішення для самостійного розміщення електронної пошти, як і всі наші продукти, на 100% має відкритий вихідний код — як для фронтенду, так і для серверної частини. Це означає:
- Повна прозорість: Кожен рядок коду, який обробляє ваші електронні листи, доступний для публічного контролю.
- Внесок спільноти: Будь-хто може зробити свій внесок у покращення або виправити проблеми.
- Безпека через відкритість: Вразливості можуть бути виявлені та виправлені глобальною спільнотою.
- Відсутність прив’язаності до постачальника: Ви ніколи не залежите від існування нашої компанії.
Вся кодова база доступна на GitHub за адресою https://github.com/forwardemail/forwardemail.net,, ліцензована згідно з ліцензією MIT.
Архітектура включає контейнери для:
- SMTP-сервер для вихідної електронної пошти
- Сервери IMAP/POP3 для отримання електронної пошти
- Веб-інтерфейс для адміністрування
- База даних для зберігання конфігурації
- Redis для кешування та підвищення продуктивності
- SQLite для безпечного, зашифрованого зберігання поштових скриньок
Note
Обов’язково ознайомтеся з нашим самостійно розміщений блог
А для тих, хто зацікавлений у більш детальній покроковій версії, дивіться наші посібники на основі Убунту або Дебіан.
Вимоги
Перш ніж запускати скрипт встановлення, переконайтеся, що у вас є наступне:
- Операційна система: Сервер на базі Linux (наразі підтримується Ubuntu 22.04+).
- Ресурси: 1 віртуальний процесор та 2 ГБ оперативної пам'яті
- Root-доступ: Адміністративні права для виконання команд.
- Доменне ім'я: Власний домен, готовий до налаштування DNS.
- Чиста IP-адреса: Переконайтеся, що ваш сервер має чисту IP-адресу без попередньої репутації спаму, перевіривши чорні списки. Докладніше тут.
- Публічна IP-адреса з підтримкою порту 25
- Можливість встановлення зворотний PTR
- Підтримка IPv4 та IPv6
Tip
Дивіться наш список чудові постачальники поштових серверів
Ініціалізація хмари / Дані користувача
Більшість постачальників хмарних послуг підтримують конфігурацію cloud-init для випадків, коли налаштовується віртуальний приватний сервер (VPS). Це чудовий спосіб заздалегідь налаштувати деякі файли та змінні середовища для використання логікою початкового налаштування скриптів, що дозволить уникнути необхідності запитувати додаткову інформацію під час роботи скрипта.
Параметри
EMAIL
– електронна адреса, що використовується для нагадувань про закінчення терміну дії certbotDOMAIN
– користувацький домен (наприклад,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 для керування календарем |
CardDAV | 6000 |
Сервер CardDAV для керування календарем |
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 |
/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 |
Important
Безпечно збережіть файл .env
. Він критично важливий для відновлення у разі збою.
Ви можете знайти його у /root/forwardemail.net/self-hosting/.env
.
Конфігурація
Початкове налаштування DNS
У вибраному вами постачальнику DNS налаштуйте відповідні DNS-записи. Зверніть увагу, що все в дужках (<>
) є динамічним і потребує оновлення відповідно до вашого значення.
Тип | Ім'я | Зміст | TTL |
---|---|---|---|
A | "@", "." або пусто | <ip_адреса> | авто |
CNAME | API | <ім'я_домену> | авто |
CNAME | Кальдав | <ім'я_домену> | авто |
CNAME | карддав | <ім'я_домену> | авто |
CNAME | відскоки fe | <ім'я_домену> | авто |
CNAME | IMAP | <ім'я_домену> | авто |
CNAME | мкс | <ім'я_домену> | авто |
CNAME | поп3 | <ім'я_домену> | авто |
CNAME | SMTP | <ім'я_домену> | авто |
MX | "@", "." або пусто | mx.<ім'я_домену> (пріоритет 0) | авто |
TXT | "@", "." або пусто | "v=spf1 a -всі" | авто |
Зворотний запис DNS / PTR
Записи зворотного DNS (rDNS) або записи зворотного вказівника (PTR) є важливими для поштових серверів, оскільки вони допомагають перевірити легітимність сервера, який надсилає електронні листи. Кожен хмарний постачальник робить це по-різному, тому вам потрібно буде знайти інформацію про те, як додати "Зворотний DNS", щоб зіставити хост та IP-адресу з відповідним ім'ям хоста. Найімовірніше, це відбувається в розділі мережевих параметрів постачальника.
Порт 25 заблоковано
Деякі інтернет-провайдери та хмарні провайдери блокують порт 25, щоб уникнути зловмисників. Вам може знадобитися подати заявку в службу підтримки, щоб відкрити порт 25 для SMTP/вихідної електронної пошти.
Адаптація
-
Відкрийте цільову сторінку Перейдіть за посиланням https://<ім’я_домену>, замінивши <ім’я_домену> доменом, налаштованим у ваших налаштуваннях DNS. Ви маєте побачити цільову сторінку пересилання електронної пошти.
-
Увійдіть та зареєструйте свій домен
- Увійдіть, використовуючи дійсну електронну адресу та пароль.
- Введіть доменне ім'я, яке ви хочете налаштувати (воно має відповідати конфігурації DNS).
- Дотримуйтесь інструкцій, щоб додати необхідні записи MX та TXT для перевірки.
- Завершіть налаштування
- Після підтвердження перейдіть на сторінку «Псевдоніми», щоб створити свій перший псевдонім.
- За потреби налаштуйте SMTP для вихідної електронної пошти у Налаштуваннях домену. Для цього потрібні додаткові записи DNS.
Note
Жодна інформація не надсилається за межі вашого сервера. Варіант самостійного розміщення та початковий обліковий запис призначені лише для входу адміністратора та веб-перегляду для керування доменами, псевдонімами та пов’язаними конфігураціями електронної пошти.
Тестування
Створення вашого першого псевдоніма
- Перейдіть на сторінку «Псевдоніми» Відкрийте сторінку керування псевдонімами:
https://<domain_name>/en/my-account/domains/<domain_name>/aliases
- Додайте новий псевдонім
- Натисніть Додати псевдонім (угорі праворуч).
- Введіть псевдонім і за потреби налаштуйте параметри електронної пошти.
- (Необов’язково) Увімкніть підтримку IMAP/POP3/CalDAV/CardDAV, встановивши прапорець.
- Натисніть Створити псевдонім.
- Встановіть пароль
- Натисніть Згенерувати пароль, щоб створити надійний пароль.
- Цей пароль буде потрібен для входу у ваш поштовий клієнт.
- Налаштуйте свій поштовий клієнт
- Використовуйте поштовий клієнт, такий як Thunderbird.
- Введіть псевдонім та згенерований пароль.
- Налаштуйте параметри IMAP та SMTP відповідно.
Налаштування сервера електронної пошти
Ім'я користувача: <alias name>
Тип | Ім'я хоста | Порт | Безпека з'єднання | Автентифікація |
---|---|---|---|---|
SMTP | smtp.<ім'я_домену> | 465 | SSL / TLS | Звичайний пароль |
IMAP | imap.<ім'я_домену> | 993 | SSL / TLS | Звичайний пароль |
Надсилання/отримання вашого першого електронного листа
Після налаштування ви зможете надсилати та отримувати електронні листи на свою щойно створену та самостійно розміщену адресу електронної пошти!
Виправлення неполадок
Чому це не працює за межами Ubuntu та Debian
Наразі ми шукаємо підтримку для MacOS і будемо шукати інших. Будь ласка, відкрийте обговорення або зробіть свій внесок, якщо хочете, щоб інші отримали підтримку.
Чому не вдається виконати тест certbot acme
Найпоширеніша помилка полягає в тому, що certbot / letsencrypt іноді запитує 2 запити. Вам потрібно переконатися, що ви додали ОБИДВА текстові записи.
Приклад: Ви можете побачити два подібні завдання: _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-адреси
Погляньте на наш Найчастіші запитання тут.