Инструкция сделана по видео Автора канала Samohosting без теоретической части. Подразумевается, что у вас уже есть VPS-сервер, а также домен. Отличие от видео только в шаге, где сделана корректировка перед выпуском SSL-сертификата.
Арендовываем/логинимся на VPS-сервер. Настраиваем A запись для IP-адреса. Условно: home.example.com → 11.11.11.11. Настраиваем NetBird
Проверка сервисов.
Проверяем доступность локального сервиса
root@my-server:/# ping 192.168.0.221
PING 192.168.0.221 (192.168.0.221) 56(84) bytes of data.
64 bytes from 192.168.0.221: icmp_seq=1 ttl=64 time=24.8 ms
64 bytes from 192.168.0.221: icmp_seq=2 ttl=64 time=24.5 ms
--- 192.168.0.221 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
Проверяем домен
root@my-server:/# ping name.example.com
PING name.example.com (11.11.11.11) 56(84) bytes of data.
64 bytes from 176.119.157.40 (11.11.11.11): icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from 176.119.157.40 (11.11.11.11): icmp_seq=2 ttl=64 time=0.051 ms
--- name.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.036/0.048/0.057/0.008 ms
Пингуется - все в порядке, идем дальше
Установка Docker.
Устанавливаем Docker для развертывания reverse-proxy
Официальный репозиторий: Ubuntu | Docker Docs
root@my-server:/# curl -fsSL https://get.docker.com -o get-docker.sh
root@my-server:/# sudo sh ./get-docker.sh
Проверяем правильность установки
root@my-server:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Видим подобный вывод - идем дальше
Установка Dockge.
Официальный репозиторий: dockge/README.md at master · louislam/dockge · GitHub
root@my-server:/# mkdir -p /opt/stacks /opt/dockge
root@my-server:/# cd /opt/dockge
root@my-server:/opt/dockge# curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 760 100 760 0 0 1660 0 --:--:-- --:--:-- --:--:-- 1663
Открываем compose.yaml, чтобы заменить стандартный host порт на другой. Диапазон от 1024 до 65535.
root@my-server:/opt/dockge# nano compose.yaml
root@my-server:/opt/dockge# docker compose up -d
[+] Running 12/12
✔ dockge Pulled 68.3s
✔ 6e909acdb790 Pull complete 12.1s
✔ d714f4673cad Pull complete 12.2s
✔ be84add755f8 Pull complete 19.5s
✔ 9a8d89ceeab1 Pull complete 19.9s
✔ 4c07c1809c8e Pull complete 19.9s
✔ a80bf94e51e2 Pull complete 25.2s
✔ 7dec24f91d8e Pull complete 25.7s
✔ 15981effcbf4 Pull complete 25.8s
✔ 1523b165f21c Pull complete 52.2s
✔ de698ba33720 Pull complete 57.3s
✔ 4d8f84d497cc Pull complete 58.6s
[+] Running 2/2
✔ Network dockge_default Created 1.2s
✔ Container dockge-dockge-1 Started
Проверяем, переходим в браузере по адресу ранее созданного домена: http://name.example.com
Получилось зайти - идем дальше. Авторизовываемся.
Установка NGINX PROXY MANAGER
Официальный репозиторий: GitHub - NginxProxyManager/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface
Создаем новый Compose
Пишем имя
Вставляем docker-compose.yml:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
# Uncomment the next line if you uncomment anything in the section
# environment:
# Uncomment this if you want to change the location of
# the SQLite DB file within the container
# DB_SQLITE_FILE: "/data/database.sqlite"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Host-port меняем на свой. Volumes рекомендуется хранить на своем хосте
Nginx proxy manager установлен!
Переходим на name.example.com:811
Стандартный логин и пароль admin@example.com | changeme
После авторизации меняем эти данные на свои
Переходим в proxy hosts
Жмем add proxy host
Указываем ваш name.example.com, IP и Port локального ресурса
Готово! Мы опубликовали во внешний мир наш сервис, можем на него переходить по доменному имени
Внимание! Перед выпуском SSl-сертификатов, нам нужно создать новый proxy host с указанием IP-адреса сервера, на который устанавливался nginx proxy manager, а также с новым поддоменом
Теперь мы имеем 2 proxy host: один из них ведет конкретно на nginx proxy manager (который мы устанавливали на VPS-сервер), второй ведет на наш локальный ресурс
Переходим к выпуску SSL-сертификата:
Идем в настройки - Edit
Жмем Save и проделываем данные действия со вторым proxy host
SSL-сертификаты выпущены!
Теперь сделаем базовую авторизацию
Переходим в раздел Access List → Add Access List
Указываем логин | пароль и жмем Save
Возвращаемся в Proxy Host → выбираем хост → редактировать → добавляем Access List → жмем Save
Базовая настройка готова!
P.S. Если что-то упустил, прошу скорректировать меня.