Last translated: 26 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

After translating, add the links to README so others can view it directly.

CloudPaste - Онлайн-буфер обмена 📋

中文 | English

paste

Сервис онлайн-буфера обмена и обмена файлами на базе Cloudflare с поддержкой редактирования Markdown и загрузки файлов

Ask DeepWiki License GitHub Stars Powered by Cloudflare Docker Pulls

📸 Демонстрация✨ Возможности🚀 Руководство по развертыванию🔧 Технологический стек💻 Разработка📄 Лицензия

📸 Демонстрация

✨ Возможности

📝 Редактирование и обмен Markdown

  • Мощный редактор: Интеграция с Vditor, поддержка GitHub-flavored Markdown, математических формул, диаграмм, ментальных карт и др.
  • Безопасный обмен: Контент можно защитить паролем доступа
  • Гибкое время жизни: Поддержка установки времени истечения срока действия контента
  • Контроль доступа: Возможность ограничения максимального количества просмотров
  • Кастомизация: Персонализированные ссылки и заметки для обмена
  • Поддержка прямых ссылок на Raw-текст: Аналогично Raw-ссылкам GitHub, используется для сервисов, запущенных через YAML-конфигурации
  • Экспорт в несколько форматов: Поддержка экспорта в PDF, Markdown, HTML, PNG и документы Word
  • Легкий обмен: Копирование ссылки в один клик и генерация QR-кода
  • Автосохранение: Поддержка автоматического сохранения черновиков

📤 Загрузка и управление файлами

  • Поддержка множества хранилищ: Совместимость с различными S3-хранилищами (Cloudflare R2, Backblaze B2, AWS S3 и др.)
  • Конфигурация хранилищ: Визуальный интерфейс для настройки нескольких хранилищ, гибкое переключение источников
  • Эффективная загрузка: Прямая загрузка в S3-хранилище через presigned URLs
  • Обратная связь в реальном времени: Отображение прогресса загрузки
  • Кастомные ограничения: Ограничения на размер загружаемых файлов и максимальный объем хранилища
  • Управление метаданными: Заметки к файлам, пароли, сроки действия, ограничения доступа
  • Анализ данных: Статистика доступа к файлам и анализ тенденций
  • Прямая передача на сервер: Поддержка вызова API для загрузки, скачивания и других операций с файлами.

🛠 Удобные операции с файлами/текстом

  • Единое управление: Поддержка создания, удаления и изменения свойств файлов/текста
  • Онлайн-просмотр: Просмотр и генерация прямых ссылок для документов, изображений и медиафайлов
  • Инструменты обмена: Генерация коротких ссылок и QR-кодов для кросс-платформенного обмена
  • Пакетное управление: Пакетные операции и отображение файлов/текста

🔄 WebDAV и управление точками монтирования

  • Поддержка протокола WebDAV: Доступ и управление файловой системой через стандартный протокол WebDAV
  • Монтирование сетевых дисков: Поддержка монтирования некоторыми сторонними клиентами
  • Гибкие точки монтирования: Поддержка создания нескольких точек, подключенных к разным хранилищам
  • Контроль прав: Детальное управление правами доступа к точкам монтирования
  • Интеграция с API-ключами: Авторизация доступа WebDAV через API-ключи
  • Поддержка больших файлов: Автоматическое использование механизма multipart-загрузки для больших файлов
  • Операции с директориями: Полная поддержка создания, загрузки, удаления, переименования директорий

🔐 Легковесное управление правами

Контроль прав администратора

  • Управление системой: Глобальная конфигурация системных настроек
  • Модерация контента: Управление всем пользовательским контентом
  • Управление хранилищами: Добавление, редактирование и удаление S3-хранилищ
  • Назначение прав: Создание и управление API-ключами
  • Анализ данных: Полный доступ к статистическим данным

