24 KiB
Практический проект: «Домашний мини-дата-центр и песочница для разработки»
Цель: создать дома собственный сервер на базе выделенной машины, настроить сеть, виртуализацию, контейнеры, развернуть полезные сервисы (Nextcloud, свой сайт, локальную ИИ‑модель) и получить реальные навыки, которые применяются в IT‑инфраструктуре и разработке.
Что вы изучите и попробуете на практике
- Сетевые протоколы: DHCP, DNS, NAT, порт‑форвардинг, RDP, HTTP/HTTPS, API.
- Администрирование роутера (проброс портов, резервирование IP).
- Сборку ПК и элементарный монтаж витой пары (обжим коннекторов).
- Гипервизор Proxmox VE (установка, создание LXC‑контейнеров).
- Linux (Ubuntu) – базовые команды, сеть, systemd, пользователи.
- Docker и Docker‑Compose – изоляция приложений.
- Reverse‑прокси на Nginx Proxy Manager – управление доменами и SSL‑сертификатами.
- Разработку простого сайта с подключением к внешнему API (на Python/Flask или Node.js).
- Развёртывание Nextcloud – файловое облако своими руками.
- Запуск локальной LLM (например, Llama 3 или Mistral) в контейнере.
- Аккуратное кабельное хозяйство – структурированная кабельная система.
Предварительные требования
- Базовое умение работать с компьютером (установка ОС, работа с командной строкой).
- Бюджет: ~5–20 тыс. руб. (б/у компьютер + роутер, если старого нет).
- Желание экспериментировать и читать документацию.
Этап 0. Планирование и закупка оборудования
Что нужно купить:
- Роутер (если старого нет) с поддержкой проброса портов и, желательно, возможностью назначения статических IP внутри сети. Подойдёт любой современный роутер (TP‑Link, Keenetic, Asus, MikroTik).
- Компьютер под сервер:
- Лучше б/у корпоративный мини‑ПК (Dell OptiPlex, HP ProDesk, Lenovo ThinkCentre) или собранный из деталей с Avito.
- Минимум: 4‑ядерный процессор (Intel i5 2‑го поколения или новее / AMD Ryzen), 8 ГБ ОЗУ (лучше 16+), SSD 240+ ГБ, блок питания 300+ Вт.
- Для Proxmox обязательна поддержка виртуализации (VT‑x/AMD‑V) – включить в BIOS.
- Витая пара (кабель UTP Cat5e или Cat6) – несколько метров, коннекторы RJ45 и кримпер (обжимной инструмент), если будете делать кабель сами. Можно купить готовый патч‑корд.
- Кабель‑каналы (коробы) и стяжки – для аккуратного монтажа.
Зачем? Чтобы понять, как реально соединяются устройства, научиться обжимать кабель (прямая распиновка T568B) и организовать рабочее место.
Этап 1. Настройка роутера и проброс RDP на ваш основной компьютер (начальные опыты)
Важно: Прямой проброс RDP на внешний IP – небезопасно (атаки перебором). Для учебных целей мы делаем это временно, а затем будем использовать VPN или более защищённые методы. Но сам процесс настройки порт‑форвардинга – фундаментальный навык.
1.1. Получение внешнего IP и проверка доступа извне
- Зайдите в веб‑интерфейс роутера (обычно 192.168.0.1 или 192.168.1.1).
- Найдите раздел «Состояние сети» – посмотрите WAN‑IP (внешний). Если он начинается на 10., 172.16-31., 192.168. – у вас «серый» IP (CGNAT). Для полноценного доступа нужен статический белый IP – закажите у провайдера (обычно платно). Без него используйте хостинг‑туннели (Ngrok, Tailscale Funnel), но в проекте предположим, что белый IP есть.
1.2. Резервирование IP для вашего ПК в локальной сети
- В разделе DHCP (или «Управление устройствами») найдите MAC‑адрес вашего рабочего ПК, привяжите к нему постоянный локальный IP (например, 192.168.1.100).
- Зачем: чтобы при перезагрузках правила проброса портов не «уезжали».
1.3. Проброс порта для RDP (порт 3389)
- В разделе «Переадресация портов» / «NAT» / «Port Forwarding» создайте правило:
- Внешний порт: 3389 (или любой нестандартный, например 53389 – для безопасности).
- Внутренний IP: 192.168.1.100 (ваш ПК).
- Внутренний порт: 3389.
- Протокол: TCP.
- Включите правило.
1.4. Проверка RDP из интернета
- На вашем ПК разрешите удалённые подключения (Система → Удалённый рабочий стол → Разрешить).
- Попросите друга или подключитесь через мобильный интернет по адресу
ваш_внешний_IP:53389. - Примечание: Студенты могут использовать бесплатные динамические DNS (DuckDNS, No‑IP), если IP меняется, но статический удобнее.
Что вы изучили: NAT, порт‑форвардинг, различие внешний/локальный IP, принцип работы RDP, базовые меры безопасности.
Этап 2. Сборка серверного компьютера и подключение к роутеру
2.1. Покупка и проверка железа
- При покупке на Avito проверьте: включается ли ПК, видит ли диск, нет ли вздутых конденсаторов.
- Для обучения хватит старого офисного ПК (i5‑2500, 8 ГБ RAM, SSD – прекрасно подходит под Proxmox и несколько контейнеров).
2.2. Обжим кабеля (если делаете сами)
- Отмерьте нужную длину кабеля от роутера до сервера.
- Зачистите внешнюю изоляцию (~2 см), расплетите жилы по стандарту T568B (бело‑оранжевый, оранжевый, бело‑зелёный, синий, бело‑синий, зелёный, бело‑коричневый, коричневый).
- Вставьте в коннектор RJ45 (проверьте порядок), обожмите кримпером.
- Проверьте тестером или подключением – загорится ли линк на порту.
2.3. Подключение и первое включение
- Вставьте обжатый кабель в любой LAN‑порт роутера и в сетевую карту сервера.
- Включите сервер. Зайдите в BIOS (Del/F2) – включите поддержку виртуализации (Intel VT‑x / AMD‑V). Сохраните.
Что вы изучили: физический уровень сети (распиновка, обжим), основы сборки/апгрейда ПК, настройка BIOS.
Этап 3. Установка Proxmox Virtual Environment (VE) и создание контейнеров
Proxmox – гипервизор на базе Debian, позволяет запускать как полноценные виртуальные машины (KVM), так и легковесные LXC‑контейнеры. Мы будем использовать LXC – они почти как Docker, но на уровне ОС.
3.1. Загрузка и установка Proxmox
- Скачайте ISO Proxmox VE с официального сайта.
- Запишите на флешку (Rufus, BalenaEtcher).
- Загрузитесь с флешки на сервере, установите Proxmox:
- Выберите диск, страну/часовой пояс.
- Задайте пароль root и email.
- Введите имя хоста (например,
pve-server). - Укажите статический IP для сервера внутри вашей локальной сети (например, 192.168.1.200/24, шлюз = IP роутера 192.168.1.1, DNS 1.1.1.1).
- После установки Proxmox будет доступен по https://192.168.1.200:8006 (ваш локальный IP). Зайдите с вашего ПК в браузере (принять самоподписной сертификат).
3.2. Создание первого LXC‑контейнера (Ubuntu)
- В веб‑интерфейсе Proxmox: нажмите «Create CT» (контейнер).
- Общие настройки: ID = 100, Hostname =
docker-host, Unprivileged container (снимите галочку, если будут проблемы с привилегиями – оставим по умолчанию). - Шаблон: вкладка «Templates» → скачать шаблон Ubuntu 22.04 (или 24.04). После скачивания выберите его.
- Диск: 20–30 ГБ.
- CPU: 2 ядра (можно выделить из физических).
- Память: 2048 МБ (2 ГБ).
- Сеть: мост vmbr0, IPv4 = DHCP (получит адрес от вашего роутера) или статический (лучше статический внутри сети, например 192.168.1.210/24).
- DNS: 8.8.8.8.
- После создания запустите контейнер.
3.3. Доступ в контейнер и базовые настройки
- Через веб‑терминал Proxmox (
pct enter 100) или по SSH (если настроили IP). - Обновите систему:
apt update && apt upgrade -y - Установите полезные пакеты:
apt install curl wget git htop net-tools -y - Проверьте сеть:
ip a,ping google.com.
Что вы изучили: Гипервизор vs контейнеры, установка Proxmox, создание LXC, командная строка Linux, базовое администрирование.
Этап 4. Docker, Nginx Proxy Manager, доменное имя и статический IP
4.1. Установка Docker и Docker Compose в LXC‑контейнер
Важно: LXC не полностью совместим с Docker без дополнительных настроек. Но в Proxmox можно включить nesting и features: keyctl=1,nesting=1. Сделаем проще – создадим новый привилегированный контейнер с включенными фичами.
- Создайте контейнер (ID 101, название
docker, шаблон Ubuntu 22.04) и в его конфиге (/etc/pve/lxc/101.conf) добавьте строчки:features: keyctl=1,nesting=1 lxc.cgroup2.devices.allow: c 10:200 rwm - Установка Docker (официальный скрипт):
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh usermod -aG docker root # или ваш пользователь - Установите Docker Compose:
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
4.2. Подготовка к получению домена и статического IP от провайдера
- Обратитесь к провайдеру: закажите статический публичный IP‑адрес (обычно 100–300 руб/мес). После этого ваш внешний адрес не меняется.
- Зарегистрируйте доменное имя (например, на reg.ru, nic.ru, namecheap). Пусть будет
studentlab.ru(замените на своё).
4.3. Настройка Nginx Proxy Manager (NPM) в Docker
NPM – простой reverse‑прокси с веб‑интерфейсом, автоматически выдаёт SSL‑сертификаты Let's Encrypt.
- Создайте директорию для NPM:
mkdir -p /opt/npm && cd /opt/npm - Файл
docker-compose.yml:version: '3' services: npm: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt - Запустите:
docker-compose up -d - Откройте веб‑интерфейс NPM:
http://<IP_вашего_контейнера>:81(логин/пароль по умолчанию:admin@example.com/changeme). Сразу смените.
4.4. Проброс портов 80, 443 на роутере к вашему Docker‑контейнеру
- В роутере создайте правила переадресации:
- Внешний порт 80 → внутренний IP контейнера (например, 192.168.1.210) порт 80
- Внешний порт 443 → 192.168.1.210 порт 443
- Теперь любой запрос на ваш статический IP (и домен) будет попадать в Nginx Proxy Manager.
Что вы изучили: Установка Docker в LXC, reverse‑прокси, управление доменными именами, Let’s Encrypt, проброс 80/443.
Этап 5. Развёртывание сервисов
5.1. Nextcloud (личное облако)
- Создайте ещё один LXC‑контейнер (или используйте тот же, где Docker). Рекомендуется отдельный контейнер для удобства.
- В контейнере создайте директорию
/opt/nextcloudи файлdocker-compose.yml:version: '3' services: nextcloud: image: nextcloud restart: always ports: - '8080:80' volumes: - nextcloud_data:/var/www/html/data environment: - MYSQL_HOST=db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=secret db: image: mariadb restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW volumes: - db_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=rootsecret - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=secret volumes: nextcloud_data: db_data: - Запустите:
docker-compose up -d - В NPM добавьте новый Proxy Host: домен
cloud.studentlab.ru→http://<IP_контейнера>:8080, включите SSL (Let's Encrypt). - Откройте
https://cloud.studentlab.ruи завершите установку Nextcloud.
5.2. Создание и размещение собственного веб‑сайта с использованием API
Цель: написать маленькое веб‑приложение, которое обращается к внешнему API (например, погода, курсы валют, случайный кот) и показать его через свой домен.
- Создайте третий контейнер (или используйте существующий) для сайта.
- Напишем простой сайт на Python + Flask:
Файл
mkdir /opt/myapp && cd /opt/myappapp.py:Файлfrom flask import Flask, render_template_string import requests app = Flask(__name__) @app.route('/') def index(): # Пример API погоды (бесплатный open-meteo) r = requests.get('https://api.open-meteo.com/v1/forecast?latitude=55.75&longitude=37.62¤t_weather=true') weather = r.json()['current_weather'] return render_template_string(''' <h1>Мой домашний сервер</h1> <p>Температура в Москве: {{ temp }}°C</p> <p>Скорость ветра: {{ wind }} м/с</p> ''', temp=weather['temperature'], wind=weather['windspeed'])requirements.txt:flask requests - Создайте
Dockerfile:FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY app.py . CMD ["python", "app.py"] - Соберите образ и запустите контейнер:
docker build -t myapp . docker run -d -p 5000:5000 --name myapp myapp - В NPM настройте домен
www.studentlab.ru(илиapp.studentlab.ru) наhttp://<IP_контейнера>:5000с SSL. - Проверьте – ваш сайт с API доступен из интернета.
Что вы изучили: Разработка веб‑приложения, работа с API, контейнеризация приложения, интеграция с reverse‑прокси.
5.3. Развёртывание локальной ИИ‑модели (LLM)
Цель: запустить модель типа Llama 3, Mistral или даже небольшую русскоязычную модель (saiga, ruGPT) в контейнере.
- Используем проект Ollama – легко запускается в Docker.
- На том же или отдельном контейнере (желательно с видеокартой, но подойдёт и CPU) выполните:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama - Зайдите внутрь контейнера и скачайте модель (например,
llama3.2:1b– лёгкая, работает даже на слабом железе):docker exec -it ollama ollama pull llama3.2:1b - Проверьте API модели:
curl http://localhost:11434/api/generate -d '{"model": "llama3.2:1b", "prompt": "Почему небо голубое?"}' - Теперь можно сделать простой веб‑интерфейс для чата или использовать готовый (Open WebUI) – также в Docker. Это даст понимание, как локальные LLM обслуживаются через REST API.
Дополнительно: Если есть дискретная видеокарта Nvidia, установите nvidia‑container‑runtime и запустите Ollama с GPU – получите навыки работы с GPU в Docker.
Что вы изучили: Запуск современных ИИ‑моделей на своём железе, взаимодействие через API, работа с GPU в контейнерах.
Этап 6. Оформление кабель‑каналов и документирование
Теперь, когда всё работает, нужно привести рабочее пространство в порядок.
6.1. Прокладка кабелей
- Купите пластиковые кабель‑каналы (коробы) нужного размера.
- Прикрепите их к стене/плинтусу саморезами или двусторонним скотчем.
- Проложите все кабели (от роутера к серверу, к вашему ПК, возможно, к другим устройствам) внутри коробов.
- Используйте стяжки для аккуратных связок внутри каналов.
- Подпишите оба конца каждого кабеля (например, «router‑lan1 -> server»).
6.2. Документация проекта
Создайте документ (Markdown, Wiki или просто текст), где опишете:
- Схему сети (IP‑адреса всех устройств, порты проброса).
- Логины/пароли (храните в безопасном месте, например в Bitwarden).
- Краткие инструкции по запуску каждого сервиса (
docker-compose ps,docker restart). - Скриншоты веб‑интерфейсов.
Это приучит студентов документировать инфраструктуру – профессиональный навык.
Заключение и дальнейшие шаги
После выполнения этого проекта студенты:
- Получат опыт администрирования реального сервера 24/7.
- Поймут, как работают сети от физического уровня до приложений.
- Перестанут бояться Linux, Docker и прокси.
- Научатся комбинировать разработку и инфраструктуру.
Что можно добавить (по желанию):
- VPN‑сервер (WireGuard) для безопасного доступа вместо RDP.
- Мониторинг (Prometheus + Grafana) в ещё одном контейнере.
- Автоматическое резервное копирование Nextcloud на внешний диск.
- Telegram‑бота, который сообщает о статусе сервера.
Совет преподавателю: разбейте проект на 3–4 контрольные точки – например, «сеть и роутер», «Proxmox и контейнеры», «Docker и домены», «сервисы и API». Каждая точка сдаётся студентом через скриншоты и короткое описание.
Теперь у вас есть готовая инструкция, которую можно выдать студентам как методическое пособие. Успешного обучения!