CloudVault is a secure cloud storage solution that allows users to upload, store, and share files with ease.
This project was built to help me learn Golang and enhance my backend development skills.
- Frontend: React, Next.js, TailwindCSS, Shadcn UI
- Backend: Golang (1.22), GraphQL
- Database: PostgreSQL 17 @ NeonDB (using GORM)
- User Authentication: Secure login and signup with JWT.
- File Upload & Storage: Upload and store files in the cloud.
- File Sharing: Share files easily with others via secure links.
- Responsive UI: Clean, modern, and responsive user interface.
Before setting up the app, ensure you have the following installed:
- Docker (to build and run the application)
- kubectl (for Kubernetes management, if deploying to a cluster)
- IBM Cloud CLI (for managing IBM Kubernetes cluster)
- Node.js (latest version, compatible with Next.js)
- Golang 1.22
Follow the steps below to set up CloudVault locally or on a Kubernetes cluster:
git clone https://github.com/robertdluigi/cloudvault.git
cd cloudvaultcd backendcp .env.example .envgo mod tidy
go run server.goThe backend will be available at http://localhost:8080
cd frontendnpm installnpm run devThe frontend will be available at http://localhost:3000
To containerize and rup the app using Docker
Backend:
docker build -t cloudvault-backend ./backendFrontend:
docker build -t cloudvault-frontend ./frontenddocker network create cloudvault-network
docker run -d --name cloudvault-backend --network cloudvault-network -o 8080:8080 cloudvault-backend
docker run -d --name cloudvault-frontend --network cloudvault-network -o 3000:3000 cloudvault-frontendAccess the app at http://localhost:3000
ibmcloud loginibmcloud ks create cluster free --name cloudvault-cluster --zone <zone-name>ibmcloud ks config --cluster cloudvault-cluster1. Build Docker Images and push them to a container registry (e.g. Docker Hub or IBM Container Registry):
docker tag cloudvault-backend <your-registry>/cloudvault-backend:latest
docker push <your registry>/cloudvault-backend:latest
docker tag cloudvault-frontend <your-registry>/cloudvault-frontend:latest
docker push <your registry>/cloudvault-frontend:latestBefore running this, open the files and edit the registry name and the environment variables
kubectl apply -f k8s/backend=deployment.yml
kubectl apply -f k8s/backend-service.yml
kubectl apply -f k8s/frontend-deployment.yml
kubectl apply -f k8s/frontend-service.ymlkubectl get pods
kubectl get svchttp://<EXTERNAL-IP>http://<YOUR-DOMAIN>- Third-Party Cloud Storage
- User activity and file usage
- Real-time collaboration on shared files
- File Encryption