Добавить all_practise.md

This commit is contained in:
2026-05-15 10:40:06 +00:00
parent f8fcb76874
commit 305ab13ac8
+337
View File
@@ -0,0 +1,337 @@
## **Практический проект: «Домашний мини-дата-центр и песочница для разработки»**
**Цель:** создать дома собственный сервер на базе выделенной машины, настроить сеть, виртуализацию, контейнеры, развернуть полезные сервисы (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 (официальный скрипт):
```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://<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`:
```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://<IP_контейнера>: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&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`:
```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://<IP_контейнера>: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, установите 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‑бота, который сообщает о статусе сервера.
**Совет преподавателю:** разбейте проект на 3–4 контрольные точки – например, «сеть и роутер», «Proxmox и контейнеры», «Docker и домены», «сервисы и API». Каждая точка сдаётся студентом через скриншоты и короткое описание.
Теперь у вас есть готовая инструкция, которую можно выдать студентам как методическое пособие. Успешного обучения!