Как да създам свой мини-хостинг с Proxmox + Nginx Proxy Manager

Как да създам свой мини-хостинг с Proxmox + Nginx Proxy Manager

Здравейте, в моята ежедневна работа често се налага да експериментирам с различни уеб приложения и услуги. Покупката на отделен VPS за всеки проект обаче бързо става много скъпа. Затова реших да си създам собствен мини-хостинг у дома, използвайки стар настолен компютър и мощни инструменти като Proxmox и Nginx Proxy Manager.

Тази система ми позволява да хоствам множество сайтове и услуги (като WordPress, Nextcloud, частни приложения) на една физическа машина, като всички те са защитени и лесно достъпни под собствени домейни.

В тази статия ще ви преведа стъпка по стъпка през целия процес. Ще построим заедно една стабилна, модерна и напълно безплатна хостинг платформа.


Защо да си построиш собствен мини-хостинг?

Преди да се потопим в техническите детайли, нека разберем защо бихте искали да направите това.

  • Пълна контрола: Вие сте собственик на хардуера и софтуера. Никой не може да ви спре или да ви наложи непланирани такси.
  • Икономичност: Единствената ви начална инвестиция е хардуерът. След това, хостването на десетки проекта става практически безплатно.
  • Гъвкавост: Можете да инсталирате всякакъв софтувен пакет или операционна система, която желаете, без ограничения.
  • Преносимост и сигурност: Създавайки резервни копия на вашите виртуални машини (ВМ), можете лесно да ги възстановите на нов хардуер или в облак за минути. Това е идеално за защита на вашите данни и услуги.

Аналогия: Мислете си за това като за разликата между наем на апартамент (споделен хостинг/VPS) и притежаване на собствена къща (вашия мини-хостинг). В къщата вие решавате всичко – от боядисването на стените до вида на ключалката.

Какво ще ни трябва? (Необходими компоненти)

Нашата цел е да създадем инфраструктура, която да работи по следния начин:

  1. Proxmox VE ще работи на нашата физическа машина и ще създава изолирани виртуални машини (контейнери) за всеки наш проект.
  2. Всяка виртуална машина ще хоства конкретна услуга (напр. уеб сайт).
  3. Nginx Proxy Manager (NPM) ще стои отпред като "портиер". Той ще получава всички заявки от интернет и ще ги пренасочва към правилната виртуална машина вътре в мрежата, според домейна, който е поискан.

За да направим това, ще ни трябват следните неща:

  1. Хардуер:
    • Компютър или сървър (дори и стар лаптоп може да свърши работа). Препоръчвам минимум 8GB RAM и SSD диск за по-добра производителност.
    • Стабилна интернет връзка.
    • В идеалния случай, статичен публичен IP адрес от вашия интернет доставчик. Ако нямате такъв, ще покажем алтернатива с Dynamic DNS.
  2. Софтуер:
    • Proxmox Virtual Environment (VE): Безплатна, корпоративна платформа за виртуализация с отворен код.
    • Nginx Proxy Manager: Удобен уеб интерфейс за управление на Nginx като обратен прокси сървър.
    • Операционна система за нашите услуги: Ние ще използваме Ubuntu Server, но изборът е ваш.
Диаграма, показваща как заявките за домейни се насочват през Nginx Proxy Manager към правилния контейнер в Proxmox.


Диаграма, показваща как заявките за домейни се насочват през Nginx Proxy Manager към правилния контейнер в Proxmox.


Стъпка 1: Инсталиране и настройка на Proxmox VE

Proxmox е сърцето на нашата операция. Той ще ни позволи да създаваме и управляваме множество виртуални машини на една машина.

Процесът на инсталация:

  1. Изтегляне: Отидете на официалния сайт на Proxmox VE и изтеглете ISO файла за инсталация.
  2. Записване: Запишете ISO файла на USB устройство с помощта на програма като BalenaEtcher или Rufus.
  3. Инсталация: Стартирайте компютъра си от USB и следвайте стъпките на инсталатора. Ще ви помоли да зададете:
    • Парола за root потребител: Изберете силна парола!
    • Имейл адрес: За системни известия.
  4. Мрежова конфигурация: Инсталаторът ще конфигурира мрежата. Запишете си IP адреса, който е показан в края. Той ще изглежда като https://192.168.1.100:8006.

