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 - Online-Zwischenablage 📋

中文 | English

paste

Cloudflare-basierter Online-Zwischenablage- und Dateifreigabedienst mit Markdown-Bearbeitung und Dateiupload-Unterstützung

Ask DeepWiki License GitHub Stars Powered by Cloudflare Docker Pulls

📸 Vorschau✨ Funktionen🚀 Bereitstellungsanleitung🔧 Technologie-Stack💻 Entwicklung📄 Lizenz

📸 Vorschau

✨ Funktionen

📝 Markdown-Bearbeitung und -Freigabe

  • Leistungsstarker Editor: Integriert mit Vditor, unterstützt GitHub-flavored Markdown, mathematische Formeln, Flussdiagramme, Mindmaps und mehr
  • Sichere Freigabe: Inhalte können mit Zugangspasswörtern geschützt werden
  • Flexible Ablaufzeit: Unterstützung für das Festlegen von Inhaltsablaufzeiten
  • Zugriffskontrolle: Möglichkeit, die maximale Anzahl von Ansichten zu begrenzen
  • Anpassung: Personalisierte Freigabelinks und Notizen
  • Unterstützung für Raw-Text-Direktlinks: Ähnlich wie GitHub's Raw-Direktlinks, verwendet für Dienste, die über YAML-Konfigurationsdateien gestartet werden
  • Multi-Format-Export: Unterstützt Export in PDF, Markdown, HTML, PNG-Bilder und Word-Dokumente
  • Einfache Freigabe: Ein-Klick-Link-Kopieren und QR-Code-Generierung
  • Auto-Speicherung: Unterstützung für automatisches Speichern von Entwürfen

📤 Datei-Upload und -Verwaltung

  • Mehrfache Speicherunterstützung: Kompatibel mit verschiedenen S3-Speicherdiensten (Cloudflare R2, Backblaze B2, AWS S3 usw.)
  • Speicherkonfiguration: Visuelle Schnittstelle zur Konfiguration mehrerer Speicherbereiche, flexibles Wechseln von Standardspeicherquellen
  • Effizienter Upload: Direkter Upload zu S3-Speicher über vorzeichenierte URLs
  • Echtzeit-Feedback: Echtzeit-Anzeige des Upload-Fortschritts
  • Benutzerdefinierte Limits: Einzelne Upload-Limits und maximale Kapazitätsbeschränkungen
  • Metadatenverwaltung: Dateinotizen, Passwörter, Ablaufzeiten, Zugriffsbeschränkungen
  • Datenanalyse: Dateizugriffsstatistiken und Trendanalyse
  • Direkte Serverübertragung: Unterstützt den Aufruf von APIs für Datei-Upload, -Download und andere Operationen.

🛠 Praktische Datei-/Text-Operationen

  • Einheitliche Verwaltung: Unterstützung für Datei-/Texterstellung, -Löschung und -Eigenschaftsänderung
  • Online-Vorschau: Online-Vorschau und Direktlink-Generierung für gängige Dokumente, Bilder und Mediendateien
  • Freigabe-Tools: Generierung von Kurzlinks und QR-Codes für plattformübergreifende Freigabe
  • Batch-Verwaltung: Batch-Operationen und -Anzeige für Dateien/Texte

🔄 WebDAV und Mount-Point-Verwaltung

  • WebDAV-Protokollunterstützung: Zugriff auf und Verwaltung des Dateisystems über das standardmäßige WebDAV-Protokoll
  • Netzlaufwerks-Einbindung: Unterstützung für die Einbindung durch einige Drittanbieter-Clients
  • Flexible Mount-Points: Unterstützung für die Erstellung mehrerer Mount-Points, die mit verschiedenen Speicherdiensten verbunden sind
  • Berechtigungskontrolle: Fein abgestufte Mount-Point-Zugriffsberechtigungsverwaltung
  • API-Schlüssel-Integration: WebDAV-Zugriffsautorisierung über API-Schlüssel
  • Großdateien-Unterstützung: Automatische Verwendung des Multipart-Upload-Mechanismus für große Dateien
  • Verzeichnisoperationen: Volle Unterstützung für Verzeichniserstellung, -upload, -löschung, -umbenennung und andere Operationen

