Отдавай CRM на своём домене с настоящим сертификатом — Cloudflare или certbot.
По умолчанию установщик отдаёт CRM по обычному HTTP на порту 80 — идеально для IP-адреса или триала. Чтобы поставить на свой домен с замочком, направь домен на сервер и терминируй HTTPS перед стеком. Самый простой способ — вообще без терминала: привяжи домен прямо в CRM (Settings → Hosting — ниже). Ручные серверные пути тоже есть, если так привычнее. Всё сразу не нужно — выбери одно.
Сначала должно выполняться три условия: CRM уже установлена и открывается по HTTP на IP сервера; у сервера ПУБЛИЧНЫЙ IP — VPS или выделенный бокс, а не ноутбук за домашним роутером (до него из интернета не достучаться без проброса портов); и у тебя есть домен у регистратора или в Cloudflare. Открой веб-порты в фаерволе сервера перед началом — порт 80 для обоих путей, плюс 443 для пути с certbot:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
В панели регистратора или DNS создай A-запись для нужного хоста (например crm.yourbrand.com) на публичный IP сервера и подожди, пока она разрешится — обычно пара минут.
A crm.yourbrand.com -> YOUR_SERVER_IP
Как только A-запись разрешилась, зайди в CRM владельцем и открой Settings → Hosting. Добавь свой домен и нажми Save & apply. CRM сама перенастроит свой веб-слой: панель будет отвечать и по IP сервера, и по твоему домену, а все остальные хосты, направленные на этот бокс (твои прелендер-домены), уйдут в клоаку — логин на них не появится. Ни SSH, ни nginx, ни правки файлов — пара секунд на перезагрузку веб-слоя. (Работает через update-agent, который идёт со стандартной установкой; если его нет — страница об этом скажет, и можно пойти ручным путём ниже.)
Дальше — шифрование на edge Cloudflare: A-запись Proxied (оранжевое облако), SSL/TLS → Overview → Flexible и SSL/TLS → Edge Certificates → включить Always Use HTTPS. Это и есть замочек — посетителя уводят на https, а Cloudflare его терминирует. Готово.
Это НЕ нужно, если ты воспользовался Settings → Hosting выше — там всё уже настроено за тебя. Два пути ниже делают то же самое вручную; выбери один, оба не нужны.
Добавь домен в Cloudflare и поставь A-запись в Proxied (оранжевое облако). CRM отдаётся по обычному HTTP на порту 80, поэтому в SSL/TLS → Overview поставь режим шифрования Flexible — Full и Full (strict) ждут настоящий TLS на твоём сервере, которого в дефолтной установке нет (это путь с certbot ниже). Затем включи SSL/TLS → Edge Certificates → Always Use HTTPS, чтобы посетителей всегда отправляло на https с замочком. Cloudflare терминирует HTTPS на своём edge и форвардит на твой порт 80 — никакого софта и продлений на боксе. Наконец, пропиши публичный URL в .env, чтобы браузер и API совпадали, и подними заново.
CORS_ORIGINS=https://crm.yourbrand.com docker compose up -d
Flexible шифрует участок посетитель↔Cloudflare (это и есть замочек), но участок Cloudflare↔твой сервер остаётся без шифрования — для старта нормально. НЕ переключай на Full или Full (strict), пока origin на обычном HTTP: этим режимам нужен настоящий TLS на сервере (порт 443), иначе сайт сломается (та же ошибка, что была). Для end-to-end шифрования либо иди по пути с certbot ниже, либо — оставаясь на Cloudflare — поставь на сервер бесплатный Cloudflare Origin Certificate и только тогда переходи на Full (strict).
Хочешь терминировать TLS на своём боксе — подними небольшой nginx перед CRM и дай certbot управлять бесплатным сертификатом Let's Encrypt. Держи A-запись DNS-only (серое облако, не проксировано), чтобы certbot смог подтвердить домен.
Сначала убери CRM с порта 80, чтобы его занял хостовый nginx — поставь WEB_PORT в .env и подними заново:
WEB_PORT=8080 docker compose up -d
Поставь nginx и certbot, затем добавь reverse-proxy для домена. Два заголовка Upgrade держат живым realtime-фид:
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
# /etc/nginx/sites-available/crm
server {
server_name crm.yourbrand.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}Включи сайт, затем дай certbot получить сертификат и переписать nginx на 443 с автоматическим редиректом 80→443. Он также ставит systemd-таймер, который продлевает сертификат до истечения — больше делать ничего не нужно.
sudo ln -s /etc/nginx/sites-available/crm /etc/nginx/sites-enabled/crm sudo certbot --nginx -d crm.yourbrand.com
Наконец, скажи приложению его публичный origin и подними заново:
CORS_ORIGINS=https://crm.yourbrand.com docker compose up -d
Даёт тот же результат, что Settings → Hosting выше — панель на домене, прелендеры в клоаке — если скрипт привычнее клика. Если на этом же сервере крутятся твои прелендер/клоак-домены, админку надо держать отдельно от них (на прелендер-домене логин показываться не должен). Готовый помощник делает это на сервере: сам определит IP, повесит админку на IP + твой домен, все остальные хосты уведёт в клоаку, переставит CRM на порт 8080 и перезагрузит nginx:
cd ~/d0pe-crm curl -fsSL https://d0pe.app/setup-domain.sh -o setup-domain.sh sudo ADMIN_DOMAIN="crm.yourbrand.com" bash setup-domain.sh
Он пишет /etc/nginx/sites-available/d0pe — файл остаётся твоим: добавляй админ-домены в server_name, свои маршруты, потом sudo nginx -t && sudo systemctl reload nginx. Скрипт можно перезапускать, чтобы сменить домены. Для простой CRM-на-домене без прелендеров это не нужно — хватает пути Cloudflare выше. В любом случае доделай шаг Cloudflare/CORS (A → твой IP, Proxied, Flexible, Always Use HTTPS; CORS_ORIGINS=https://твой-домен).
В любом случае лиды не покидают твой сервер — речь только про слой шифрования перед CRM.
Дай DNS минуту-две на разрешение, затем открой https://crm.yourbrand.com в браузере: должен появиться замочек и вход в CRM. Загрузилось и логинишься — готово. Из терминала можно проверить, что сертификат отвечает:
curl -I https://crm.yourbrand.com