add docker
This commit is contained in:
@@ -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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"
|
||||
45
Dockerfile
45
Dockerfile
@@ -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
109
README-Docker-Usage.md
Normal 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
84
docker-compose.local.yml
Normal 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
|
||||
@@ -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:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user