Устали от ограничений сторонних облачных сервисов и постоянного роста цен на подписки? В этой статье мы подробно и пошагово разберём, как поднять собственное быстрое облако 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 будут запросы и нужно ответить:
- Certbot попросит вас ввести ваш Email — введите его и нажмите
Enter. - Затем система попросит согласиться с условиями использования — введите букву
Yи нажмитеEnter. - Затем спросит, хотите ли Вы получать новостную рассылку от Let’s Encrypt на свой email. Тут можно ввести
N(No) и нажатьEnter, чтобы не спамить почту. - Начнется проверка прав на домен, и если всё сделано правильно, вы увидите сообщение
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