"Дисклеймер"
Эта статья создана в рамках серии видосов “Outline Workshop”
Идея:
Cоздать вечно бесплатную машину в облаке в качестве прокси сервера.
AWS, Azure и GCP платформы обычно предлагают бесплатные виртуалки только на один год. Это не удобно каждый год пересоздавать сервис, который стабильно работает
Oracle Cloud предоставляет нам возможность создать для себя микро-виртуальную машину, которую не нужно будет каждый год куда-то пересоздавать или мигрировать. Да, ресурсы этой машины ограничены, однаго для простых сервисов или домашней лаборатории этого может быть более, чем достаточно.
Например можно сделать для себя vpn сервер на основе tailscale или openvpn, развернуть сервис мониторига Uptime Kuma
Мы же сегодня развернем сервис Nginx Proxy manager, зачем нам это надо?
- Во первых наш проект “Outline” будет работать с Identity Provider’ом “Pocket ID” а тот работает исключительно по SSL. Это требование безопасности.
- Во вторых вы получаете полностью независимый хост в интернете, который можно гибко перенаправлять в любую удобную сторону.
- В третих вы получаете независимость от наличия публичного айпи и можете хостить любой сервис прямо на своем домашнем компьютере благодаря reverse-proxy. (картинку еще раз вставить)
- В четвертых Nginx Proxy Manager решает проблему с обновлением SSL сертификатов. А такак Let’s Encrypt анонсировал что не будет более рассылать уведомления об окончании сертификатов. этот сервис становиться быть более актуальным.
Что мы будем сегодня с вами делать?
- Зарегистрируем тенант OCI (Oracle Cloud Infrastructure)
- Поднимем виртульную машину (Импортируем SSH ключи из GitHub)
- Поднимем сервис NGINX Proxy Manager
- Накатим сертификаты
- Установим Tailscale на Ubuntu (bonus)
Что нам понадобиться:
Доменное имя: primin.garden Аккаунт на Oracle Cloud: Аккаунт Tailscale: Голова и руки
Регистрация тенанта в OCI
Я всегда всем советую использовать виртуальную кредитную карту. Она обязательна для регистрации. С нее будет списан примерно один-два доллара для проверки работоспособности карты. Если вы находитесь в РФ, то возможно вам понадобится использовать VPN.
Идем в ‘instances’ и создаем нашу виртуальную машину. Выбираем ОС Ubuntu и Shape: VM.Standard.E2.1.Micro
А теперь немного отвлечемся на:
про SSH-ключи
Я знаю, что большинство моих подписчиков используют Windows поэтому я буду показывть на Windows, чтобы любой мог повторить это.
Открываем Power-Shell от админа и набираем комманду:
ssh-keygen
Далее подключаемся к нашей виртуалки с помощью ssh-клиента. Это может быть например putty, moba x-term, termius. Я вам покажу как подключаться через Termius.
Подключаемся и по традиции выполняем
sudo su
apt update && apt upgrade -y
reboot
Импортируем ключи и з GitHub
Далее с вашего позволения я немного отвлекусь и покажу вам как использовать гитхаб для удобства хранения своих публичных ключей. В целях безопасности рекомендуется отключать вход по паролю по ssh и оставлять только вход по ключам.
Может быть вы заметили что при установке Ubuntu спрашивает нужно ли импортировать ключи из GitHub? (скриншот)
curl https://github.com/vprimin.keys >> ~/.ssh/authorized_keys
Проверим
cat ~/.ssh/authorized_keys
Настраиваем файрвол
Пишем в поиске “Security list”
Или идем в
Networking >> Virtual Cloud Networks >> vcn-xxxx-xx >> Security List Details
Открываем порты: 80 - для http, 81 - для Nginx Proxy Manager 443 - для SSL
Cтавим Docker
Вводим по очереди команды
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker
Далее сделаем так чтобы docker можно было запускать не из под root,вводим по очереди
sudo usermod -aG docker $USER
newgrp docker
docker ps
docker-compose --version
Ставим Nginx Proxy Manager
mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
nano docker-compose.yml
Содержимое docker-compose.yml
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80'
- '81:81' # Панель управления
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Запускаем
docker-compose up -d
Проверяем
docker ps
Заходим на http://<твой_сервер>:81 Проверить внешний айпи можно командой:
curl icanhazip.com
Либо посмотреть в консоли. Если не открывается возможно вы забыли открыть порты Заходим под дефолтными учетными данными:
Email: admin@example.com
Password: changeme
И меняем на свои
Cоздаем DNS записи
В зависимости от интерфейса это может отличаться но нам надо будет создать для начала A-запись proxy.primin.garden A IP-aдресс нашей виртуальной машины
Добавляем наш первый хост в NPM
Мы добавим самих себя то есть будем заходить на NPM по адресу proxy.primin.garden Скриншот?
Ставим Tailscale
Для обратного прокси нам понадобиться соединить по vpn нашу облачную машину и наш домашний копьютер. Идем в консоль tailscale и берем скрипт установки агента. Не забываем переименовать и выключить срок действия ключа.