Initial commit: VRBattles API
This commit is contained in:
138
DEPLOY.md
Normal file
138
DEPLOY.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Deploying VRBattles API with Dokploy
|
||||
|
||||
## Prerequisites
|
||||
- Dokploy installed on your server
|
||||
- Git repository (Gitea, GitHub, GitLab, etc.)
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Step 1: Push to Git
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "Add production deployment configs"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Step 2: Create Project in Dokploy
|
||||
|
||||
1. Open Dokploy dashboard
|
||||
2. Click **"Create Project"** → Give it a name (e.g., "VRBattles")
|
||||
3. Click **"Add Service"** → Select **"Compose"**
|
||||
|
||||
### Step 3: Configure the Compose Service
|
||||
|
||||
1. **Source**: Select your Git provider and repository
|
||||
2. **Branch**: `main` (or your default branch)
|
||||
3. **Compose Path**: `docker-compose.prod.yml`
|
||||
|
||||
### Step 4: Set Environment Variables
|
||||
|
||||
In Dokploy's Environment tab, add these **required** variables:
|
||||
|
||||
| Variable | Example | Description |
|
||||
|----------|---------|-------------|
|
||||
| `JWT_SECRET` | `$(openssl rand -base64 32)` | Generate a secure random string |
|
||||
| `POSTGRES_PASSWORD` | `your_secure_db_password` | Database password |
|
||||
| `FRONTEND_URL` | `https://vrbattles.com` | Your frontend URL |
|
||||
| `BASE_URL` | `https://api.vrbattles.com` | API base URL |
|
||||
|
||||
**Optional variables** (for S3 storage):
|
||||
- `S3_BUCKET`
|
||||
- `S3_REGION`
|
||||
- `AWS_ACCESS_KEY_ID`
|
||||
- `AWS_SECRET_ACCESS_KEY`
|
||||
|
||||
### Step 5: Configure Domain (Optional)
|
||||
|
||||
1. Go to **Domains** tab in Dokploy
|
||||
2. Add your domain: `api.yourdomain.com`
|
||||
3. Dokploy will auto-configure SSL via Let's Encrypt
|
||||
|
||||
### Step 6: Deploy!
|
||||
|
||||
Click **"Deploy"** and watch the logs.
|
||||
|
||||
---
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Dokploy │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ docker-compose.prod.yml │ │
|
||||
│ │ ┌─────────────┐ ┌──────────────┐ │ │
|
||||
│ │ │ api:3000 │────│ db:5432 │ │ │
|
||||
│ │ │ (Rust API) │ │ (PostgreSQL) │ │ │
|
||||
│ │ └─────────────┘ └──────────────┘ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ ▼ ▼ │ │
|
||||
│ │ uploads_data postgres_data │ │
|
||||
│ │ (volume) (volume) │ │
|
||||
│ └─────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ Traefik (reverse proxy) │
|
||||
│ SSL termination │
|
||||
└─────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
https://api.yourdomain.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Useful Commands
|
||||
|
||||
### View Logs
|
||||
In Dokploy UI → Logs tab, or SSH to server:
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml logs -f api
|
||||
```
|
||||
|
||||
### Access Database
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml exec db psql -U postgres -d vrbattles
|
||||
```
|
||||
|
||||
### Manual Deploy
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
```
|
||||
|
||||
### Backup Database
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml exec db pg_dump -U postgres vrbattles > backup.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### API won't start
|
||||
1. Check logs in Dokploy
|
||||
2. Verify `DATABASE_URL` is correct
|
||||
3. Ensure `JWT_SECRET` is set
|
||||
|
||||
### Database connection failed
|
||||
1. Check if db service is healthy
|
||||
2. Verify `POSTGRES_PASSWORD` matches in both services
|
||||
|
||||
### Uploads not working
|
||||
1. Check `uploads_data` volume is mounted
|
||||
2. Verify `BASE_URL` is set correctly
|
||||
3. For S3: check AWS credentials
|
||||
|
||||
---
|
||||
|
||||
## Migrating Data
|
||||
|
||||
If you have existing data to import:
|
||||
|
||||
```bash
|
||||
# Copy SQL dump to server
|
||||
scp backup.sql user@server:/tmp/
|
||||
|
||||
# Import into running container
|
||||
docker compose -f docker-compose.prod.yml exec -T db psql -U postgres -d vrbattles < /tmp/backup.sql
|
||||
```
|
||||
Reference in New Issue
Block a user