Добавить all_practise.md
This commit is contained in:
+337
@@ -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://<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¤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`:
|
||||||
|
```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, установите 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». Каждая точка сдаётся студентом через скриншоты и короткое описание.
|
||||||
|
|
||||||
|
Теперь у вас есть готовая инструкция, которую можно выдать студентам как методическое пособие. Успешного обучения!
|
||||||
Reference in New Issue
Block a user