# DigiServer Docker Exec Commands - Quick Reference Quick reference guide for common `docker exec` commands used in DigiServer deployment and maintenance. ## ๐Ÿš€ Quick Start ### Complete Automated Deployment ```bash ./deploy.sh ``` ### Manual Step-by-Step Setup ```bash ./setup_https.sh ``` --- ## ๐Ÿ“Š Database Migrations Run migrations in this order: ```bash # 1. HTTPS Configuration table docker-compose exec -T digiserver-app python /app/migrations/add_https_config_table.py # 2. Player User table docker-compose exec -T digiserver-app python /app/migrations/add_player_user_table.py # 3. Email column for HTTPS config docker-compose exec -T digiserver-app python /app/migrations/add_email_to_https_config.py # 4. Player User global migration docker-compose exec -T digiserver-app python /app/migrations/migrate_player_user_global.py ``` --- ## ๐Ÿ”’ HTTPS Configuration Management ### Check HTTPS Status ```bash docker-compose exec -T digiserver-app python /app/https_manager.py status ``` ### Show Detailed Configuration ```bash docker-compose exec -T digiserver-app python /app/https_manager.py show ``` ### Enable HTTPS (Production Settings) ```bash docker-compose exec -T digiserver-app python /app/https_manager.py enable \ digiserver \ digiserver.sibiusb.harting.intra \ admin@example.com \ 10.76.152.164 \ 443 ``` ### Disable HTTPS ```bash docker-compose exec -T digiserver-app python /app/https_manager.py disable ``` --- ## ๐Ÿ‘ค User Management ### Create Admin User ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app from app.models.user import User from app.extensions import db app = create_app() with app.app_context(): admin = User.query.filter_by(username='admin').first() if not admin: admin = User(username='admin', email='admin@example.com') admin.set_password('admin123') admin.is_admin = True db.session.add(admin) db.session.commit() print('โœ… Admin user created') else: print('โœ… Admin user already exists') " ``` ### Reset Admin Password ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app from app.models.user import User from app.extensions import db app = create_app() with app.app_context(): admin = User.query.filter_by(username='admin').first() if admin: admin.set_password('newpassword123') db.session.commit() print('โœ… Admin password reset successfully') else: print('โŒ Admin user not found') " ``` --- ## ๐Ÿ” Database Inspection ### List All Tables ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app from sqlalchemy import inspect app = create_app() with app.app_context(): inspector = inspect(app.extensions.db.engine) tables = inspector.get_table_names() for table in sorted(tables): print(f' โœ“ {table}') print(f'Total: {len(tables)} tables') " ``` ### Check HTTPS Configuration Record ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app from app.models.https_config import HTTPSConfig app = create_app() with app.app_context(): config = HTTPSConfig.get_config() if config: print('HTTPS Configuration:') print(f' Status: {\"ENABLED\" if config.https_enabled else \"DISABLED\"}') print(f' Hostname: {config.hostname}') print(f' Domain: {config.domain}') print(f' IP: {config.ip_address}') print(f' Port: {config.port}') print(f' Updated: {config.updated_at}') print(f' Updated by: {config.updated_by}') else: print('No configuration found') " ``` ### Count Users ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app from app.models.user import User app = create_app() with app.app_context(): count = User.query.count() print(f'Total users: {count}') admins = User.query.filter_by(is_admin=True).count() print(f'Admin users: {admins}') " ``` --- ## ๐Ÿงช Health Checks ### Check Flask Application ```bash docker-compose exec -T digiserver-app python -c " import urllib.request try: response = urllib.request.urlopen('http://localhost:5000/', timeout=5) print(f'โœ… Application responding (HTTP {response.status})') except Exception as e: print(f'โŒ Application error: {e}') " ``` ### Validate Caddy Configuration ```bash docker-compose exec -T caddy caddy validate --config /etc/caddy/Caddyfile ``` ### Test HTTPS from Container ```bash docker-compose exec -T caddy wget --no-check-certificate -qO- https://localhost/ | head -10 ``` --- ## ๐Ÿ› ๏ธ Maintenance Commands ### View Caddy Configuration ```bash docker-compose exec -T caddy cat /etc/caddy/Caddyfile ``` ### Reload Caddy Configuration ```bash docker-compose exec -T caddy caddy reload --config /etc/caddy/Caddyfile ``` ### View Application Logs (Last 50 lines) ```bash docker-compose logs --tail=50 digiserver-app ``` ### View Caddy Logs (Last 50 lines) ```bash docker-compose logs --tail=50 caddy ``` ### Clear All Logs ```bash docker-compose logs --clear ``` --- ## ๐Ÿ”„ Container Management ### Restart All Containers ```bash docker-compose restart ``` ### Restart Specific Container ```bash # Restart application docker-compose restart digiserver-app # Restart Caddy docker-compose restart caddy ``` ### Stop All Containers ```bash docker-compose stop ``` ### Start All Containers ```bash docker-compose start ``` ### Remove Everything (Clean slate) ```bash docker-compose down ``` ### Remove Everything Including Volumes (Full cleanup) ```bash docker-compose down -v ``` --- ## ๐Ÿ“ฆ Backup and Recovery ### Backup Database ```bash docker-compose exec -T digiserver-app python -c " from app.app import create_app import shutil from datetime import datetime app = create_app() timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') backup_name = f'digiserver_{timestamp}.db' with app.app_context(): # Get database path db_path = app.instance_path + '/digiserver.db' shutil.copy(db_path, f'/app/backups/{backup_name}') print(f'โœ… Backup created: {backup_name}') " ``` ### List Database Backups ```bash docker-compose exec -T digiserver-app ls -lah /app/backups/ ``` --- ## ๐Ÿšจ Troubleshooting ### Common Issues **Containers won't start:** ```bash # Check logs docker-compose logs # Try rebuild docker-compose up -d --build ``` **Migration fails:** ```bash # Check database connection docker-compose exec -T digiserver-app python -c " from app.app import create_app app = create_app() print('โœ… Database connection OK') " ``` **Certificate issues:** ```bash # Clear Caddy cache docker volume rm digiserver-v2_caddy-data docker volume rm digiserver-v2_caddy-config # Restart Caddy docker-compose restart caddy ``` **Port conflicts:** ```bash # Find what's using port 443 lsof -i :443 # Find what's using port 80 lsof -i :80 ``` --- ## ๐Ÿ“ Tips and Notes - **`-T` flag**: Prevents Docker from allocating a pseudo-terminal (use in scripts) - **No `-T` flag**: Allocates a terminal (use for interactive commands) - **Container name**: `digiserver-app` (Flask application) - **Container name**: `digiserver-caddy` (Reverse proxy) - **Network**: `digiserver-v2_digiserver-network` - **Database**: SQLite at `/app/instance/digiserver.db` --- ## ๐Ÿ”— Related Documentation - [DEPLOYMENT_COMMANDS.md](DEPLOYMENT_COMMANDS.md) - Complete deployment guide - [setup_https.sh](setup_https.sh) - Semi-automated setup script - [deploy.sh](deploy.sh) - Fully automated deployment script - [HTTPS_CONFIGURATION.md](old_code_documentation/HTTPS_CONFIGURATION.md) - HTTPS details