Initial commit from template
This commit is contained in:
262
README.md
Normal file
262
README.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# asd
|
||||
|
||||
ads
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Framework:** Next.js 15 (App Router)
|
||||
- **Language:** TypeScript
|
||||
- **Styling:** Tailwind CSS
|
||||
- **UI Components:** Spartan UI
|
||||
- **Database & Auth:** Supabase
|
||||
- **Code Quality:** ESLint + Prettier
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 20 or higher
|
||||
- pnpm 8 or higher (recommended) or npm
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Copy environment variables
|
||||
cp .env.example .env.local
|
||||
|
||||
# Update .env.local with your Supabase credentials
|
||||
```
|
||||
|
||||
### Development
|
||||
|
||||
```bash
|
||||
# Run development server
|
||||
pnpm dev
|
||||
|
||||
# Open http://localhost:3000
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
# Create production build
|
||||
pnpm build
|
||||
|
||||
# Start production server
|
||||
pnpm start
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
project-1766459980010-q6lr8s01b/
|
||||
├── app/ # Next.js app router pages
|
||||
│ ├── layout.tsx # Root layout
|
||||
│ ├── page.tsx # Homepage
|
||||
│ └── globals.css # Global styles
|
||||
├── components/ # React components
|
||||
│ └── ui/ # UI components
|
||||
├── lib/ # Utility functions
|
||||
│ ├── supabase.ts # Supabase client
|
||||
│ └── utils.ts # Helper functions
|
||||
├── public/ # Static assets
|
||||
└── ...config files
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Create a `.env.local` file with:
|
||||
|
||||
```env
|
||||
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
||||
```
|
||||
|
||||
## Scripts
|
||||
|
||||
- `pnpm dev` - Start development server
|
||||
- `pnpm build` - Create production build
|
||||
- `pnpm start` - Start production server
|
||||
- `pnpm lint` - Run ESLint
|
||||
- `pnpm format` - Format code with Prettier
|
||||
|
||||
## Deployment
|
||||
|
||||
This template comes with production-ready Docker and Kubernetes configurations.
|
||||
|
||||
### Docker Deployment
|
||||
|
||||
#### Build Docker Image
|
||||
|
||||
```bash
|
||||
# Build the image
|
||||
docker build -t lumina-app:latest .
|
||||
|
||||
# Run locally
|
||||
docker run -p 3000:3000 --env-file .env.local lumina-app:latest
|
||||
```
|
||||
|
||||
#### Docker Compose (Recommended for local testing)
|
||||
|
||||
```bash
|
||||
# Start all services (app + postgres + redis)
|
||||
docker-compose up -d
|
||||
|
||||
# View logs
|
||||
docker-compose logs -f app
|
||||
|
||||
# Stop services
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
#### Push to Harbor Registry
|
||||
|
||||
```bash
|
||||
# Tag image for Harbor
|
||||
docker tag lumina-app:latest harbor.advisori.de/lumina/project-1766459980010-q6lr8s01b:latest
|
||||
|
||||
# Login to Harbor
|
||||
docker login harbor.advisori.de
|
||||
|
||||
# Push image
|
||||
docker push harbor.advisori.de/lumina/project-1766459980010-q6lr8s01b:latest
|
||||
```
|
||||
|
||||
### Kubernetes Deployment
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
- Kubernetes cluster (1.25+)
|
||||
- kubectl configured
|
||||
- Helm 3.x installed
|
||||
- Harbor registry access
|
||||
|
||||
#### Deploy with Helm
|
||||
|
||||
```bash
|
||||
# Navigate to helm chart
|
||||
cd helm/lumina-app
|
||||
|
||||
# Create namespace
|
||||
kubectl create namespace lumina-apps
|
||||
|
||||
# Create Harbor pull secret
|
||||
kubectl create secret docker-registry harbor-registry-secret \
|
||||
--docker-server=harbor.advisori.de \
|
||||
--docker-username=your-username \
|
||||
--docker-password=your-password \
|
||||
--namespace=lumina-apps
|
||||
|
||||
# Create application secrets
|
||||
kubectl create secret generic lumina-app-secrets \
|
||||
--from-literal=DATABASE_URL="your-database-url" \
|
||||
--from-literal=SUPABASE_URL="your-supabase-url" \
|
||||
--from-literal=SUPABASE_ANON_KEY="your-anon-key" \
|
||||
--namespace=lumina-apps
|
||||
|
||||
# Install/Upgrade with Helm
|
||||
helm upgrade --install project-1766459980010-q6lr8s01b . \
|
||||
--namespace lumina-apps \
|
||||
--set image.repository=harbor.advisori.de/lumina/project-1766459980010-q6lr8s01b \
|
||||
--set image.tag=latest \
|
||||
--set ingress.hosts[0].host=project-1766459980010-q6lr8s01b.advisori.de \
|
||||
--set ingress.tls[0].hosts[0]=project-1766459980010-q6lr8s01b.advisori.de
|
||||
```
|
||||
|
||||
#### Customize Deployment
|
||||
|
||||
Edit `helm/lumina-app/values.yaml` to customize:
|
||||
|
||||
- **Replicas**: Number of pods (default: 2)
|
||||
- **Resources**: CPU/Memory limits
|
||||
- **Autoscaling**: Min/Max replicas and thresholds
|
||||
- **Ingress**: Domain and TLS settings
|
||||
- **Environment**: Add custom env variables
|
||||
- **Persistence**: Enable persistent storage
|
||||
|
||||
#### Monitor Deployment
|
||||
|
||||
```bash
|
||||
# Check pods
|
||||
kubectl get pods -n lumina-apps
|
||||
|
||||
# View logs
|
||||
kubectl logs -f deployment/project-1766459980010-q6lr8s01b -n lumina-apps
|
||||
|
||||
# Check ingress
|
||||
kubectl get ingress -n lumina-apps
|
||||
|
||||
# Port forward for testing
|
||||
kubectl port-forward svc/project-1766459980010-q6lr8s01b 3000:80 -n lumina-apps
|
||||
```
|
||||
|
||||
#### Scaling
|
||||
|
||||
```bash
|
||||
# Manual scaling
|
||||
kubectl scale deployment project-1766459980010-q6lr8s01b --replicas=5 -n lumina-apps
|
||||
|
||||
# Horizontal Pod Autoscaler (enabled by default)
|
||||
kubectl get hpa -n lumina-apps
|
||||
```
|
||||
|
||||
#### Update Deployment
|
||||
|
||||
```bash
|
||||
# Build and push new image
|
||||
docker build -t harbor.advisori.de/lumina/project-1766459980010-q6lr8s01b:v1.1.0 .
|
||||
docker push harbor.advisori.de/lumina/project-1766459980010-q6lr8s01b:v1.1.0
|
||||
|
||||
# Update with new image
|
||||
helm upgrade project-1766459980010-q6lr8s01b ./helm/lumina-app \
|
||||
--namespace lumina-apps \
|
||||
--set image.tag=v1.1.0 \
|
||||
--reuse-values
|
||||
|
||||
# Rollback if needed
|
||||
helm rollback project-1766459980010-q6lr8s01b -n lumina-apps
|
||||
```
|
||||
|
||||
### CI/CD Integration
|
||||
|
||||
The template includes configurations for automated deployments:
|
||||
|
||||
- **Gitea Actions**: Auto-build on push to main
|
||||
- **Harbor Webhook**: Trigger K8s deployment on new image
|
||||
- **Helm Chart**: Version-controlled infrastructure
|
||||
|
||||
### Health Checks
|
||||
|
||||
The application exposes a health endpoint at `/api/health` for:
|
||||
|
||||
- Kubernetes liveness probes
|
||||
- Readiness probes
|
||||
- Load balancer health checks
|
||||
|
||||
Create `app/api/health/route.ts` if not exists:
|
||||
|
||||
```typescript
|
||||
export async function GET() {
|
||||
return Response.json({ status: 'healthy' }, { status: 200 });
|
||||
}
|
||||
```
|
||||
|
||||
## Learn More
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs)
|
||||
- [Supabase Documentation](https://supabase.com/docs)
|
||||
- [Spartan UI Documentation](https://www.spartan.ng/)
|
||||
- [Tailwind CSS Documentation](https://tailwindcss.com/docs)
|
||||
- [Kubernetes Documentation](https://kubernetes.io/docs)
|
||||
- [Helm Documentation](https://helm.sh/docs)
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
---
|
||||
|
||||
**Generated by Lumina** - AI-Powered Development Platform by [advisori](https://advisori.de)
|
||||
Reference in New Issue
Block a user