🔐 Leichtgewichtige Berechtigungsverwaltung

Administrator-Berechtigungskontrolle

  • Systemverwaltung: Globale Systemeinstellungen-Konfiguration
  • Inhaltsmoderation: Verwaltung aller Benutzerinhalte
  • Speicherverwaltung: Hinzufügen, Bearbeiten und Löschen von S3-Speicherdiensten
  • Berechtigungszuweisung: Erstellung und Berechtigungsverwaltung von API-Schlüsseln
  • Datenanalyse: Vollständiger Zugriff auf statistische Daten

API-Schlüssel-Berechtigungskontrolle

  • Textberechtigungen: Erstellen/Bearbeiten/Löschen von Textinhalten
  • Dateiberechtigungen: Hochladen/Verwalten/Löschen von Dateien
  • Speicherberechtigungen: Möglichkeit, bestimmte Speicherkonfigurationen auszuwählen
  • Lese-/Schreibtrennung: Kann schreibgeschützte oder Lese-Schreib-Berechtigungen festlegen
  • Zeitkontrolle: Benutzerdefinierte Gültigkeitsdauer (von Stunden bis Monaten)
  • Sicherheitsmechanismus: Automatische Ablauf- und manuelle Widerrufsfunktionen

💫 Systemfunktionen

  • Hohe Anpassungsfähigkeit: Responsives Design, Anpassung an Mobilgeräte und Desktops
  • Mehrsprachig: Chinesisch/Englisch zweisprachige Schnittstellenunterstützung
  • Visuelle Modi: Hell/Dunkel-Themenwechsel
  • Sichere Authentifizierung: JWT-basiertes Administrator-Authentifizierungssystem
  • Offline-Erfahrung: PWA-Unterstützung, ermöglicht Offline-Nutzung und Desktop-Installation

� Bereitstellungsanleitung

Voraussetzungen

Bevor Sie mit der Bereitstellung beginnen, stellen Sie bitte sicher, dass Sie Folgendes vorbereitet haben:

  • Cloudflare-Konto (erforderlich)
  • Bei Verwendung von R2: Aktivieren Sie den Cloudflare R2-Dienst und erstellen Sie einen Bucket (Zahlungsmethode erforderlich)
  • Bei Verwendung von Vercel: Registrieren Sie sich für ein Vercel-Konto
  • Konfigurationsinformationen für andere S3-Speicherdienste:
    • S3_ACCESS_KEY_ID
    • S3_SECRET_ACCESS_KEY
    • S3_BUCKET_NAME
    • S3_ENDPOINT
👉 Vollständige Bereitstellungsanleitung anzeigen

📑 Inhaltsverzeichnis


Action-Automatisierte Bereitstellung

Die Verwendung von GitHub Actions ermöglicht die automatische Bereitstellung der Anwendung nach dem Pushen von Code.

GitHub-Repository konfigurieren

  1. Forken oder klonen Sie das Repository https://github.com/ling-drag0n/CloudPaste
  2. Gehen Sie zu Ihren GitHub-Repository-Einstellungen
  3. Navigieren Sie zu Settings → Secrets and variables → Actions → New Repository secrets
  4. Fügen Sie die folgenden Secrets hinzu:
Secret NameErforderlichZweck
CLOUDFLARE_API_TOKENCloudflare API-Token (erfordert Workers, D1 und Pages-Berechtigungen)
CLOUDFLARE_ACCOUNT_IDCloudflare-Konto-ID
ENCRYPTION_SECRETSchlüssel zur Verschlüsselung sensibler Daten (falls nicht angegeben, wird einer automatisch generiert)

Cloudflare API-Token erhalten

  1. Besuchen Sie Cloudflare Dashboard

  2. Erstellen Sie ein neues API-Token

  3. Wählen Sie die Vorlage "Edit Cloudflare Workers" und fügen Sie D1-Datenbank-Bearbeitungsberechtigung hinzu

    D1

