От старого железа до первого VDS: как я собрал хостинг в студенческом общежитии

в 12:15, , рубрики: isp, mangos, php, webmoney, wow
Это тот самый сервер у меня на подоконнике

Это тот самый сервер у меня на подоконнике

Просто интересный опыт, читайте для души, удачи!

Мой первый опыт с веб-хостингом у меня был в 2005 году. Тогда я на dial-up модеме нашел для себя сайт веб-хостинга (его уже не существует, так что не реклама) Ayola.net — они давали абсолютно бесплатное размещение и бесплатный домен третьего уровня. Это было нереально круто: СВОЙ ДОМЕН ТРЕТЬЕГО УРОВНЯ и поддержка PHP и MySQL! В те времена ещё был хостинг для HTML-страниц, если помните, narod.ru. Мой первый движок CMS для сайта — PHP-Nuke... Короче, сейчас не об этом. Перемещаемся в 2013 год.

Глава 1. Введение

Чтобы что-то заработать, надо что-то делать. Тогда я уже админил WoW-сервер Booty Bay и делал патчи для Trinity Core. Но выжить на это было невозможно. Оглядываясь на 2013 год, я всё ещё улыбаюсь, вспоминая, как крошечная комната в студенческом общежитии стала для меня своеобразным «полигоном для запуска первого прототипа VDS-хостинга». Тогда, вдохновлённый идеями о независимости и желанием сделать что-то особенное в мире IT, я рискнул собрать свой собственный сервер буквально из «обломков металлолома» и запускавшихся идей на голом энтузиазме.

Ubuntu server liveUSB

Ubuntu server liveUSB

Глава 2. Создание сервера из "металлолома"

Приобретение «двигателя» или почему HP ProLiant 2005 года

Сердцем моего «звёздного корабля» (в кавычках, конечно) стал подержанный HP ProLiant 2005 года выпуска. Модель была чем-то из серии DL380 G — по современным меркам настоящий динозавр.

  • Процессор: старенький Intel Xeon (в те времена ещё одноядерный, но с поддержкой Hyper-Threading), который, судя по истории, повидал десятки корпоративных серверных залов, прежде чем осел на форуме б/у железа.

  • Оперативная память: всего 4 ГБ DDR2, частично разных производителей. Некоторые планки были со старыми наклейками, которые уже выцвели до неузнаваемости.

  • Жёсткий диск: пара 72-гигабайтных SCSI-винчестеров в RAID1 (в теории — для надёжности, но я тогда понятия не имел, как правильно это всё настраивать).

Выбирал я это чудо техники по принципу «лишь бы запускалось и не стоило целого состояния». Помню, как трепетал, ожидая курьера с посылкой: для студента тех лет каждая копейка была на счету. Друзья смеялись, что я покупаю «каменный компьютер», который вряд ли прослужит и полгода.

Первый запуск: рев как у ракеты, старт как у драндулета

Когда я впервые включил этот ProLiant у себя в комнате, меня накрыл волной эмоций. Представьте себе гул нескольких вентиляторов, работающих на пределе, что-то среднее между пылесосом и реактивным самолётом, пытающимся взлететь с ковра. Я наивно думал, что смогу «придушить» шум, если поставлю сервер на пол и обложу его учебниками и одеялами. Разумеется, сервер тут же начал греться, словно в нём разгоралась маленькая звезда. Через полчаса вентиляторы начали так выкручивать обороты, что шум был слышен даже за дверью моей комнаты.

Соседи по этажу сразу же насторожились. Один, самый настырный, стучал в стену и кричал, мол, «как вообще можно спать под этот вечно гудящий агрегат?!». Другие с пониманием отнеслись к моей «гениальной задумке», но, когда интернет в коридоре упал до жалких килобит (а я ведь параллельно тянул образы Ubuntu Server 12.04 LTS), доброжелательность быстро испарилась.

Проблема: шум и перегрев

