Лаб. работа “Развертывание среды и установка CMS”
Лабораторная работа №2
Развертывание среды и установка CMS на бесплатном хостинге Segfault
Цель работы
Получить практический навык установки CMS на удалённый сервер с использованием бесплатного хостинга Segfault, работы с встроенным PHP-сервером и базой данных SQLite.
Задачи
- Подключиться к серверу Segfault через SSH
- Установить PHP и необходимые модули
- Скачать и настроить WordPress для работы с SQLite
- Запустить встроенный PHP-сервер
- Выполнить установку WordPress
- Войти в административную панель
- Создать резервную копию базы данных
Ключевые навыки
- Работа с удалённым сервером через SSH
- Управление файлами в Linux (командная строка)
- Установка и настройка PHP-приложений
- Работа с базой данных SQLite
- Использование зашифрованного хранилища
- Запуск веб-сервера вручную
Теоретическая часть
Что такое Segfault?
Segfault — бесплатный сервис от The Hacker’s Choice (THC), предоставляющий временные root-серверы на базе Kali Linux.
Основные особенности:
- Бесплатный доступ:
ssh root@segfault.net(пароль:segfault) - Kali Linux с предустановленными инструментами
- Зашифрованное хранилище
/secи/home - Возможность установки любого ПО
- Публичный IP-адрес с портом
- Поддержка TOR и onion-адресов
Ограничения бесплатной версии:
- Ограниченные ресурсы (CPU, RAM ~256MB, диск)
- Сервер может быть выключен при нехватке ресурсов
- Данные могут быть уничтожены при длительном неиспользовании
- Используйте
/secдля важных данных (шифрование)
Почему SQLite вместо MySQL?
SQLite — встраиваемая база данных, хранящаяся в одном файле.
Преимущества для обучения:
- Не требует отдельного сервера
- Занимает меньше памяти (~5MB vs ~100MB MySQL)
- Проще в управлении (один файл)
- Достаточно для небольших сайтов
Недостатки:
- Не подходит для высокой нагрузки
- Ограниченная масштабируемость
- Нет пользователей и прав доступа как в MySQL
Официальный плагин sqlite-database-integration
В этой работе используется официальный плагин от WordPress Core Team:
- Назначение: Тестирование SQLite для будущего включения в ядро WordPress
- Авторы: WordPress Core Team (aristath, janjakes, zieladam и др.)
- Популярность: 3000+ активных установок
- Версия: Последняя стабильная (автоматически)
Как работает:
Плагин заменяет стандартный слой базы данных WordPress (wpdb) на SQLite-реализацию. При этом: - WordPress продолжает использовать стандартный API (wpdb) - Все MySQL-запросы автоматически конвертируются в SQLite-синтаксис - Файл базы данных создаётся автоматически в wp-content/database/.ht.sqlite - Не требуется отдельный сервер базы данных
Преимущества официального плагина:
- Полная совместимость с WordPress API
- Поддержка WordPress Core Team
- Регулярные обновления
- Высокая стабильность
Архитектура решения
Компоненты системы:
- Браузер клиента — отправляет HTTP-запросы на публичный IP и порт Segfault
- Segfault Server — бесплатный виртуальный сервер на Kali Linux
- Встроенный PHP-сервер — обрабатывает HTTP-запросы без Apache/Nginx
- WordPress — CMS с официальным плагином sqlite-database-integration
- SQLite — база данных в файле
.ht.sqlite(через плагин) - Зашифрованное хранилище /sec — сохраняет данные между сессиями
Практическая часть
Шаг 1. Подключение к Segfault
1.1. Откройте терминал на вашем компьютере
1.2. Подключитесь к серверу:
1.3. Введите пароль:
segfault
1.4. После подключения вы увидите приветственное сообщение с важной информацией:
Welcome to Segfault.
Your server is ready...
SSH : ssh -o "SetEnv SECRET=???????????????????" root@adm.segfault.net
1.5. Сохраните секретный ключ для повторного подключения:
Важно: Запомните или скопируйте полную команду SSH с параметром
SECRET.Пример:
Без этого ключа вы не сможете:
- Повторно подключиться к своему серверу
- Получить доступ к сохраненным файлам в
/sec- Восстановить зашифрованные данные
Совет: Сохраните эту команду в надежном месте (менеджер паролей, заметки).
1.6. Получите открытый порт для доступа к сайту:
В выводе будет строка:
👾 Your reverse Port is 83.143.242.45 39815 [83.143.242.45:39815]
Запомните: IP-адрес и порт (в примере: 83.143.242.45:39815)
Примечание: Если подключение не работает, попробуйте порт 443:
Шаг 2. Проверка системы и установка PHP
2.1. Проверьте версию системы:
Ожидаемый вывод: Kali GNU/Linux Rolling (на базе Debian)
2.2. Обновите список пакетов:
2.3. Установите PHP и необходимые модули:
2.4. Проверьте установку PHP:
Ожидаемый вывод: PHP 8.x.x
2.5. Проверьте наличие модуля SQLite:
Должно отобразиться: pdo_sqlite, sqlite3
2.6. Проверьте открытый порт (если забыли):
Если вы не записали порт на шаге 1.6, получите его снова:
Важно: PHP-сервер должен слушать именно на этом порту, иначе сайт не будет доступен извне.
Шаг 3. Создание директории проекта
3.1. Перейдите в зашифрованное хранилище:
Важно: Используйте
/secвместо обычных директорий, так как оно зашифровано и данные сохраняются между сессиями.
3.2. Создайте директорию для WordPress:
Шаг 4. Скачивание WordPress
4.1. Скачайте последнюю версию WordPress:
4.2. Распакуйте архив:
4.3. Переместите файлы WordPress в текущую директорию:
4.4. Удалите архив:
4.5. Проверьте содержимое:
Должны быть файлы: index.php, wp-config-sample.php, wp-admin/, wp-content/, wp-includes/
Шаг 5. Установка официального плагина SQLite Database Integration
5.1. Скачайте официальный плагин от WordPress Core Team:
Примечание: Это официальный плагин от WordPress Core Team для тестирования SQLite в ядре WordPress. Он автоматически перехватывает подключение к базе данных.
5.2. Распакуйте плагин:
5.3. Скопируйте db.php для активации SQLite:
Важно: Файл
db.phpв директорииwp-content/активирует плагин на уровне ядра WordPress, перехватывая все запросы к базе данных.
5.4. Перейдите обратно в корневую директорию сайта:
Шаг 6. Настройка WordPress для работы с SQLite
6.1. Создайте файл конфигурации из примера:
6.2. Откройте файл для редактирования:
6.3. Настройте параметры базы данных (строки 20-35):
Оставьте стандартные настройки или замените значения:
6.4. Добавьте константу для выбора движка базы данных (после настроек DB_**):
Важно:
- Константа
DB_ENGINEуказывает WordPress использовать SQLite вместо MySQL- Файл
wp-content/db.php(скопированный на шаге 5.3) активирует плагин на уровне ядра- Файл базы данных будет создан автоматически в
wp-content/database/.ht.sqlite
6.5. Добавьте ключи безопасности (генерируются автоматически при установке, можно оставить как есть или заменить):
Найдите строки:
Можно сгенерировать случайные ключи командой:
И вставить их вместо стандартных значений.
6.6. Сохраните файл (Ctrl+O, Enter, Ctrl+X)
Шаг 7. Запуск встроенного PHP-сервера
7.1. Убедитесь, что вы в директории сайта:
7.2. Получите открытый порт (если забыли):
7.3. Запустите PHP-сервер в фоновом режиме на открытом порту:
Важно: Замените
ВАШ_ПОРТна номер порта, полученный на шаге 2.6 (например:39815).Пример:
7.4. Проверьте, что сервер запущен:
Ожидаемый вывод: должна быть строка с php -S 0.0.0.0:ВАШ_ПОРТ
7.5. Проверьте логи сервера:
Должно отобразиться: Listening on http://0.0.0.0:ВАШ_ПОРТ
Шаг 8. Установка WordPress через браузер
8.1. Получите ваш публичный адрес и порт:
На сервере выполните:
В выводе будет строка:
👾 Your reverse Port is 83.143.242.45 39815 [83.143.242.45:39815]
Запомните: IP-адрес и порт (в примере: 83.143.242.45:39815)
8.2. Откройте браузер и перейдите по адресу:
http://ВАШ-IP:ВАШ-ПОРТ/wp-admin/setup-config.php
Пример: http://83.143.242.45:39815/wp-admin/setup-config.php
8.3. Выберите язык (русский) и нажмите “Продолжить”
8.4. Заполните форму установки:
| Поле | Значение |
|---|---|
| Название сайта | Мой первый сайт на WordPress |
| Имя пользователя | admin |
| Пароль | (придумайте надёжный пароль, минимум 12 символов) |
| Ваш email | ваш@email.com |
| Поисковая видимость | ☐ (снимите галочку для обучения) |
8.5. Нажмите “Установить WordPress”
8.6. После успешной установки нажмите “Войти”
8.7. Введите логин и пароль, созданные на шаге 8.4
Шаг 9. Проверка работоспособности
9.1. Проверьте доступность сайта:
- Откройте:
http://ВАШ-IP:ВАШ-ПОРТ/ - Должна появиться стандартная тема WordPress с приветственной записью
9.2. Проверьте административную панель:
- Откройте:
http://ВАШ-IP:ВАШ-ПОРТ/wp-admin - Зайдите под учётной записью администратора
9.3. Создайте тестовую запись:
- В админ-панели перейдите: Записи → Добавить новую
- Заголовок: “Моя первая запись на Segfault”
- Текст: “Этот сайт работает на WordPress + SQLite на бесплатном сервере Segfault!”
- Нажмите “Опубликовать”
9.4. Проверьте запись на сайте:
- Перейдите на главную страницу сайта
- Запись должна отображаться
Шаг 10. Работа с зашифрованным хранилищем
10.1. Проверьте содержимое /sec:
10.2. Проверьте файл базы данных SQLite:
Официальный плагин создаёт базу данных в директории wp-content/database/:
Должен быть файл: .ht.sqlite (скрытый файл)
10.3. Проверьте размер базы данных:
Примечание: Файл
.ht.sqliteсоздаётся автоматически при первом запуске WordPress с установленным плагином. Название файла начинается с точки, что делает его скрытым в Unix-системах.
10.4. Важно: Данные в /sec сохраняются между сессиями благодаря шифрованию. При выходе из SSH ключи шифрования стираются, но данные остаются зашифрованными и будут доступны при следующем входе.
Дополнительные задания
Задание 1. Резервное копирование базы данных
Создайте резервную копию базы SQLite (официальный плагин создаёт файл .ht.sqlite):
Скачайте бэкап на локальный компьютер (в другом терминале):
Задание 2. Установка темы
- В админ-панели перейдите: Внешний вид → Темы
- Нажмите “Добавить новую”
- Выберите тему (например, “Twenty Twenty-Four”)
- Нажмите “Установить” → “Активировать”
- Проверьте изменение внешнего вида сайта
Задание 3. Настройка постоянных ссылок (ЧПУ)
- В админ-панели: Настройки → Постоянные ссылки
- Выберите “Название записи”
- Сохраните изменения
- Проверьте, что URL записей стали читаемыми
Примечание: Для работы ЧПУ встроенный PHP-сервер не требует дополнительной настройки .htaccess.
Управление сервером
Остановка PHP-сервера
Перезапуск сервера
Просмотр логов сервера
Выход из SSH (сервер продолжит работать)
Или нажмите Ctrl+D
Важно: PHP-сервер продолжит работать в фоновом режиме после выхода благодаря
nohup.
Требования к отчёту
Отчёт должен содержать:
- Титульный лист с названием работы, ФИО студента, группы, датой
- Введение — цель и задачи работы (1 страница)
- Ход работы — пошаговое описание выполнения со скриншотами:
- Подключение к Segfault через SSH
- Установка PHP и модулей
- Содержимое директории /sec/wordpress-site
- Запуск PHP-сервера
- Установка WordPress (скриншоты веб-интерфейса)
- Административная панель
- Созданная тестовая запись
- Файл базы данных SQLite
- Архитектура решения — схема или описание компонентов
- Вывод — какие навыки получены, преимущества и недостатки использования SQLite и Segfault (1 страница)
- Список используемых источников (минимум 3 источника)
Объём отчёта: 6-10 страниц
Формат: PDF или DOCX
Критерии оценки
| Критерий | Баллы | Описание |
|---|---|---|
| Успешное подключение к Segfault | 10 | SSH-соединение установлено |
| Установка PHP и модулей | 15 | Все необходимые пакеты установлены |
| Корректная установка WordPress | 25 | WordPress установлен и работает |
| Настройка SQLite | 15 | База данных SQLite функционирует |
| Проверка функциональности | 15 | Создана запись, проверена админка |
| Работа с /sec и резервное копирование | 10 | Использовано зашифрованное хранилище |
| Оформление отчёта | 10 | Соблюдена структура, есть скриншоты |
| Дополнительные задания | +20 | За каждое дополнительное задание |
Максимальный балл: 100 (+20 бонус)
Шкала оценок:
- 90-100: отлично
- 75-89: хорошо
- 60-74: удовлетворительно
- менее 60: неудовлетворительно
Контрольные вопросы для защиты
- Что такое Segfault и какие у него преимущества/недостатки?
- Почему используется SQLite вместо MySQL?
- Какие преимущества даёт встроенный PHP-сервер?
- Зачем использовать зашифрованное хранилище
/sec? - Как выполнить резервное копирование базы данных SQLite?
- Что такое nohup и зачем он используется?
- Как проверить, что PHP-сервер запущен?
- Какие ограничения имеет бесплатный Segfault?
- Чем SQLite отличается от MySQL?
- Как сохранить данные между сессиями работы с Segfault?
- Как работает официальный плагин sqlite-database-integration и чем он отличается от неофициальных решений?
Возможные проблемы и решения
Проблема: Потерян секретный ключ для подключения
Решение:
Если вы не сохранили секретный ключ при первом входе, создайте новый сервер:
Новый сервер будет создан с новым ключом
Важно: Данные в
/secпредыдущего сервера будут потеряны без возможности восстановленияСовет: Всегда сохраняйте команду с SECRET сразу при первом входе
Проблема: Не удаётся подключиться по SSH
Решение:
Используйте полную команду с SECRET:
Попробуйте порт 443:
Подождите несколько минут и попробуйте снова (возможен лимит подключений)
Проверьте подключение к интернету
Проблема: Команда apt не работает
Решение:
Проблема: PHP-сервер не запускается
Решение:
Проверьте, что используете правильный порт (полученный через
curl sf/port):Проверьте, не занят ли порт:
Остановите предыдущий процесс PHP:
Запустите снова с правильным портом:
Проблема: WordPress не видит базу данных
Решение:
Проверьте, что файл
wp-content/db.phpсуществует:Если файла нет, скопируйте его:
Проверьте файл wp-config.php, должен быть добавлен:
Проверьте права доступа:
Проблема: Данные не сохраняются между сессиями
Решение:
Убедитесь, что вы используете правильный SECRET ключ при подключении:
Проверьте, что работаете в директории
/sec:Проверьте, что данные записываются:
Не храните данные в
/tmpили/var/tmp— они удаляются при выходеПроверьте, что не превышен лимит дискового пространства:
Проблема: Сайт недоступен из интернета
Решение:
Проверьте, что сервер слушает на 0.0.0.0, а не 127.0.0.1:
Проверьте правильный порт:
Проверьте IP-адрес:
Убедитесь, что порт открыт на файрволе Segfault (обычно открыт автоматически)
Рекомендуемые источники
Официальная документация
- WordPress: https://wordpress.org/support/
- WordPress SQLite Integration: https://wordpress.org/plugins/sqlite-database-integration/
- PHP Built-in Web Server: https://www.php.net/manual/en/features.commandline.webserver.php
- SQLite Documentation: https://www.sqlite.org/docs.html
Segfault
- Segfault Main Page: https://www.thc.org/segfault/
- Segfault FAQ: https://www.thc.org/segfault/faq/
Приложение А. Полный список команд
# Подключение (используйте ваш SECRET ключ из первого входа)
ssh -o "SetEnv SECRET=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ" root@adm.segfault.net
# Пароль: segfault
# Получение открытого порта
curl sf/port
# Запомните: IP-адрес и номер порта из строки "Your reverse Port is..."
# Установка PHP
cd /sec
apt update
apt install -y php php-sqlite3 php-gd php-curl php-xml php-mbstring php-zip wget unzip
# Создание директории
mkdir wordpress-site && cd wordpress-site
# Скачивание WordPress
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mv wordpress/* . && rmdir wordpress
rm latest.tar.gz
# Установка официального плагина SQLite (от WordPress Core Team)
cd wp-content/plugins
wget https://downloads.wordpress.org/plugin/sqlite-database-integration.zip
unzip sqlite-database-integration.zip
rm sqlite-database-integration.zip
# Копирование db.php для активации SQLite (обязательно!)
cp sqlite-database-integration/db.copy ../db.php
cd /sec/wordpress-site
# Настройка WordPress (использовать стандартные настройки БД + DB_ENGINE)
cp wp-config-sample.php wp-config.php
nano wp-config.php
# Добавьте: define( 'DB_ENGINE', 'sqlite' );
# Файл базы данных будет создан в wp-content/database/.ht.sqlite
# Запуск сервера (замените ВАШ_ПОРТ на порт из curl sf/port)
nohup php -S 0.0.0.0:ВАШ_ПОРТ > /tmp/server.log 2>&1 &
# Проверка
ps aux | grep "php -S"
curl http://localhost:ВАШ_ПОРТ
# Резервное копирование (официальный плагин создаёт файл .ht.sqlite)
cd /sec/wordpress-site/wp-content/database
cp .ht.sqlite wordpress-backup-$(date +%Y%m%d).sqlite
# Повторное подключение (используйте сохранённый SECRET ключ)
ssh -o "SetEnv SECRET=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ" root@adm.segfault.netПриложение Б. Пример структуры директорий
/sec/wordpress-site/
├── index.php
├── wp-config.php
├── wp-admin/
├── wp-content/
│ ├── db.php # ← Активатор SQLite (скопирован из плагина)
│ ├── database/
│ │ └── .ht.sqlite # ← SQLite база данных (официальный плагин)
│ ├── plugins/
│ │ └── sqlite-database-integration/ # ← Официальный плагин от WordPress Core
│ ├── themes/
│ └── uploads/
├── wp-includes/
└── ...