Контроль прав API-ключей

  • Права на текст: Создание/редактирование/удаление текстового контента
  • Права на файлы: Загрузка/управление/удаление файлов
  • Права на хранилища: Возможность выбора конкретных конфигураций хранилищ
  • Разделение чтения/записи: Можно установить права только на чтение или чтение-запись
  • Контроль времени: Кастомный срок действия (от часов до месяцев)
  • Механизм безопасности: Функции автоматического истечения срока и ручного отзыва

💫 Системные особенности

  • Высокая адаптивность: Адаптивный дизайн для мобильных устройств и десктопов
  • Многоязычность: Поддержка китайского/английского интерфейсов
  • Визуальные режимы: Переключение светлой/темной темы
  • Безопасная аутентификация: Система аутентификации администратора на основе JWT
  • Оффлайн-опыт: Поддержка PWA, возможность использования оффлайн и установки на рабочий стол

🚀 Руководство по развертыванию

Предварительные требования

Перед началом развертывания убедитесь, что у вас есть следующее:

  • Аккаунт Cloudflare (обязательно)
  • При использовании R2: Активируйте сервис Cloudflare R2 и создайте bucket (требуется платежный метод)
  • При использовании Vercel: Зарегистрируйтесь на Vercel
  • Конфигурационная информация для других S3-хранилищ:
    • S3_ACCESS_KEY_ID
    • S3_SECRET_ACCESS_KEY
    • S3_BUCKET_NAME
    • S3_ENDPOINT
👉 Полное руководство по развертыванию

📑 Содержание


Автоматическое развертывание через Actions

Использование GitHub Actions позволяет автоматически развернуть приложение после отправки кода.

Настройка репозитория GitHub

  1. Форкните или клонируйте репозиторий https://github.com/ling-drag0n/CloudPaste
  2. Перейдите в настройки вашего репозитория GitHub
  3. Навигация: Settings → Secrets and variables → Actions → New Repository secrets
  4. Добавьте следующие Secrets:
Имя SecretОбязательноНазначение
CLOUDFLARE_API_TOKENAPI-токен Cloudflare (требуются права Workers, D1 и Pages)
CLOUDFLARE_ACCOUNT_IDID аккаунта Cloudflare
ENCRYPTION_SECRETКлюч для шифрования чувствительных данных (если не указан, будет сгенерирован автоматически)

Получение API-токена Cloudflare

  1. Посетите Cloudflare Dashboard

  2. Создайте новый API-токен

  3. Выберите шаблон "Edit Cloudflare Workers" и добавьте права на редактирование D1 базы данных

    D1

Автоматическое развертывание бэкенда

Форкните репозиторий, заполните secrets, затем запустите workflow!!! Развертывание автоматически запускается при изменении файлов в директории backend и отправке в ветку main или master. Процесс:

  1. Автоматическое создание D1 базы данных (если не существует)
  2. Инициализация базы schema.sql (создание таблиц и начальных данных)
  3. Установка переменной ENCRYPTION_SECRET (из GitHub Secrets или автоматическая генерация)
  4. Автоматическое развертывание Worker в Cloudflare
  5. Рекомендуется настроить кастомный домен вместо стандартного Cloudflare (иначе возможны проблемы с доступом в некоторых регионах)

⚠️ Запомните ваш домен бэкенда

Автоматическое развертывание фронтенда

Cloudflare Pages (Рекомендуется)

