📸 デモ • ✨ 機能 • 🚀 デプロイガイド • 🔧 技術スタック • 💻 開発 • 📄 ライセンス
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
デプロイを開始する前に、以下を準備してください:
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_BUCKET_NAME
S3_ENDPOINT
GitHub Actionsを使用すると、コードプッシュ後にアプリケーションを自動的にデプロイできます。
Secret名 | 必須 | 目的 |
---|---|---|
CLOUDFLARE_API_TOKEN | ✅ | Cloudflare APIトークン(Workers、D1、Pages権限が必要) |
CLOUDFLARE_ACCOUNT_ID | ✅ | CloudflareアカウントID |
ENCRYPTION_SECRET | ❌ | 機密データ暗号化キー(提供されない場合、自動生成) |
Cloudflareダッシュボードにアクセス
新しいAPIトークンを作成
"Edit Cloudflare Workers"テンプレートを選択し、D1データベース編集権限を追加
リポジトリをフォークし、secretsを入力後、ワークフローを実行!!!
backend
ディレクトリ内のファイルが変更され、main
またはmaster
ブランチにプッシュされると、デプロイが自動的にトリガーされます。ワークフローは以下のように進行します:
⚠️ バックエンドドメイン名を覚えておいてください
リポジトリをフォークし、secretsを入力後、ワークフローを実行。
frontend
ディレクトリ内のファイルが変更され、main
またはmaster
ブランチにプッシュされると、デプロイが自動的にトリガーされます。デプロイ後、Cloudflare Pagesコントロールパネルで環境変数を設定する必要があります:
Cloudflareダッシュボードにログイン
Pages → プロジェクト(例: "cloudpaste-frontend")に移動
"Settings" → "Environment variables"をクリック
環境変数を追加:
名前: VITE_BACKEND_URL
値: バックエンドWorker URL(例: https://cloudpaste-backend.your-username.workers.dev
)末尾の"/"なし。カスタムWorkerバックエンドドメインの使用を推奨。
必ず完全なバックエンドドメイン名を"https://xxxx.com"形式で入力してください
重要なステップ: その後、フロントエンドワークフローを再度実行し、バックエンドドメインの読み込みを完了!!!
手順を厳密に守ってください、そうしないとバックエンドドメインの読み込みに失敗します
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アドレス。
データベースを初期化(自動) Worker URLにアクセスして初期化をトリガー:
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ダッシュボード経由
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
上記と同じrunコマンドで新しいコンテナを起動(データディレクトリと設定を保持)
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ダッシュボードにログイン
R2ストレージをクリックし、バケットを作成
APIトークンを作成
作成後、すべてのデータを保存(後で必要になります)
クロスオリジンルールを設定:対応するバケットをクリックし、設定→CORSポリシーを以下のように編集
[
{
"AllowedOrigins": ["http://localhost:3000", "https://replace-with-your-frontend-domain"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
B2アカウントをお持ちでない場合、まず登録してからバケットを作成
サイドバーでApplication Keyをクリック、Create Keyをクリックし、図示に従って設定
B2クロスオリジンを設定(B2のクロスオリジン設定は複雑なので注意)
まずオプション1または2を試し、アップロードページでアップロード可能か確認。F12コンソールにクロスオリジンエラーが表示される場合はオプション3を使用。恒久的な解決策として直接オプション3を使用することも可能
オプション3の設定について、パネルでは設定できないため、B2 CLIツールをダウンロードして手動で設定する必要があります。詳細は「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}]"
をバケット名に置き換えてください。クロスオリジン許可のallowedOriginsは必要に応じて設定可能(ここではすべてを許可しています)。
MinIOサーバーのデプロイ
以下の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 # S3 APIアクセスURL
- 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 ""; # HTTP/1.1 keepaliveを有効化
# 重要:403エラー&プレビュー問題の解決
proxy_cache off;
proxy_buffering off;
proxy_request_buffering off;
# ファイルサイズ制限なし
client_max_body_size 0;
}
MinIOコンソールリバースプロキシ(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;
}
コンソールにアクセスしてバケット&アクセスキーを作成
詳細設定については公式ドキュメントを参照:
https://min.io/docs/minio/container/index.html
CN: https://min-io.cn/docs/minio/container/index.html
追加設定(オプション)
許可されたオリジンにはフロントエンドドメインを含める必要があります。
CloudPasteでMinIOを設定
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設定を追加する必要があります:
# 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ファイルを参照してください。
プロジェクトが良いと思ったら、無料のスター✨✨をいただけると嬉しいです。どうもありがとうございます!