След като инсталацията приключи и машината се рестартира, отворете вашия уеб браузър и отидете на https://[IP_АДРЕСА]:8006. Ще видите логин екрана на Proxmox. Влезте с потребител root и паролата, която сте задали.

Първоначална настройка на Proxmox:

  • Актуализации: Първо, винаги е добра практика да актуализирате системата. Отворете вградената Shell (терминал) в уеб интерфейса и изпълнете:bashapt update && apt upgrade -y
  • Добавяне на хранилище: Ако имате допълнителен диск, можете да го добавите като хранилище за вашите виртуални машини от раздела Datacenter -> Storage.

Стъпка 2: Създаване на нашата първа виртуална машина (LXC Контейнер)

Proxmox поддържа два основни типа виртуализация: пълни виртуални машини (VM) и LXC контейнери. Контейнерите са по-леки и ефикасни, затова ще ги използваме за нашите уеб услуги.

Нека създадем контейнер за нашия Nginx Proxy Manager.

  1. В горния десен ъгъл на уеб интерфейса на Proxmox, кликнете "Create CT".
  2. Попълнете формуляра:
    • Node: Вашият сървър.
    • CT ID: Уникален номер (напр. 100).
    • Hostname: npm (за по-лесно разпознаване).
    • Парола: Задайте сигурна парола за root потребителя на контейнера.
    • Template: Кликнете на "Storage" и изберете "Templates". Изтеглете шаблон за Ubuntu (напр. ubuntu-22.04-standard). След това го изберете.
  3. Resources: Оставете настройките по подразбиране. Можете да зададете 1 ядро на процесора и 1GB памет. Това е повече от достатъчно за NPM.
  4. Мрежа:
    • Bridge: vmbr0 (това е виртуалният мрежов мост по подразбиране).
    • IPv4: Изберете Static и задайте статичен IP адрес от вашата локална мрежа. Например, ако вашият Proxmox хост е 192.168.1.100, задайте на NPM контейнера 192.168.1.101. Това е изключително важно!
    • Gateway: Вашият основен рутер (напр. 192.168.1.1).

Кликнете "Finish" и ще се създаде вашият контейнер. Стартирайте го като кликнете бутона "Start".


Стъпка 3: Инсталиране и конфигуриране на Nginx Proxy Manager (NPM)

Сега, нека инсталираме "портиера" в нашия нов контейнер.

  1. Достъп до контейнера: Изберете контейнера npm в Proxmox и кликнете на "Shell". Или използвайте SSH, за да се свържете с ssh [email protected].
  2. Инсталация на Docker: NPM най-лесно се инсталира като Docker контейнер. Изпълнете следните команди една по една:
# Актуализирайте системата
apt update && apt upgrade -y

# Инсталирайте Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Добавете вашия потребител в docker групата (за да не използвате sudo)
usermod -aG docker root

След това, рестартирайте контейнера от уеб интерфейса на Proxmox (Stop -> Start). Това е необходимо, за да влязат в сила промените в групите.

  1. Стартирайте NPM контейнера: Отново влезте в Shell на контейнера npm и изпълнете:
docker run -d \
  --name nginx-proxy-manager \
  -p 80:80 \
  -p 443:443 \
  -p 81:81 \
  -v /root/npm/data:/data \
  -v /root/npm/letsencrypt:/etc/letsencrypt \
  --restart unless-stopped \
  jc21/nginx-proxy-manager:latest

Тази команда:

  • Създава и стартира Docker контейнер с име nginx-proxy-manager.
  • Свързва портове 80 (HTTP), 443 (HTTPS) и 81 (административен панел) от контейнера към хост машината (нашия LXC контейнер).
  • Създава томове за съхраняване на данни и SSL сертификати.

Конфигуриране на NPM чрез уеб интерфейса:

Отворете вашия браузър и отидете на http://192.168.1.101:81. Това е административният панел на NPM.

  • Вход по подразбиране:
  • Смени паролата веднага! Ще бъдете подканени да го направите при първо влизане.

Стъпка 4: Насочване на вашия домейн и настройка на прокси

