[Update] Docker

Masih belum berjalan
This commit is contained in:
Baghaztra 2025-10-01 13:42:03 +07:00
parent 3052aacb45
commit 9cb8155a35
6 changed files with 70 additions and 17 deletions

View File

@ -5,3 +5,6 @@ Dockerfile
docker-compose.yml docker-compose.yml
.git .git
.gitignore .gitignore
tests
*.log
storage/logs/*

View File

@ -1,4 +1,4 @@
# Stage 1: Build Vue # Stage 1: Build Vue (tetap sama)
FROM node:20 as node_builder FROM node:20 as node_builder
WORKDIR /app WORKDIR /app
COPY package*.json ./ COPY package*.json ./
@ -11,19 +11,24 @@ FROM php:8.3-fpm
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
git unzip libzip-dev libpng-dev libonig-dev libxml2-dev curl \ git unzip libzip-dev libpng-dev libonig-dev libxml2-dev curl \
&& docker-php-ext-install pdo_mysql zip gd mbstring exif pcntl bcmath && docker-php-ext-install pdo_mysql zip gd mbstring exif pcntl bcmath \
&& apt-get clean && rm -rf /var/lib/apt/lists/* # Cleanup untuk ukuran kecil
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html WORKDIR /var/www/html
# Copy source code KECUALI public (biar ga ketiban build Vue) # Copy source code
COPY . . COPY . .
# Copy hasil build Vue dari stage 1 # Copy hasil build Vue
COPY --from=node_builder /app/dist /var/www/html/public COPY --from=node_builder /app/dist /var/www/html/public
RUN composer install --no-dev --optimize-autoloader RUN composer install --no-dev --optimize-autoloader
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache RUN php artisan config:cache && php artisan route:cache && php artisan view:cache # Optimasi cache untuk performa laporan/transaksi
# Set permission dan user non-root
RUN chown -R www-data:www-data /var/www/html
USER www-data
EXPOSE 9000 EXPOSE 9000
CMD ["php-fpm"] CMD ["php-fpm"]

View File

@ -276,6 +276,13 @@ php artisan backup:run
php artisan make:model ProductCategory -m php artisan make:model ProductCategory -m
``` ```
### Production
> Pastikan `.env.production` sudah ada.
```bash
docker compose --env-file .env.production up --build -d
```
--- ---
## 📄 License ## 📄 License

View File

@ -3,16 +3,16 @@ services:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: laravel_app container_name: laravel_app_prod
volumes: volumes:
- .:/var/www/html - ./storage:/var/www/html/storage
command: php artisan serve --host=0.0.0.0 --port=8000
ports: ports:
- "8000:8000" - "9000"
depends_on: depends_on:
- mysql - mysql
environment: environment:
APP_ENV: local APP_ENV: production
APP_DEBUG: false
APP_KEY: ${APP_KEY} APP_KEY: ${APP_KEY}
DB_CONNECTION: mysql DB_CONNECTION: mysql
DB_HOST: mysql DB_HOST: mysql
@ -21,19 +21,36 @@ services:
DB_USERNAME: ${DB_USERNAME} DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD} DB_PASSWORD: ${DB_PASSWORD}
nginx:
image: nginx:alpine
container_name: nginx_prod
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./storage:/var/www/html/storage:ro
depends_on:
- laravel
mysql: mysql:
image: mysql:8 image: mysql:8
container_name: mysql_db container_name: mysql_db_prod
restart: unless-stopped restart: unless-stopped
environment: environment:
MYSQL_ROOT_PASSWORD: root MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: laravel MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: laravel MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: laravel MYSQL_PASSWORD: ${DB_PASSWORD}
ports: ports:
- "3306:3306" - "3306:3306"
volumes: volumes:
- mysql_data:/var/lib/mysql - mysql_data:/var/lib/mysql
redis:
image: redis:alpine
container_name: redis_prod
ports:
- "6379:6379"
volumes: volumes:
mysql_data: mysql_data:

21
nginx.conf Normal file
View File

@ -0,0 +1,21 @@
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass laravel:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

View File

@ -196,8 +196,8 @@ import logo_bni from '@/../images/logo_bni.png'
import logo_mastercard from '@/../images/logo_mastercard.png' import logo_mastercard from '@/../images/logo_mastercard.png'
import logo_visa from '@/../images/logo_visa.png' import logo_visa from '@/../images/logo_visa.png'
import logo_mandiri from '@/../images/logo_mandiri.png' import logo_mandiri from '@/../images/logo_mandiri.png'
import inputField from '@/components/inputField.vue' import inputField from '@/components/InputField.vue'
import inputSelect from '@/components/inputSelect.vue' import inputSelect from '@/components/InputSelect.vue'
import axios from 'axios' import axios from 'axios'