Backend-Automatisierte Bereitstellung

Forken Sie das Repository, füllen Sie die Secrets aus und führen Sie dann den Workflow aus!!! Die Bereitstellung wird automatisch ausgelöst, wenn Dateien im backend-Verzeichnis geändert und auf den main- oder master-Branch gepusht werden. Der Workflow verläuft wie folgt:

  1. Automatische Erstellung der D1-Datenbank (falls nicht vorhanden)
  2. Initialisierung der Datenbank mit schema.sql (Erstellung von Tabellen und Initialdaten)
  3. ENCRYPTION_SECRET-Umgebungsvariable setzen (aus GitHub Secrets oder automatisch generiert)
  4. Automatische Bereitstellung des Workers auf Cloudflare
  5. Es wird empfohlen, eine benutzerdefinierte Domain einzurichten, um die ursprüngliche Cloudflare-Domain zu ersetzen (ansonsten ist sie möglicherweise in bestimmten Regionen nicht erreichbar)

⚠️ Merken Sie sich Ihren Backend-Domainnamen

Frontend-Automatisierte Bereitstellung

Cloudflare Pages (Empfohlen)

Forken Sie das Repository, füllen Sie die Secrets aus und führen Sie dann den Workflow aus. Die Bereitstellung wird automatisch ausgelöst, wenn Dateien im frontend-Verzeichnis geändert und auf den main- oder master-Branch gepusht werden. Nach der Bereitstellung müssen Sie Umgebungsvariablen im Cloudflare Pages-Kontrollpanel setzen:

  1. Melden Sie sich bei Cloudflare Dashboard an

  2. Navigieren Sie zu Pages → Ihr Projekt (z.B. "cloudpaste-frontend")

  3. Klicken Sie auf "Settings" → "Environment variables"

  4. Fügen Sie die Umgebungsvariable hinzu:

    • Name: VITE_BACKEND_URL

    • Wert: Ihre Backend-Worker-URL (z.B. https://cloudpaste-backend.your-username.workers.dev) ohne abschließendes "/". Es wird empfohlen, eine benutzerdefinierte Worker-Backend-Domain zu verwenden.

    • Stellen Sie sicher, dass Sie den vollständigen Backend-Domainnamen im Format "https://xxxx.com" eingeben

  5. Wichtiger Schritt: Führen Sie dann den Frontend-Workflow erneut aus, um das Laden der Backend-Domain abzuschließen!!!

    test-1

Bitte folgen Sie den Schritten strikt, andernfalls schlägt das Laden der Backend-Domain fehl

Vercel

Für Vercel wird die Bereitstellung wie folgt empfohlen:

  1. Importieren Sie Ihr GitHub-Projekt nach dem Forken
  2. Konfigurieren Sie die Bereitstellungsparameter:
Framework Preset: Vite
Build Command: npm run build
Output Directory: dist
Install Command: npm install
  1. Konfigurieren Sie die folgenden Umgebungsvariablen: Geben Sie ein: VITE_BACKEND_URL und Ihre Backend-Domain
  2. Klicken Sie auf den "Deploy"-Button, um die Bereitstellung durchzuführen

☝️ Wählen Sie eine der oben genannten Methoden


Manuelle Bereitstellung

Backend-Manuelle Bereitstellung

  1. Klonen Sie das Repository
git clone https://github.com/ling-drag0n/CloudPaste.git
cd CloudPaste/backend
  1. Installieren Sie Abhängigkeiten

    npm install
    
  2. Melden Sie sich bei Cloudflare an

    npx wrangler login
    
  3. Erstellen Sie eine D1-Datenbank

    npx wrangler d1 create cloudpaste-db
    

    Notieren Sie sich die Datenbank-ID aus der Ausgabe.

  4. Ändern Sie die wrangler.toml-Konfiguration

    [[d1_databases]]
    binding = "DB"
    database_name = "cloudpaste-db"
    database_id = "YOUR_DATABASE_ID"
    
  5. Stellen Sie den Worker bereit

    npx wrangler deploy
    

    Notieren Sie sich die URL aus der Ausgabe; dies ist Ihre Backend-API-Adresse.

  6. Initialisieren Sie die Datenbank (automatisch) Besuchen Sie Ihre Worker-URL, um die Initialisierung auszulösen:

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

⚠️ Sicherheitshinweis: Bitte ändern Sie das Standard-Administratorpasswort unmittelbar nach der Systeminitialisierung (Benutzername: admin, Passwort: admin123).

Frontend-Manuelle Bereitstellung

Cloudflare Pages

  1. Bereiten Sie den Frontend-Code vor

    cd CloudPaste/frontend
    npm install
    
  2. Konfigurieren Sie Umgebungsvariablen Erstellen oder ändern Sie die .env.production-Datei:

    VITE_BACKEND_URL=https://cloudpaste-backend.your-username.workers.dev
    VITE_APP_ENV=production
    VITE_ENABLE_DEVTOOLS=false
    
  3. Bauen Sie das Frontend-Projekt

    npm run build
    

    Seien Sie vorsichtig beim Bauen! !

  4. Stellen Sie auf Cloudflare Pages bereit

    Methode 1: Über Wrangler CLI

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

    Methode 2: Über Cloudflare Dashboard

    1. Melden Sie sich bei Cloudflare Dashboard an
    2. Wählen Sie "Pages"
    3. Klicken Sie auf "Create a project" → "Direct Upload"
    4. Laden Sie Dateien aus dem dist-Verzeichnis hoch
    5. Legen Sie den Projektnamen fest (z.B. "cloudpaste-frontend")
    6. Klicken Sie auf "Save and Deploy"

Vercel

  1. Bereiten Sie den Frontend-Code vor

    cd CloudPaste/frontend
    npm install
    
  2. Installieren und melden Sie sich bei Vercel CLI an

    npm install -g vercel
    vercel login
    
  3. Konfigurieren Sie Umgebungsvariablen, wie für Cloudflare Pages

  4. Bauen und bereitstellen

    vercel --prod
    

    Folgen Sie den Anweisungen, um das Projekt zu konfigurieren.


ClawCloud CloudPaste Bereitstellungstutorial

10GB kostenloser Traffic pro Monat, nur für leichte Nutzung geeignet

Schritt 1:

Registrierungslink: Claw Cloud (kein #AFF) Keine Kreditkarte erforderlich, solange Ihr GitHub-Registrierungsdatum mehr als 180 Tage zurückliegt, erhalten Sie jeden Monat $5 Guthaben.

Schritt 2:

Nach der Registrierung klicken Sie auf der Startseite auf APP Launchpad und dann rechts oben auf "create app"

image.png

Schritt 3:

Zuerst stellen Sie das Backend bereit, wie in der Abbildung gezeigt (nur zur Veranschaulichung): image.png

Backend-Datenspeicherung befindet sich hier: image.png

Schritt 4:

Dann das Frontend, wie in der Abbildung gezeigt (nur zur Veranschaulichung): image.png

Die Bereitstellung ist abgeschlossen und einsatzbereit, benutzerdefinierte Domains können nach Bedarf konfiguriert werden
👉 Docker-Bereitstellungsanleitung

📑 Inhaltsverzeichnis


Docker-Kommandozeilen-Bereitstellung

Backend-Docker-Bereitstellung

CloudPaste-Backend kann schnell mit dem offiziellen Docker-Image bereitgestellt werden.

  1. Erstellen Sie ein Datenverzeichnis

    mkdir -p sql_data
    
  2. Führen Sie den Backend-Container aus

    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
    

    Notieren Sie sich die Bereitstellungs-URL (z.B. http://your-server-ip:8787), die für die Frontend-Bereitstellung benötigt wird.

⚠️ Sicherheitstipp: Passen Sie ENCRYPTION_SECRET unbedingt an und bewahren Sie es sicher auf, da dieser Schlüssel zur Verschlüsselung sensibler Daten verwendet wird.

Frontend-Docker-Bereitstellung

Das Frontend verwendet Nginx zum Bereitstellen und konfiguriert die Backend-API-Adresse beim Start.

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

⚠️ Hinweis: BACKEND_URL muss die vollständige URL enthalten (einschließlich Protokoll http:// oder https://) ⚠️ Sicherheitshinweis: Bitte ändern Sie das Standard-Administratorpasswort unmittelbar nach der Systeminitialisierung (Benutzername: admin, Passwort: admin123).

Docker-Image-Update

Wenn eine neue Version des Projekts veröffentlicht wird, können Sie Ihre Docker-Bereitstellung wie folgt aktualisieren:

  1. Laden Sie die neuesten Images herunter

    docker pull dragon730/cloudpaste-backend:latest
    docker pull dragon730/cloudpaste-frontend:latest
    
  2. Stoppen und entfernen Sie alte Container

    docker stop cloudpaste-backend cloudpaste-frontend
    docker rm cloudpaste-backend cloudpaste-frontend
    
  3. Starten Sie neue Container mit den gleichen Run-Befehlen wie oben (unter Beibehaltung des Datenverzeichnisses und der Konfiguration)

Docker-Compose-Ein-Klick-Bereitstellung

Die Verwendung von Docker Compose ermöglicht die Bereitstellung sowohl von Frontend- als auch Backend-Diensten mit einem Klick, was die einfachste empfohlene Methode ist.

  1. Erstellen Sie eine docker-compose.yml-Datei
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. Starten Sie die Dienste
docker-compose up -d

⚠️ Sicherheitshinweis: Bitte ändern Sie das Standard-Administratorpasswort unmittelbar nach der Systeminitialisierung (Benutzername: admin, Passwort: admin123).

  1. Greifen Sie auf die Dienste zu

Frontend: http://your-server-ip:80 Backend: http://your-server-ip:8787

Docker-Compose-Update

Wenn Sie auf eine neue Version aktualisieren müssen:

  1. Laden Sie die neuesten Images herunter

    docker-compose pull
    
  2. Erstellen Sie Container mit neuen Images neu (unter Beibehaltung von Datenvolumes)

    docker-compose up -d --force-recreate
    

💡 Tipp: Bei Konfigurationsänderungen müssen Sie möglicherweise Daten sichern und die docker-compose.yml-Datei ändern

Nginx-Reverse-Proxy-Beispiel

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;
    }
}

⚠️ Sicherheitstipp: Es wird empfohlen, HTTPS und einen Reverse-Proxy (wie Nginx) zu konfigurieren, um die Sicherheit zu erhöhen.

👉 S3 Cross-Origin-Konfigurationsanleitung

R2 API-Abruf und Cross-Origin-Konfiguration

  1. Melden Sie sich beim Cloudflare Dashboard an

  2. Klicken Sie auf R2 Storage und erstellen Sie einen Bucket.

  3. Erstellen Sie einen API-Token R2api R2rw

  4. Speichern Sie alle Daten nach der Erstellung; Sie werden sie später benötigen

  5. Konfigurieren Sie Cross-Origin-Regeln: Klicken Sie auf den entsprechenden Bucket, klicken Sie auf Einstellungen, bearbeiten Sie die CORS-Richtlinie wie unten gezeigt:

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

B2 API-Abruf und Cross-Origin-Konfiguration

  1. Wenn Sie kein B2-Konto haben, registrieren Sie zuerst eines, dann erstellen Sie einen Bucket. B2账号注册

  2. Klicken Sie in der Seitenleiste auf Application Key, klicken Sie auf Create Key und folgen Sie der Abbildung. B2key

  3. Konfigurieren Sie B2 Cross-Origin; die B2 Cross-Origin-Konfiguration ist komplexer, beachten Sie dies B2cors

  4. Sie können zuerst Option 1 oder 2 ausprobieren, gehen Sie zur Upload-Seite und prüfen Sie, ob Sie hochladen können. Wenn die F12-Konsole Cross-Origin-Fehler anzeigt, verwenden Sie Option 3. Für eine dauerhafte Lösung verwenden Sie direkt Option 3.

    B21

Bezüglich der Option 3-Konfiguration, da das Panel dies nicht konfigurieren kann, müssen Sie manuell konfigurieren, indem Sie das B2 CLI-Tool herunterladen. Weitere Details finden Sie unter: "https://docs.cloudreve.org/zh/usage/storage/b2".

Nach dem Herunterladen geben Sie im entsprechenden Download-Verzeichnis CMD die folgenden Befehle ein:

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-Konfiguration, Verwenden Sie ".\b2-windows.exe xxx", Python CLI wäre ähnlich:

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}]"

