# Sibedas PBG Web - Documentation Dokumentasi lengkap untuk setup dan penggunaan aplikasi Sibedas PBG Web. ## 📋 Table of Contents 1. [Quick Start](#-quick-start) 2. [Architecture](#-architecture) 3. [Environment Setup](#-environment-setup) 4. [Production Deployment](#-production-deployment) 5. [SSL Configuration](#-ssl-configuration) 6. [Monitoring](#-monitoring) 7. [Troubleshooting](#-troubleshooting) ## 🚀 Quick Start ### Prerequisites - Docker & Docker Compose - Domain name (untuk production) - Port 80 dan 443 terbuka (untuk Let's Encrypt) ### Local Development ```bash # Clone repository git clone cd sibedas-pbg-web # Setup local environment ./scripts/setup-local.sh ``` ### Production Deployment ```bash # Copy environment file cp env.production.example .env # Edit environment variables nano .env # Deploy dengan reverse proxy dan SSL ./scripts/setup-reverse-proxy.sh setup ``` ## 🏗️ Architecture ### Local Development ``` Browser → Port 8000 → Nginx → PHP-FPM → MariaDB ``` ### Production dengan Reverse Proxy ``` Internet → Reverse Proxy (80/443) → Internal Nginx → PHP-FPM → MariaDB ``` ### Components - **Reverse Proxy Nginx**: Entry point, SSL termination, routing - **Internal Nginx**: Serves Sibedas application - **Application Container**: PHP-FPM with Supervisor (queue & scheduler) - **Database Container**: MariaDB with backup import ## ⚙️ Environment Setup ### Required Variables ```bash # Domain & SSL DOMAIN=sibedas.yourdomain.com EMAIL=admin@yourdomain.com SSL_TYPE=self-signed # atau letsencrypt # Database DB_PASSWORD=your_secure_password MYSQL_ROOT_PASSWORD=your_root_password # Laravel APP_KEY=base64:your_app_key_here APP_URL=https://sibedas.yourdomain.com ``` ### Generate App Key ```bash docker-compose exec app php artisan key:generate ``` ## 🚀 Production Deployment ### Step-by-Step Production Deployment #### 1. **Server Preparation** ```bash # Update system sudo apt update && sudo apt upgrade -y # Install Docker & Docker Compose curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER # Install Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # Logout and login again for group changes exit # SSH back to server ``` #### 2. **Clone Repository** ```bash # Clone project git clone cd sibedas-pbg-web # Set proper permissions chmod +x scripts/*.sh ``` #### 3. **Environment Configuration** ```bash # Copy environment template cp env.production.example .env # Edit environment variables nano .env ``` **Required Environment Variables:** ```bash # Domain & SSL DOMAIN=sibedas.yourdomain.com EMAIL=admin@yourdomain.com SSL_TYPE=letsencrypt # atau self-signed untuk testing # Database DB_DATABASE=sibedas DB_USERNAME=sibedas_user DB_PASSWORD=your_secure_database_password MYSQL_ROOT_PASSWORD=your_secure_root_password # Laravel APP_NAME="Sibedas PBG Web" APP_ENV=production APP_DEBUG=false APP_KEY=base64:your_app_key_here APP_URL=https://sibedas.yourdomain.com VITE_APP_URL=https://sibedas.yourdomain.com # Mail Configuration MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=your_email@gmail.com MAIL_PASSWORD=your_app_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=your_email@gmail.com MAIL_FROM_NAME="Sibedas PBG Web" # Google Sheets API SPREAD_SHEET_ID=your_google_sheets_id_here ``` #### 4. **Generate Application Key** ```bash # Generate Laravel app key php artisan key:generate --show # Copy the generated key to .env file ``` #### 5. **Deploy Application** ```bash # Option A: Full deployment with SSL (Recommended) ./scripts/setup-reverse-proxy.sh setup # Option B: Deploy without SSL first ./scripts/deploy-production.sh deploy ``` #### 6. **SSL Setup (if not done in step 5)** ```bash # For Let's Encrypt (Production) DOMAIN=yourdomain.com EMAIL=admin@yourdomain.com ./scripts/setup-ssl.sh letsencrypt # For Self-Signed (Testing) ./scripts/setup-ssl.sh self-signed ``` #### 7. **Verify Deployment** ```bash # Check container status docker-compose ps # Check application health curl -f http://localhost/health-check # Check SSL certificate ./scripts/setup-ssl.sh check # View logs docker-compose logs nginx-proxy docker-compose logs app ``` ### Scripts yang Diperlukan #### **Essential Scripts (Wajib)** - `scripts/setup-reverse-proxy.sh` - Setup lengkap reverse proxy dan SSL - `scripts/deploy-production.sh` - Deployment production - `scripts/setup-ssl.sh` - Setup SSL certificates #### **Optional Scripts** - `scripts/setup-local.sh` - Setup local development - `scripts/import-sibedas-database.sh` - Manual database import (otomatis via docker-compose) #### **Scripts yang Tidak Diperlukan** - `scripts/build-and-zip.sh` - Tidak diperlukan karena menggunakan Docker build ### Deployment Commands Summary ```bash # 1. Setup environment cp env.production.example .env nano .env # 2. Deploy with SSL (Recommended) ./scripts/setup-reverse-proxy.sh setup # 3. Or deploy step by step ./scripts/deploy-production.sh deploy ./scripts/setup-ssl.sh letsencrypt # 4. Check status ./scripts/setup-reverse-proxy.sh status ``` ## 🔒 SSL Configuration ### Self-Signed Certificate ```bash SSL_TYPE=self-signed ./scripts/setup-reverse-proxy.sh setup ``` ### Let's Encrypt Certificate ```bash DOMAIN=myapp.com EMAIL=admin@myapp.com SSL_TYPE=letsencrypt ./scripts/setup-reverse-proxy.sh setup ``` ### SSL Management ```bash # Check certificate ./scripts/setup-ssl.sh check # Renew certificate ./scripts/setup-ssl.sh renew ``` ## 📊 Monitoring ### Container Status ```bash # Check all containers docker-compose ps # Check specific service docker-compose ps app ``` ### Logs ```bash # Application logs docker-compose logs app # Reverse proxy logs docker-compose logs nginx-proxy # Database logs docker-compose logs db # Follow logs docker-compose logs -f nginx-proxy ``` ### Health Checks ```bash # Application health curl -f http://localhost/health-check # SSL certificate ./scripts/setup-ssl.sh check ``` ## 🛠️ Troubleshooting ### SSL Issues ```bash # Check certificate files docker exec sibedas_nginx_proxy ls -la /etc/nginx/ssl/ # Test SSL connection openssl s_client -connect yourdomain.com:443 # Check nginx config docker exec sibedas_nginx_proxy nginx -t ``` ### Container Issues ```bash # Restart services docker-compose restart # Check network docker network ls # Check volumes docker volume ls ``` ### Database Issues ```bash # Import database manually ./scripts/import-sibedas-database.sh # Check database connection docker exec sibedas_app php artisan db:monitor ``` ### Performance Issues ```bash # Check resource usage docker stats # Check nginx access logs docker exec sibedas_nginx_proxy tail -f /var/log/nginx/sibedas_access.log ``` ## 🔧 Maintenance ### Backup ```bash # Database backup docker exec sibedas_db mysqldump -u root -p sibedas > backup.sql # Volume backup docker run --rm -v sibedas_app_storage:/data -v $(pwd):/backup alpine tar czf /backup/storage.tar.gz -C /data . ``` ### Update Application ```bash # Pull latest changes git pull # Rebuild and restart docker-compose up -d --build ``` ### SSL Certificate Renewal ```bash # Manual renewal ./scripts/setup-ssl.sh renew # Automatic renewal (cron) 0 12 * * * /path/to/sibedas-pbg-web/scripts/setup-ssl.sh renew ``` ## 📁 Project Structure ``` sibedas-pbg-web/ ├── docker/ # Docker configurations │ ├── nginx/ # Nginx configs │ ├── mysql/ # MySQL configs │ └── supervisor/ # Supervisor configs ├── scripts/ # Deployment scripts │ ├── setup-local.sh # Local development │ ├── setup-reverse-proxy.sh # Reverse proxy setup │ ├── deploy-production.sh # Production deployment │ ├── setup-ssl.sh # SSL setup │ └── import-sibedas-database.sh # Database import ├── docs/ # Documentation ├── docker-compose.yml # Production compose ├── docker-compose.local.yml # Local development compose └── README.md # Main README ``` ## 🆘 Support ### Common Commands ```bash # Start services docker-compose up -d # Stop services docker-compose down # View logs docker-compose logs [service] # Execute commands docker-compose exec app php artisan [command] # Check status ./scripts/setup-reverse-proxy.sh status ``` ### Getting Help 1. Check logs: `docker-compose logs [service]` 2. Check status: `./scripts/setup-reverse-proxy.sh status` 3. Restart services: `docker-compose restart` 4. Review this documentation ## 📚 Additional Resources - [Docker Documentation](https://docs.docker.com/) - [Nginx Documentation](https://nginx.org/en/docs/) - [Let's Encrypt Documentation](https://letsencrypt.org/docs/) - [Laravel Documentation](https://laravel.com/docs/)