HTTPS и свой домен

Отдавай 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

Шаг 1 — направь домен на сервер

В панели регистратора или DNS создай A-запись для нужного хоста (например crm.yourbrand.com) на публичный IP сервера и подожди, пока она разрешится — обычно пара минут.

A    crm.yourbrand.com    ->    YOUR_SERVER_IP

Привяжи прямо в CRM — без терминала (рекомендуется)

Как только 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 выше — там всё уже настроено за тебя. Два пути ниже делают то же самое вручную; выбери один, оба не нужны.

Путь A — Cloudflare (ставить нечего)

Добавь домен в 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).

Путь B — certbot на твоём сервере (прямой TLS, без третьих сторон)

Хочешь терминировать 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

Если что-то не так