Сега нека свържем всичко заедно. Да приемем, че искате да хоствате уебсайт на домейна moyat-sait.bg.

  1. Настройка на DNS:
    • В контролния панел на вашия DNS доставчик (където сте купили домейна), създайте A запис.
    • Name: moyat-sait.bg (или @)
    • Value: Вашият публичен IP адрес. (Намерете го като посетите whatismyip.com).
    • Ако нямате статичен IP: Създайте A запис, сочещ към вашия Dynamic DNS адрес (напр. vasheime.ddns.net).
  2. Пренасочване на портове (Port Forwarding):
    • Влезте в настройките на вашия домашен рутер.
    • Намерете раздела "Port Forwarding" или "NAT".
    • Създайте ново правило:
      • Външен порт: 80 (HTTP)
      • Вътрешен IP: 192.168.1.101 (IP-то на NPM контейнера)
      • Вътрешен порт: 80
      • Протокол: TCP
    • Повторете стъпката за порт 443 (HTTPS).
    Сега всички заявки, идващи към вашия публичен IP на порт 80 и 443, ще бъдат изпратени към Nginx Proxy Manager.
  3. Създаване на правило за прокси в NPM:
    • Влезте в административния панел на NPM (http://192.168.1.101:81).
    • Отидете на "Hosts" -> "Proxy Hosts" и кликнете "Add Proxy Host".
    • Попълнете полетата:
      • Domain Names: moyat-sait.bg
      • Scheme: http
      • Forward Hostname / IP: 192.168.1.102 (IP-то на бъдещия контейнер, в който ще живее уебсайтът)
      • Forward Port: 80 (стандартният уеб порт)
    • Включете опцията "Block Common Exploits" за допълнителна сигурност.
    • Кликнете "Save".

Поздравления! Вие вече сте настроили обратния прокси. Когато някой посети moyat-sait.bg, заявката ще стигне до NPM, който ще я пренасочи към сървъра на 192.168.1.102:80.


Стъпка 5: Хостване на първия ви сайт (пример с WordPress)

Нека създадем контейнер, който действително ще хоства нещо.

  1. Създаване на нов контейнер: Следвайте стъпка 2 отново, за да създадете нов LXC контейнер (ID: 102, Hostname: wordpress, IPv4: 192.168.1.102).
  2. Инсталиране на WordPress в контейнера: Влезте в новия контейнер чрез Shell и най-лесният начин е да използвате Docker Compose.
  • Инсталирайте Docker Compose: apt install docker-compose -y
  • Създайте директория и файл docker-compose.yml:
version: '3.8'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress_data:/var/www/html

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

  1. Активирайте SSL сертификат в NPM:
    • Върнете се в NPM панела и редактирайте правилото за прокси за moyat-sait.bg.
    • Превключете към раздела "SSL".
    • Изберете "Request a new SSL Certificate".
    • Включете "Force SSL" и "HTTP/2 Support".
    • Кликнете "Save". След минута, вашият сайт вече ще е достъпен по https://moyat-sait.bg със зелен, валиден сертификат!

Експертен съвет: Сигурност и поддръжка

  • Резервни копия: В Proxmox отидете на Datacenter -> Backup. Настройте график за автоматично резервно копие на вашите контейнери върху външно устройство или облак.
  • Фирмени стени: Proxmox има вграден фиренул (Datacenter -> Firewall). Можете да ограничите достъпа до административните портове само до вашия личен IP адрес.
  • Актуализации: Редовно актуализирайте вашите LXC контейнери (apt update && apt upgrade -y) и Proxmox хост.

Заключение

След като следвахте това ръководство, вие успешно построихте собствена, професионална хостинг платформа. Вече можете да създавате нов контейнер за всеки нов проект за минути, да му зададете поддомен или домейн и да го пуснете в експлоатация със сигурен SSL сертификат.

Тази система не е просто икономично решение. Тя е мощен учебен инструмент, който ви дава практически умения в областта на виртуализацията, мрежите и системната администрация. Експериментирайте, правете грешки (винаги имате резервни копия!) и най-вече – се забавлявайте със силата, която държите в ръцете си.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:

Подобни статии