Compare commits

..

No commits in common. "ee12b9c8d8ad2d14579e45cae0370af05a31bf8d" and "9e7ef1b82546bcd78d28a18ef0e952e7f7bec165" have entirely different histories.

345 changed files with 386 additions and 1940 deletions

View File

@ -1,32 +1,74 @@
# Dependencies
node_modules/
vendor/
# ========================================
# Docker Ignore File
# ========================================
# Build artifacts
/public/build
/public/hot
/public/storage
/storage/*.key
# Git
.git
.gitignore
.gitattributes
# Environment files
.env
.env.backup
.env.production
# Documentation
README.md
CHANGELOG.md
Documentation/
*.md
# IDE files
# Tests
tests/
phpunit.xml
.phpunit.cache
.phpunit.result.cache
# IDE & Editors
.vscode/
.idea/
.fleet/
.nova/
.zed/
*.swp
*.swo
# OS generated files
*~
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
.phpactor.json
# Docker files (tidak perlu di-copy ke image)
Dockerfile
docker-compose*.yml
.dockerignore
# Environment files (akan di-set via environment variables)
.env
.env.*
!.env.example
# Dependencies (akan di-install via composer & npm)
/vendor/
/node_modules/
# Build artifacts (akan di-build di stage terpisah)
/public/hot
/public/build
# Storage & Cache (akan di-mount sebagai volume)
/storage/*.key
/storage/logs/*
/storage/framework/cache/*
/storage/framework/sessions/*
/storage/framework/views/*
/storage/pail
# Generated files
/public/storage
/bootstrap/cache/*
# Local development files
Homestead.json
Homestead.yaml
auth.json
.vagrant
.phpstorm.meta.php
_ide_helper.php
# Logs
*.log
@ -34,86 +76,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Coverage directory used by tools like istanbul
coverage/
# nyc test coverage
.nyc_output
# Dependency directories
jspm_packages/
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Laravel specific
/bootstrap/cache/*.php
/storage/app/*
!/storage/app/.gitignore
/storage/framework/cache/*
!/storage/framework/cache/.gitignore
/storage/framework/sessions/*
!/storage/framework/sessions/.gitignore
/storage/framework/testing/*
!/storage/framework/testing/.gitignore
/storage/framework/views/*
!/storage/framework/views/.gitignore
/storage/logs/*
!/storage/logs/.gitignore
# Testing
/coverage
/.phpunit.result.cache
/phpunit.xml
# Backup files
*.bak
*.backup
*.sql
# Documentation
README.md
Documentation/
# OS Files
.DS_Store
Thumbs.db
desktop.ini

1
.gitignore vendored
View File

@ -25,6 +25,5 @@ Thumbs.db
# Docker - Database Backups (exclude backups from git)
/docker/mysql/backups/*.sql
/docker/mysql/mysql_data/
/docker/mysql/backups/*.sql.gz
!/docker/mysql/backups/README.md

View File

@ -1,57 +1,91 @@
# Use PHP 8.2 with Apache
FROM php:8.2-apache
# ========================================
# Stage 1: Build Frontend Assets (Vue.js)
# ========================================
FROM node:20-alpine as node_builder
WORKDIR /app
# Copy package files untuk caching layer
COPY package*.json ./
# Install dependencies
RUN npm ci --legacy-peer-deps
# Copy seluruh source code
COPY . .
# Build production assets
RUN npm run build
# ========================================
# Stage 2: Laravel Application
# ========================================
FROM php:8.3-fpm-alpine
# Install system dependencies dan PHP extensions
RUN apk update && apk add --no-cache \
git \
unzip \
libzip-dev \
libpng-dev \
oniguruma-dev \
libxml2-dev \
curl \
mysql-client \
autoconf \
g++ \
make \
&& docker-php-ext-install \
pdo_mysql \
zip \
gd \
mbstring \
exif \
pcntl \
bcmath \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& apk del autoconf g++ make \
&& rm -rf /var/cache/apk/* /tmp/*
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www/html
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
nodejs \
npm \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# Install Redis extension
RUN pecl install redis && docker-php-ext-enable redis
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Enable Apache mod_rewrite
RUN a2enmod rewrite
# Copy Apache configuration
COPY docker/apache/000-default.conf /etc/apache2/sites-available/000-default.conf
# Copy application files
COPY . /var/www/html
# Set proper permissions
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache
# Copy composer files untuk caching layer
COPY composer.json composer.lock ./
# Install PHP dependencies
RUN composer install --no-dev --optimize-autoloader
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
# Install Node.js dependencies and build assets
RUN npm install && npm run build
# Copy application source code
COPY . .
# Create .env file if it doesn't exist
RUN if [ ! -f .env ]; then cp .env.example .env; fi
# Copy hasil build Vue dari stage 1
COPY --from=node_builder /app/public/build /var/www/html/public/build
# Generate application key
RUN php artisan key:generate
# Generate autoload files dengan optimasi
RUN composer dump-autoload --optimize --classmap-authoritative
# Expose port 80
EXPOSE 80
# Create required directories dan set permissions
RUN mkdir -p \
storage/framework/cache \
storage/framework/sessions \
storage/framework/views \
storage/logs \
bootstrap/cache \
&& chown -R www-data:www-data \
/var/www/html/storage \
/var/www/html/bootstrap/cache \
&& chmod -R 775 \
/var/www/html/storage \
/var/www/html/bootstrap/cache
# Start Apache
CMD ["apache2-foreground"]
# Switch ke user non-root untuk keamanan
USER www-data
EXPOSE 9000
CMD ["php-fpm"]

0
bootstrap/cache/.gitignore vendored Executable file → Normal file
View File

View File

@ -1,79 +1,176 @@
version: '3.8'
services:
app:
# ========================================
# Laravel PHP-FPM Application
# ========================================
laravel:
build:
context: .
dockerfile: Dockerfile
container_name: kasir-app
container_name: abbauf_kasir_app
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./:/var/www/html
- ./docker/mysql/backups:/var/www/html/docker/mysql/backups
ports:
- "8000:80"
# Mount storage untuk uploads dan logs (persistent)
- ./storage/app/public:/var/www/html/storage/app/public
# Mount public build assets (read-only)
- ./public/build:/var/www/html/public/build:ro
environment:
- APP_ENV=local
- APP_DEBUG=true
- DB_HOST=mysql
- DB_PORT=3306
- DB_DATABASE=kasir_db
- DB_USERNAME=kasir_user
- DB_PASSWORD=kasir_password
- REDIS_HOST=redis
- REDIS_PORT=6379
depends_on:
- mysql
- redis
# Application
APP_NAME: ${APP_NAME:-Abbauf-Kasir}
APP_ENV: ${APP_ENV:-production}
APP_KEY: ${APP_KEY}
APP_DEBUG: ${APP_DEBUG:-false}
APP_URL: ${APP_URL:-http://localhost}
# Database
DB_CONNECTION: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-kasir_db}
DB_USERNAME: ${DB_USERNAME:-kasir_user}
DB_PASSWORD: ${DB_PASSWORD}
# Cache & Session
CACHE_STORE: redis
SESSION_DRIVER: redis
REDIS_HOST: redis
REDIS_PORT: 6379
# Queue
QUEUE_CONNECTION: redis
depends_on:
mysql:
image: mysql:5.7
container_name: kasir-mysql
condition: service_healthy
redis:
condition: service_started
networks:
- kasir_network
# healthcheck:
# test: ["CMD", "php-fpm", "-t"]
# interval: 30s
# timeout: 10s
# retries: 3
# ========================================
# Nginx Web Server
# ========================================
nginx:
image: nginx:alpine
container_name: abbauf_kasir_nginx
restart: unless-stopped
ports:
- "${APP_PORT:-80}:80"
volumes:
# Nginx configuration
- ./nginx.conf:/etc/nginx/conf.d/default.conf
# Laravel public directory (untuk static assets)
- ./public:/var/www/html/public
# Storage symlink untuk file uploads
- ./storage/app/public:/var/www/html/public/storage
depends_on:
- laravel
networks:
- kasir_network
# healthcheck:
# test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
# interval: 30s
# timeout: 10s
# retries: 3
# ========================================
# MySQL Database
# ========================================
mysql:
image: mysql:8.4
container_name: abbauf_kasir_db
restart: unless-stopped
environment:
MYSQL_DATABASE: kasir_db
MYSQL_ROOT_PASSWORD: kasir_password
MYSQL_USER: kasir_user
MYSQL_PASSWORD: kasir_password
volumes:
- ./docker/mysql/mysql_data:/var/lib/mysql
- ./docker/mysql/backups:/backups
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password}
MYSQL_DATABASE: ${DB_DATABASE:-kasir_db}
MYSQL_USER: ${DB_USERNAME:-kasir_user}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
ports:
- "3308:3306"
- "${DB_PORT:-3306}:3306"
volumes:
- mysql_data:/var/lib/mysql
# Optional: backup folder
- ./docker/mysql/backups:/backups
networks:
- kasir_network
# healthcheck:
# test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root_secret_password}"]
# interval: 10s
# timeout: 5s
# retries: 5
# command: --default-authentication-plugin=mysql_native_password
# ========================================
# Redis Cache & Session Store
# ========================================
redis:
image: redis:7-alpine
container_name: kasir-redis
container_name: abbauf_kasir_redis
restart: unless-stopped
ports:
- "6380:6379"
- "${REDIS_PORT:-6379}:6379"
volumes:
- ./docker/redis/redis_data:/data
# phpmyadmin:
# image: phpmyadmin/phpmyadmin
# container_name: kasir-phpmyadmin
# restart: unless-stopped
# environment:
# PMA_HOST: mysql
# PMA_PORT: 3306
# PMA_USER: ${DB_USERNAME}
# PMA_PASSWORD: ${DB_PASSWORD}
# ports:
# - "8080:80"
# depends_on:
# - mysql
# networks:
# - kasir-network
# volumes:
# mysql_data:
# driver: local
# redis_data:
# driver: local
- redis_data:/data
networks:
default:
external: true
name: kasir_kasir_network
- kasir_network
# healthcheck:
# test: ["CMD", "redis-cli", "ping"]
# interval: 10s
# timeout: 5s
# retries: 3
command: redis-server --appendonly yes
# ========================================
# Queue Worker (Optional - untuk background jobs)
# ========================================
queue:
build:
context: .
dockerfile: Dockerfile
container_name: abbauf_kasir_queue
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./storage:/var/www/html/storage
environment:
APP_ENV: ${APP_ENV:-production}
APP_KEY: ${APP_KEY}
DB_CONNECTION: mysql
DB_HOST: mysql
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-kasir_db}
DB_USERNAME: ${DB_USERNAME:-kasir_user}
DB_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: redis
QUEUE_CONNECTION: redis
depends_on:
- laravel
- redis
- mysql
networks:
- kasir_network
command: php artisan queue:work --tries=3 --timeout=90
# ========================================
# Networks
# ========================================
networks:
kasir_network:
driver: bridge
# ========================================
# Persistent Volumes
# ========================================
volumes:
mysql_data:
driver: local
redis_data:
driver: local

View File

@ -1,12 +0,0 @@
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

View File

@ -1,2 +0,0 @@
[auto]
server-uuid=79710a58-aeaa-11f0-a626-0242ac150002

Binary file not shown.

Binary file not shown.

View File

@ -1,135 +0,0 @@
10,69
10,29
10,93
10,2
10,3
11,13
11,4
11,8
11,17
11,15
11,16
11,7
11,2
11,3
9,5
9,2
9,3
8,7
8,5
8,2
8,3
0,457
12,2
12,1
12,3
20,2
20,1
20,3
19,2
19,1
19,3
18,1
18,3
14,1
11,28
11,27
11,26
14,5
11,25
11,24
14,3
13,1
11,23
11,22
13,3
11,21
11,20
11,1
11,19
10,303
10,302
10,301
10,300
10,299
10,298
10,297
10,296
2,2
10,295
2,1
10,294
10,293
10,292
2,3
10,291
10,290
10,289
10,288
10,287
10,286
10,285
10,284
10,283
10,282
10,281
10,280
10,279
10,278
10,277
10,276
10,275
10,274
10,273
10,272
10,271
10,270
10,269
10,268
10,267
10,266
10,265
10,264
10,263
10,262
10,261
10,260
10,259
10,258
10,257
10,256
10,255
10,254
10,253
10,252
10,251
10,250
10,249
10,248
10,247
10,246
10,245
10,244
10,243
10,242
10,241
10,240
10,239
10,238
10,237
10,236
10,235
10,234
10,233
10,232
10,231
10,230
10,229
10,228
10,227
10,226
10,225
10,224
10,223
10,222
10,221

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
default-character-set=latin1
default-collation=latin1_swedish_ci

View File

@ -1 +0,0 @@
/var/run/mysqld/mysqld.sock

View File

@ -1 +0,0 @@
ÿlocalhost performance_schema mysql.session ÿlocalhost sys mysql.sys ÿ% kasir\_db kasir_user 

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
default-character-set=latin1
default-collation=latin1_swedish_ci

Some files were not shown because too many files have changed in this diff Show More