- 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
12 KiB
Deploy Fiscal Clone via Gitea to Coolify
Deploy your fiscal-clone project using your self-hosted Git service.
Quick Start
1. Push to Gitea
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:
-
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
-
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
- Configure Domains
Frontend: https://fiscal.b11studio.xyz
Backend API: https://api.fiscal.b11studio.xyz
- 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
# 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
- Access: https://git.b11studio.xyz
- Login (admin account)
- Create repository:
fiscal-clone - Make it private (recommended)
- Clone HTTPS URL:
https://git.b11studio.xyz/francy51/fiscal-clone.git
Option B: Create via API
# 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
-
Navigate to Coolify Dashboard
-
Create Application
- Click "New Application"
- Name:
fiscal-clone-full-stack - Type: Docker Compose
- Source: Git Repository
-
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
- Repository URL:
-
Add Environment Variables
- Click "Add Variable"
- Add each required variable from reference table
-
Configure Domains
- Click "Domains"
- Add domain:
fiscal.b11studio.xyz - Select frontend service
- Generate SSL certificate
-
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
# 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
# In Coolify terminal
docker-compose exec backend bun run db:migrate
4. Verify Database Connection
# Check database connectivity
docker-compose exec backend bun -e "console.log(await db\`SELECT 1\`)"
5. Create First User
- Access frontend: https://fiscal.b11studio.xyz
- Click "Sign Up"
- Create account
- Log in
6. Add to Watchlist
- Go to "Watchlist"
- Add a stock (e.g., AAPL)
- 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:
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:
COOLIFY_API_TOKEN- Your Coolify API tokenCOOLIFY_RESOURCE_ID- The Coolify resource ID
Monitoring & Alerts
Set Up Discord Alerts
- Create Discord webhook URL for deployment channel
- 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
# 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:
# 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:
## 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:
- In Coolify application settings
- Click "Resources"
- Adjust replica count
Database Scaling
For high load, consider:
- Separate PostgreSQL instance
- Connection pooling optimization
- Read replicas for queries
Caching
Redis is included in docker-compose.yml. Configure application caching:
// 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
-
In Gitea, tag previous version:
git tag v1.0.0 git push origin v1.0.0 -
In Coolify, select previous commit:
- Application Settings → Deployments
- Select previous deployment
- Click "Rollback"
Emergency Rollback
If critical issues occur:
- Stop application in Coolify
- Deploy known good version
- Restore database from backup
- Verify functionality
- 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
# 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