Поднимаем свой файлообменник на VPS: Pingvin Share

Иногда нужен максимально простой сервис:

  • загрузить файл
  • получить ссылку
  • открыть её на другом устройстве
  • скачать файл

Без:

  • Telegram
  • Google Drive
  • FTP
  • Samba
  • сложной настройки

Именно для этого отлично подходит Pingvin Share.

Это лёгкий self-hosted файлообменник, который можно развернуть на VPS буквально за несколько минут.

По сути — свой маленький WeTransfer.


Что такое Pingvin Share

Pingvin Share — это веб-сервис для обмена файлами через браузер.

Работает очень просто:

  1. Загружаем файл
  2. Получаем ссылку
  3. Открываем её на другом устройстве
  4. Скачиваем файл

Всё.

Никаких клиентов и P2P.

Файл просто хранится на VPS.

Поэтому сервис нормально работает:

  • между разными сетями
  • через мобильный интернет
  • через VPN
  • через CGNAT

Например:

Телефон → VPS → ПК
Steam Deck → VPS → Android
Orange Pi → VPS → ноутбук

Почему Pingvin Share оказался удобнее PairDrop

Сначала хотелось использовать PairDrop.

Но PairDrop работает через WebRTC и P2P.

Из-за этого:

  • устройства не всегда видят друг друга
  • мобильный интернет может ломать соединение
  • иногда нужен TURN сервер
  • многое зависит от NAT

Pingvin Share работает намного проще.

Файл загружается на VPS, а потом скачивается по ссылке.

Поэтому:

  • всё работает стабильнее
  • не важно где находятся устройства
  • не нужно возиться с WebRTC

Что умеет Pingvin Share

  • загрузка больших файлов
  • drag & drop
  • QR-коды
  • ссылки на скачивание
  • ограничение времени хранения файлов
  • пароли
  • тёмная тема
  • управление через веб-интерфейс

Можно спокойно передавать:

  • ROM
  • ISO
  • ZIP
  • APK
  • AppImage
  • docker-compose
  • резервные копии
  • видео
  • скриншоты

Где особенно полезно

Steam Deck

Очень удобно передавать:

  • ROM
  • моды
  • AppImage
  • скриншоты
  • видео

Без флешек и SFTP.


Orange Pi

Можно быстро перекидывать:

  • образы
  • APK
  • docker-compose
  • резервные копии
  • bash-скрипты

Android ↔ Linux

Очень удобно для:

  • APK
  • фотографий
  • архивов
  • документов
  • заметок

Что понадобится

Минимально:

  • VPS с Ubuntu 24.04
  • Docker
  • Docker Compose

Даже слабого VPS обычно хватает:

  • 1 vCPU
  • 512 MB RAM

Установка Docker

Обновляем систему:

sudo apt update && sudo apt upgrade -y

Устанавливаем Docker:

curl -fsSL https://get.docker.com | sh

Добавляем пользователя в группу docker:

sudo usermod -aG docker $USER

Переподключаемся к серверу.

Проверяем:

docker --version

Создание проекта

Создаём каталог:

mkdir ~/pingvin-share
cd ~/pingvin-share

Создание docker-compose.yml

Создаём файл:

nano docker-compose.yml

Вставляем:

services:
  pingvin-share:
    image: stonith404/pingvin-share:latest
    container_name: pingvin-share

    restart: unless-stopped

    ports:
      - "3003:3000"

    volumes:
      - "./data:/opt/app/backend/data"

Что означает 3003:3000

Момент, который сначала может запутать.

3003:3000

Это:

ПОРТ_СНАРУЖИ : ПОРТ_ВНУТРИ_КОНТЕЙНЕРА

То есть:

3003 на VPS → 3000 внутри контейнера

Сам Pingvin Share внутри Docker работает на порту 3000.

Но наружу можно выдать любой свободный порт.

Например:

- "8080:3000"

