Refactor Nginx configuration and update project dependencies
- Cleaned up the Nginx configuration for the Coolify deployment, ensuring proper formatting and organization. - Updated the `pyproject.toml` file to maintain consistent formatting. - Reformatted the `requirements.txt` file for better readability while keeping the dependencies unchanged.
This commit is contained in:
1 parent
3b8c30c289
commit
a4b874598d
88 files changed
+9766
-9766
No files matched your search
+175
-175
@@ -1,175 +1,175 @@
|
||||
# Coolify Deployment Guide
|
||||
|
||||
This guide covers deploying `ai.allucanget.biz` using [Coolify](https://coolify.io) with Nixpacks from the repository `https://git.allucanget.biz/allucanget/ai.allucanget.biz.git`.
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
The application consists of two Python services:
|
||||
|
||||
| Service | Framework | Port | Description |
|
||||
| -------- | ----------------- | ----- | ------------------------------------------ |
|
||||
| Backend | FastAPI + uvicorn | 12015 | REST API, auth, AI generation, DuckDB |
|
||||
| Frontend | Flask + gunicorn | 12016 | SSR web UI, session auth, proxy to backend |
|
||||
|
||||
Coolify's built-in reverse proxy routes traffic:
|
||||
|
||||
- `/api/*` → Backend (port 12015)
|
||||
- `/` → Frontend (port 12016)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A Coolify instance (self-hosted or Cloud)
|
||||
- Git repository pushed to `https://git.allucanget.biz/allucanget/ai.allucanget.biz.git`
|
||||
- Domain configured to point to your Coolify server
|
||||
|
||||
## Step 1: Create Backend Service
|
||||
|
||||
1. In Coolify, click **Add Resource** → **Deploy a new resource** → **Git**
|
||||
2. Connect your Git repository (`git.allucanget.biz`)
|
||||
3. Select the `ai.allucanget.biz` repository
|
||||
4. Choose the `main` branch
|
||||
5. Set **Build Pack** to `nixpacks`
|
||||
6. Set **Base Directory** to `/backend` - this tells Nixpacks to look in the `backend/` subdirectory for `requirements.txt` and the Python application
|
||||
7. Set **Ports Exposed** to `12015`
|
||||
8. Set **Start Command** to:
|
||||
|
||||
```txt
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 12015
|
||||
```
|
||||
|
||||
9. Click **Create Resource**
|
||||
|
||||
> **Important:** Nixpacks copies the **contents** of the Base Directory to `/app/` in the container. When Base Directory is `/backend`, the `backend/` folder wrapper is removed — only `app/`, `tests/`, and `requirements.txt` are copied. Therefore the start command uses `app.main:app` (not `backend.app.main:app`).
|
||||
|
||||
### Backend Environment Variables
|
||||
|
||||
Add these as **Runtime** environment variables in Coolify:
|
||||
|
||||
| Variable | Description | Example |
|
||||
| -------------------- | ------------------------------------ | ------------------------------------ |
|
||||
| `OPENROUTER_API_KEY` | OpenRouter API key for AI generation | `sk-or-v1-...` |
|
||||
| `JWT_SECRET` | Secret key for JWT token signing | Generate with `openssl rand -hex 32` |
|
||||
| `APP_URL` | Public URL of the backend | `https://api.ai.allucanget.biz` |
|
||||
| `APP_NAME` | Application name | `All You Can GET AI` |
|
||||
| `CORS_ORIGINS` | Comma-separated allowed origins | `https://ai.allucanget.biz` |
|
||||
|
||||
## Step 2: Create Frontend Service
|
||||
|
||||
1. In Coolify, click **Add Resource** → **Deploy a new resource** → **Git**
|
||||
2. Select the same repository
|
||||
3. Choose the `main` branch
|
||||
4. Set **Build Pack** to `nixpacks`
|
||||
5. Set **Base Directory** to `/frontend` - this tells Nixpacks to look in the `frontend/` subdirectory for `requirements.txt` and the Python application
|
||||
6. Set **Ports Exposed** to `12016`
|
||||
7. Set **Start Command** to:
|
||||
|
||||
```txt
|
||||
gunicorn app.main:app --bind 0.0.0.0:12016 --workers 2 --timeout 120
|
||||
```
|
||||
|
||||
8. Click **Create Resource**
|
||||
|
||||
> **Note:** Nixpacks will automatically detect and install only the production dependencies from `requirements.txt`.
|
||||
> **Important:** Nixpacks copies the **contents** of the Base Directory to `/app/` in the container. When Base Directory is `/frontend`, the `frontend/` folder wrapper is removed — only `app/`, `tests/`, and `requirements.txt` are copied. Therefore the start command uses `app.main:app` (not `frontend.app.main:app`).
|
||||
|
||||
### Frontend Environment Variables
|
||||
|
||||
Add these as **Runtime** environment variables in Coolify:
|
||||
|
||||
| Variable | Description | Example |
|
||||
| ------------------ | ----------------------------------------- | --------------------------------------------------------------- |
|
||||
| `FLASK_SECRET_KEY` | Flask session cookie signing key | Generate with `openssl rand -hex 32` |
|
||||
| `BACKEND_URL` | Internal URL to reach the backend service | `http://localhost:12015` (or use Coolify's internal networking) |
|
||||
|
||||
## Step 3: Configure Reverse Proxy
|
||||
|
||||
Coolify provides a built-in reverse proxy. Configure routing rules:
|
||||
|
||||
### Backend Proxy Rules
|
||||
|
||||
- **Domain**: `api.ai.allucanget.biz` (or subdomain of your choice)
|
||||
- **Port**: `12015`
|
||||
- **Path**: `/api/*` → forward to backend
|
||||
|
||||
### Frontend Proxy Rules
|
||||
|
||||
- **Domain**: `ai.allucanget.biz`
|
||||
- **Port**: `12016`
|
||||
- **Path**: `/` → forward to frontend
|
||||
|
||||
## Step 4: SSL/TLS
|
||||
|
||||
Enable HTTPS in Coolify for both services:
|
||||
|
||||
1. Go to each service's settings
|
||||
2. Enable **Auto HTTPS** (Let's Encrypt)
|
||||
3. Configure domain names
|
||||
4. Coolify automatically handles certificate renewal
|
||||
|
||||
## Step 5: Persistent Storage (Optional)
|
||||
|
||||
If you want to persist DuckDB data:
|
||||
|
||||
1. In Coolify, go to the **Backend** service
|
||||
2. Navigate to **Persistent Storage**
|
||||
3. Add a volume mount:
|
||||
- **Host Path**: `/data` (or any path on the host)
|
||||
- **Container Path**: `/app/data`
|
||||
- **Type**: `Bind Mount` or `Volume`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Backend healthcheck stays unhealthy
|
||||
|
||||
- Check backend logs in Coolify
|
||||
- Verify `OPENROUTER_API_KEY` and `JWT_SECRET` are set
|
||||
- Verify volume mount at `/app/data` is writable
|
||||
|
||||
### Backend won't start
|
||||
|
||||
- Check that `OPENROUTER_API_KEY` is set
|
||||
- Verify `JWT_SECRET` is a sufficiently long random string
|
||||
- Check logs in Coolify's **Logs** tab
|
||||
|
||||
### Frontend can't reach backend
|
||||
|
||||
- Ensure `BACKEND_URL` points to the correct internal URL
|
||||
- If both services are on the same Coolify server, use `http://localhost:12015`
|
||||
- Check that the backend service is running and healthy
|
||||
|
||||
### CORS errors
|
||||
|
||||
- Set `CORS_ORIGINS` to include your frontend domain
|
||||
- Example: `https://ai.allucanget.biz`
|
||||
|
||||
### Nixpacks build fails
|
||||
|
||||
- Verify the base directory is correct (`/backend` or `/frontend`)
|
||||
- Check that `requirements.txt` exists in the base directory
|
||||
- Review build logs in Coolify
|
||||
|
||||
## Environment Variable Summary
|
||||
|
||||
All required environment variables:
|
||||
|
||||
| Variable | Service | Required |
|
||||
| -------------------- | -------- | ------------------------------------- |
|
||||
| `OPENROUTER_API_KEY` | Backend | Yes |
|
||||
| `JWT_SECRET` | Backend | Yes |
|
||||
| `APP_URL` | Backend | Yes |
|
||||
| `APP_NAME` | Backend | No (defaults to "All You Can GET AI") |
|
||||
| `CORS_ORIGINS` | Backend | Yes |
|
||||
| `FLASK_SECRET_KEY` | Frontend | Yes |
|
||||
| `BACKEND_URL` | Frontend | Yes |
|
||||
|
||||
## Deployment Checklist
|
||||
|
||||
- [ ] Repository pushed to Git
|
||||
- [ ] Backend service created with correct base directory (`/backend`)
|
||||
- [ ] Backend environment variables configured
|
||||
- [ ] Frontend service created with correct base directory (`/frontend`)
|
||||
- [ ] Frontend environment variables configured
|
||||
- [ ] SSL certificates enabled
|
||||
- [ ] Domain names configured
|
||||
- [ ] Health checks passing
|
||||
- [ ] Logs reviewed for errors
|
||||
# Coolify Deployment Guide
|
||||
|
||||
This guide covers deploying `ai.allucanget.biz` using [Coolify](https://coolify.io) with Nixpacks from the repository `https://git.allucanget.biz/allucanget/ai.allucanget.biz.git`.
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
The application consists of two Python services:
|
||||
|
||||
| Service | Framework | Port | Description |
|
||||
| -------- | ----------------- | ----- | ------------------------------------------ |
|
||||
| Backend | FastAPI + uvicorn | 12015 | REST API, auth, AI generation, DuckDB |
|
||||
| Frontend | Flask + gunicorn | 12016 | SSR web UI, session auth, proxy to backend |
|
||||
|
||||
Coolify's built-in reverse proxy routes traffic:
|
||||
|
||||
- `/api/*` → Backend (port 12015)
|
||||
- `/` → Frontend (port 12016)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A Coolify instance (self-hosted or Cloud)
|
||||
- Git repository pushed to `https://git.allucanget.biz/allucanget/ai.allucanget.biz.git`
|
||||
- Domain configured to point to your Coolify server
|
||||
|
||||
## Step 1: Create Backend Service
|
||||
|
||||
1. In Coolify, click **Add Resource** → **Deploy a new resource** → **Git**
|
||||
2. Connect your Git repository (`git.allucanget.biz`)
|
||||
3. Select the `ai.allucanget.biz` repository
|
||||
4. Choose the `main` branch
|
||||
5. Set **Build Pack** to `nixpacks`
|
||||
6. Set **Base Directory** to `/backend` - this tells Nixpacks to look in the `backend/` subdirectory for `requirements.txt` and the Python application
|
||||
7. Set **Ports Exposed** to `12015`
|
||||
8. Set **Start Command** to:
|
||||
|
||||
```txt
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 12015
|
||||
```
|
||||
|
||||
9. Click **Create Resource**
|
||||
|
||||
> **Important:** Nixpacks copies the **contents** of the Base Directory to `/app/` in the container. When Base Directory is `/backend`, the `backend/` folder wrapper is removed — only `app/`, `tests/`, and `requirements.txt` are copied. Therefore the start command uses `app.main:app` (not `backend.app.main:app`).
|
||||
|
||||
### Backend Environment Variables
|
||||
|
||||
Add these as **Runtime** environment variables in Coolify:
|
||||
|
||||
| Variable | Description | Example |
|
||||
| -------------------- | ------------------------------------ | ------------------------------------ |
|
||||
| `OPENROUTER_API_KEY` | OpenRouter API key for AI generation | `sk-or-v1-...` |
|
||||
| `JWT_SECRET` | Secret key for JWT token signing | Generate with `openssl rand -hex 32` |
|
||||
| `APP_URL` | Public URL of the backend | `https://api.ai.allucanget.biz` |
|
||||
| `APP_NAME` | Application name | `All You Can GET AI` |
|
||||
| `CORS_ORIGINS` | Comma-separated allowed origins | `https://ai.allucanget.biz` |
|
||||
|
||||
## Step 2: Create Frontend Service
|
||||
|
||||
1. In Coolify, click **Add Resource** → **Deploy a new resource** → **Git**
|
||||
2. Select the same repository
|
||||
3. Choose the `main` branch
|
||||
4. Set **Build Pack** to `nixpacks`
|
||||
5. Set **Base Directory** to `/frontend` - this tells Nixpacks to look in the `frontend/` subdirectory for `requirements.txt` and the Python application
|
||||
6. Set **Ports Exposed** to `12016`
|
||||
7. Set **Start Command** to:
|
||||
|
||||
```txt
|
||||
gunicorn app.main:app --bind 0.0.0.0:12016 --workers 2 --timeout 120
|
||||
```
|
||||
|
||||
8. Click **Create Resource**
|
||||
|
||||
> **Note:** Nixpacks will automatically detect and install only the production dependencies from `requirements.txt`.
|
||||
> **Important:** Nixpacks copies the **contents** of the Base Directory to `/app/` in the container. When Base Directory is `/frontend`, the `frontend/` folder wrapper is removed — only `app/`, `tests/`, and `requirements.txt` are copied. Therefore the start command uses `app.main:app` (not `frontend.app.main:app`).
|
||||
|
||||
### Frontend Environment Variables
|
||||
|
||||
Add these as **Runtime** environment variables in Coolify:
|
||||
|
||||
| Variable | Description | Example |
|
||||
| ------------------ | ----------------------------------------- | --------------------------------------------------------------- |
|
||||
| `FLASK_SECRET_KEY` | Flask session cookie signing key | Generate with `openssl rand -hex 32` |
|
||||
| `BACKEND_URL` | Internal URL to reach the backend service | `http://localhost:12015` (or use Coolify's internal networking) |
|
||||
|
||||
## Step 3: Configure Reverse Proxy
|
||||
|
||||
Coolify provides a built-in reverse proxy. Configure routing rules:
|
||||
|
||||
### Backend Proxy Rules
|
||||
|
||||
- **Domain**: `api.ai.allucanget.biz` (or subdomain of your choice)
|
||||
- **Port**: `12015`
|
||||
- **Path**: `/api/*` → forward to backend
|
||||
|
||||
### Frontend Proxy Rules
|
||||
|
||||
- **Domain**: `ai.allucanget.biz`
|
||||
- **Port**: `12016`
|
||||
- **Path**: `/` → forward to frontend
|
||||
|
||||
## Step 4: SSL/TLS
|
||||
|
||||
Enable HTTPS in Coolify for both services:
|
||||
|
||||
1. Go to each service's settings
|
||||
2. Enable **Auto HTTPS** (Let's Encrypt)
|
||||
3. Configure domain names
|
||||
4. Coolify automatically handles certificate renewal
|
||||
|
||||
## Step 5: Persistent Storage (Optional)
|
||||
|
||||
If you want to persist DuckDB data:
|
||||
|
||||
1. In Coolify, go to the **Backend** service
|
||||
2. Navigate to **Persistent Storage**
|
||||
3. Add a volume mount:
|
||||
- **Host Path**: `/data` (or any path on the host)
|
||||
- **Container Path**: `/app/data`
|
||||
- **Type**: `Bind Mount` or `Volume`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Backend healthcheck stays unhealthy
|
||||
|
||||
- Check backend logs in Coolify
|
||||
- Verify `OPENROUTER_API_KEY` and `JWT_SECRET` are set
|
||||
- Verify volume mount at `/app/data` is writable
|
||||
|
||||
### Backend won't start
|
||||
|
||||
- Check that `OPENROUTER_API_KEY` is set
|
||||
- Verify `JWT_SECRET` is a sufficiently long random string
|
||||
- Check logs in Coolify's **Logs** tab
|
||||
|
||||
### Frontend can't reach backend
|
||||
|
||||
- Ensure `BACKEND_URL` points to the correct internal URL
|
||||
- If both services are on the same Coolify server, use `http://localhost:12015`
|
||||
- Check that the backend service is running and healthy
|
||||
|
||||
### CORS errors
|
||||
|
||||
- Set `CORS_ORIGINS` to include your frontend domain
|
||||
- Example: `https://ai.allucanget.biz`
|
||||
|
||||
### Nixpacks build fails
|
||||
|
||||
- Verify the base directory is correct (`/backend` or `/frontend`)
|
||||
- Check that `requirements.txt` exists in the base directory
|
||||
- Review build logs in Coolify
|
||||
|
||||
## Environment Variable Summary
|
||||
|
||||
All required environment variables:
|
||||
|
||||
| Variable | Service | Required |
|
||||
| -------------------- | -------- | ------------------------------------- |
|
||||
| `OPENROUTER_API_KEY` | Backend | Yes |
|
||||
| `JWT_SECRET` | Backend | Yes |
|
||||
| `APP_URL` | Backend | Yes |
|
||||
| `APP_NAME` | Backend | No (defaults to "All You Can GET AI") |
|
||||
| `CORS_ORIGINS` | Backend | Yes |
|
||||
| `FLASK_SECRET_KEY` | Frontend | Yes |
|
||||
| `BACKEND_URL` | Frontend | Yes |
|
||||
|
||||
## Deployment Checklist
|
||||
|
||||
- [ ] Repository pushed to Git
|
||||
- [ ] Backend service created with correct base directory (`/backend`)
|
||||
- [ ] Backend environment variables configured
|
||||
- [ ] Frontend service created with correct base directory (`/frontend`)
|
||||
- [ ] Frontend environment variables configured
|
||||
- [ ] SSL certificates enabled
|
||||
- [ ] Domain names configured
|
||||
- [ ] Health checks passing
|
||||
- [ ] Logs reviewed for errors
|
||||
Reference in new issue
Block a user