chore: refactor Docker environment and production configuration for improved deployment support
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_NAME="WebGIS SPBU"
|
||||
APP_ENV=production
|
||||
APP_KEY=base64:bbAu4UCnpFwzL94x76uGNxESotpfaRJDOBEu88XZQug=
|
||||
APP_DEBUG=true
|
||||
APP_DEBUG=false
|
||||
APP_URL=http://t8wccs8s4wcgoks880ss0og4.203.24.51.230.sslip.io
|
||||
|
||||
APP_LOCALE=en
|
||||
@@ -18,14 +18,15 @@ BCRYPT_ROUNDS=12
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
LOG_LEVEL=warning
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=db
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=spbu_baru
|
||||
DB_USERNAME=spbu
|
||||
DB_PASSWORD=
|
||||
DB_ROOT_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
@@ -35,7 +36,7 @@ SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
QUEUE_CONNECTION=sync
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
+38
-12
@@ -1,32 +1,58 @@
|
||||
# Stage 1: Build Frontend Assets (Vite)
|
||||
# Stage 1: Build frontend assets with Vite.
|
||||
FROM node:20-alpine AS assets-builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json package-lock.json* ./
|
||||
RUN npm install
|
||||
RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi
|
||||
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# Stage 2: Final Application Image
|
||||
FROM php:8.3-cli
|
||||
# Stage 2: Production Laravel runtime.
|
||||
FROM php:8.3-apache
|
||||
|
||||
ENV APACHE_DOCUMENT_ROOT=/app/public \
|
||||
COMPOSER_ALLOW_SUPERUSER=1
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends git unzip libzip-dev \
|
||||
&& docker-php-ext-install pdo_mysql zip \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
curl \
|
||||
git \
|
||||
libicu-dev \
|
||||
libzip-dev \
|
||||
unzip \
|
||||
&& docker-php-ext-install intl opcache pdo_mysql zip \
|
||||
&& a2enmod headers rewrite \
|
||||
&& sed -ri -e 's!/var/www/html!/app/public!g' /etc/apache2/sites-available/000-default.conf \
|
||||
&& printf '<Directory /app/public>\n AllowOverride All\n Require all granted\n</Directory>\n' > /etc/apache2/conf-available/laravel.conf \
|
||||
&& a2enconf laravel \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN { \
|
||||
echo 'opcache.enable=1'; \
|
||||
echo 'opcache.enable_cli=1'; \
|
||||
echo 'opcache.validate_timestamps=0'; \
|
||||
echo 'opcache.memory_consumption=128'; \
|
||||
echo 'opcache.max_accelerated_files=10000'; \
|
||||
} > /usr/local/etc/php/conf.d/opcache-production.ini
|
||||
|
||||
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
||||
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
|
||||
# Copy built assets from assets-builder
|
||||
COPY . .
|
||||
COPY --from=assets-builder /app/public/build ./public/build
|
||||
|
||||
RUN composer install --no-interaction --no-progress --optimize-autoloader \
|
||||
RUN composer install --no-dev --no-interaction --no-progress --prefer-dist --optimize-autoloader \
|
||||
&& mkdir -p storage/framework/cache storage/framework/sessions storage/framework/views storage/logs bootstrap/cache \
|
||||
&& chown -R www-data:www-data storage bootstrap/cache public/build \
|
||||
&& chmod +x docker/entrypoint.sh
|
||||
|
||||
EXPOSE 8000
|
||||
EXPOSE 80
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
|
||||
CMD curl -fsS http://127.0.0.1/ >/dev/null || exit 1
|
||||
|
||||
ENTRYPOINT ["docker/entrypoint.sh"]
|
||||
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
|
||||
|
||||
CMD ["apache2-foreground"]
|
||||
|
||||
+29
-11
@@ -1,42 +1,60 @@
|
||||
services:
|
||||
app:
|
||||
build: .
|
||||
ports:
|
||||
- "${HOST_PORT:-8000}:8000"
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
expose:
|
||||
- "80"
|
||||
environment:
|
||||
SERVICE_URL_APP_80: "${SERVICE_URL_APP_80:-}"
|
||||
APP_NAME: "${APP_NAME:-WebGIS SPBU}"
|
||||
APP_ENV: "${APP_ENV:-production}"
|
||||
APP_DEBUG: "${APP_DEBUG:-false}"
|
||||
APP_URL: "${APP_URL:-http://localhost:8000}"
|
||||
APP_KEY: "${APP_KEY:-}"
|
||||
APP_KEY: "${APP_KEY:?Set APP_KEY in Coolify. Generate one with: php artisan key:generate --show}"
|
||||
LOG_CHANNEL: "${LOG_CHANNEL:-stack}"
|
||||
LOG_STACK: "${LOG_STACK:-single}"
|
||||
LOG_LEVEL: "${LOG_LEVEL:-warning}"
|
||||
DB_CONNECTION: mysql
|
||||
DB_HOST: "${DB_HOST:-db}"
|
||||
DB_PORT: "${DB_PORT:-3306}"
|
||||
DB_DATABASE: "${DB_DATABASE:-spbu_baru}"
|
||||
DB_USERNAME: "${DB_USERNAME:-spbu}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:-secret}"
|
||||
SESSION_DRIVER: "${SESSION_DRIVER:-file}"
|
||||
CACHE_STORE: "${CACHE_STORE:-file}"
|
||||
DB_PASSWORD: "${DB_PASSWORD:-${SERVICE_PASSWORD_64_MYSQL:-spbu_local_db_password}}"
|
||||
SESSION_DRIVER: "${SESSION_DRIVER:-database}"
|
||||
CACHE_STORE: "${CACHE_STORE:-database}"
|
||||
QUEUE_CONNECTION: "${QUEUE_CONNECTION:-sync}"
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1/ >/dev/null || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
db:
|
||||
image: mysql:8.0
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- mysqld
|
||||
- --character-set-server=utf8mb4
|
||||
- --collation-server=utf8mb4_unicode_ci
|
||||
environment:
|
||||
MYSQL_DATABASE: "${DB_DATABASE:-spbu_baru}"
|
||||
MYSQL_USER: "${DB_USERNAME:-spbu}"
|
||||
MYSQL_PASSWORD: "${DB_PASSWORD:-secret}"
|
||||
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD:-rootsecret}"
|
||||
MYSQL_PASSWORD: "${DB_PASSWORD:-${SERVICE_PASSWORD_64_MYSQL:-spbu_local_db_password}}"
|
||||
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD:-${SERVICE_PASSWORD_64_MYSQL_ROOT:-spbu_local_root_password}}"
|
||||
volumes:
|
||||
- spbu-mysql-data:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p${DB_ROOT_PASSWORD:-rootsecret}"]
|
||||
test: ["CMD-SHELL", "mysqladmin ping -h localhost -uroot -p\"$${MYSQL_ROOT_PASSWORD}\" --silent"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
spbu-mysql-data:
|
||||
|
||||
|
||||
Generated
+2170
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,6 @@
|
||||
"devDependencies": {
|
||||
"@tailwindcss/vite": "^4.0.0",
|
||||
"axios": "^1.11.0",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^2.0.0",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"vite": "^7.0.7"
|
||||
|
||||
Reference in New Issue
Block a user