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.28), 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.28
Follow the steps below to set up CloudVault locally or on a Kubernetes cluster:
git clone https://github.com/yourusername/cloudvault.git
cd cloudvault
cd backend
cp .env.example .env
go mod tidy
go run server.go
The backend will be available at http://localhost:8080
cd frontend
npm install
npm run dev
The frontend will be available at http://localhost:3000
To containerize and rup the app using Docker
Backend:
docker build -t cloudvault-backend ./backend
Frontend:
docker build -t cloudvault-frontend ./frontend
docker 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-frontend
Access the app at http://localhost:3000
ibmcloud login
ibmcloud ks create cluster free --name cloudvault-cluster --zone <zone-name>
ibmcloud ks config --cluster cloudvault-cluster
1. 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:latest
Before 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.yml
kubectl get pods
kubectl get svc
http://<EXTERNAL-IP>
http://<YOUR-DOMAIN>
- Third-Party Cloud Storage
- User activity and file usage
- Real-time collaboration on shared files
- File Encryption