Практикум:
Веб-сервер в VM

Полный цикл: от установки Ubuntu Server до настройки Nginx, PHP и самоподписанного SSL в VirtualBox.

🖥️ Наша Цель

Создать с нуля полностью рабочий, но локальный и безопасный веб-сервер.

1. Подготовка

Вам понадобится гипервизор и ISO-образ. Флешка не нужна.

// Ссылка на VirtualBox
https://www.virtualbox.org/wiki/Downloads
// Ссылка на Ubuntu Server 24.04 LTS
https://ubuntu.com/download/server

2. Создание Виртуальной Машины

Создайте новую VM в VirtualBox (Type: Linux, Version: Ubuntu 64-bit).
RAM: 2048 MB, CPU: 2 cores, Disk: 25 GB.

⚠️ КРИТИЧЕСКАЯ НАСТРОЙКА: СЕТЬ

Зайдите в Настройки (Settings) -> Сеть (Network). Смените "Тип подключения" (Attached to) на Сетевой мост (Bridged Adapter).

Это даст VM реальный IP в вашей домашней сети, чтобы вы могли подключаться к ней с основного ПК.

3. Установка Ubuntu Server

Запустите VM и следуйте инструкциям инсталлятора.

❗️ ОБЯЗАТЕЛЬНО: SSH

На экране "SSH Setup" поставьте галочку [X] Install OpenSSH Server. Без этого мы не сможем управлять сервером удаленно.

  • Network: Запомните IP-адрес, который получил сервер.
  • Storage: "Use an entire disk".
  • Snaps: Ничего не выбирайте (Docker и Nginx поставим вручную).

4. Настройка (SSH, UFW)

Сервер загрузился. Не трогайте окно VirtualBox. Откройте терминал на вашем основном компьютере.

// Подключение (замените IP)
ssh admin@192.168.1.50
// Обновление системы
sudo apt update && sudo apt upgrade -y

⚠️ НАСТРОЙКА FIREWALL (UFW)

Соблюдайте порядок, иначе потеряете доступ!

# 1. СНАЧАЛА разрешаем SSH
sudo ufw allow ssh

# 2. Разрешаем Web
sudo ufw allow http
sudo ufw allow https

# 3. ТЕПЕРЬ включаем
sudo ufw enable

5. Установка Nginx + PHP

Ставим веб-сервер и процессор PHP.

// Nginx
sudo apt install nginx
// PHP-FPM
sudo apt install php8.2-fpm

Проверьте в браузере: http://[IP_ВАШЕЙ_VM]. Должно быть "Welcome to nginx!".

6. Конфигурация

Учим Nginx работать с PHP файлами.

sudo nano /etc/nginx/sites-available/default

Что менять?

  • В строку index добавьте index.php.
  • Раскомментируйте блок location ~ \.php$.
  • Убедитесь, что fastcgi_pass указывает на php8.2-fpm.sock.
// Тест и перезагрузка
sudo nginx -t
sudo systemctl reload nginx

🚀 ЧЕЛЛЕНДЖ:

Создайте файл /var/www/html/info.php с содержимым <?php phpinfo(); ?>. Откройте его в браузере. Если видите таблицу PHP — успех! Удалите файл после проверки.

7. Виртуальные Хосты

Создадим отдельный сайт site1.com.

// 1. Контент
sudo mkdir -p /var/www/site1.com/html
echo "Hello Site 1" | sudo tee /var/www/site1.com/html/index.html
// 2. Конфиг (/etc/nginx/sites-available/site1.com)
server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/site1.com/html;
    index index.html;
    location / { try_files $uri $uri/ =404; }
}
// 3. Включение
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
💡 Как открыть site1.com?

Отредактируйте файл hosts на вашем основном компьютере:

Windows: C:\Windows\System32\drivers\etc\hosts
Mac/Linux: /etc/hosts

Добавьте строку: [IP_VM] site1.com

8. SSL (HTTPS)

Создадим самоподписанный сертификат для HTTPS.

// Генерация ключей (на 365 дней)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt

Добавьте в блок server в конфиге site1.com:

listen 443 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

🏆 ФИНАЛ:

Зайдите на https://site1.com. Браузер пожалуется на безопасность (это нормально для самоподписанного сертификата). Нажмите "Advanced -> Proceed". Вы должны увидеть свой сайт с замком!