Свой сервер дома 2026

Author Автор: Роман Чернышов   

ubuntu Приветствую вас друзья! Ровно 4 года назад, я перенес часть своих проектов с сервера арендованного, на тот момент, у немецкого провайдера Hezler, на свой собственный сервер, размещенный у себя дома(в офисе), о чем я рассказывал в статье: Установка, настройка и размещение сервера дома или в офисе. За эти годы, с ним произошло много интересных событий(с точки зрения полученного опыта), это: выход из строя ssd диска в Raid-1 массиве, выход из строя планки оперативной памяти, отключение и перебои электричества(спасал ИБП), обрыв интернет кабеля(за пределами помещения), DDOS с перегрузкой пропускной способности сети, отключение интернета за несвоевременную оплату и многое другое. Самый главный вопрос — стоило ли оно того?

Однозначный ответ — Да! Еще как стоило. Во первых, как бы это ни было странным, но практически со всем этим списком проблем я сталкивался и при аренде серверов у именитых хостинг-провайдеров, более того — по моей личной статистике, количество проблем у них было, даже, в несколько раз больше, а часть из них были фатальные, например: выход из строя NVME накопителя (на котором стояла система, при условии что Raid-1 не предусмотрено)! К счастью я делал своевременные бекапы. Так, что собственный сервер(на самом деле у меня их несколько, точнее 10) на деле показал даже лучший Uptime(по субъективным ощущениям, т.к. точные сравнительные замеры я конечно же не делал). Также такое решение дало множество плюсов: безграничные возможности апгрейда, изменение конфигурации(диски, сетевые карты, я даже ставил на него InfiniBand для локальной сети, объединение нескольких серверов в кластер и т.д.), прямой доступ в любое время, собственный IPMI(на серверах Supermicro), тесты, эксперименты и многое другое. Кстати, за эти годы я сэкономил порядка полумиллиона рублей на аренде(и это только на одном сервере, если считать по всей инфраструктуре, то это в 7-10 раз больше). В этом же посте, я собрал список заметок по настройке «нового»(на частично старом железе) сервера, уже на базе Ubuntu 24.04(26.04 пока не ставлю из-за менее развитого покрытия софтом) и панели управление HestiaCP. Как и прошлая моя статья, это список заметок для себя, к чему-то я буду возвращаться(подсматривать тут, чтобы не спрашивать у ИИ каждый раз, не читать его портянки и тем самым экономить пару лишних секунд времени), что-то буду дополнять. Может и вам он пригодится.

Содержание

1. Предустановка
2. Железо
3. Операционная система
4. Создание Raid 1
5. Проверка S.M.A.R.T
6. Расширить логический том
7. Монтируем диски
8. Базовые пакеты
9. Сеть
10. Fail2ban настроить игнор-лист для внутренних IP
11. Панель управления HestiaCP
12. Восстановление из бекапа HestiaCP
13. Доступ к PhpMyadmin по IP
14. Настройка Mytop
15. Включаем PHP
16. Пути к PHP
17. Индивидуальный конфиг PHP для пользователя
18. Устанавливаем Memcache и Memcached
19. Устанавливаем Redis
20. Устанавливаем Ioncube Loader
21. Настройка MariaDB
22. Меняем параметры подключения к БД
23. Абсолютные пути тут
24. Перенос задач в Cron
25. Установка PIP для Python 3
26. Установка Ngxtop
27. Разграничение доступа
28. Разрешаем доступ к директориям, названия с точки, в Nginx
29. Кастомный конфиг Nginx для некоторых сайтов
30. Редирект со старого сервера через Nginx
31. Перенос символических ссылок
32. Проброс NAT для HestiaCP
33. Настройка хостов на роутере
34. Настройка Apache2
35. Symlink на /backup
36. Установка драйверов для ATOL
37. Температура CPU

1. Предустановка

