Выводим локальные сервисы в интернет. Пошаговая инструкция

Инструкция сделана по видео Автора канала 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. Если что-то упустил, прошу скорректировать меня.

3 лайка

Спс, отличная инструкция,немного муторно все. надо что б за пару кликов )) можно проще андройд приложение - все коннектится без vps. У меня правда только музыка во внешку и кино.