From 305ab13ac8447b8013abe28bbbcbbaf87e8ec000 Mon Sep 17 00:00:00 2001 From: Poziloy Date: Fri, 15 May 2026 10:40:06 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20all=5Fpractise.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- all_practise.md | 337 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 all_practise.md diff --git a/all_practise.md b/all_practise.md new file mode 100644 index 0000000..863004e --- /dev/null +++ b/all_practise.md @@ -0,0 +1,337 @@ +## **Практический проект: «Домашний мини-дата-центр и песочница для разработки»** + +**Цель:** создать дома собственный сервер на базе выделенной машины, настроить сеть, виртуализацию, контейнеры, развернуть полезные сервисы (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. Планирование и закупка оборудования** + +### Что нужно купить: +1. **Роутер** (если старого нет) с поддержкой проброса портов и, желательно, возможностью назначения статических IP внутри сети. Подойдёт любой современный роутер (TP‑Link, 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). +- Найдите раздел «Состояние сети» – посмотрите **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 (официальный скрипт): + ```bash + curl -fsSL https://get.docker.com -o get-docker.sh + sh get-docker.sh + usermod -aG docker root # или ваш пользователь + ``` +- Установите Docker Compose: + ```bash + 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: + ```bash + mkdir -p /opt/npm && cd /opt/npm + ``` +- Файл `docker-compose.yml`: + ```yaml + 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://: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`: + ```yaml + 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://:8080`, включите SSL (Let's Encrypt). +- Откройте `https://cloud.studentlab.ru` и завершите установку Nextcloud. + +### 5.2. Создание и размещение собственного веб‑сайта с использованием API +**Цель:** написать маленькое веб‑приложение, которое обращается к внешнему API (например, погода, курсы валют, случайный кот) и показать его через свой домен. + +- Создайте третий контейнер (или используйте существующий) для сайта. +- Напишем простой сайт на Python + Flask: + ```bash + mkdir /opt/myapp && cd /opt/myapp + ``` + Файл `app.py`: + ```python + 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(''' +

Мой домашний сервер

+

Температура в Москве: {{ temp }}°C

+

Скорость ветра: {{ wind }} м/с

+ ''', temp=weather['temperature'], wind=weather['windspeed']) + ``` + Файл `requirements.txt`: + ``` + flask + requests + ``` +- Создайте `Dockerfile`: + ```dockerfile + FROM python:3.11-slim + WORKDIR /app + COPY requirements.txt . + RUN pip install -r requirements.txt + COPY app.py . + CMD ["python", "app.py"] + ``` +- Соберите образ и запустите контейнер: + ```bash + docker build -t myapp . + docker run -d -p 5000:5000 --name myapp myapp + ``` +- В NPM настройте домен `www.studentlab.ru` (или `app.studentlab.ru`) на `http://:5000` с SSL. +- Проверьте – ваш сайт с API доступен из интернета. + +> **Что вы изучили:** Разработка веб‑приложения, работа с API, контейнеризация приложения, интеграция с reverse‑прокси. + +### 5.3. Развёртывание локальной ИИ‑модели (LLM) +**Цель:** запустить модель типа Llama 3, Mistral или даже небольшую русскоязычную модель (saiga, ruGPT) в контейнере. + +- Используем проект **Ollama** – легко запускается в Docker. +- На том же или отдельном контейнере (желательно с видеокартой, но подойдёт и CPU) выполните: + ```bash + docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama + ``` +- Зайдите внутрь контейнера и скачайте модель (например, `llama3.2:1b` – лёгкая, работает даже на слабом железе): + ```bash + docker exec -it ollama ollama pull llama3.2:1b + ``` +- Проверьте API модели: + ```bash + 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». Каждая точка сдаётся студентом через скриншоты и короткое описание. + +Теперь у вас есть готовая инструкция, которую можно выдать студентам как методическое пособие. Успешного обучения! \ No newline at end of file