Some checks failed
		
		
	
	Deploy to Production / deploy (push) Failing after 8s
				
			- Renamed MYSQL_ROOT_PASSWORD to DB_ROOT_PASSWORD and MYSQL_PASSWORD to DB_PASSWORD for consistent naming - Updated docker-compose.yml to map DB_* variables to MySQL container's expected MYSQL_* format - Removed redundant DATABASE_URL variable since individual DB_* variables are now used - Added default values for DB_USER, DB_NAME, DB_HOST, and DB_PORT in docker-compose.yml - Updated all documentation files to reference new standar
		
			
				
	
	
		
			167 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Database Variable Migration Guide
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| This project has been updated to use a **unified naming convention** for all database configuration variables. All database-related environment variables now use the `DB_*` prefix for consistency and simplicity.
 | |
| 
 | |
| ## What Changed
 | |
| 
 | |
| ### Before (Mixed Naming)
 | |
| ```bash
 | |
| # .env file had:
 | |
| MYSQL_ROOT_PASSWORD=...
 | |
| MYSQL_PASSWORD=...
 | |
| 
 | |
| # docker-compose.yml used both:
 | |
| MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
 | |
| MYSQL_PASSWORD=${MYSQL_PASSWORD}
 | |
| DATABASE_URL=mysql://voxblog:${MYSQL_PASSWORD}@mysql:3306/voxblog
 | |
| DB_HOST=mysql
 | |
| DB_PORT=3306
 | |
| DB_USER=voxblog
 | |
| DB_PASSWORD=${MYSQL_PASSWORD}
 | |
| DB_NAME=voxblog
 | |
| ```
 | |
| 
 | |
| ### After (Unified Naming)
 | |
| ```bash
 | |
| # All variables use DB_* prefix:
 | |
| DB_ROOT_PASSWORD=...
 | |
| DB_PASSWORD=...
 | |
| DB_USER=voxblog
 | |
| DB_NAME=voxblog
 | |
| DB_HOST=localhost  # or 'mysql' in docker
 | |
| DB_PORT=3306
 | |
| ```
 | |
| 
 | |
| ## Variable Reference
 | |
| 
 | |
| | Variable | Purpose | Default | Required |
 | |
| |----------|---------|---------|----------|
 | |
| | `DB_ROOT_PASSWORD` | MySQL root user password | - | Yes |
 | |
| | `DB_PASSWORD` | Application database user password | - | Yes |
 | |
| | `DB_USER` | Application database username | `voxblog` | No |
 | |
| | `DB_NAME` | Application database name | `voxblog` | No |
 | |
| | `DB_HOST` | Database host | `mysql` (docker) / `localhost` | No |
 | |
| | `DB_PORT` | Database port | `3306` | No |
 | |
| 
 | |
| ## Migration Steps
 | |
| 
 | |
| ### For Existing Installations
 | |
| 
 | |
| 1. **Backup your current `.env` file:**
 | |
|    ```bash
 | |
|    cp .env .env.backup
 | |
|    ```
 | |
| 
 | |
| 2. **Run the migration script:**
 | |
|    ```bash
 | |
|    chmod +x scripts/migrate-db-vars.sh
 | |
|    ./scripts/migrate-db-vars.sh
 | |
|    ```
 | |
|    
 | |
|    Or manually update your `.env` file:
 | |
|    ```bash
 | |
|    # Change these lines:
 | |
|    MYSQL_ROOT_PASSWORD=your_password
 | |
|    MYSQL_PASSWORD=your_password
 | |
|    
 | |
|    # To:
 | |
|    DB_ROOT_PASSWORD=your_password
 | |
|    DB_PASSWORD=your_password
 | |
|    ```
 | |
| 
 | |
| 3. **Restart your services:**
 | |
|    ```bash
 | |
|    docker-compose down
 | |
|    docker-compose up -d
 | |
|    ```
 | |
| 
 | |
| ### For New Installations
 | |
| 
 | |
| Simply copy `.env.example` to `.env` and fill in your values:
 | |
| ```bash
 | |
| cp .env.example .env
 | |
| # Edit .env with your database passwords
 | |
| ```
 | |
| 
 | |
| ## Benefits of Unified Naming
 | |
| 
 | |
| 1. **Consistency**: All database variables follow the same `DB_*` pattern
 | |
| 2. **Clarity**: Clear separation between MySQL container config and application config
 | |
| 3. **Simplicity**: Easier to remember and less prone to typos
 | |
| 4. **Flexibility**: Default values allow for easier local development
 | |
| 5. **Maintainability**: Single source of truth for database configuration
 | |
| 
 | |
| ## Code Usage
 | |
| 
 | |
| All application code uses the unified variables:
 | |
| 
 | |
| ```typescript
 | |
| // apps/api/src/db.ts
 | |
| const host = process.env.DB_HOST || 'localhost';
 | |
| const port = Number(process.env.DB_PORT || 3306);
 | |
| const user = process.env.DB_USER || '';
 | |
| const password = process.env.DB_PASSWORD || '';
 | |
| const database = process.env.DB_NAME || '';
 | |
| ```
 | |
| 
 | |
| ## Docker Compose Configuration
 | |
| 
 | |
| The MySQL container environment variables are mapped from `DB_*` to `MYSQL_*`:
 | |
| 
 | |
| ```yaml
 | |
| mysql:
 | |
|   environment:
 | |
|     MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
 | |
|     MYSQL_DATABASE: ${DB_NAME:-voxblog}
 | |
|     MYSQL_USER: ${DB_USER:-voxblog}
 | |
|     MYSQL_PASSWORD: ${DB_PASSWORD}
 | |
| ```
 | |
| 
 | |
| This maintains compatibility with the official MySQL Docker image while using our unified naming convention.
 | |
| 
 | |
| ## Troubleshooting
 | |
| 
 | |
| ### Services won't start after migration
 | |
| 
 | |
| 1. Check that all required variables are set:
 | |
|    ```bash
 | |
|    grep "^DB_" .env
 | |
|    ```
 | |
| 
 | |
| 2. Verify docker-compose can read the variables:
 | |
|    ```bash
 | |
|    docker-compose config
 | |
|    ```
 | |
| 
 | |
| 3. Check container logs:
 | |
|    ```bash
 | |
|    docker-compose logs mysql
 | |
|    docker-compose logs api
 | |
|    ```
 | |
| 
 | |
| ### Database connection errors
 | |
| 
 | |
| Ensure the `DB_PASSWORD` matches what was set when the MySQL container was first created. If you need to reset:
 | |
| 
 | |
| ```bash
 | |
| docker-compose down -v  # WARNING: This deletes your database!
 | |
| docker-compose up -d
 | |
| ```
 | |
| 
 | |
| ## CI/CD and Deployment
 | |
| 
 | |
| If you have CI/CD pipelines or deployment scripts, update them to use the new variable names:
 | |
| 
 | |
| - Replace `MYSQL_ROOT_PASSWORD` → `DB_ROOT_PASSWORD`
 | |
| - Replace `MYSQL_PASSWORD` → `DB_PASSWORD`
 | |
| - Remove `DATABASE_URL` (no longer needed)
 | |
| 
 | |
| ## Questions?
 | |
| 
 | |
| If you encounter any issues during migration, please check:
 | |
| 1. All variables are correctly renamed in your `.env` file
 | |
| 2. No old `MYSQL_*` variables remain
 | |
| 3. Services have been restarted after the change
 |