Тогда сервис будет доступен:

http://IP:8080

В моём случае порт 3000 уже был занят другим сервисом, поэтому использовался 3003.


Запуск сервиса

Запускаем контейнер:

docker compose up -d

Проверяем:

docker ps

Должно быть примерно так:

pingvin-share   Up (healthy)

Открываем сервис

Теперь открываем в браузере:

http://IP_СЕРВЕРА:3003

Например:

http://145.200.2.100:3003

После этого откроется интерфейс Pingvin Share.


Первая настройка

При первом запуске сервис попросит:

  • логин
  • пароль
  • email

Создаётся учётная запись администратора.

После этого появится страница:

/admin/intro

Там будут две кнопки:

  • Customize configuration
  • Explore Pingvin Share

Для начала достаточно нажать:

Explore Pingvin Share

После этого откроется основной интерфейс.


Проверка работы

Попробуем загрузить файл.

  1. Нажимаем Upload
  2. Выбираем файл
  3. Ждём загрузку
  4. Получаем ссылку

Например:

http://IP:3003/s/abc123

Теперь ссылку можно открыть:

  • на телефоне
  • Steam Deck
  • другом ПК
  • Orange Pi

И скачать файл.


Если страница не открывается

Самая частая причина — firewall.

Проверяем:

sudo ufw status

Если firewall включён:

sudo ufw allow 3003/tcp

Проверка локально на VPS

Можно проверить сервис прямо на сервере:

curl http://localhost:3003

Если сервис работает — вернётся HTML.


Где хранятся файлы

Все файлы находятся в каталоге:

~/pingvin-share/data

Можно:

  • делать резервные копии
  • переносить файлы
  • очищать старые загрузки

Настройка домена

Гораздо удобнее использовать домен.

Например:

share.biggratz.ru

Тогда не придётся:

  • помнить IP
  • использовать порт
  • открывать странные адреса

Установка NGINX

sudo apt install nginx -y

Конфиг NGINX

Создаём:

sudo nano /etc/nginx/sites-available/pingvin-share

Вставляем:

server {
    server_name share.example.com;

    client_max_body_size 20G;

    location / {
        proxy_pass http://127.0.0.1:3003;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Активация сайта

sudo ln -s /etc/nginx/sites-available/pingvin-share /etc/nginx/sites-enabled/

Проверяем:

sudo nginx -t

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

sudo systemctl restart nginx

SSL через Let’s Encrypt

Устанавливаем certbot:

sudo apt install certbot python3-certbot-nginx -y

Получаем сертификат:

sudo certbot --nginx -d share.example.com

После этого сервис будет доступен:

https://share.example.com

Ограничение размера файлов

В nginx есть важная строка:

client_max_body_size 20G;

Без неё большие файлы могут не загружаться.


Производительность

Pingvin Share очень лёгкий.

Даже дешёвый VPS спокойно выдержит:

  • постоянное использование
  • большие загрузки
  • несколько устройств одновременно

Полезные сценарии

Передача файлов на Steam Deck

Например:

  1. Загружаем ROM с телефона
  2. Открываем ссылку на Steam Deck
  3. Скачиваем файл

Быстрый обмен APK

Очень удобно между:

  • Android
  • Linux
  • Orange Pi

Передача docker-compose и скриптов

Удобно для:

  • bash-скриптов
  • docker-compose
  • резервных копий
  • конфигов

Итоги

Pingvin Share оказался одним из самых простых и одновременно самых полезных self-hosted сервисов для VPS.

Он:

  • устанавливается за несколько минут
  • почти не требует ресурсов
  • работает через интернет без P2P
  • отлично подходит для Linux и Steam Deck
  • не требует сложной настройки

Особенно хорошо сервис раскрывается если у вас уже есть:

  • VPS
  • Steam Deck
  • Orange Pi
  • Linux
  • Android

И нужен максимально простой способ обмена файлами между устройствами.