Zipline: Self-hosted шеринг файлов на Ubuntu 24.04

Zipline это не просто «еще один аплоадер», а полноценная платформа нового поколения с красивым UI, поддержкой PWA, OAuth2, вебхуками и мгновенной интеграцией со всеми популярными скриншотерами.

Развернем Zipline на VPS с Ubuntu 24.04 за 10 минут, используя Docker Compose. Никаких доменов и SSL на старте — только чистая функциональность.

Почему именно Zipline?

До этого я использовал FileBrowser. Это отличный файловый менеджер, но Zipline решает другую задачу — быстрый шеринг контента.

Ключевые преимущества v4:

  • Мгновенный деплой: Один docker compose up -d и всё работает.
  • Современный стек: Next.js + Prisma + PostgreSQL. Dashboard выглядит как коммерческий SaaS.
  • Интеграции: Готовые конфиги для ShareX, Flameshot, iShare (macOS) и Apple Shortcuts.
  • Безопасность из коробки: 2FA, Passkeys, квоты пользователей, защита паролем отдельных файлов.
  • Гибкое хранение: Локально или S3 (MinIO, AWS, Cloudflare R2).
  • Медиа-фичи: Автокомпрессия изображений, генерация превью для видео, embeds для Discord/Telegram.

⚠️ Важное требование: Процессор вашего VPS должен поддерживать инструкции AVX. Проверить можно командой: grep -o avx /proc/cpuinfo Если вывод пустой — Zipline не запустится. На большинстве современных KVM/VPS проблем нет.

Шаг 1. Подготовка окружения

Работаем под root на чистой Ubuntu 24.04. Создадим организованную структуру в /opt:

apt update && apt upgrade -y
mkdir -p /opt/zipline/{uploads,public,themes}
cd /opt/zipline

Шаг 2. Генерация секретов

Zipline откажется стартовать без двух переменных окружения. Генерируем криптографически стойкие ключи одной командой:

echo "POSTGRESQL_PASSWORD=$(openssl rand -base64 42 | tr -dc A-Za-z0-9 | cut -c -32 | tr -d '\n')" > .env
echo "CORE_SECRET=$(openssl rand -base64 42 | tr -dc A-Za-z0-9 | cut -c -32 | tr -d '\n')" >> .env

Никому не передавайте содержимое .env!

Шаг 3. Docker Compose конфигурация

Создаем файл docker-compose.yml в директории /opt/zipline. Обратите внимание: мы явно монтируем три директории (uploads, public, themes) для персистентности данных и кастомизации.

services:
  postgresql:
    image: postgres:16
    restart: unless-stopped
    env_file:
      - .env
    environment:
      POSTGRES_USER: zipline
      POSTGRES_PASSWORD: ${POSTGRESQL_PASSWORD}
      POSTGRES_DB: zipline
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'zipline']
      interval: 10s
      timeout: 5s
      retries: 5

  zipline:
    image: ghcr.io/diced/zipline
    restart: unless-stopped
    ports:
      - '3000:3000'
    env_file:
      - .env
    environment:
      - DATABASE_URL=postgres://zipline:${POSTGRESQL_PASSWORD}@postgresql:5432/zipline
      - DATASOURCE_LOCAL_DIRECTORY=/zipline/uploads
    depends_on:
      postgresql:
        condition: service_healthy
    volumes:
      - ./uploads:/zipline/uploads
      - ./public:/zipline/public
      - ./themes:/zipline/themes
    healthcheck:
      test: ['CMD', 'wget', '-q', '--spider', 'http://localhost:3000/api/healthcheck']
      interval: 15s
      timeout: 2s
      retries: 2

volumes:
  pgdata:

Назначение томов

  • ./uploads — загруженные пользователем файлы
  • ./public — статические ассеты (должен быть примонтирован к /zipline/public)
  • ./themes — кастомные темы оформления

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

docker compose pull
docker compose up -d

Через 30–60 секунд оба контейнера станут healthy. Открываем http://<IP_VPS>:3000 и создаем аккаунт супер-администратора.

Шаг 4. Безопасность (обязательно!)

Пока у нас нет обратного прокси и SSL, сервис доступен по HTTP. Минимальная защита:

  1. В Dashboard → Settings → Security включите 2FA или Passkeys.
  2. Ограничьте доступ по IP через UFW:
ufw allow from <ВАШ_ДОМАШНИЙ_IP> to any port 3000
  1. Позже настройте Nginx/Caddy + Certbot для HTTPS.

Практическое использование

ShareX (Windows)

Перейдите в Account → Uploaders → ShareX. Скачайте .sxcu файл и импортируйте его в ShareX двойным кликом. Теперь любой скриншот автоматически загружается на ваш сервер, а ссылка копируется в буфер обмена.

Flameshot (Linux)

В том же разделе скопируйте bash-скрипт. Добавьте его в настройки Flameshot как внешнюю команду загрузки. Работает бесшовно.

iOS / macOS

Установите официальный Zipline Shortcut из документации. Загрузка фото/видео прямо из галереи или меню «Поделиться».

Кастомные темы

Положите CSS/JSON файлы в /opt/zipline/themes. В настройках выберите тему. Можно стилизовать под свой бренд.

Обновление

Zipline развивается очень активно. Обновление занимает две команды (миграции БД применяются автоматически при старте):

cd /opt/zipline
docker compose pull
docker compose up -d

Дополнительные возможности

ФункцияОписание
URL ShorteningКороткие ссылки с кастомными алиасами
EmbedsКрасивые превью для Discord, Telegram, Slack
Image CompressionАвтоматическое сжатие изображений при загрузке
Video ThumbnailsГенерация превью для видеофайлов
Partial UploadsЧанковая загрузка больших файлов
QuotasЛимиты на объём загрузок для пользователей
WebhooksУведомления в Discord / HTTP при событиях
S3 BackendХранение файлов в MinIO, AWS, Cloudflare R2
APIПолноценный REST API для программной интеграции

Заключение

Zipline v4 — это тот редкий случай, когда open-source проект выглядит и работает лучше платных аналогов. Он легкий, безопасный и невероятно удобный для ежедневного использования. Для технического блога это идеальный инструмент: скриншоты ошибок, конфиги, демо-видео — всё загружается на собственный сервер за секунды и красиво отображается в статьях.

⭐ Если проект полезен — поставьте звезду Zipline на GitHub.