add docker

This commit is contained in:
arifal
2025-06-24 15:09:21 +07:00
parent 2c7c99bcf1
commit c33193d5f0
5 changed files with 294 additions and 149 deletions

View File

@@ -1,76 +0,0 @@
APP_NAME=SIBEDAS-PBG
APP_ENV=local
APP_KEY=base64:xqCpwixWKqgu1Ca22gFizoOt44p7h+cgTOKuhS/P0Jw=
APP_DEBUG=true
APP_TIMEZONE=Asia/Jakarta
APP_URL=http://localhost:8000
API_URL=http://localhost:8000
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
PHP_CLI_SERVER_WORKERS=4
BCRYPT_ROUNDS=12
LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mariadb
DB_HOST=db
DB_PORT=3306
DB_DATABASE=sibedas_db
DB_USERNAME=root
DB_PASSWORD=root
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
CACHE_STORE=database
CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"
SIMBG_HOST="https://simbg.pu.go.id/"
SIMBG_EMAIL="dputr@bandungkab.go.id"
SIMBG_PASSWORD="Simbg123"
API_KEY_GOOGLE="AIzaSyBxfEShFkKmykkc7RJR3lVzkQ_xGHK3qr0"
SPREAD_SHEET_ID="1QoXzuLdEX3MK70Yrfigz0Qj5rAt4T819jX85vubBNdY"
OPENAI_API_KEY="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"

View File

@@ -9,6 +9,51 @@ COPY . .
EXPOSE 5173
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
# Local development stage for PHP
FROM php:8.2-fpm AS local
WORKDIR /var/www
# Install PHP extensions
RUN apt-get update && apt-get install -y \
git curl zip unzip libpng-dev libonig-dev libxml2-dev libzip-dev \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# Install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create www-data user with same UID/GID as host user (1000:1000 is common for first user)
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
# Copy application files
COPY . .
# Install dependencies
RUN composer install
# Create storage directories and set proper permissions
RUN mkdir -p storage/framework/{sessions,views,cache} \
&& mkdir -p storage/logs \
&& mkdir -p bootstrap/cache \
&& chown -R www-data:www-data /var/www \
&& chmod -R 775 /var/www/storage \
&& chmod -R 775 /var/www/bootstrap/cache
# Create entrypoint script to fix permissions on startup
RUN echo '#!/bin/bash\n\
chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache\n\
chmod -R 775 /var/www/storage /var/www/bootstrap/cache\n\
exec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh
USER www-data
EXPOSE 9000
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
# Production stage
FROM php:8.2-fpm AS production
WORKDIR /var/www

109
README-Docker-Usage.md Normal file
View File

@@ -0,0 +1,109 @@
# Docker Usage Guide
Proyek ini memiliki dua konfigurasi Docker untuk keperluan yang berbeda:
## 📁 File Konfigurasi
### 1. `docker-compose.yml` - Production/Staging
- **Target**: `production` (optimized build)
- **Environment**: Production settings
- **Debug**: Disabled
- **Asset handling**: Built dan optimized
- **Use case**: Deploy ke server production/staging
### 2. `docker-compose.local.yml` - Local Development
- **Target**: `local` (development build)
- **Environment**: Local development settings
- **Debug**: Enabled
- **Asset handling**: Vite dev server terpisah
- **Use case**: Development di local machine
## 🚀 Cara Penggunaan
### Local Development (Recommended)
```bash
# Setup awal (otomatis)
./setup-local.sh
# Atau manual
docker-compose -f docker-compose.local.yml up -d --build
```
### Production/Staging
```bash
# Dengan environment variables
docker-compose up -d --build
# Atau dengan custom .env
APP_ENV=production APP_DEBUG=false docker-compose up -d --build
```
## 🔧 Perbedaan Utama
| Aspek | Local Development | Production |
| ---------------- | -------------------------- | --------------------- |
| **File** | `docker-compose.local.yml` | `docker-compose.yml` |
| **Target** | `local` | `production` |
| **Debug** | Enabled | Disabled |
| **Assets** | Vite dev server | Pre-built & optimized |
| **Permissions** | User mapping | Standard www-data |
| **Hot Reload** | ✅ Available | ❌ Not needed |
| **Node Modules** | Kept for dev | Removed after build |
## 📋 Command Cheat Sheet
### Local Development
```bash
# Start
docker-compose -f docker-compose.local.yml up -d
# Stop
docker-compose -f docker-compose.local.yml down
# Logs
docker-compose -f docker-compose.local.yml logs -f app
# Execute commands
docker-compose -f docker-compose.local.yml exec app php artisan [command]
```
### Production
```bash
# Start
docker-compose up -d
# Stop
docker-compose down
# Logs
docker-compose logs -f app
# Execute commands
docker-compose exec app php artisan [command]
```
## 🛠 Development Workflow
1. **Daily development**: Gunakan `docker-compose.local.yml`
2. **Testing production build**: Gunakan `docker-compose.yml`
3. **Deploy**: Gunakan `docker-compose.yml` di server
## ❓ FAQ
**Q: Apakah perlu kedua file?**
A: Ya, keduanya memiliki fungsi berbeda:
- `docker-compose.local.yml` untuk development
- `docker-compose.yml` untuk production/staging
**Q: File mana yang digunakan untuk development?**
A: Gunakan `docker-compose.local.yml` dengan menjalankan `./setup-local.sh`
**Q: Bagaimana cara switch antara development dan production?**
A: Gunakan flag `-f` untuk specify file yang ingin digunakan