Ersetzen Sie mit Ihrem Bucket-Namen. Für allowedOrigins in der Cross-Origin-Erlaubnis können Sie basierend auf Ihren Bedürfnissen konfigurieren; hier erlaubt es alles.

  1. Cross-Origin-Konfiguration abgeschlossen

MinIO API-Zugriff und Cross-Origin-Konfiguration

  1. MinIO Server bereitstellen

    Verwenden Sie die folgende Docker Compose-Konfiguration (Referenz), um MinIO schnell bereitzustellen:

    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 # Admin-Benutzername
          - MINIO_ROOT_PASSWORD=minioadmin # Admin-Passwort
          - MINIO_BROWSER=on
          - MINIO_SERVER_URL=https://minio.example.com # S3 API-Zugriffs-URL
          - MINIO_BROWSER_REDIRECT_URL=https://console.example.com # Konsolen-Zugriffs-URL
        ports:
          - "9000:9000" # S3 API-Port
          - "9001:9001" # Konsolen-Port
        volumes:
          - ./data:/data
          - ./certs:/root/.minio/certs # SSL-Zertifikate (falls benötigt)
        restart: always
    

    Führen Sie docker-compose up -d aus, um den Dienst zu starten.

  2. Reverse-Proxy konfigurieren (Referenz)

    Um sicherzustellen, dass MinIO korrekt funktioniert, insbesondere Dateivorschauen, konfigurieren Sie den Reverse-Proxy ordnungsgemäß. Empfohlene OpenResty/Nginx-Einstellungen:

    MinIO S3 API Reverse-Proxy (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-Optimierung
        proxy_http_version 1.1;
        proxy_set_header Connection "";  # HTTP/1.1 Keepalive aktivieren
    
        # Kritisch: Behebt 403-Fehler & Vorschauprobleme
        proxy_cache off;
        proxy_buffering off;
        proxy_request_buffering off;
    
        # Keine Dateigrößenbeschränkung
        client_max_body_size 0;
    }
    

    MinIO Console Reverse-Proxy (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-Unterstützung
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    
        # Kritische Einstellungen
        proxy_cache off;
        proxy_buffering off;
    
        # Keine Dateigrößenbeschränkung
        client_max_body_size 0;
    }
    
  3. Auf Konsole zugreifen, um Buckets & Zugriffsschlüssel zu erstellen

    Detaillierte Konfiguration finden Sie in der offiziellen Dokumentation:
    https://min.io/docs/minio/container/index.html
    CN: https://min-io.cn/docs/minio/container/index.html

    minio-1

  4. Zusätzliche Konfiguration (Optional)

    Erlaubte Ursprünge müssen Ihre Frontend-Domain enthalten.
    minio-2

  5. MinIO in CloudPaste konfigurieren

    • Melden Sie sich im CloudPaste-Admin-Panel an
    • Gehen Sie zu "S3 Storage Settings" → "Add Storage Configuration"
    • Wählen Sie "Other S3-compatible service" als Anbieter
    • Geben Sie Details ein:
      • Name: Benutzerdefinierter Name
      • Endpoint URL: MinIO-Dienst-URL (z.B. https://minio.example.com)
      • Bucket Name: Vorab erstellter Bucket
      • Access Key ID: Ihr Access Key
      • Secret Key: Ihr Secret Key
      • Region: Leer lassen
      • Path-Style Access: MUSS AKTIVIERT WERDEN!
    • Klicken Sie auf "Test Connection" zur Überprüfung
    • Einstellungen speichern
  6. Fehlerbehebung

    • Hinweis: Wenn Sie Cloudflares CDN verwenden, müssen Sie möglicherweise proxy_set_header Accept-Encoding "identity" hinzufügen, und es gibt Caching-Probleme zu beachten. Es wird empfohlen, nur DNS-Auflösung zu verwenden.
    • 403-Fehler: Stellen Sie sicher, dass der Reverse-Proxy proxy_cache off & proxy_buffering off enthält
    • Vorschauprobleme: Überprüfen Sie, ob MINIO_SERVER_URL & MINIO_BROWSER_REDIRECT_URL korrekt gesetzt sind
    • Upload-Fehler: Überprüfen Sie die CORS-Einstellungen; erlaubte Ursprünge müssen die Frontend-Domain enthalten
    • Konsolen nicht erreichbar: Überprüfen Sie die WebSocket-Konfiguration, insbesondere Connection "upgrade"

Weitere S3-bezogene Konfigurationen folgen......

👉 WebDAV-Konfigurationsanleitung

WebDAV-Konfiguration und Nutzungsanleitung

CloudPaste bietet einfache WebDAV-Protokollunterstützung, mit der Sie Speicherbereiche als Netzwerklaufwerke einbinden können, um bequem über Dateimanager auf Dateien zuzugreifen und sie zu verwalten.

WebDAV-Dienst Grundinformationen

  • WebDAV Basis-URL: https://your-backend-domain/dav
  • Unterstützte Authentifizierungsmethoden:
    • Basic Authentication (Benutzername+Passwort)
  • Unterstützte Berechtigungstypen:
    • Administrator-Konten - Volle Betriebsberechtigungen
    • API-Schlüssel - Erfordert aktivierte Mount-Berechtigung (mount_permission)

Berechtigungskonfiguration

1. Administrator-Konto-Zugriff

Verwenden Sie Administrator-Benutzername und Passwort, um direkt auf den WebDAV-Dienst zuzugreifen:

  • Benutzername: Administrator-Benutzername
  • Passwort: Administrator-Passwort

2. API-Schlüssel-Zugriff (Empfohlen)

Für eine sicherere Zugriffsmethode wird empfohlen, einen dedizierten API-Schlüssel zu erstellen:

  1. Melden Sie sich an der Verwaltungsoberfläche an
  2. Navigieren Sie zu "API Key Management"
  3. Erstellen Sie einen neuen API-Schlüssel, stellen Sie sicher, dass "Mount Permission" aktiviert ist
  4. Nutzungsmethode:
    • Benutzername: API-Schlüsselwert
    • Passwort: Derselbe API-Schlüsselwert wie der Benutzername

NGINX Reverse-Proxy-Konfiguration

Wenn Sie NGINX als Reverse-Proxy verwenden, müssen spezifische WebDAV-Konfigurationen hinzugefügt werden, um sicherzustellen, dass alle WebDAV-Methoden korrekt funktionieren:

# 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;
}