То, что у меня уже есть, о чем я писал ранее, что не изменилось и что я пропускаю в этой статье:

  • Высокоскоростной интернет
  • Cтатический IP адрес
  • Роутеры, свичи и их настройка
  • Сетевые кабеля, почкорды
  • Настройка DNS
  • Серверная стойка
  • Источники бесперебойного питания

2. Железо

MSI H270-A Pro + i7 7700k + 32gb ram

1 NVME — 256gb / Размещение загрузчика Grub
2 SSD — 256gb / Программный Raid-1 с размещением копии загрузчика Grub на оба SSD
1 NVME — 2tb / Быстрое хранилище данных
1 HDD — 2tb / Периодический (2 раза в неделю) бекап
1 hdd — 4tb / Периодический (1 раз в неделю) бекап

Корпус Lian Li Lancool 216 (он реально крутой).

3. Операционная система

ubuntu 24.04

+ программный raid

4. Создание Raid 1

Перед тем как приступить, отключите все лишние жесткие диски! В момент установки Ubuntu, на шаге выбора жесткого диска, выбираем пункт Custom storage layout, далее удаляем с нужных дисков все разделы и создаем программный Raid-массив выбрав пункт Create Software RAID (md) — после добавив оба диска в массив. Далее выбираем пункт Format, указываем файловую систему по умолчанию ext4 и точку монтирования /. После, делаем созданный Raid-1 загрузочным выбрав пункт Use as Boot Device. Важное замечание — иногда пункт Use as Boot Device может быть недоступен, и для размещения Загрузичка может потребовать дополнительный диск который будет использоваться для его записи, в моем случае это NVMe диск. Чтобы система загружалась с RAID даже при отказе NVMe диска, установите загрузчик также и на оба SSD вручную после установки:

sudo grub-install /dev/sda
sudo grub-install /dev/sdb
sudo update-grub

Нюанс, иногда Raid может не создаваться, а Ubuntu падать с ошибкой в момент применения настроек, это связано с тем, что на дисках могут оставаться старые разделы и данные, поэтому их нужно удалить, а все данные почистить утилитой dd. Диски должны быть полностью чистыми. Делаем это с помощью следующих команд (как альтернативу можно загрузиться с другой live-системы, например GParted Live, удалить все разделы, затем продолжить установку):

sudo swapoff -a
sudo vgchange -a n
sudo mdadm --stop /dev/md126 2>/dev/null
sudo mdadm --stop /dev/md127 2>/dev/null
sudo mdadm --zero-superblock /dev/sda
sudo mdadm --zero-superblock /dev/sdb
sudo wipefs -a /dev/sda
sudo wipefs -a /dev/sdb
sudo dd if=/dev/zero of=/dev/sda bs=1M count=10
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=10

5. Проверка S.M.A.R.T

SSD/HDD
1. Установите пакет (если не установлен):
sudo apt update && sudo apt install smartmontools -y

2. Посмотрите S.M.A.R.T. информацию для конкретного диска:
sudo smartctl -a /dev/sda

NVME
1. Установите nvme-cli (если ещё не установлен):

sudo apt update && sudo apt install nvme-cli -y

2. Посмотрите общую информацию о диске:

sudo nvme list

3. Посмотрите S.M.A.R.T. логи (основная информация):

sudo nvme smart-log /dev/nvme0n1

6. Расширить логический том

После установки если будет занят не весь диск

# 1. Проверьте свободное место в группе томов 
sudo vgdisplay 
# 2. Расширить логический том до 100% свободного места 
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv 
# 3. Расширить файловую систему (ext4) 
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 
# 4. Проверить результат 
df -h

7. Монтируем диски

Создайте точки монтирования:

sudo mkdir -p /home_ssd445gb /home_hdd2tb /home_hdd4tb /home_nvme2tb /home_nvme256gb

Смонтируйте диски временно:

🔒 Доступ ограничен: Этот контент доступен только администраторам сайта.