84
docker-compose.local.yml Normal file
View File

@@ -0,0 +1,84 @@
services:
app:
build:
context: .
dockerfile: Dockerfile
target: local
container_name: sibedas_app_local
restart: unless-stopped
environment:
APP_ENV: local
APP_DEBUG: true
APP_URL: http://localhost:8000
VITE_APP_URL: http://localhost:8000
DB_CONNECTION: mariadb
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: sibedas
DB_USERNAME: root
DB_PASSWORD: root
volumes:
- .:/var/www
# Exclude node_modules to prevent conflicts
- /var/www/node_modules
depends_on:
- db
networks:
- sibedas_net
# Add user mapping for permission compatibility
user: "1000:1000"
nginx:
image: nginx:alpine
container_name: sibedas_nginx_local
restart: unless-stopped
ports:
- "8000:80"
volumes:
- .:/var/www
- ./docker/nginx/conf.d/app.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- sibedas_net
db:
image: mariadb:10.6
container_name: sibedas_db_local
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sibedas
MYSQL_USER: root
MYSQL_PASSWORD: root
ports:
- "3306:3306"
volumes:
- dbdata_local:/var/lib/mysql
- ./sibedas.sql:/docker-entrypoint-initdb.d/sibedas.sql
networks:
- sibedas_net
vite:
build:
context: .
dockerfile: Dockerfile
target: development
container_name: sibedas_vite_local
restart: unless-stopped
environment:
VITE_APP_URL: http://localhost:8000
volumes:
- .:/var/www
- /var/www/node_modules
ports:
- "5173:5173"
networks:
- sibedas_net
volumes:
dbdata_local:
networks:
sibedas_net:
driver: bridge

View File

@@ -7,16 +7,16 @@ services:
container_name: sibedas_app
restart: unless-stopped
environment:
APP_ENV: local
APP_DEBUG: true
APP_URL: http://localhost
VITE_APP_URL: http://localhost
APP_ENV: production
APP_DEBUG: false
APP_URL: ${APP_URL:-http://localhost:8000}
VITE_APP_URL: ${VITE_APP_URL:-http://localhost:8000}
DB_CONNECTION: mariadb
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: sibedas_db
DB_USERNAME: root
DB_PASSWORD: root
DB_DATABASE: ${DB_DATABASE:-sibedas}
DB_USERNAME: ${DB_USERNAME:-root}
DB_PASSWORD: ${DB_PASSWORD:-root}
volumes:
- .:/var/www
depends_on:
@@ -43,10 +43,10 @@ services:
container_name: sibedas_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sibedas_db
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_DATABASE: ${DB_DATABASE:-sibedas}
MYSQL_USER: ${DB_USERNAME:-root}
MYSQL_PASSWORD: ${DB_PASSWORD:-root}
ports:
- "3306:3306"
volumes:
@@ -55,23 +55,6 @@ services:
networks:
- sibedas_net
vite:
build:
context: .
dockerfile: Dockerfile
target: development
container_name: sibedas_vite
restart: unless-stopped
environment:
VITE_APP_URL: http://localhost
volumes:
- .:/var/www
- /var/www/node_modules
ports:
- "5173:5173"
networks:
- sibedas_net
volumes:
dbdata: