Развёртывание веб-менеджера файлов FileBrowser на чистом сервере Ubuntu через Docker Compose.

Устали от ограничений сторонних облачных сервисов и постоянного роста цен на подписки? В этой статье мы подробно и пошагово разберём, как поднять собственное быстрое облако FileBrowser на копеечном VPS. Сервис потребляет всего 30 МБ оперативной памяти, имеет шикарный интерфейс и полностью защищён безопасным протоколом HTTPS.

FileBrowser представляет собой сверхлёгкий веб-менеджер файлов на Go, идеально подходящий для управления данными на чистых серверах Ubuntu с ограниченными ресурсами. Приложение потребляет 15–30 МБ RAM в Docker-контейнере, предоставляя современный интерфейс и возможность защиты через Nginx и Let’s Encrypt. Подключитесь по SSH к виртуальному серверу и создайте рабочую директорию командой:

mkdir -p /opt/cloud-storage/nginx && cd /opt/cloud-storage

Теперь перейдем к созданию главного файла конфигурации Docker Compose. В нём мы пропишем настройки для самого облака FileBrowser, легкого веб-сервера Nginx и утилиты Certbot, которая будет следить за безопасностью.

Создаем и открываем файл конфигурации:

nano docker-compose.yml

Вставьте в этот файл следующий готовый код. Обратите внимание на отступы (в формате YAML они имеют критическое значение) и на лимиты памяти (mem_limit) — мы выставили всего по 64 МБ, что идеально для нашего чистого и экономного сервера:

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    container_name: filebrowser_cloud
    restart: always
    mem_limit: 64m
    volumes:
      - ./storage:/srv
      - ./filebrowser.db:/database.db
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"

  nginx:
    image: nginx:alpine
    container_name: nginx_proxy
    restart: always
    mem_limit: 64m
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - certbot_certs:/etc/letsencrypt
      - certbot_www:/var/www/certbot
    depends_on:
      - filebrowser
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot_certs:/etc/letsencrypt
      - certbot_www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"

volumes:
  certbot_certs:
  certbot_www:

После вставки сохраните файл конфигурации: нажмите Ctrl + O, затем Enter, и для выхода из текстового редактора — Ctrl + X. Обратите внимание, что в файле docker-compose.yml для каждого сервиса добавлен блок logging с ограничением max-size: "10m", max-file: «5». По умолчанию Docker собирает логи бесконечно, что со временем может полностью забить диск вашего VPS. Эти настройки заставят Docker автоматически стирать старые логи, удерживая их объем в пределах скромных 50 МБ.

Теперь создадим файл первичной конфигурации Nginx, чтобы Let’s Encrypt мог проверить наш домен.

Открываем редактор nano для создания файла:

nano nginx/default.conf

Код первичной конфигурации Nginx:

server {
    listen 80;
    server_name yourdomen.com www.yourdomen.com; # Замените ://yourdomen.com на ваш домен

    # Папка для подтверждения прав на домен от Let's Encrypt (Certbot)
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    # Проксирование всех остальных запросов на контейнер FileBrowser
    location / {
        proxy_pass http://filebrowser:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Полностью скопируйте и вставьте в него код, который мы подготовили выше (не забудьте изменить ://yourdomen.com на ваш домен). Сохраните файл (Ctrl+O, Enter, Ctrl+X).

Чтобы Docker правильно инициализировал базу данных облака и не создал папку вместо файла, необходимо заранее создать пустой файл настроек с помощью команды touch, а также дать права на файл докеру, а саму папку читать и записывать докером, остальные только могут читать, но не изменять кроме адитнистратора

touch filebrowser.db && chown 1000:1000 filebrowser.db && chmod 644 filebrowser.db && chown -R 1000:1000 ./storage && chmod -R 755 ./storage

Запуск облака и выпуск SSL-сертификата

Теперь всё готово к первому старту. Запускаем наши контейнеры в фоновом режиме одной командой:

docker compose up -d

После того как контейнеры успешно запустились, вызываем утилиту Certbot для автоматической генерации бесплатного SSL-сертификата. Вместо ://yourdomen.com обязательно укажите ваш адрес:

docker compose run --rm --entrypoint "certbot" certbot certonly --webroot --webroot-path=/var/www/certbot -d yourdomen.com -d www.yourdomen.com

После запуска утилиты Cerbot будут запросы и нужно ответить:

  1. Certbot попросит вас ввести ваш Email — введите его и нажмите Enter.
  2. Затем система попросит согласиться с условиями использования — введите букву Y и нажмите Enter.
  3. Затем спросит, хотите ли Вы получать новостную рассылку от Let’s Encrypt на свой email. Тут можно ввести N (No) и нажать Enter, чтобы не спамить почту.
  4. Начнется проверка прав на домен, и если всё сделано правильно, вы увидите сообщение Successfully received certificate. Это значит, что ключи безопасности успешно сгенерированы и сохранены на вашем VPS!

После успешного получения сертификатов нам осталось перенастроить Nginx на полноценную и безопасную работу по протоколу HTTPS. Снова открываем конфигурационный файл Nginx для редактирования:

nano nginx/default.conf

Полностью сотрите старый текст и вставьте финальную защищенную конфигурацию. Обязательно замените ://yourdomen.com на имя вашего реального домена в четырех местах (в директивах server_name и в путях к SSL-сертификатам ssl_certificate):

server {
    listen 80;
    server_name yourdomen.com www.yourdomen.com;

    # Путь для автоматического продления сертификатов Certbot
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    # Постоянный редирект со старого HTTP на безопасный HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name yourdomen.com www.yourdomen.com;

    # Пути к вашим новым SSL-сертификатам Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/yourdomen.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomen.com/privkey.pem;

    # Современные настройки безопасности SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://filebrowser:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Разрешаем загрузку больших файлов в облако (например, до 10 Гигабайт)
        client_max_body_size 10G;
    }
}

Сохраните файл (Ctrl+O, Enter, Ctrl+X).

Чтобы Nginx применил новые сертификаты без остановки сервера, выполните команду перезагрузки конфигурации:

docker compose up -d --force-recreate

На этом всё! Наше личное независимое облачное хранилище полностью готово к работе. Откройте ваш домен в браузере — вы увидите защищенное соединение HTTPS и аккуратное окно входа в FileBrowser.

В актуальных версиях FileBrowser стандартный пароль admin / admin полностью отключен в целях безопасности. При самом первом старте система генерирует случайный сложный пароль и записывает его в системный журнал.

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

docker logs filebrowser_cloud

Найдите в тексте строчку:
User 'admin' initialized with randomly generated password: XXXXXXXXXXXXXX

Скопируйте этот набор символов, откройте ваш домен в браузере, введите логин admin и вставьте скопированный пароль. Прямо внутри панели в разделе Настройки -> Управление пользователями вы сможете переключить интерфейс на русский язык и сменить этот пароль на свой постоянный и удобный!

Что делать, если при вводе команд Docker возникает ошибка «no configuration file provided: not found»?
Не паникуйте! Это означает, что вы просто забыли перейти в рабочую директорию проекта после нового подключения к серверу по SSH. Ваши контейнеры при этом продолжают работать в фоне. Просто введите команду перехода в папку и повторите запрос:

cd /opt/cloud-storage && docker compose ps
Прокрутить вверх