Добавьте диски в /etc/fstab для автоматического монтирования.

Смотрим все UUID дисков:

sudo blkid

Прописываем точки монтирования в /etc/fstab:

UUID=ваш-uuid-для-ssd /home_ssd445gb ext4 defaults 0 2
UUID=ваш-uuid-для-hdd2tb /home_hdd2tb ext4 defaults 0 2
UUID=ваш-uuid-для-hdd4tb /home_hdd4tb ext4 defaults 0 2
UUID=ваш-uuid-для-nvme2tb /home ext4 defaults 0 2
UUID=ваш-uuid-для-nvme256gb /home_nvme256gb ext4 defaults 0 2

8. Базовые пакеты

sudo apt update
# Установка htop
sudo apt-get install htop
# Установка ping
sudo apt install iputils-ping -y
 
# Установка traceroute
sudo apt install traceroute -y
# Установка netstat
sudo apt install net-tools -y
# Установка parted
sudo apt install parted -y

9. Сеть

Отключаем IPv6 глобально:

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

Чтобы сохранить настройки после перезагрузки:

echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

По жалению устанавливаем AmneziaWS

sudo apt update
sudo apt install -y software-properties-common python3-launchpadlib gnupg2 linux-headers-$(uname -r)
sudo add-apt-repository ppa:amnezia/ppa
sudo apt install -y amneziawg

конфиг  размещаем тут: /etc/amneziawg/cln109ger.conf (подготавливает конфиг — удаляя из него все пустые значения)

sudo awg-quick strict cln109ger// проверка (cln109ger- название конфига)
sudo awg-quick up cln109ger
sudo awg show

Проверить свой IP:

curl ipinfo.io/ip

10. Панель управления

HestiaCP

wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
sudo bash hst-install.sh

Если в ходе установки возникнут проблемы, можно переустановить панель:

sudo apt install hestia --reinstall

11. Восстановление из бекапа HestiaCP

Если переносим пользователей с другого сервера из HesatiaCP, скачиваем архив бекапа, перемещаем в директорию /backup и выполняем команду (где user — имя пользователя):

v-restore-user user user.2026-07-31_11-45-07.tar

12. Fail2ban настроить игнор-лист для внутренних IP

В /etc/fail2ban/jail.local добавьте

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 111.222.333.444

Перезапустите fail2ban:

sudo systemctl restart fail2ban

13. Доступ к PhpMyadmin по IP

http://ip/phpmyadmin/

Для Apache2

nano /etc/apache2/conf.d/ip.conf