Когда я впервые запустил свой HP ProLiant DL380 G4, меня поразил уровень шума. Вентиляторы работали на полную мощность, создавая гул, который был слышен даже за дверью комнаты. Это не только раздражало соседей, но и приводило к перегреву сервера, особенно когда я пытался "приглушить" шум, обкладывая сервер одеялами и книгами. Я понял, что нужно найти способ управлять скоростью вентиляторов, чтобы снизить шум и предотвратить перегрев.

Решение: Python-скрипт для управления вентиляторами

После долгих поисков я обнаружил, что скорость вентиляторов на HP ProLiant можно управлять через IPMI (Intelligent Platform Management Interface). Это технология, которая позволяет удалённо управлять серверным оборудованием, включая мониторинг температуры и управление вентиляторами.

Я решил написать простенький Python-скрипт, который бы автоматически регулировал скорость вентиляторов в зависимости от температуры процессора. Для этого мне понадобились библиотеки pyipmi и psutil.

Пример Python-скрипта

Вот пример скрсипта, который я написал: (это не тот пример с 2013 года но все же, кому то пригодится)

import os
import time
import psutil
import pyipmi

# Настройки IPMI
IPMI_HOST = "localhost"
IPMI_USER = "admin"
IPMI_PASS = "password"

# Температурные пороги (в градусах Цельсия)
MIN_TEMP = 40
MAX_TEMP = 70

# Скорость вентиляторов (в процентах)
MIN_FAN_SPEED = 20
MAX_FAN_SPEED = 100

def get_cpu_temp():
    """Получаем температуру процессора."""
    temps = psutil.sensors_temperatures()
    if 'coretemp' in temps:
        return max([temp.current for temp in temps['coretemp']])
    return None

def set_fan_speed(speed):
    """Устанавливаем скорость вентиляторов через IPMI."""
    try:
        ipmi = pyipmi.create_connection(
            interface='lanplus',
            host=IPMI_HOST,
            username=IPMI_USER,
            password=IPMI_PASS
        )
        ipmi.session.establish()
        ipmi.chassis_control(fan_control=True, fan_speed=speed)
        print(f"Скорость вентиляторов установлена на {speed}%")
    except Exception as e:
        print(f"Ошибка при установке скорости вентиляторов: {e}")

def main():
    while True:
        cpu_temp = get_cpu_temp()
        if cpu_temp is None:
            print("Не удалось получить температуру процессора.")
            time.sleep(10)
            continue

        # Логика управления вентиляторами
        if cpu_temp < MIN_TEMP:
            set_fan_speed(MIN_FAN_SPEED)
        elif cpu_temp > MAX_TEMP:
            set_fan_speed(MAX_FAN_SPEED)
        else:
            # Линейная интерполяция скорости вентиляторов
            fan_speed = MIN_FAN_SPEED + (cpu_temp - MIN_TEMP) * (MAX_FAN_SPEED - MIN_FAN_SPEED) / (MAX_TEMP - MIN_TEMP)
            set_fan_speed(int(fan_speed))

        # Пауза перед следующим измерением
        time.sleep(60)

if __name__ == "__main__":
    main()

В целом -

  1. Получение температуры процессора: Скрипт использует библиотеку psutil для получения текущей температуры процессора.

  2. Управление вентиляторами: В зависимости от температуры, скрипт устанавливает скорость вентиляторов через IPMI. Если температура ниже минимального порога, скорость вентиляторов снижается до минимума. Если температура превышает максимальный порог, вентиляторы работают на полную мощность. В промежуточных случаях скорость вентиляторов рассчитывается линейно.

  3. Пауза: Скрипт проверяет температуру каждую минуту и корректирует скорость вентиляторов.

Результаты

После запуска скрипта шум в комнате значительно снизился. Вентиляторы больше не работали на полную мощность постоянно, а только тогда, когда это было действительно необходимо. Это также помогло снизить энергопотребление и продлить срок службы оборудования.

Глава 3. Настройка и оптимизация

Установка Ubuntu Server 12.04 LTS и сравнение с Ubuntu 24.04

В 2013 году я выбрал Ubuntu Server 12.04 LTS из-за её стабильности и долгосрочной поддержки. Однако на старом железе HP ProLiant DL380 G4 возникли проблемы с совместимостью. Современные дистрибутивы, такие как Ubuntu 24.04, уже не поддерживают столь старое оборудование, и даже в 2013 году мне пришлось вносить изменения в ядро, чтобы заставить систему работать.

