📸 Демонстрация • ✨ Возможности • 🚀 Руководство по развертыванию • 🔧 Технологический стек • 💻 Разработка • 📄 Лицензия
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
Перед началом развертывания убедитесь, что у вас есть следующее:
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_BUCKET_NAME
S3_ENDPOINT
Использование GitHub Actions позволяет автоматически развернуть приложение после отправки кода.
Имя Secret | Обязательно | Назначение |
---|---|---|
CLOUDFLARE_API_TOKEN | ✅ | API-токен Cloudflare (требуются права Workers, D1 и Pages) |
CLOUDFLARE_ACCOUNT_ID | ✅ | ID аккаунта Cloudflare |
ENCRYPTION_SECRET | ❌ | Ключ для шифрования чувствительных данных (если не указан, будет сгенерирован автоматически) |
Посетите Cloudflare Dashboard
Создайте новый API-токен
Выберите шаблон "Edit Cloudflare Workers" и добавьте права на редактирование D1 базы данных
Форкните репозиторий, заполните secrets, затем запустите workflow!!!
Развертывание автоматически запускается при изменении файлов в директории backend
и отправке в ветку main
или master
. Процесс:
⚠️ Запомните ваш домен бэкенда
Форкните репозиторий, заполните secrets, затем запустите workflow.
Развертывание автоматически запускается при изменении файлов в директории frontend
и отправке в ветку main
или master
. После развертывания нужно установить переменные окружения в панели Cloudflare Pages:
Войдите в Cloudflare Dashboard
Навигация: Pages → Ваш проект (например, "cloudpaste-frontend")
Нажмите "Settings" → "Environment variables"
Добавьте переменную окружения:
Имя: VITE_BACKEND_URL
Значение: URL вашего Worker бэкенда (например, https://cloudpaste-backend.your-username.workers.dev
) без "/" в конце. Рекомендуется использовать кастомный домен Worker бэкенда.
Убедитесь, что ввели полный домен бэкенда в формате "https://xxxx.com"
Важный шаг: Затем снова запустите workflow фронтенда для завершения загрузки домена бэкенда!!!
Строго следуйте шагам, иначе загрузка домена бэкенда завершится неудачей
Для Vercel рекомендуется развертывать следующим образом:
Framework Preset: Vite
Build Command: npm run build
Output Directory: dist
Install Command: npm install
☝️ Выберите один из вышеуказанных методов
git clone https://github.com/ling-drag0n/CloudPaste.git
cd CloudPaste/backend
Установите зависимости
npm install
Войдите в Cloudflare
npx wrangler login
Создайте D1 базу данных
npx wrangler d1 create cloudpaste-db
Запомните ID базы данных из вывода.
Измените конфигурацию wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "cloudpaste-db"
database_id = "YOUR_DATABASE_ID"
Разверните Worker
npx wrangler deploy
Запомните URL из вывода; это адрес вашего API бэкенда.
Инициализация базы данных (автоматически) Посетите URL вашего Worker для запуска инициализации:
https://cloudpaste-backend.your-username.workers.dev
⚠️ Напоминание о безопасности: Пожалуйста, немедленно измените пароль администратора по умолчанию после инициализации системы (Логин: admin, Пароль: admin123).
Подготовьте код фронтенда
cd CloudPaste/frontend
npm install
Настройте переменные окружения
Создайте или измените файл .env.production
:
VITE_BACKEND_URL=https://cloudpaste-backend.your-username.workers.dev
VITE_APP_ENV=production
VITE_ENABLE_DEVTOOLS=false
Соберите проект фронтенда
npm run build
Разверните на Cloudflare Pages
Метод 1: Через Wrangler CLI
npx wrangler pages deploy dist --project-name=cloudpaste-frontend
Метод 2: Через Cloudflare Dashboard
dist
Подготовьте код фронтенда
cd CloudPaste/frontend
npm install
Установите и войдите в Vercel CLI
npm install -g vercel
vercel login
Настройте переменные окружения, аналогично Cloudflare Pages
Соберите и разверните
vercel --prod
Следуйте подсказкам для настройки проекта.
Ссылка для регистрации: Claw Cloud (без #AFF) Не требуется кредитная карта, если дата регистрации на GitHub более 180 дней, вы получаете $5 кредита каждый месяц.
После регистрации нажмите APP Launchpad на главной странице, затем нажмите create app в правом верхнем углу
Сначала разверните бэкенд, как показано на рисунке (только для справки):
Хранилище данных бэкенда здесь:
Затем фронтенд, как показано на рисунке (только для справки):
Бэкенд CloudPaste можно быстро развернуть с помощью официального Docker-образа.
Создайте директорию для хранения данных
mkdir -p sql_data
Запустите контейнер бэкенда
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 и храните его в безопасности, так как этот ключ используется для шифрования чувствительных данных.
Фронтенд использует 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 pull dragon730/cloudpaste-backend:latest
docker pull dragon730/cloudpaste-frontend:latest
Остановите и удалите старые контейнеры
docker stop cloudpaste-backend cloudpaste-frontend
docker rm cloudpaste-backend cloudpaste-frontend
Запустите новые контейнеры с теми же командами (сохраняя директорию данных и конфигурацию)
Использование Docker Compose позволяет развернуть и фронтенд, и бэкенд одним кликом, это самый простой рекомендуемый метод.
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
docker-compose up -d
⚠️ Напоминание о безопасности: Пожалуйста, немедленно измените пароль администратора по умолчанию после инициализации системы (Логин: admin, Пароль: admin123).
Фронтенд: http://your-server-ip:80
Бэкенд: http://your-server-ip:8787
Когда нужно обновиться до новой версии:
Получите последние образы
docker-compose pull
Пересоздайте контейнеры с новыми образами (сохраняя тома данных)
docker-compose up -d --force-recreate
💡 Совет: Если есть изменения конфигурации, может потребоваться резервное копирование данных и изменение файла docker-compose.yml
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) для повышения безопасности.
Войдите в Cloudflare Dashboard
Перейдите в раздел R2 Storage и создайте bucket.
Создайте API токен
Сохраните все данные после создания — они понадобятся позже
Настройте правила кросс-доменных запросов: выберите соответствующий bucket, перейдите в Settings, отредактируйте политику CORS, как показано ниже:
[
{
"AllowedOrigins": ["http://localhost:3000", "https://replace-with-your-frontend-domain"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
Если у вас нет аккаунта B2, сначала зарегистрируйтесь, затем создайте bucket.
В боковом меню выберите Application Key, нажмите Create Key и следуйте инструкциям.
Настройте кросс-доменные запросы для B2; конфигурация CORS в B2 сложнее, обратите внимание
Сначала попробуйте варианты 1 или 2, перейдите на страницу загрузки и проверьте, работает ли она. Если в консоли F12 появляются ошибки CORS, используйте вариант 3. Для постоянного решения сразу применяйте вариант 3.
Для настройки варианта 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 можно указать нужные домены; здесь разрешены все.
Развертывание 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
для запуска сервиса.
Настройка обратного прокси (пример)
Для корректной работы 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;
}
Доступ к консоли для создания bucket и ключей доступа
Подробная конфигурация описана в официальной документации:
https://min.io/docs/minio/container/index.html
CN: https://min-io.cn/docs/minio/container/index.html
Дополнительная настройка (опционально)
Разрешенные источники должны включать домен вашего фронтенда.
Настройка MinIO в CloudPaste
https://minio.example.com
)Устранение неполадок
proxy_set_header Accept-Encoding "identity"
, а также учитывать проблемы с кешированием. Рекомендуется использовать только DNS-разрешение.proxy_cache off
и proxy_buffering off
MINIO_SERVER_URL
и MINIO_BROWSER_REDIRECT_URL
Connection "upgrade"
CloudPaste предоставляет базовую поддержку протокола WebDAV, позволяя монтировать хранилища как сетевые диски для удобного доступа и управления файлами напрямую через файловые менеджеры.
https://your-backend-domain/dav
Используйте логин и пароль администратора для прямого доступа к сервису WebDAV:
Для более безопасного доступа рекомендуется создать специальный API ключ:
При использовании 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;
}
Проблемы с подключением:
Ошибки прав доступа:
⚠️⚠️ Проблемы с загрузкой через WebDAV:
Документация API прямой загрузки файлов на сервер — Подробное описание интерфейса прямой загрузки файлов
Клонирование репозитория
git clone https://github.com/ling-drag0n/cloudpaste.git
cd cloudpaste
Настройка бэкенда
cd backend
npm install
# Инициализация базы данных D1
wrangler d1 create cloudpaste-db
wrangler d1 execute cloudpaste-db --file=./schema.sql
Настройка фронтенда
cd frontend
npm install
Настройка переменных окружения
backend
создайте файл wrangler.toml
для настройки переменных окруженияfrontend
настройте файл .env.development
для переменных фронтендаЗапуск серверов разработки
# Бэкенд
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 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
Сборка образа фронтенда
# Выполните в корне проекта
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
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.
Спонсорство: Поддержка проекта требует усилий. Если вам нравится этот проект, рассмотрите возможность поддержать автора. Каждая ваша поддержка — мотивация продолжать работу~
Если проект вам нравится, поставьте бесплатную звезду✨✨, большое спасибо!