# Add the following code before both closing tags
IncludeOptional /etc/apache2/conf.d/*.inc
# Restart apache2
systemctl restart apache2
# You can also add the following in /etc/apache2.conf instead
IncludeOptional /etc/apache2/conf.d/*.inc

14. Настройка Mytop

Создаем файл конфигурации в рабочей директории пользователя:

nano ~/.mytop

Содежимое:

user=root
pass=ваш_пароль_базы_данных
host=localhost
port=3306
delay=5

Пароль root от Mysql можно найти тут:

sudo cat /usr/local/hestia/conf/mysql.conf

15. Включаем PHP

Прописываем в конфигурации (для CLI и FPM версий)

short_open_tag=On

/etc/php/8.3/fpm/php.ini
/etc/php/8.5/fpm/php.ini
/etc/php/7.3/fpm/php.ini
/etc/php/7.4/fpm/php.ini
/etc/php/5.6/fpm/php.ini

Также включаем нужные расширения PHP:

extension=curl
extension=ftp
extension=fileinfo
extension=gd
extension=gettext
extension=imap
extension=mbstring
extension=exif ; Must be after mbstring as it depends on it
extension=mysql
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=sockets
extension=zip

Настройки:

memory_limit = 256M

Остальное по умолчанию — предложенное HestiaCP.

16. Пути к PHP

php7.4 или /usr/bin/php8.2 или /usr/bin/php7.4

17. Индивидуальный конфиг PHP для пользователя

Для некоторых пользователей нужно создать индивидуальную конфигурацию PHP, например настроить значение open_basedir. Для этого:

Шаг 1. Создание шаблона
Создайте файл шаблона в каталоге /usr/local/hestia/data/templates/web/php-fpm/ .
Следуйте строгому формату имени: ВАШЕ_ИМЯ-PHP-X_Y.tpl, где X_Y — версия PHP (например, 7_4 или 8_1) .
Замените ВАШЕ_ИМЯ на что-то осмысленное, например PHP-8_1-OpenbaseDir_User.tpl.
Скопируйте в него содержимое стандартного шаблона. Обычно он находится в том же каталоге, например, default-PHP-8_1.tpl
Внесите нужные изменения в конфигурацию.

Шаг 2. Применение шаблона
В панели HestiaCP перейдите в раздел WEB -> выберите нужный домен.
Откройте его настройки (кнопка «Edit»).
В выпадающем списке «Backend Template» выберите только что созданный шаблон (например, my-PHP-8_1) .
Нажмите «Save». После этого PHP-FPM будет перезапущен с вашими настройками.

Мои конфиги для PHP 5.6 и 74:

/usr/local/hestia/data/templates/web/php-fpm/PHP-5_6-OpenbaseDir_User.tpl
/usr/local/hestia/data/templates/web/php-fpm/PHP-7_4-OpenbaseDir_User.tpl

[%domain%]
php_admin_value[open_basedir] = /home/%user%:/home/%user%/.composer:/home/%user%/web/%domain%/public_html:/home/%user%/web/%domain%/private:/home/%user%/web/%domain%/public_shtml:/home/%user%/tmp:/tmp:/var/www/html:/bin:/usr/bin:/usr/local/bin:/usr/share:/opt

Чтобы изменения вступили в силу после повторной правки конфига, нужно применить шаблон(Шаг 2), но перед этим переключить на другой шаблон(Сохранив), а затем выбрав снова этот.

18. Устанавливаем Memcache и Memcached

Для старой версии PHP 5.6

sudo add-apt-repository ppa:ondrej/php
sudo apt update
 
sudo apt install memcached libmemcached-tools -y
sudo apt install php5.6-memcached -y
 
sudo ln -s /etc/php/5.6/mods-available/memcached.ini /etc/php/5.6/fpm/conf.d/20-memcached.ini
sudo ln -s /etc/php/5.6/mods-available/memcached.ini /etc/php/5.6/cli/conf.d/20-memcached.ini
 
sudo systemctl restart apache2
sudo systemctl restart php5.6-fpm

Для версии PHP 7.4 >

sudo apt install php7.4-memcached -y
 
sudo ln -s /etc/php/7.4/mods-available/memcached.ini /etc/php/7.4/fpm/conf.d/20-memcached.ini
sudo ln -s /etc/php/7.4/mods-available/memcached.ini /etc/php/7.4/cli/conf.d/20-memcached.ini
 
sudo systemctl restart apache2
sudo systemctl restart php7.4-fpm

Увеличивает доступную память для mamacached, для этого в файле конфигурации /etc/memcached.conf, устанавливаем параметр:

-m 10240

То есть выделяем 10 гигабайта ОЗУ.

Также отключаем IPv6, заменив

-l 127.0.0.1,::1

на

-l 127.0.0.1

Статистика

sudo apt install telnet -y
telnet localhost 11211
stats
  • bytes: Текущий объем памяти (в байтах), который сервер фактически использует для хранения данных.
  • limit_maxbytes: Максимальный объем памяти (в байтах), который сервер может использовать для хранения данных согласно настройке

Чтобы завершить сессию telnet, введите quit.

19. Устанавливаем Redis

sudo apt update
sudo apt install redis-server -y

Проверка:

sudo systemctl status redis-server

20. Устанавливаем Ioncube Loader

Для установки возможно придется использовать другой IP

wget https://raw.githubusercontent.com/jaapmarcus/ioncube-hestia-installer/main/install_ioncube.sh
chmod +x install_ioncube.sh
./install_ioncube.sh

Скрипт скачает актуальные загрузчики, скопирует их в нужные директории для каждой версии PHP и создаст конфигурационные файлы 00-ioncube-loader.ini в папках /etc/php/*/fpm/conf.d/ и /etc/php/*/cli/conf.d/. В конце он автоматически перезапустит все PHP-FPM службы.

Обновление: Скрипт устанавливает последнюю версию IonCube (например, v15.5.0), но для ее обновления в будущем потребуется запустить скрипт заново

21. Настройка MariaDB

По умолчанию установлен строгий режим работы MySQL, это может негативно сказываться на работе старый PHP скриптов, где запросы SQL написаны в упрощенной форме, для того, чтобы они работали, установим лояльный режим работы, добавив в файл конфигурации(/etc/mysql/mariadb.conf.d/50-server.cnf или в настройках HestiaCP) строку:

sql_mode=

Чтобы MariaDb слушала все IP, меняем bind-address на:

bind-address = 0.0.0.0

Перезагружаем:

sudo systemctl restart mariadb

Открываем порт(для разрешения внешних подключений) в iptables:

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

Чтобы ваше правило в iptables сохранялось после перезагрузки сервера, нужно установить пакет iptables-persistent и сохранить текущие правила.

sudo apt install iptables-persistent -y
sudo netfilter-persistent save

Пути, куда будут сохранены правила:

/usr/share/netfilter-persistent/plugins.d/15-ip4tables
/usr/share/netfilter-persistent/plugins.d/25-ip6tables

22. Меняем параметры подключения к БД

Если в ходе переезда на новый сервер, были изменены параметры подключения к БД(логин, пароль, сервер и порт), их также стоит изменить во всех файлах перенесенного(CMS, CRM системы, боты и прочие скрипты) конфигурации ПО, которое работает с БД. Список моих скриптов, где нужно изменить параметры доступа:

🔒 Доступ ограничен: Этот контент доступен только администраторам сайта.

23. Абсолютные пути тут

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

🔒 Доступ ограничен: Этот контент доступен только администраторам сайта.

24. Перенос задач в Cron

Перенос или настройка задач в планировщике Cron. У меня планировщик содержит множество задач по выполнению как локальных скриптов, так и вызову внешних URL. Ниже список всех задач, чтобы не забыть.

🔒 Доступ ограничен: Этот контент доступен только администраторам сайта.

25. Установка PIP для Python 3

Установите Python и pip для Python 3 (рекомендуется):

sudo apt update
sudo apt install python3 python3-pip -y

Проверьте установку:

python3 -V # Увидите версию Python 3
pip3 -V # Увидите версию pip3

26. Установка Ngtop

Включаем Access Log для Nginx, для этого в файле конфигурации /etc/nginx/nginx.conf в секции http.

Заменяем:

access_log off;

На:

access_log /var/log/nginx/access.log;

И в формат логов добавляем домен ($host):

log_format main '$remote_addr - $host [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

Перезапускаем Nginx:

systemctl restart nginx

Установка ngxtop:

sudo pip3 install ngxtop --break-system-packages

запуск:

sudo ngxtop

27. Разграничение доступа

Каждый сайт под своим аккаунтом.

28. Разрешаем доступ к директориям, названия с точки, в Nginx

В конфигурации домена, например: /etc/nginx/conf.d/domains/example.com.conf, ищем запрет на доступ к директориям начинающимся с точки и комментируем его:

# Глобальный запрет на все остальные скрытые папки и файлы 
location ~ /\. { 
  deny all; return 404; 
}

Ванимания! Чтобы настройки несбивались после внесения изменений в конфигурацию домена в HeastiCP (которая перезаписывает конфиг nGinx), нужно создать собственный шаблон Nginx. Вы буквально берете за основу существующий шаблон, удаляете из него ненужный блок кода и назначаете этот измененный шаблон вашему домену:

/usr/local/hestia/data/templates/web/nginx/default.tpl
/usr/local/hestia/data/templates/web/nginx/default.stpl

создаете на их основе:

/usr/local/hestia/data/templates/web/nginx/allowdot.tpl
/usr/local/hestia/data/templates/web/nginx/allowdot.stpl

Примените шаблон — зайдите в панель управления, откройте настройки вашего домена (WEB -> ваш домен -> Edit) и в выпадающем списке «Proxy Template» выберите ваш новый шаблон allowdot, сохраните.

29. Кастомный конфиг Nginx для некоторых сайтов

Некоторые сайты требуют уникальной настройки конфигурации Nginx. Проблема в том, что файлы конфигурации Nginx в HestiaCP пересоздаются каждый раз, когда вы меняете настройки домена через панель или перестраиваете его . Чтобы ваши правки не терялись, нужно использовать механизм «пользовательских файлов включения» (include files). В пользовательском include-файле нельзя использовать директиву server. Она уже определена в основном конфиге домена. Включаемые файлы предназначены только для директив внутри блоков location или server. Ниже пример конфигурации для одного моего домена:

🔒 Доступ ограничен: Этот контент доступен только администраторам сайта.

30. Редирект со старого сервера через Nginx

Важно! Убираем заголовок :path, т.к. HTTP/1.1 не позволяет использовать двоеточие в имени заголовка (можно получить ошибку 400).

server {
    listen 10.0.0.107:80;
    server_name  kuxaro4ka.ru www.kuxaro4ka.ru;
    location / {
        proxy_pass http://10.0.0.109$request_uri;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header :path $request_uri;
        proxy_pass_header Set-Cookie;
    }
}
 
server {
    listen 10.0.0.107:443;
    server_name  kuxaro4ka.ru www.kuxaro4ka.ru;
    ssl_certificate  /etc/letsencrypt/live/example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
 
    # Дополнительные настройки SSL (опционально)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
 
    location / {
        proxy_pass $scheme://10.0.0.109$request_uri;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header :path $request_uri;
        proxy_pass_header Set-Cookie;
    }
}

31. Перенос символических ссылок

/home/marup/sites -> /home4tb/_users/marup/sites/Documents

/home/hairloun/Document -> /home4tb/_users/hairloun/Document

32. Проброс NAT для HestiaCP

Если сервер находится за роутером, то пробрасываем порт 8083 для доступа к панели HestiaCP и интнернет.

33. Настройка хостов на роутере

В разделе Настрока соединений -> LAN -> Настроить хосты (список доменов и привязанных у ним IP адресов), для rjhhtrnyjuj Resolving внутри локальной сети.

34. Настройка Apache2

# Включить модули
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
 
# Проверить загрузку
apache2ctl -M | grep proxy
 
# Должны быть:
# proxy_module (shared)
# proxy_http_module (shared)
# proxy_connect_module (shared)

35. Symlink на /backup

Чтобы создать символическую ссылку /backup, указывающую на /home_hdd4tb/backup, используйте команду ln -s.

sudo ln -s /home_hdd4tb/backup /backup

Если вы хотите, чтобы /backup была отдельной точкой монтирования, можно смонтировать диск или папку напрямую:

sudo mount --bind /home_hdd4tb/backup /backup

36. Установка драйверов для ATOL

Подробно описано в статье Установка драйвера АТОЛ-30ф на Ubuntu 24.04.

37. Температура CPU

Установите пакеты sensors :

sudo apt update && sudo apt install lm-sensors -y

Чтобы отображать температуру CPU в реальном времени с помощью sensors, выполните:

sudo sensors-detect

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка