add docker for server demo
This commit is contained in:
449
docs/README.md
Normal file
449
docs/README.md
Normal file
@@ -0,0 +1,449 @@
|
||||
# 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 <repository-url>
|
||||
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 <repository-url>
|
||||
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/)
|
||||
Reference in New Issue
Block a user