Домашний сервер с GUI

Что-то захотелось немного переделать домашний сервер, чтобы можно было им управлять через GUI. В частности хочется графического управления и еще каких-нибудь наворотов. А вот что выбрать? Хочется чего-то мощного и в то же время простого…

Portainer

Неплохо бы установить какой-то графический интерфейс (дополнительный менеджер). Я лично выбрал Portainer, а конкретно Community Edition.

Если посмотреть на hub.docker.com, то у него есть собранные контейнеры для arm64. Значит можно ставить.

Кстати, если пробежаться по документации, Portainer можно установить и на чистый Docker. Воспользуемся этим.

Идем на официальный сайт и смотрим как все это запустить:


docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:2.11.0

Первая команда создает том хранения данных, а вторая запускает контейнер. Но мы делать так не будем. Мы создадим Compose-файл для работы сервиса и управления через systemd (как обычно).

/opt/portainer/docker-compose.yml:


version: "2.4"

services:
  portainer:
    image: portainer/portainer-ce:2.11.1-alpine
    restart: always
    volumes:
      - type: bind
        source: /mnt/nfs/portainer
        target: /data
      - type: bind
        source: /var/run/docker.sock
        target: /var/run/docker.sock
    ports:
      - "8000:8000"
      - "9000:9000"
      - "9443:9443"
    mem_limit: 256m
    mem_reservation: 192m

Так как Portainer является менеджером, то ему необходимо как-то управлять Docker. Для этого монтируется сокет самого докера, через который и будут выполняться команды на управление контейнерами.

Далее создаем /etc/systemd/system/portainer.service:


[Unit]
Description=Portainer docker-compose
Requires=docker.service
After=docker.service

[Service]
Restart=always

WorkingDirectory=/opt/portainer/

# Compose up
ExecStart=/usr/bin/docker-compose -f docker-compose.yml up

# Compose down, remove containers
ExecStop=/usr/bin/docker-compose -f docker-compose.yml down

[Install]
WantedBy=multi-user.target

Описание сервиса создали. Теперь обновим, включим и запустим:


systemctl daemon-reload
systemctl enable portainer
systemctl start portainer

После запуска заходим по адресу http://<ip-адрес>:9000 и вводим логин с паролем администратор. После попадаем в первоначальную настройку. Выбираем Get Started, после узел local и… Все… Работает! Если зайдем в Stacks, то там будут наши приложения, которые сейчас запущены. В данный момент Portainer не может ими управлять так как они были созданы через внешнюю среду.

Управляемые компоненты

Чтобы можно было безболезненно всем этим набором технологий управлять создадим новый стэк и заполним его как в Docker Compose:


version: "2.4"

services:
  db:
    image: mariadb:10.7.1-focal
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
    restart: always
    environment:
      MARIADB_DATABASE: nextcloud
      MARIADB_USER: nextcloud
      MARIADB_PASSWORD: 
      MARIADB_RANDOM_ROOT_PASSWORD: 1
    volumes:
      - type: bind
        source: /mnt/nfs/cloud/db
        target: /var/lib/mysql
    mem_limit: 256m
    mem_reservation: 64m

  nextcloud:
    #image: nextcloud:22.2.3-fpm-alpine
    image: nextcloud:23.0.0-fpm-alpine
    restart: always
    volumes:
      - type: bind
        source: /mnt/nfs/cloud/cloud
        target: /var/www/html
    mem_limit: 256m
    mem_reservation: 64m
    links:
      - db
    depends_on:
      - db

  nginx:
    image: nginx:1.20.1-alpine
    restart: always
    volumes:
      - type: bind
        source: /mnt/nfs/cloud/cloud
        target: /var/www/html
      - type: bind
        source: /mnt/nfs/cloud/nginx.conf
        target: /etc/nginx/nginx.conf
    ports:
      - "8082:80"
    links:
      - nextcloud
    depends_on:
      - nextcloud
    mem_limit: 128m
    mem_reservation: 32m

По сути это тот же файл, что и обычный Docker Compose, но теперь им управляет Portainer.

Следите за портами, чтобы не повторялись.

Заключение

На мой взгляд управлять кучей сервисов в таком виде проще.

Если Вам не нравится такой интерфейс, то можете поискать что-то другое. В любом случае у этого продукта или у многих других есть свое API, с помощью которого можно организовать автоматизированное управление сервисами, например CI/CD.

Поделиться
Вы можете оставить комментарий, или ссылку на Ваш сайт.

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

Вы должны быть авторизованы, чтобы разместить комментарий.