{"id":32797258,"url":"https://github.com/arcxteam/cloudflare-storage","last_synced_at":"2026-05-08T06:04:47.173Z","repository":{"id":322608568,"uuid":"1086929202","full_name":"arcxteam/cloudflare-storage","owner":"arcxteam","description":"UI/UX Homepages Backend-Frontend for Private Storage R2 Buckets by Cloudflare","archived":false,"fork":false,"pushed_at":"2026-05-03T04:52:27.000Z","size":255,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T06:29:04.667Z","etag":null,"topics":["aws-s3","backend-server","cloud-storage","cloudflare","cloudflare-bucket","cloudflare-r2","cloudflare-storage","docker","frontend-web","google-storage-bucket","private-storage","private-storage-bucket","public-storage","r2-bucket","r2-object-storage","storage-api","storage-service"],"latest_commit_sha":null,"homepage":"https://arcxteam.github.io/cloudflare-storage/frontend","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arcxteam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-31T05:42:23.000Z","updated_at":"2026-05-03T04:52:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arcxteam/cloudflare-storage","commit_stats":null,"previous_names":["arcxteam/cloudflare-storage"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arcxteam/cloudflare-storage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcxteam%2Fcloudflare-storage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcxteam%2Fcloudflare-storage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcxteam%2Fcloudflare-storage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcxteam%2Fcloudflare-storage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arcxteam","download_url":"https://codeload.github.com/arcxteam/cloudflare-storage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcxteam%2Fcloudflare-storage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32769110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T02:36:36.067Z","status":"ssl_error","status_checked_at":"2026-05-08T02:36:07.210Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-s3","backend-server","cloud-storage","cloudflare","cloudflare-bucket","cloudflare-r2","cloudflare-storage","docker","frontend-web","google-storage-bucket","private-storage","private-storage-bucket","public-storage","r2-bucket","r2-object-storage","storage-api","storage-service"],"created_at":"2025-11-06T00:00:35.088Z","updated_at":"2026-05-08T06:04:47.168Z","avatar_url":"https://github.com/arcxteam.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eSupercharge Your Buckets Files with Cloudflare R2 Storage\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA Comprehensive Guide: How to Set Up Private Storage with Cloudflare R2 Buckets and S3 API Compatibility\u003c/strong\u003e\u003cbr\u003e\n  \u003cem\u003eCraft your personalized storage buckets, forging a realm of effortless file management and securely by Cloudflare R2\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Release-v1.2.0-FF0069\" alt=\"Version\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/R2-Cloudflare-orange\" alt=\"cloudflare\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Amazon_S3-AWS-brightgreen\" alt=\"AWS\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Buckets-Private_Storage-blue\" alt=\"Storage\"\u003e\n  \u003ca href=\"https://github.com/arcxteam/cloudflare-storage/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-green\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Overview\n\n\u003cmark\u003e**Vision \u0026 Architecture.**\u003c/mark\u003e This project is a robust, high-performance private file management ecosystem engineered with a focus on absolute flexibility and security. Conceptualized, architected, and designed by **0xgrey**, it delivers a highly compatible and intuitive cloud storage interface powered by Cloudflare R2. By bridging the gap between streamlined user experience and enterprise-grade security protocols, the project anticipates the evolving needs of personal data management while ensuring a seamless, low-latency operational environment.\n\n### Key Features\n\n- ❇️ **Full-Stack Architecture**: End-to-end deployment (Flask/Nginx) featuring a fully responsive, desktop-and-mobile-optimized UI/UX.\n- 📊 **Real-Time Analytics**: Live API data tracking for bucket utilization, active progress bars, storage capacity metrics, and monthly bandwidth reset monitoring (e.g., 10GB quotas).\n- 📁 **Advanced File Management**: High-speed chunked uploads (1GB+ scalable), real-time filename search, download analytics, secure sharing links, and direct RAW streaming modes.\n- 🎨 **Dynamic Media Interface**: Intelligent media handling supporting extensive file-type icons, rich preview effects, and a responsive sliding-grid layout.\n- 🧩 **Universal S3 Compatibility**: Built on the robust Amazon S3 API (`boto3`) ensuring seamless deployment, high-throughput streaming, and interoperability across cloud providers.\n- 🗑️ **Lifecycle \u0026 Cleanup (Trash \u0026 Burn)**: Comprehensive state management with global bucket wipe capabilities, preventing orphaned data and maintaining R2 integrity.\n- 🐳 **Containerized Infrastructure**: Production-ready Docker environment featuring a dual-proxy setup, highly optimized zero-cache Nginx configurations, and strict isolation.\n- ☁️ **Cloudflare R2 Backbone**: Powered by Cloudflare's distributed edge infrastructure for zero-egress, high-availability private data management.\n- 🔐 **Zero-Trust Security Gate**: Formidable authentication barrier utilizing timing-safe passwords, strict HttpOnly/Secure JWT sessions, proactive rate-limiting, and hardened HTTP security headers.\n\n### **Preview Frontend Web UI Dashboard**\n\n\u003e https://arcxteam.github.io/cloudflare-storage/frontend/\n\n**Password:** `project123`\n\n## Requirements\n\n\u003cp\u003e\n  \u003cimg src=\"https://img.shields.io/badge/VPS_Server-232F3E?style=for-the-badge\u0026logo=digitalocean\u0026logoColor=red\" alt=\"VPS\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Linux-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black\" alt=\"Linux\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Docker-2CA5E0?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Cloudflare-orange?style=for-the-badge\u0026logo=cloudflare\u0026logoColor=white\" alt=\"Cloudflare\"\u003e\n\u003c/p\u003e\n\n## **Project Structure**\n\n```diff\ncloudflare-storage/\n├── .gitignore\n├── .dockerignore\n├── .env.example\n├── docker-compose.yml\n├── backend/\n+   ├── README.md           # Guides delete buckets R2/AWS-S3\n│   ├── Dockerfile\n│   ├── requirements.txt\n│   ├── app.py\n│   ├── delete_buckets.py\n│   └── data/\n│       └── .gitkeep\n├── frontend/\n│   ├── Dockerfile\n│   ├── nginx.conf.template # Enhanced for reverse proxy nginx + cloudflare\n│   ├── index.html\n│   ├── login.html\n│   ├── style.css\n│   ├── script.js\n│   └── src/\n│       └── favicon.ico\n├── docs/\n+   ├── README.md          # Guides main host nginx + template\n│   └── /etc/nginx/sites-available/your-domain\n│\n├── LICENSE\n└── README.md\n```\n\n## **Quick Start**\n### 1. Prerequisites\n\n**Signup \u0026 Securely Cloudflare Access**\n- Dashboard R2 settings → https://dash.cloudflare.com/?to=/:account/r2/overview\n- Buy domain up to you (Recommended for use an infra cloudflare)\n- Free tier is limit Per/month 10GB (resetting)\n\n**Install Docker \u0026 Compose** \u003cmark\u003eif not already installed\u003c/mark\u003e\n\u003e Instal docker is optional, if you don't have.. try securely\n\n```\ncurl -sSL https://raw.githubusercontent.com/arcxteam/succinct-prover/refs/heads/main/docker.sh | sudo bash\n```\n\n### 2. Clone Repository\n\n```\ngit clone https://github.com/arcxteam/cloudflare-storage.git\ncd cloudflare-storage\n```\n\n#### **Configure Environment**\n\u003e Create edit \u0026 save configuration file\n\n```bash\ncp .env.example .env\nnano .env\n```\n\u003e Example config environment variable\n\n```diff\nR2_ACCOUNT_ID=YOUR_ACCOUNT_ID\nR2_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID\nR2_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY\nR2_BUCKET_NAME=YOUR_NAME_CREATE_BUCKETS\n+ Enabled (Public Development URL or Custom Domains, Create Record A sub-sub-domain)\nR2_PUBLIC_URL=https://pub-xxxxx.r2.dev or https://sub-sub-your-domain.com\n\n# NOTE: Choose one, personal access web-ui dashboard (upload/download)\n+ Option A: IP Public server\nPUBLIC_BASE_URL=http://your-ip-address\n\n+ Option B: Localnetwork (VSCode/Codespaces/etc)\nPUBLIC_BASE_URL=http://localhost\n\n+ Option C: Custom domains\nPUBLIC_BASE_URL=https://your-domain.com or sub-domain\n\n+ Auth Security (admin login for web UI dashboard)\nADMIN_PASSWORD=Password-Here\n+ Auto-generated if not set\nAUTH_SECRET_KEY=your-random-secret-key\nAUTH_SESSION_HOURS=24\n```\n\n### Create Buckets\n1. **Access Dashboard Cloudflare**\n2. **Chosee Storage \u0026 database** → **R2 Object Storage** →  **Overview**\n3. **Create bucket**\n4. **Add Detail Bucket:**\n     - **Bucket name**: Create unique\n     - **Location**: Automatic\n5. **Save → Create bucket**\n\n### Create R2 API token\n1. Return to **R2**, then select **Manage R2 API tokens**.\n2. Select **Create Account API Tokens**.\n3. In **Permissions**, select **Object Read \u0026 Write**.\n4. In **Specify bucket(s)**, choose *Apply to specific buckets only*. Select the bucket you created.\n5. For **TTL** default is **forever** or Define how long this token will stay active:\n6. For **Client IP Address Filtering** no have action default is blank/null\n7. Select **Create API Token**.\n8. Copy the **Access Key ID**, **Secret Access Key**, and endpoint URL values. You will not be able to access these values again.\n9. Select **Finish**.\n\n### Config CORS Policy\n\u003e 1. Use mode Custom Domain (Production)\n- **Policy name**: `web-app-cors`\n- **Allowed origins**: `https://your-domain`\n- **Allowed methods**: Pilih `GET`, `POST`, `PUT`, `DELETE`, `HEAD`\n- **Allowed headers**: `*`\n- **Max age seconds**: `86400`\n- **Click \"Add policy or save\"`**\n\u003e 2. Use mode Localhost/Development\n- **Policy name**: `dev-cors-policy`\n- **Allowed origins**: `http://localhost:5000, http://127.0.0.1:5000`\n- **Other are same** \u0026 **TLS 1.3** optional\n\n\u003cmark\u003eChoose one CORS above, a format JSON\u003c/mark\u003e\n```json\n[\n  {\n    \"AllowedOrigins\": [\"https://your-domain\", \"http://localhost:5000\", \"http://127.0.0.1:5000\"],\n    \"AllowedMethods\": [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"HEAD\"],\n    \"AllowedHeaders\": [\"*\"],\n    \"MaxAgeSeconds\": 86400\n  }\n]\n```\n\n### 3. Build and Start\n\u003e Starting running\n\n```\ndocker compose up --build -d\n```\n\n\u003e Monitor logs \u0026 stop\n\n```\ndocker compose logs -f\n# docker compose down\n```\n\n## Security: Admin Portal Authentication\n\nThis project includes a built-in **admin login portal** to protect your private storage from unauthorized access. When anyone visits the web UI, they must enter the admin password before accessing the dashboard.\n\n### How It Works\n\n| Layer | Protection |\n|-------|------------|\n| **Nginx** | `auth_request` blocks all pages/API without valid session |\n| **Backend** | JWT token in `HttpOnly` cookie (invisible to JavaScript/DevTools) |\n| **Rate Limit** | Max 5 login attempts per 15 minutes per IP |\n| **Headers** | CSP, X-Frame-Options DENY, XSS Protection, no-cache |\n\n### Configuration\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `ADMIN_PASSWORD` | ✅ Yes | Your admin login password (plain text in `.env`) |\n| `AUTH_SECRET_KEY` | ❌ Optional | JWT signing key. **Auto-generated** if empty, but session resets on container restart. Set for persistence |\n| `AUTH_SESSION_HOURS` | ❌ Optional | Login session duration in hours (default: `24`) |\n\n\n### Change Password\n\n```bash\nnano .env\n# Edit: ADMIN_PASSWORD=YourNewPassword\ndocker compose up -d --build\n```\n\n### Generate AUTH_SECRET_KEY (optional)\n\n```bash\npython3 -c \"import secrets; print(secrets.token_hex(64))\"\n# Copy the output to AUTH_SECRET_KEY in .env\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcxteam%2Fcloudflare-storage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farcxteam%2Fcloudflare-storage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcxteam%2Fcloudflare-storage/lists"}