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
|
EXPOSE 5173
|
||||||
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
|
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
|
# Production stage
|
||||||
FROM php:8.2-fpm AS production
|
FROM php:8.2-fpm AS production
|
||||||
WORKDIR /var/www
|
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
|
||||||
@@ -1,80 +1,63 @@
|
|||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
target: production
|
target: production
|
||||||
container_name: sibedas_app
|
container_name: sibedas_app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
APP_ENV: local
|
APP_ENV: production
|
||||||
APP_DEBUG: true
|
APP_DEBUG: false
|
||||||
APP_URL: http://localhost
|
APP_URL: ${APP_URL:-http://localhost:8000}
|
||||||
VITE_APP_URL: http://localhost
|
VITE_APP_URL: ${VITE_APP_URL:-http://localhost:8000}
|
||||||
DB_CONNECTION: mariadb
|
DB_CONNECTION: mariadb
|
||||||
DB_HOST: db
|
DB_HOST: db
|
||||||
DB_PORT: 3306
|
DB_PORT: 3306
|
||||||
DB_DATABASE: sibedas_db
|
DB_DATABASE: ${DB_DATABASE:-sibedas}
|
||||||
DB_USERNAME: root
|
DB_USERNAME: ${DB_USERNAME:-root}
|
||||||
DB_PASSWORD: root
|
DB_PASSWORD: ${DB_PASSWORD:-root}
|
||||||
volumes:
|
volumes:
|
||||||
- .:/var/www
|
- .:/var/www
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
networks:
|
networks:
|
||||||
- sibedas_net
|
- sibedas_net
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:alpine
|
image: nginx:alpine
|
||||||
container_name: sibedas_nginx
|
container_name: sibedas_nginx
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "8000:80"
|
- "8000:80"
|
||||||
volumes:
|
volumes:
|
||||||
- .:/var/www
|
- .:/var/www
|
||||||
- ./docker/nginx/conf.d/app.conf:/etc/nginx/conf.d/default.conf
|
- ./docker/nginx/conf.d/app.conf:/etc/nginx/conf.d/default.conf
|
||||||
depends_on:
|
depends_on:
|
||||||
- app
|
- app
|
||||||
networks:
|
networks:
|
||||||
- sibedas_net
|
- sibedas_net
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mariadb:10.6
|
image: mariadb:10.6
|
||||||
container_name: sibedas_db
|
container_name: sibedas_db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: root
|
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
|
||||||
MYSQL_DATABASE: sibedas_db
|
MYSQL_DATABASE: ${DB_DATABASE:-sibedas}
|
||||||
MYSQL_USER: root
|
MYSQL_USER: ${DB_USERNAME:-root}
|
||||||
MYSQL_PASSWORD: root
|
MYSQL_PASSWORD: ${DB_PASSWORD:-root}
|
||||||
ports:
|
ports:
|
||||||
- "3306:3306"
|
- "3306:3306"
|
||||||
volumes:
|
volumes:
|
||||||
- dbdata:/var/lib/mysql
|
- dbdata:/var/lib/mysql
|
||||||
- ./sibedas.sql:/docker-entrypoint-initdb.d/sibedas.sql
|
- ./sibedas.sql:/docker-entrypoint-initdb.d/sibedas.sql
|
||||||
networks:
|
networks:
|
||||||
- sibedas_net
|
- 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:
|
volumes:
|
||||||
dbdata:
|
dbdata:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
sibedas_net:
|
sibedas_net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
Reference in New Issue
Block a user