Häufige Probleme und Lösungen

  1. Verbindungsprobleme:

    • Bestätigen Sie, dass das WebDAV-URL-Format korrekt ist
    • Überprüfen Sie, ob die Authentifizierungsdaten gültig sind
    • Prüfen Sie, ob der API-Schlüssel Mount-Berechtigung hat
  2. Berechtigungsfehler:

    • Bestätigen Sie, dass das Konto die erforderlichen Berechtigungen hat
    • Administrator-Konten sollten volle Berechtigungen haben
    • API-Schlüssel müssen speziell Mount-Berechtigung aktiviert haben
  3. ⚠️⚠️ WebDAV-Upload-Probleme:

    • Im presigned Upload-Modus muss auf die Cross-Origin-Konfiguration des entsprechenden S3-Speichers geachtet werden
    • Im automatischen Empfehlungsmodus von WebDAV verwenden Dateien kleiner als 10MB den direkten Upload-Modus, Dateien zwischen 10-50MB den Multipart-Upload-Modus und Dateien größer als 50MB den presigned Upload-Modus
    • Bezüglich Cloudflare Worker-Upload-Beschränkungen wird empfohlen, presigned oder direkten Upload-Modus zu verwenden und Multipart-Uploads zu vermeiden
    • Für Docker-Bereitstellungen achten Sie einfach auf die nginx-Proxy-Konfiguration, jeder Upload-Modus ist akzeptabel
    • Windows, Raidrive und andere Clients unterstützen Drag-and-Drop-Uploads noch nicht, alles andere funktioniert

