Files
comp_seti/all_practise.md

23 KiB
Raw Permalink Blame History

Практический проект: «Домашний мини-дата-центр и песочница для разработки»

Цель: создать дома собственный сервер на базе выделенной машины, настроить сеть, виртуализацию, контейнеры, развернуть полезные сервисы (Nextcloud, свой сайт, локальную ИИ‑модель) и получить реальные навыки, которые применяются в IT‑инфраструктуре и разработке.

Что вы изучите и попробуете на практике

  • Сетевые протоколы: DHCP, DNS, NAT, порт‑форвардинг, RDP, HTTP/HTTPS, API.
  • Администрирование роутера (проброс портов, резервирование IP).
  • Сборку ПК и элементарный монтаж витой пары (обжим коннекторов).
  • Гипервизор Proxmox VE (установка, создание LXC‑контейнеров).
  • Linux (Ubuntu) – базовые команды, сеть, systemd, пользователи.
  • Docker и DockerCompose – изоляция приложений.
  • Reverse‑прокси на Nginx Proxy Manager – управление доменами и SSL‑сертификатами.
  • Разработку простого сайта с подключением к внешнему API (на Python/Flask или Node.js).
  • Развёртывание Nextcloud – файловое облако своими руками.
  • Запуск локальной LLM (например, Llama 3 или Mistral) в контейнере.
  • Аккуратное кабельное хозяйство – структурированная кабельная система.

Предварительные требования

  • Базовое умение работать с компьютером (установка ОС, работа с командной строкой).
  • Бюджет: ~5–20 тыс. руб. (б/у компьютер + роутер, если старого нет).
  • Желание экспериментировать и читать документацию.

Этап 0. Планирование и закупка оборудования

Что нужно купить:

  1. Роутер (если старого нет) с поддержкой проброса портов и, желательно, возможностью назначения статических IP внутри сети. Подойдёт любой современный роутер (TPLink, Keenetic, Asus, MikroTik).
  2. Компьютер под сервер:
    • Лучше б/у корпоративный мини‑ПК (Dell OptiPlex, HP ProDesk, Lenovo ThinkCentre) или собранный из деталей с Avito.
    • Минимум: 4‑ядерный процессор (Intel i5 2‑го поколения или новее / AMD Ryzen), 8 ГБ ОЗУ (лучше 16+), SSD 240+ ГБ, блок питания 300+ Вт.
    • Для Proxmox обязательна поддержка виртуализации (VT‑x/AMD‑V) – включить в BIOS.
  3. Витая пара (кабель UTP Cat5e или Cat6) – несколько метров, коннекторы RJ45 и кримпер (обжимной инструмент), если будете делать кабель сами. Можно купить готовый патч‑корд.
  4. Кабель‑каналы (коробы) и стяжки – для аккуратного монтажа.

Зачем? Чтобы понять, как реально соединяются устройства, научиться обжимать кабель (прямая распиновка T568B) и организовать рабочее место.


Этап 1. Настройка роутера и проброс RDP на ваш основной компьютер (начальные опыты)

Важно: Прямой проброс RDP на внешний IP – небезопасно (атаки перебором). Для учебных целей мы делаем это временно, а затем будем использовать VPN или более защищённые методы. Но сам процесс настройки порт‑форвардинга – фундаментальный навык.

1.1. Получение внешнего IP и проверка доступа извне

  • Зайдите в веб‑интерфейс роутера (обычно 192.168.0.1 или 192.168.1.1).
  • Найдите раздел «Состояние сети» – посмотрите WANIP (внешний). Если он начинается на 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, NoIP), если 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 / AMDV). Сохраните.

Что вы изучили: физический уровень сети (распиновка, обжим), основы сборки/апгрейда ПК, настройка 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). После скачивания выберите его.
  • Диск: 2030 ГБ.
  • 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.ruhttp://<IP_контейнера>:8080, включите SSL (Let's Encrypt).
  • Откройте https://cloud.studentlab.ru и завершите установку Nextcloud.

5.2. Создание и размещение собственного веб‑сайта с использованием API

Цель: написать маленькое веб‑приложение, которое обращается к внешнему API (например, погода, курсы валют, случайный кот) и показать его через свой домен.

  • Создайте третий контейнер (или используйте существующий) для сайта.
  • Напишем простой сайт на Python + Flask:
    mkdir /opt/myapp && cd /opt/myapp
    
    Файл app.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&current_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, установите nvidiacontainerruntime и запустите Ollama с GPU – получите навыки работы с GPU в Docker.

Что вы изучили: Запуск современных ИИ‑моделей на своём железе, взаимодействие через API, работа с GPU в контейнерах.


Этап 6. Оформление кабель‑каналов и документирование

Теперь, когда всё работает, нужно привести рабочее пространство в порядок.

6.1. Прокладка кабелей

  • Купите пластиковые кабель‑каналы (коробы) нужного размера.
  • Прикрепите их к стене/плинтусу саморезами или двусторонним скотчем.
  • Проложите все кабели (от роутера к серверу, к вашему ПК, возможно, к другим устройствам) внутри коробов.
  • Используйте стяжки для аккуратных связок внутри каналов.
  • Подпишите оба конца каждого кабеля (например, «routerlan1 -> server»).

6.2. Документация проекта

Создайте документ (Markdown, Wiki или просто текст), где опишете:

  • Схему сети (IP‑адреса всех устройств, порты проброса).
  • Логины/пароли (храните в безопасном месте, например в Bitwarden).
  • Краткие инструкции по запуску каждого сервиса (docker-compose ps, docker restart).
  • Скриншоты веб‑интерфейсов.

Это приучит студентов документировать инфраструктуру – профессиональный навык.


Заключение и дальнейшие шаги

После выполнения этого проекта студенты:

  • Получат опыт администрирования реального сервера 24/7.
  • Поймут, как работают сети от физического уровня до приложений.
  • Перестанут бояться Linux, Docker и прокси.
  • Научатся комбинировать разработку и инфраструктуру.

Что можно добавить (по желанию):

  • VPN‑сервер (WireGuard) для безопасного доступа вместо RDP.
  • Мониторинг (Prometheus + Grafana) в ещё одном контейнере.
  • Автоматическое резервное копирование Nextcloud на внешний диск.
  • Telegram‑бота, который сообщает о статусе сервера.