fix: make Coolify image self-contained
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
!.env.docker.example
|
||||
node_modules
|
||||
vendor
|
||||
public/build
|
||||
storage/logs/*.log
|
||||
storage/framework/cache/data/*
|
||||
storage/framework/sessions/*
|
||||
|
||||
+27
@@ -1,3 +1,26 @@
|
||||
FROM composer:2 AS vendor
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY composer.json composer.lock ./
|
||||
|
||||
RUN composer install \
|
||||
--no-dev \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--prefer-dist \
|
||||
--optimize-autoloader
|
||||
|
||||
FROM node:22-alpine AS assets
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json package-lock.json vite.config.js ./
|
||||
COPY resources ./resources
|
||||
COPY public ./public
|
||||
|
||||
RUN npm ci && npm run build
|
||||
|
||||
FROM php:8.3-cli-bookworm
|
||||
|
||||
WORKDIR /var/www/html
|
||||
@@ -23,6 +46,10 @@ COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
||||
COPY docker/app/php.ini /usr/local/etc/php/conf.d/99-webgis.ini
|
||||
COPY docker/app/entrypoint.sh /usr/local/bin/webgis-entrypoint
|
||||
|
||||
COPY . .
|
||||
COPY --from=vendor /app/vendor ./vendor
|
||||
COPY --from=assets /app/public/build ./public/build
|
||||
|
||||
RUN chmod +x /usr/local/bin/webgis-entrypoint
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
@@ -10,6 +10,8 @@ Repository ini sudah disiapkan untuk jalan lewat Docker Compose:
|
||||
- `mysql`: database MySQL 8.4 dengan volume persisten
|
||||
- `vite`: hanya untuk development, tidak otomatis jalan saat production deploy
|
||||
|
||||
Image `app` sudah self-contained. Source code dan dependency Composer dibangun ke dalam image saat `docker compose build`, jadi tidak perlu bind mount proyek ke `/var/www/html` saat deploy production.
|
||||
|
||||
## SSL Di Coolify
|
||||
|
||||
SSL tidak dipasang di container aplikasi. Untuk deploy di Coolify, HTTPS ditangani oleh reverse proxy Coolify dengan sertifikat Let's Encrypt.
|
||||
@@ -75,7 +77,6 @@ docker compose up --build -d
|
||||
|
||||
Entrypoint container `app` otomatis menjalankan:
|
||||
|
||||
- `composer install`
|
||||
- membuat `.env` dari `.env.docker.example` jika belum ada
|
||||
- `php artisan key:generate` jika `APP_KEY` belum ada
|
||||
- `php artisan migrate --force`
|
||||
@@ -202,5 +203,5 @@ Ganti password akun awal setelah deploy.
|
||||
- Pastikan `APP_URL` sesuai domain production.
|
||||
- Di Coolify, jangan publish host port manual. Set domain ke service `app` dan internal port `8000`.
|
||||
- Volume `webgis_mysql_data` menyimpan data MySQL.
|
||||
- Folder project dimount ke `/var/www/html`, jadi perubahan file di server langsung terbaca container.
|
||||
- Source code sudah masuk ke image saat build, jadi produksi tidak bergantung pada bind mount host ke `/var/www/html`.
|
||||
- Jika hosting punya backup volume, backup volume MySQL dan folder project.
|
||||
|
||||
@@ -7,9 +7,6 @@ services:
|
||||
working_dir: /var/www/html
|
||||
expose:
|
||||
- "8000"
|
||||
volumes:
|
||||
- ./:/var/www/html
|
||||
- webgis_vendor:/var/www/html/vendor
|
||||
environment:
|
||||
APP_ENV: ${APP_ENV:-production}
|
||||
APP_DEBUG: ${APP_DEBUG:-false}
|
||||
@@ -61,6 +58,5 @@ services:
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
webgis_vendor:
|
||||
webgis_node_modules:
|
||||
webgis_mysql_data:
|
||||
|
||||
@@ -8,7 +8,8 @@ if [ ! -f .env ] && [ -f .env.docker.example ]; then
|
||||
fi
|
||||
|
||||
if [ ! -f vendor/autoload.php ]; then
|
||||
composer install
|
||||
echo "vendor/autoload.php is missing. Rebuild the image so Composer dependencies are baked in."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
php artisan config:clear --no-ansi
|
||||
|
||||
Reference in New Issue
Block a user