May 31, 2022

Как поднять свой LFH

LFH (LukaszFreeHosting) - бесплатный хостинг от меня, использующий контейнеризацию с podman.
Ограничения:

  1. 1 IP адресс для всех пользователей, кто первый займет порт, тот им владеет
  2. Количество используемых ядер, оперативная память и дисковая память ограничены. По умолчанию 1x CPU, 1G RAM, 3G ROM
  3. Статичное linux ядро хост машины
  4. Большиство CAP отключены, поэтому не получится запустить docker и т.п.

Чтобы получить доступ к хостингу, напишите мне. Напишите для чего вам нужен хостинг и на какие мощности вы расчитываете.

Чтобы поднять LFH нужны:

  1. podman
  2. VPS сервер с операционной системой linux

Чтобы ограничивать ROM нужен раздел с файловой системой XFS. Вместо отдельного раздела на диске можно использовать файл для создания виртуальной файловой системы.

mkdir lfh && cd lfh
truncate -s 10G storage.img
apt-get install -y xfsprogs
mkfs.xfs storage.img
mkdir storage
mount storage.img storage -o defaults,loop,pquota

Добавьте в /etc/fstab строку чтобы автоматически монтировать storage.img при загрузке системы

$ nano /etc/fstab
/root/lfh/storage.img /root/lfh/storage xfs defaults,loop,pquota 0 0

Отредактируйте /etc/containers/storage.conf чтобы podman хранил данные контейенров и образов в специальной директории

$ nano /etc/containers/storage.conf
[storage]
driver = "overlay"
runroot = "/run/containers/storage"
graphroot = "/root/lfh/storage"

Ключ graphroot секции storage отвечает за директорию для хранения данных

Для проверки

$ podman info | grep "Backing\ Filesystem\|graphRoot"
  graphRoot: /root/lfh/storage
    Backing Filesystem: xfs

Теперь можно приступить к установке самого LFH

git clone https://gitlab.com/tshelter/vm.git
cd vm
./build.sh

Билд займет около 10 минут, зависит от скорости сети и мощности сервера

Готово!

Создать контейнер:

./create $os

Где $os это debian или ubuntu

Остальные параметры опциональные:

-n --name NAME указать имя контейнера
-p --port PORT указать порт sshd 
-P --password PASSWORD указать пароль
   * по умолчанию генерируется случайный пароль
--cpus CPUS указать количество ядер
   * по умолчанию 1.0
--memory MEMORY указать количество оперативной памяти
   * по умолчанию 1024m
--size SIZE указать количество дисковой памяти
   * по умолчанию 3G
--pids_limit PIDS_LIMIT указать максимально количество процессов
   * по умолчанию 10000
   * нужен для защиты от fork бомб

Утилиты

./find.sh $pid

Используйте чтобы найти в каком контейнере запущен процесс с айди $pid

В случае root-less podman, использовать xfs нельзя. Для изменения квоты в xfs нужен root. Так же, для запуска systemd от обычного юзера, нужно ему это разрешить:

sudo loginctl enable-linger $USERNAME

Возможно, еще придется сделать это

Возможно, так же придется сменить программу для монтирования.

$ nano /home/$USERNAME/.config/containers/storage.conf
[storage.options]
mount_program = "/usr/bin/fuse-overlayfs"