Files
comp_seti/all_practise.md

333 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## **Практический проект: «Домашний мини-дата-центр и песочница для разработки»**
**Цель:** создать дома собственный сервер на базе выделенной машины, настроить сеть, виртуализацию, контейнеры, развернуть полезные сервисы (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‑бота, который сообщает о статусе сервера.