Форкните репозиторий, заполните secrets, затем запустите workflow. Развертывание автоматически запускается при изменении файлов в директории frontend и отправке в ветку main или master. После развертывания нужно установить переменные окружения в панели Cloudflare Pages:

  1. Войдите в Cloudflare Dashboard

  2. Навигация: Pages → Ваш проект (например, "cloudpaste-frontend")

  3. Нажмите "Settings" → "Environment variables"

  4. Добавьте переменную окружения:

    • Имя: VITE_BACKEND_URL

    • Значение: URL вашего Worker бэкенда (например, https://cloudpaste-backend.your-username.workers.dev) без "/" в конце. Рекомендуется использовать кастомный домен Worker бэкенда.

    • Убедитесь, что ввели полный домен бэкенда в формате "https://xxxx.com"

  5. Важный шаг: Затем снова запустите workflow фронтенда для завершения загрузки домена бэкенда!!!

    test-1

Строго следуйте шагам, иначе загрузка домена бэкенда завершится неудачей

Vercel

Для Vercel рекомендуется развертывать следующим образом:

  1. Импортируйте ваш GitHub проект после форка
  2. Настройте параметры развертывания:
Framework Preset: Vite
Build Command: npm run build
Output Directory: dist
Install Command: npm install
  1. Настройте переменные окружения: Введите: VITE_BACKEND_URL и ваш домен бэкенда
  2. Нажмите кнопку "Deploy" для развертывания

☝️ Выберите один из вышеуказанных методов


Ручное развертывание

Ручное развертывание бэкенда

  1. Клонируйте репозиторий
git clone https://github.com/ling-drag0n/CloudPaste.git
cd CloudPaste/backend
  1. Установите зависимости

    npm install
    
  2. Войдите в Cloudflare

    npx wrangler login
    
  3. Создайте D1 базу данных

    npx wrangler d1 create cloudpaste-db
    

    Запомните ID базы данных из вывода.

  4. Измените конфигурацию wrangler.toml

    [[d1_databases]]
    binding = "DB"
    database_name = "cloudpaste-db"
    database_id = "YOUR_DATABASE_ID"
    
  5. Разверните Worker

    npx wrangler deploy
    

    Запомните URL из вывода; это адрес вашего API бэкенда.

  6. Инициализация базы данных (автоматически) Посетите URL вашего Worker для запуска инициализации:

    https://cloudpaste-backend.your-username.workers.dev
    

⚠️ Напоминание о безопасности: Пожалуйста, немедленно измените пароль администратора по умолчанию после инициализации системы (Логин: admin, Пароль: admin123).

Ручное развертывание фронтенда

Cloudflare Pages

  1. Подготовьте код фронтенда

    cd CloudPaste/frontend
    npm install
    
  2. Настройте переменные окружения Создайте или измените файл .env.production:

    VITE_BACKEND_URL=https://cloudpaste-backend.your-username.workers.dev
    VITE_APP_ENV=production
    VITE_ENABLE_DEVTOOLS=false
    
  3. Соберите проект фронтенда

    npm run build
    

    Будьте осторожны при сборке! !

  4. Разверните на Cloudflare Pages

    Метод 1: Через Wrangler CLI

    npx wrangler pages deploy dist --project-name=cloudpaste-frontend
    

    Метод 2: Через Cloudflare Dashboard

    1. Войдите в Cloudflare Dashboard
    2. Выберите "Pages"
    3. Нажмите "Create a project" → "Direct Upload"
    4. Загрузите файлы из директории dist
    5. Установите имя проекта (например, "cloudpaste-frontend")
    6. Нажмите "Save and Deploy"

Vercel

  1. Подготовьте код фронтенда

    cd CloudPaste/frontend
    npm install
    
  2. Установите и войдите в Vercel CLI

    npm install -g vercel
    vercel login
    
  3. Настройте переменные окружения, аналогично Cloudflare Pages

  4. Соберите и разверните

    vercel --prod
    

    Следуйте подсказкам для настройки проекта.


Учебник по развертыванию ClawCloud CloudPaste

10GB бесплатного трафика в месяц, подходит только для легкого использования

Шаг 1:

Ссылка для регистрации: Claw Cloud (без #AFF) Не требуется кредитная карта, если дата регистрации на GitHub более 180 дней, вы получаете $5 кредита каждый месяц.

Шаг 2:

После регистрации нажмите APP Launchpad на главной странице, затем нажмите create app в правом верхнем углу

image.png

Шаг 3:

Сначала разверните бэкенд, как показано на рисунке (только для справки): image.png

Хранилище данных бэкенда здесь: image.png

Шаг 4:

Затем фронтенд, как показано на рисунке (только для справки): image.png

Развертывание завершено и готово к использованию, кастомные домены можно настроить по необходимости
👉 Руководство по развертыванию Docker

📑 Содержание


Развертывание через командную строку Docker

Развертывание бэкенда Docker

Бэкенд CloudPaste можно быстро развернуть с помощью официального Docker-образа.

  1. Создайте директорию для хранения данных

    mkdir -p sql_data
    
  2. Запустите контейнер бэкенда

    docker run -d --name cloudpaste-backend \
      -p 8787:8787 \
      -v $(pwd)/sql_data:/data \
      -e ENCRYPTION_SECRET=your-encryption-key \
      -e NODE_ENV=production \
      -e RUNTIME_ENV=docker \
      dragon730/cloudpaste-backend:latest
    

    Запомните URL развертывания (например, http://your-server-ip:8787), он понадобится для развертывания фронтенда.

⚠️ Совет по безопасности: Обязательно настройте ENCRYPTION_SECRET и храните его в безопасности, так как этот ключ используется для шифрования чувствительных данных.

Развертывание фронтенда Docker

Фронтенд использует Nginx для обслуживания и настраивает адрес API бэкенда при запуске.

docker run -d --name cloudpaste-frontend \
  -p 80:80 \
  -e BACKEND_URL=http://your-server-ip:8787 \
  dragon730/cloudpaste-frontend:latest

⚠️ Примечание: BACKEND_URL должен включать полный URL (включая протокол http:// или https://) ⚠️ Напоминание о безопасности: Пожалуйста, немедленно измените пароль администратора по умолчанию после инициализации системы (Логин: admin, Пароль: admin123).

Обновление Docker-образа

При выходе новой версии проекта вы можете обновить ваше развертывание Docker следующим образом:

  1. Получите последние образы

    docker pull dragon730/cloudpaste-backend:latest
    docker pull dragon730/cloudpaste-frontend:latest
    
  2. Остановите и удалите старые контейнеры

    docker stop cloudpaste-backend cloudpaste-frontend
    docker rm cloudpaste-backend cloudpaste-frontend
    
  3. Запустите новые контейнеры с теми же командами (сохраняя директорию данных и конфигурацию)

Развертывание в один клик через Docker Compose

Использование Docker Compose позволяет развернуть и фронтенд, и бэкенд одним кликом, это самый простой рекомендуемый метод.

  1. Создайте файл docker-compose.yml
version: "3.8"

services:
  frontend:
    image: dragon730/cloudpaste-frontend:latest
    environment:
      - BACKEND_URL=https://xxx.com # Fill in the backend service address
    ports:
      - "8080:80" #"127.0.0.1:8080:80"
    depends_on:
      - backend # Depends on backend service
    networks:
      - cloudpaste-network
    restart: unless-stopped

  backend:
    image: dragon730/cloudpaste-backend:latest
    environment:
      - NODE_ENV=production
      - RUNTIME_ENV=docker
      - PORT=8787
      - ENCRYPTION_SECRET=custom-key # Please modify this to your own security key
    volumes:
      - ./sql_data:/data # Data persistence
    ports:
      - "8787:8787" #"127.0.0.1:8787:8787"
    networks:
      - cloudpaste-network
    restart: unless-stopped

networks:
  cloudpaste-network:
    driver: bridge
  1. Запустите сервисы
docker-compose up -d

⚠️ Напоминание о безопасности: Пожалуйста, немедленно измените пароль администратора по умолчанию после инициализации системы (Логин: admin, Пароль: admin123).

  1. Доступ к сервисам

Фронтенд: http://your-server-ip:80 Бэкенд: http://your-server-ip:8787

Обновление Docker Compose

Когда нужно обновиться до новой версии:

  1. Получите последние образы

    docker-compose pull
    
  2. Пересоздайте контейнеры с новыми образами (сохраняя тома данных)

    docker-compose up -d --force-recreate
    

💡 Совет: Если есть изменения конфигурации, может потребоваться резервное копирование данных и изменение файла docker-compose.yml

Пример обратного прокси Nginx

server {
    listen 443 ssl;
    server_name paste.yourdomain.com;  # Replace with your domain name

    # SSL certificate configuration
    ssl_certificate     /path/to/cert.pem;  # Replace with certificate path
    ssl_certificate_key /path/to/key.pem;   # Replace with key path

    # Frontend proxy configuration
    location / {
        proxy_pass http://localhost:80;  # Docker frontend service address
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Backend API proxy configuration
    location /api {
        proxy_pass http://localhost:8787;  # Docker backend service address
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        client_max_body_size 0;

        # WebSocket support (if needed)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # WebDAV Configuration
    location /dav {
        proxy_pass http://localhost:8787/dav;  # Points to your backend service

        # WebDAV necessary headers
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebDAV method support
        proxy_pass_request_headers on;

        # Support all WebDAV methods
        proxy_method $request_method;

        # Necessary header processing
        proxy_set_header Destination $http_destination;
        proxy_set_header Overwrite $http_overwrite;

        # Handle large files
        client_max_body_size 0;

        # Timeout settings
        proxy_connect_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_read_timeout 3600s;
    }
}

⚠️ Совет по безопасности: Рекомендуется настроить HTTPS и обратный прокси (например, Nginx) для повышения безопасности.

👉 Руководство по настройке CORS для S3

Получение API R2 и настройка кросс-доменных запросов

  1. Войдите в Cloudflare Dashboard

  2. Перейдите в раздел R2 Storage и создайте bucket.

  3. Создайте API токен R2api R2rw

  4. Сохраните все данные после создания — они понадобятся позже

  5. Настройте правила кросс-доменных запросов: выберите соответствующий bucket, перейдите в Settings, отредактируйте политику CORS, как показано ниже:

[
  {
    "AllowedOrigins": ["http://localhost:3000", "https://replace-with-your-frontend-domain"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
    "AllowedHeaders": ["*"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3600
  }
]

Получение API B2 и настройка кросс-доменных запросов

  1. Если у вас нет аккаунта B2, сначала зарегистрируйтесь, затем создайте bucket. B2账号注册

  2. В боковом меню выберите Application Key, нажмите Create Key и следуйте инструкциям. B2key

  3. Настройте кросс-доменные запросы для B2; конфигурация CORS в B2 сложнее, обратите внимание B2cors

  4. Сначала попробуйте варианты 1 или 2, перейдите на страницу загрузки и проверьте, работает ли она. Если в консоли F12 появляются ошибки CORS, используйте вариант 3. Для постоянного решения сразу применяйте вариант 3.

    B21

Для настройки варианта 3, так как панель управления не поддерживает эту функцию, необходимо выполнить конфигурацию вручную, скачав CLI инструмент B2. Подробнее см.: "https://docs.cloudreve.org/zh/usage/storage/b2".

После загрузки в соответствующей директории CMD выполните следующие команды:

b2-windows.exe account authorize   //Log in to your account, following prompts to enter your keyID and applicationKey
b2-windows.exe bucket get <bucketName> //You can execute to get bucket information, replace <bucketName> with your bucket name

Конфигурация для Windows: используйте ".\b2-windows.exe xxx", Для Python CLI команды будут аналогичны:

b2-windows.exe bucket update <bucketName> allPrivate --cors-rules "[{\"corsRuleName\":\"CloudPaste\",\"allowedOrigins\":[\"*\"],\"allowedHeaders\":[\"*\"],\"allowedOperations\":[\"b2_upload_file\",\"b2_download_file_by_name\",\"b2_download_file_by_id\",\"s3_head\",\"s3_get\",\"s3_put\",\"s3_post\",\"s3_delete\"],\"exposeHeaders\":[\"Etag\",\"content-length\",\"content-type\",\"x-bz-content-sha1\"],\"maxAgeSeconds\":3600}]"

Замените на имя вашего bucket. Для allowedOrigins в настройках CORS можно указать нужные домены; здесь разрешены все.

  1. Настройка кросс-доменных запросов завершена

Доступ к API MinIO и настройка кросс-доменных запросов

  1. Развертывание MinIO Server

    Используйте следующую конфигурацию Docker Compose (пример) для быстрого развертывания MinIO:

    version: "3"
    
    services:
      minio:
        image: minio/minio:RELEASE.2025-02-18T16-25-55Z
        container_name: minio-server
        command: server /data --console-address :9001 --address :9000
        environment:
          - MINIO_ROOT_USER=minioadmin # Имя администратора
          - MINIO_ROOT_PASSWORD=minioadmin # Пароль администратора
          - MINIO_BROWSER=on
          - MINIO_SERVER_URL=https://minio.example.com # URL доступа к S3 API
          - MINIO_BROWSER_REDIRECT_URL=https://console.example.com # URL консоли
        ports:
          - "9000:9000" # Порт S3 API
          - "9001:9001" # Порт консоли
        volumes:
          - ./data:/data
          - ./certs:/root/.minio/certs # SSL сертификаты (при необходимости)
        restart: always
    

    Выполните docker-compose up -d для запуска сервиса.

  2. Настройка обратного прокси (пример)

    Для корректной работы MinIO, особенно предпросмотра файлов, правильно настройте обратный прокси. Рекомендуемые настройки для OpenResty/Nginx:

    Обратный прокси для MinIO S3 API (minio.example.com):

    location / {
        proxy_pass http://127.0.0.1:9000;
        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;
    
        # Оптимизация HTTP
        proxy_http_version 1.1;
        proxy_set_header Connection "";  # Включение keepalive для HTTP/1.1
    
        # Важно: Решение проблем с ошибками 403 и предпросмотром
        proxy_cache off;
        proxy_buffering off;
        proxy_request_buffering off;
    
        # Без ограничения размера файла
        client_max_body_size 0;
    }
    

    Обратный прокси для MinIO Console (console.example.com):

    location / {
        proxy_pass http://127.0.0.1:9001;
        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;
    
        # Поддержка WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        # Критические настройки
        proxy_cache off;
        proxy_buffering off;
    
        # Без ограничения размера файла
        client_max_body_size 0;
    }
    
  3. Доступ к консоли для создания bucket и ключей доступа

    Подробная конфигурация описана в официальной документации:
    https://min.io/docs/minio/container/index.html
    CN: https://min-io.cn/docs/minio/container/index.html

    minio-1

  4. Дополнительная настройка (опционально)

    Разрешенные источники должны включать домен вашего фронтенда.
    minio-2

  5. Настройка MinIO в CloudPaste

    • Войдите в панель администратора CloudPaste
    • Перейдите в "Настройки S3 хранилища" → "Добавить конфигурацию хранилища"
    • Выберите "Другие S3-совместимые сервисы" в качестве провайдера
    • Введите данные:
      • Имя: Произвольное имя
      • URL конечной точки: URL сервиса MinIO (например, https://minio.example.com)
      • Имя bucket: Созданный ранее bucket
      • Access Key ID: Ваш ключ доступа
      • Secret Key: Ваш секретный ключ
      • Регион: Оставьте пустым
      • Доступ в стиле path: ОБЯЗАТЕЛЬНО ВКЛЮЧИТЕ!
    • Нажмите "Проверить соединение" для проверки
    • Сохраните настройки
  6. Устранение неполадок

    • Важно: При использовании CDN Cloudflare может потребоваться добавить proxy_set_header Accept-Encoding "identity", а также учитывать проблемы с кешированием. Рекомендуется использовать только DNS-разрешение.
    • Ошибка 403: Убедитесь, что обратный прокси включает proxy_cache off и proxy_buffering off
    • Проблемы с предпросмотром: Проверьте правильность настроек MINIO_SERVER_URL и MINIO_BROWSER_REDIRECT_URL
    • Ошибки загрузки: Проверьте настройки CORS; разрешенные источники должны включать домен фронтенда
    • Консоль недоступна: Проверьте конфигурацию WebSocket, особенно Connection "upgrade"

Другие настройки, связанные с S3, будут добавлены позже......

👉 Руководство по настройке WebDAV

Руководство по настройке и использованию WebDAV

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

Основная информация о сервисе WebDAV

  • Базовый URL WebDAV: https://your-backend-domain/dav
  • Поддерживаемые методы аутентификации:
    • Базовая аутентификация (логин+пароль)
  • Поддерживаемые типы прав:
    • Учетные записи администраторов — Полные права
    • API ключи — Требуется включенное право на монтирование (mount_permission)

Настройка прав доступа

1. Доступ через учетную запись администратора

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

  • Логин: Имя администратора
  • Пароль: Пароль администратора

2. Доступ через API ключ (рекомендуется)

Для более безопасного доступа рекомендуется создать специальный API ключ:

  1. Войдите в интерфейс управления
  2. Перейдите в "Управление API ключами"
  3. Создайте новый API ключ, убедитесь, что включено "Право на монтирование"
  4. Способ использования:
    • Логин: Значение API ключа
    • Пароль: То же значение API ключа, что и логин

Настройка обратного прокси NGINX

При использовании NGINX в качестве обратного прокси необходимо добавить специальную конфигурацию WebDAV для корректной работы всех методов:

# WebDAV Configuration
location /dav {
    proxy_pass http://localhost:8787;  # Points to your backend service

    # WebDAV necessary headers
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # WebDAV method support
    proxy_pass_request_headers on;

    # Support all WebDAV methods
    proxy_method $request_method;

    # Necessary header processing
    proxy_set_header Destination $http_destination;
    proxy_set_header Overwrite $http_overwrite;

    # Handle large files
    client_max_body_size 0;

    # Timeout settings
    proxy_connect_timeout 3600s;
    proxy_send_timeout 3600s;
    proxy_read_timeout 3600s;
}

Распространенные проблемы и решения

  1. Проблемы с подключением:

    • Убедитесь, что URL WebDAV указан правильно
    • Проверьте корректность учетных данных
    • Убедитесь, что API ключ имеет право на монтирование
  2. Ошибки прав доступа:

    • Убедитесь, что учетная запись имеет необходимые права
    • Учетные записи администраторов должны иметь полные права
    • API ключи требуют отдельного включения права на монтирование
  3. ⚠️⚠️ Проблемы с загрузкой через WebDAV:

    • В режиме предварительно подписанной загрузки обратите внимание на настройки CORS соответствующего S3 хранилища
    • В автоматическом режиме WebDAV файлы до 10MB загружаются напрямую, от 10 до 50MB — частями, а свыше 50MB — с предварительной подписью
    • Учитывайте ограничения Cloudflare Worker при загрузке: рекомендуется использовать режим с предварительной подписью или прямой загрузки, избегая загрузки частями
    • Для развертывания через Docker достаточно обратить внимание на конфигурацию nginx прокси, подойдет любой режим загрузки
    • Клиенты Windows, Raidrive и другие пока не поддерживают перетаскивание для загрузки, все остальное работает

🔧 Технологический стек

Фронтенд

  • Фреймворк: Vue.js 3 + Vite
  • Стилизация: TailwindCSS
  • Редактор: Vditor
  • Интернационализация: Vue-i18n
  • Графики: Chart.js + Vue-chartjs

Бэкенд

  • Среда выполнения: Cloudflare Workers
  • Фреймворк: Hono
  • База данных: Cloudflare D1 (SQLite)
  • Хранилище: Множество S3-совместимых сервисов (поддерживает R2, B2, AWS S3)
  • Аутентификация: JWT токены + API ключи

💻 Разработка

Документация API

Документация API

Документация API прямой загрузки файлов на сервер — Подробное описание интерфейса прямой загрузки файлов

Настройка локальной среды разработки

  1. Клонирование репозитория

    git clone https://github.com/ling-drag0n/cloudpaste.git
    cd cloudpaste
    
  2. Настройка бэкенда

    cd backend
    npm install
    # Инициализация базы данных D1
    wrangler d1 create cloudpaste-db
    wrangler d1 execute cloudpaste-db --file=./schema.sql
    
  3. Настройка фронтенда

    cd frontend
    npm install
    
  4. Настройка переменных окружения

    • В директории backend создайте файл wrangler.toml для настройки переменных окружения
    • В директории frontend настройте файл .env.development для переменных фронтенда
  5. Запуск серверов разработки

    # Бэкенд
    cd backend
    npm run dev
    
    # Фронтенд (в другом терминале)
    cd frontend
    npm run dev
    

Структура проекта

CloudPaste/
├── frontend/                # Frontend Vue.js application
│   ├── src/                 # Source code
│   │   ├── components/      # Vue components
│   │   ├── api/             # API clients and services
│   │   ├── i18n/            # Internationalization resource files
│   │   ├── utils/           # Utility functions
│   │   └── assets/          # Static assets
│   └── ...
└── backend/                 # Cloudflare Workers backend
    ├── worker.js            # Main Worker file
    ├── schema.sql           # D1 database schema
    └── ...

Сборка Docker вручную

Для кастомизации образов Docker или отладки во время разработки выполните следующие шаги:

  1. Сборка образа бэкенда

    # Выполните в корне проекта
    docker build -t cloudpaste-backend:custom -f docker/backend/Dockerfile .
    
    # Запуск собранного образа
    docker run -d --name cloudpaste-backend \
      -p 8787:8787 \
      -v $(pwd)/sql_data:/data \
      -e ENCRYPTION_SECRET=development-test-key \
      cloudpaste-backend:custom
    
  2. Сборка образа фронтенда

    # Выполните в корне проекта
    docker build -t cloudpaste-frontend:custom -f docker/frontend/Dockerfile .
    
    # Запуск собранного образа
    docker run -d --name cloudpaste-frontend \
      -p 80:80 \
      -e BACKEND_URL=http://localhost:8787 \
      cloudpaste-frontend:custom
    
  3. Docker Compose для разработки

    Создайте файл docker-compose.dev.yml:

    version: "3.8"
    
    services:
      frontend:
        build:
          context: .
          dockerfile: docker/frontend/Dockerfile
        environment:
          - BACKEND_URL=http://backend:8787
        ports:
          - "80:80"
        depends_on:
          - backend
    
      backend:
        build:
          context: .
          dockerfile: docker/backend/Dockerfile
        environment:
          - NODE_ENV=development
          - RUNTIME_ENV=docker
          - PORT=8787
          - ENCRYPTION_SECRET=dev_secret_key
        volumes:
          - ./sql_data:/data
        ports:
          - "8787:8787"
    

    Запуск среды разработки:

    docker-compose -f docker-compose.yml up --build
    

📄 Лицензия

Apache License 2.0

Этот проект лицензирован по Apache License 2.0 — подробности см. в файле LICENSE.

❤️ Вклад

  • Спонсорство: Поддержка проекта требует усилий. Если вам нравится этот проект, рассмотрите возможность поддержать автора. Каждая ваша поддержка — мотивация продолжать работу~

История звезд

Star History Chart

Если проект вам нравится, поставьте бесплатную звезду✨✨, большое спасибо!