feat: Complete Fiscal Clone deployment package

- SEC filings extraction (10-K, 10-Q, 8-K)
- Portfolio analytics with real-time prices
- Watchlist management
- NextAuth.js authentication
- OpenClaw AI integration
- PostgreSQL database with auto P&L calculations
- Elysia.js backend (Bun runtime)
- Next.js 14 frontend (TailwindCSS + Recharts)
- Production-ready Docker configurations
This commit is contained in:
Francesco
2026-02-16 03:49:32 +00:00
commit da58289eb1
39 changed files with 4070 additions and 0 deletions

592
DEPLOY_VIA_GITEA.md Normal file
View File

@@ -0,0 +1,592 @@
# Deploy Fiscal Clone via Gitea to Coolify
Deploy your fiscal-clone project using your self-hosted Git service.
## Quick Start
### 1. Push to Gitea
```bash
cd /data/workspace/fiscal-clone
git init
git add .
git commit -m "Initial commit: Fiscal Clone production ready"
git remote add gitea https://git.b11studio.xyz/francy51/fiscal-clone.git
git push -u gitea main
```
### 2. Deploy to Coolify
In Coolify dashboard:
1. **Create New Application**
- Type: Docker Compose
- Name: `fiscal-clone`
- Source: Git Repository
- Repository URL: `git@git.b11studio.xyz:francy51/fiscal-clone.git`
- Branch: `main`
- Build Context: `/`
- Docker Compose File: `docker-compose.yml`
2. **Configure Environment Variables**
```
DATABASE_URL=postgres://postgres:your-password@postgres:5432/fiscal
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your-password
POSTGRES_DB=fiscal
JWT_SECRET=your-jwt-secret-here
GITHUB_ID=your-github-oauth-id
GITHUB_SECRET=your-github-oauth-secret
GOOGLE_ID=your-google-oauth-id
GOOGLE_SECRET=your-google-oauth-secret
NEXT_PUBLIC_API_URL=https://api.fiscal.yourdomain.com
```
3. **Configure Domains**
```
Frontend: https://fiscal.b11studio.xyz
Backend API: https://api.fiscal.b11studio.xyz
```
4. **Deploy**
Click "Deploy" button in Coolify
## Configuration Details
### Backend Application
**Service 1: PostgreSQL**
- Image: postgres:16-alpine
- Database Name: fiscal
- User: postgres
- Password: (set in environment)
- Volumes: postgres_data
**Service 2: Backend**
- Build Context: ./backend
- Dockerfile: Dockerfile
- Ports: 3001
- Environment: All backend env vars
- Health Check: /api/health
- Depends On: postgres
**Service 3: Frontend**
- Build Context: ./frontend
- Dockerfile: Dockerfile
- Ports: 3000
- Environment: NEXT_PUBLIC_API_URL
- Depends On: backend
### Traefik Configuration
Coolify automatically configures routing. Labels included in docker-compose.yml.
## Environment Variables Reference
### Required Variables
| Variable | Description | Example |
|-----------|-------------|----------|
| DATABASE_URL | PostgreSQL connection string | postgres://postgres:password@postgres:5432/fiscal |
| JWT_SECRET | JWT signing secret | generate-secure-random-string |
| NEXT_PUBLIC_API_URL | Backend API URL | https://api.fiscal.yourdomain.com |
### OAuth Configuration
**GitHub OAuth:**
- Create OAuth app: https://github.com/settings/developers
- Callback URL: https://fiscal.b11studio.xyz/api/auth/callback/github
**Google OAuth:**
- Create OAuth app: https://console.cloud.google.com/apis/credentials
- Callback URL: https://fiscal.b11studio.xyz/api/auth/callback/google
## Deployment Steps Detailed
### Step 1: Prepare Repository
```bash
# Navigate to project
cd /data/workspace/fiscal-clone
# Initialize Git
git init
# Add all files
git add .
# Create initial commit
git commit -m "feat: Initial release
- SEC filings extraction with EDGAR API
- Portfolio analytics with Yahoo Finance
- NextAuth.js authentication (GitHub, Google, Email)
- Real-time stock price updates
- PostgreSQL with automatic P&L calculations
- Recharts visualizations
- OpenClaw AI integration endpoints"
# Add remote
git remote add gitea https://git.b11studio.xyz/francy51/fiscal-clone.git
# Push to Gitea
git push -u gitea main
```
### Step 2: Create Gitea Repository
Option A: Use Gitea web interface
1. Access: https://git.b11studio.xyz
2. Login (admin account)
3. Create repository: `fiscal-clone`
4. Make it private (recommended)
5. Clone HTTPS URL: `https://git.b11studio.xyz/francy51/fiscal-clone.git`
Option B: Create via API
```bash
# Create repo using Gitea API
curl -X POST \
-H "Authorization: token YOUR_GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "fiscal-clone",
"description": "Fiscal.ai clone - Financial filings and portfolio analytics",
"private": true,
"auto_init": false
}' \
https://git.b11studio.xyz/api/v1/user/repos
```
### Step 3: Configure Coolify Application
1. **Navigate to Coolify Dashboard**
- https://coolify.b11studio.xyz
2. **Create Application**
- Click "New Application"
- Name: `fiscal-clone-full-stack`
- Type: Docker Compose
- Source: Git Repository
3. **Git Configuration**
- Repository URL: `git@git.b11studio.xyz:francy51/fiscal-clone.git`
- Branch: `main`
- Docker Compose File: `docker-compose.yml`
- Build Context: `/`
- Environment ID: Select or create new
4. **Add Environment Variables**
- Click "Add Variable"
- Add each required variable from reference table
5. **Configure Domains**
- Click "Domains"
- Add domain: `fiscal.b11studio.xyz`
- Select frontend service
- Generate SSL certificate
6. **Deploy**
- Click "Deploy" button
- Monitor deployment logs
## Post-Deployment Verification
### 1. Check Application Status
In Coolify dashboard:
- Verify all services are running
- Check deployment logs
- Verify health checks passing
### 2. Test Endpoints
```bash
# Test backend health
curl https://api.fiscal.b11studio.xyz/api/health
# Test frontend
curl https://fiscal.b11studio.xyz
# Test API documentation
curl https://api.fiscal.b11studio.xyz/swagger
```
### 3. Run Database Migrations
```bash
# In Coolify terminal
docker-compose exec backend bun run db:migrate
```
### 4. Verify Database Connection
```bash
# Check database connectivity
docker-compose exec backend bun -e "console.log(await db\`SELECT 1\`)"
```
### 5. Create First User
1. Access frontend: https://fiscal.b11studio.xyz
2. Click "Sign Up"
3. Create account
4. Log in
### 6. Add to Watchlist
1. Go to "Watchlist"
2. Add a stock (e.g., AAPL)
3. Wait for SEC filings to be fetched
## Troubleshooting
### Deployment Fails
**Issue:** Docker build fails
```
Check:
- Build context is correct (/)
- docker-compose.yml syntax is valid
- Environment variables are set
```
**Solution:**
- Redeploy application
- Check Coolify logs
- Verify Gitea repository is accessible
### Database Connection Failed
**Issue:** Backend cannot connect to database
```
Check:
- DATABASE_URL format is correct
- PostgreSQL service is running
- Network connectivity between containers
```
**Solution:**
- Restart PostgreSQL container
- Verify database credentials
- Check environment variables
### Frontend Cannot Connect to Backend
**Issue:** API errors in browser console
```
Check:
- NEXT_PUBLIC_API_URL is set correctly
- Backend is running
- CORS is configured correctly
```
**Solution:**
- Check backend logs
- Verify frontend environment variables
- Clear browser cache
### Authentication Fails
**Issue:** OAuth providers not working
```
Check:
- OAuth client IDs and secrets are correct
- Callback URLs match Coolify domain
- Redirect URIs are correct
```
**Solution:**
- Update OAuth configuration in Coolify
- Verify GitHub/Google console settings
- Check NextAuth configuration
## CI/CD with Gitea Actions
### Enable Gitea Actions in Coolify
In Coolify environment variables for backend:
```
GITEA__actions__ENABLED=true
GITEA__actions__DEFAULT_ACTIONS_URL=https://git.b11studio.xyz
```
### Create Workflow File
Create `.gitea/workflows/deploy.yml` in fiscal-clone:
```yaml
name: Deploy to Coolify
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Coolify Deployment
run: |
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${{ secrets.COOLIFY_API_TOKEN }}}" \
-d '{
"resource_id": "your-resource-id",
"source": "main"
}' \
https://coolify.b11studio.xyz/api/v1/resources/${{ secrets.COOLIFY_RESOURCE_ID }}/deploy
```
### Store Secrets
Add secrets in Gitea:
1. `COOLIFY_API_TOKEN` - Your Coolify API token
2. `COOLIFY_RESOURCE_ID` - The Coolify resource ID
## Monitoring & Alerts
### Set Up Discord Alerts
1. Create Discord webhook URL for deployment channel
2. Add to fiscal-clone monitoring
### Health Check Endpoint
```
GET /api/health
Response:
{
"status": "ok",
"timestamp": "2026-02-15T23:51:00.000Z",
"version": "1.0.0",
"database": "connected"
}
```
## Maintenance
### Updates
```bash
# Pull latest changes from Gitea
git pull origin main
# Re-deploy in Coolify (automatic webhook triggers)
# Or manual redeploy
```
### Backups
Coolify provides automated PostgreSQL backups. To manually backup:
```bash
# Export database
docker-compose exec postgres pg_dump -U postgres -d fiscal > backup.sql
# Restore database
docker-compose exec -T postgres psql -U postgres -d fiscal < backup.sql
```
### Monitoring
Set up monitoring in `/data/workspace/memory/coolify-integration.md`:
```markdown
## Applications
- fiscal-backend - https://api.fiscal.b11studio.xyz
- fiscal-frontend - https://fiscal.b11studio.xyz
## Monitoring
- API health: /api/health
- Database status: Coolify metrics
- Deployment logs: Coolify dashboard
## Alerts
- Discord: #alerts channel
- Email: Optional SMTP configuration
```
## Security Considerations
### Database
- PostgreSQL 16-alpine (latest stable)
- Strong random password required
- No exposed ports (only internal)
- Coolify provides SSL/TLS
### API
- JWT tokens with 30-day expiration
- CORS configured for allowed origins
- Rate limiting recommended (add Nginx/Cloudflare)
### Authentication
- Secure OAuth callback URLs
- HTTPS only
- 2FA recommended for sensitive operations
### Secrets Management
Never commit secrets to repository. Use Coolify environment variables:
❌ DO NOT COMMIT:
- API keys
- Database passwords
- JWT secrets
- OAuth client secrets
- SMTP credentials
✅ DO USE:
- Coolify environment variables
- Encrypted secrets in Coolify
- Separate config files for local development
## Scaling
### Horizontal Scaling
Add more application replicas:
1. In Coolify application settings
2. Click "Resources"
3. Adjust replica count
### Database Scaling
For high load, consider:
1. Separate PostgreSQL instance
2. Connection pooling optimization
3. Read replicas for queries
### Caching
Redis is included in docker-compose.yml. Configure application caching:
```javascript
// In backend services
const cache = {
get: async (key) => {
// Try Redis first
try {
const value = await redis.get(key);
return value;
} catch (err) {
return null;
}
},
set: async (key, value, ttl = 3600) => {
await redis.setex(key, ttl, value);
}
};
```
## Rollback Procedure
### Rollback to Previous Version
1. In Gitea, tag previous version:
```bash
git tag v1.0.0
git push origin v1.0.0
```
2. In Coolify, select previous commit:
- Application Settings → Deployments
- Select previous deployment
- Click "Rollback"
### Emergency Rollback
If critical issues occur:
1. Stop application in Coolify
2. Deploy known good version
3. Restore database from backup
4. Verify functionality
5. Document incident
## API Usage
### SEC Filings API
```
GET /api/filings/{ticker}
GET /api/filings
POST /api/filings/refresh/{ticker}
```
### Portfolio API
```
GET /api/portfolio/{userId}
GET /api/portfolio/{userId}/summary
POST /api/portfolio
PUT /api/portfolio/{id}
DELETE /api/portfolio/{id}
```
### Watchlist API
```
GET /api/watchlist/{userId}
POST /api/watchlist
DELETE /api/watchlist/{id}
```
## Support
### Documentation Links
- **Fiscal Clone README:** `/data/workspace/fiscal-clone/README.md`
- **Gitea Docs:** https://docs.gitea.io/en-us/
- **Coolify Docs:** https://docs.coolify.io/
- **NextAuth Docs:** https://next-auth.js.org/
- **Elysia Docs:** https://elysiajs.com/
- **PostgreSQL:** https://www.postgresql.org/docs/
### Troubleshooting Commands
```bash
# Check container logs
docker-compose logs -f backend
# Check all containers
docker-compose ps
# Restart specific service
docker-compose restart backend
# Check database connection
docker-compose exec backend bun run db:migrate
# View resource usage
docker stats
# Clean up resources
docker system prune -f
```
## Success Criteria
Deployment is successful when:
- [ ] All containers are running
- [ ] Health check passes: `/api/health`
- [ ] Frontend loads at domain
- [ ] Can create account and login
- [ ] Can add stocks to watchlist
- [ ] SEC filings are being fetched
- [ ] Database migrations completed
- [ ] No errors in logs
---
**Deployment Guide Version:** 1.0
**Last Updated:** 2026-02-15
**Status:** Ready for deployment