Проблемы с поддержкой оборудования

Процессор Intel Xeon в моём сервере был одноядерным с поддержкой Hyper-Threading, но современные ядра Linux уже оптимизированы для многоядерных процессоров. В результате система не могла корректно определить возможности процессора, и мне пришлось вручную пропатчить ядро.

Пример патча для поддержки старого процессора

Я добавил в ядро поддержку старого процессора, изменив параметры в файле /usr/src/linux/arch/x86/include/asm/cpufeature.h:

// Добавляем поддержку старого Xeon
#define X86_FEATURE_OLD_XEON (1 << 10)

static inline int cpu_has_old_xeon(struct cpuinfo_x86 *c)
{
    return cpu_has(c, X86_FEATURE_OLD_XEON);
}

Этот патч позволил системе корректно определять процессор и использовать его возможности, хотя и с ограничениями.

Настройка RAID: почему RAID1 и что используется в 2024 году

Выбор RAID1

Я выбрал RAID1 (зеркалирование) из-за его простоты и надежности. RAID1 создает точную копию данных на двух дисках, что позволяет сохранить информацию в случае выхода одного из дисков из строя. Для моего сервера с двумя SCSI-винчестерами это было идеальным решением.

Пример настройки RAID1 в Ubuntu 12.04

Для настройки RAID1 я использовал утилиту mdadm:

# Создание RAID1 массива
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

# Форматирование массива в ext4
sudo mkfs.ext4 /dev/md0

# Монтирование массива
sudo mount /dev/md0 /mnt/raid

Сравнение с 2025годом

В 2025году RAID1 по-прежнему используется, но чаще применяются более современные решения, такие как RAID5 (для баланса между производительностью и надежностью) или RAID10 (для высокой производительности и отказоустойчивости). Также популярны программные решения, такие как ZFS, которые обеспечивают более гибкое управление данными и встроенную защиту от повреждений.

Настройка iptables: от 2013 к 2025

Настройка iptables в 2013 году

В 2013 году я использовал iptables для настройки фаерволла. Вот пример скрипта, который я использовал для базовой защиты сервера:

#!/bin/bash

# Очистка правил
iptables -F
iptables -X

# Блокировка всех входящих соединений по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Разрешение исходящих соединений
iptables -P OUTPUT ACCEPT

# Разрешение локальных соединений
iptables -A INPUT -i lo -j ACCEPT

# Разрешение SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешение HTTP и HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Сохранение правил
iptables-save > /etc/iptables/rules.v4

Сравнение с 2025 годом

В 2025 году iptables всё ещё используется, но всё чаще его заменяют на nftables — более современную и гибкую систему фильтрации пакетов. nftables поддерживает более сложные правила и имеет улучшенную производительность. Вот пример аналогичного скрипта на nftables:

#!/bin/bash

# Очистка правил
nft flush ruleset

# Создание таблицы
nft add table inet filter

# Добавление цепочек
nft add chain inet filter input { type filter hook input priority 0; }
nft add chain inet filter forward { type filter hook forward priority 0; }
nft add chain inet filter output { type filter hook output priority 0; }

# Блокировка всех входящих соединений по умолчанию
nft add rule inet filter input drop

# Разрешение локальных соединений
nft add rule inet filter input iifname "lo" accept

# Разрешение SSH, HTTP и HTTPS
nft add rule inet filter input tcp dport { 22, 80, 443 } accept

Глава 4. Использование ISPmanager от ispsystem.ru

ISPmanager в 2013 году

В 2013 году я использовал ISPmanager для управления сервером. Это была простая и удобная панель, которая позволяла управлять сайтами, базами данных и DNS. Однако её функциональность была ограничена по сравнению с современными решениями. Сравнение с 2023 годом - Современная версия ISPmanager значительно улучшена. Она поддерживает контейнеризацию, автоматическое резервное копирование и интеграцию с облачными сервисами.

Глава 6. Первые клиенты и финал проекта

Почему первые клиенты не пошли