🔧 Tech Stack

Frontend

  • Framework: Vue.js 3 + Vite
  • Styling: TailwindCSS
  • Editor: Vditor
  • Internationalisierung: Vue-i18n
  • Charts: Chart.js + Vue-chartjs

Backend

  • Runtime: Cloudflare Workers
  • Framework: Hono
  • Datenbank: Cloudflare D1 (SQLite)
  • Speicher: Mehrere S3-kompatible Dienste (unterstützt R2, B2, AWS S3)
  • Authentifizierung: JWT-Tokens + API-Schlüssel

💻 Entwicklung

API-Dokumentation

API-Dokumentation

Server Direct File Upload API-Dokumentation - Detaillierte Beschreibung der Server-Direktdatei-Upload-Schnittstelle

Lokale Entwicklungsumgebung einrichten

  1. Projekt-Repository klonen

    git clone https://github.com/ling-drag0n/cloudpaste.git
    cd cloudpaste
    
  2. Backend einrichten

    cd backend
    npm install
    # D1-Datenbank initialisieren
    wrangler d1 create cloudpaste-db
    wrangler d1 execute cloudpaste-db --file=./schema.sql
    
  3. Frontend einrichten

    cd frontend
    npm install
    
  4. Umgebungsvariablen konfigurieren

    • Im backend-Verzeichnis erstellen Sie eine wrangler.toml-Datei, um Entwicklungsumgebungsvariablen festzulegen
    • Im frontend-Verzeichnis konfigurieren Sie die .env.development-Datei, um Frontend-Umgebungsvariablen festzulegen
  5. Entwicklungsserver starten

    # Backend
    cd backend
    npm run dev
    
    # Frontend (in einem anderen Terminal)
    cd frontend
    npm run dev
    

Projektstruktur

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
    └── ...

Benutzerdefinierter Docker-Build

Wenn Sie Docker-Images anpassen oder während der Entwicklung debuggen möchten, können Sie diese Schritte zum manuellen Build befolgen:

  1. Backend-Image erstellen

    # Im Projektstammverzeichnis ausführen
    docker build -t cloudpaste-backend:custom -f docker/backend/Dockerfile .
    
    # Das benutzerdefinierte Image ausführen
    docker run -d --name cloudpaste-backend \
      -p 8787:8787 \
      -v $(pwd)/sql_data:/data \
      -e ENCRYPTION_SECRET=development-test-key \
      cloudpaste-backend:custom
    
  2. Frontend-Image erstellen

    # Im Projektstammverzeichnis ausführen
    docker build -t cloudpaste-frontend:custom -f docker/frontend/Dockerfile .
    
    # Das benutzerdefinierte Image ausführen
    docker run -d --name cloudpaste-frontend \
      -p 80:80 \
      -e BACKEND_URL=http://localhost:8787 \
      cloudpaste-frontend:custom
    
  3. Entwicklungsumgebung Docker Compose

    Erstellen Sie eine docker-compose.dev.yml-Datei:

    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"
    

    Starten Sie die Entwicklungsumgebung:

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

📄 Lizenz

Apache License 2.0

Dieses Projekt ist unter der Apache License 2.0 lizenziert - siehe LICENSE für Details.

❤️ Beitrag

  • Sponsoring: Die Pflege eines Projekts ist nicht einfach. Wenn Ihnen dieses Projekt gefällt, erwägen Sie, dem Autor eine kleine Ermutigung zu geben. Jeder Teil Ihrer Unterstützung ist meine Motivation, weiterzumachen~

Star History

Star History Chart

Wenn Sie das Projekt gut finden, hoffe ich, dass Sie einen kostenlosen Star✨✨ geben können, Vielen Dank!