Когда я наконец запустил свой VDS-хостинг, я был уверен, что клиенты начнут стекаться ко мне толпами. Ведь я предлагал уникальное решение: дешёвый хостинг на старом, но проверенном железе. Однако реальность оказалась куда суровее.

Тарифы и расчёты

Мой тариф стоил 1233 рубля в месяц. Для меня это была справедливая цена, учитывая затраты на электроэнергию и интернет. Давайте посчитаем:

  • Электроэнергия: Сервер потреблял около 300 Вт в час. При тарифе 5 рублей за кВт·ч это выходило:
    300 Вт×24 часа×30 дней=216 300Вт×24часа×30дней=216
    216 216.

  • Интернет: Я арендовал выделенную линию на 10 Мбит/с за 1500 рублей в месяц.

Итого: 2580 рублей только на базовые расходы. Добавим сюда амортизацию оборудования, и становится понятно, что 1233 рубля с клиента — это почти себестоимость.

Почему это не сработало

Мои первые клиенты — такие же джуниор-программисты, как и я, — просто не могли себе этого позволить. Для них 1233 рубля были неподъёмной суммой, особенно когда на рынке уже были крупные игроки с более стабильными услугами и поддержкой.

Bill-менеджер и WebMoney: последняя надежда

Чтобы удержать клиентов, я решил добавить функцию bill-менеджера с возможностью оплаты через WebMoney (Джуниоры наверно вообще не понимают что за вебмани). Это был настоящий хакерский ход: я написал небольшой PHP-скрипт, который обрабатывал платежи и автоматически продлевал услуги.

Кусок скрипта обработки платежей

<?php
// Проверка платежа через WebMoney
if ($_POST['payment_status'] == 'completed') {
    $client_id = $_POST['client_id'];
    $amount = $_POST['amount'];

    if ($amount >= 1233) {
        // Продление услуги на 1 месяц
        extend_service($client_id, 30);
        echo "Платёж успешно обработан. Услуга продлена.";
    } else {
        echo "Ошибка: недостаточная сумма платежа.";
    }
} else {
    echo "Ошибка: платёж не завершён.";
}

function extend_service($client_id, $days) {
    // Логика продления услуги
    // Например, обновление даты окончания в базе данных
}
?>

Проблемы с аптаймом и финальное решение

Однако главной проблемой стал аптайм. Мой сервер, несмотря на все усилия, был ненадёжным. Скачки напряжения в общежитии, перегрев, случайные перезагрузки — всё это приводило к постоянным простоям. Клиенты начали жаловаться, а их проекты теряли трафик и деньги.

Статистика аптайма

  • Первый месяц: 85% аптайма (сервер падал почти каждый день).

  • Второй месяц: 90% (я купил ИБП, но это не сильно помогло).

  • Третий месяц: 92% (последние клиенты начали уходить).

Я понял, что не могу обеспечить стабильность, которую ожидали клиенты. Мой проект, который начинался как мечта о независимости, превратился в источник постоянного стресса.

Финальная точка

В один из вечеров, когда сервер снова упал из-за скачка напряжения, я сел на кровать и понял: пора закрывать проект. Это было тяжёлое решение, но я осознал, что не могу конкурировать с крупными хостинг-провайдерами, у которых были дата-центры, резервные линии и команда поддержки.

Я написал последнее письмо своим клиентам, извинился за неудобства и вернул им остатки средств через WebMoney. Это был конец моего первого хостинг-проекта.

Эпилог: уроки и новые горизонты

Несмотря на провал, этот опыт стал для меня бесценным. Я научился управлять серверами, писать скрипты, работать с IPMI и даже обрабатывать платежи. Но самое главное — я понял, что успех в IT требует не только энтузиазма, но и стабильности, надёжности и готовности инвестировать в инфраструктуру.

Сейчас, оглядываясь назад, я улыбаюсь. Ведь именно этот проект стал для меня первой ступенькой в мир профессионального IT. И кто знает, может быть, однажды я вернусь к идее собственного хостинга, но уже с новыми знаниями, опытом и, конечно, стабильным источником электричества.

Автор: Geraclz

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js