fix: make Coolify image self-contained

This commit is contained in:
GuavaPopper
2026-06-10 20:38:59 +07:00
parent 69b03fb467
commit 2f8b14ed2a
5 changed files with 33 additions and 7 deletions
+1
View File
@@ -5,6 +5,7 @@
!.env.docker.example !.env.docker.example
node_modules node_modules
vendor vendor
public/build
storage/logs/*.log storage/logs/*.log
storage/framework/cache/data/* storage/framework/cache/data/*
storage/framework/sessions/* storage/framework/sessions/*
+27
View File
@@ -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 FROM php:8.3-cli-bookworm
WORKDIR /var/www/html 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/php.ini /usr/local/etc/php/conf.d/99-webgis.ini
COPY docker/app/entrypoint.sh /usr/local/bin/webgis-entrypoint 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 RUN chmod +x /usr/local/bin/webgis-entrypoint
EXPOSE 8000 EXPOSE 8000
+3 -2
View File
@@ -10,6 +10,8 @@ Repository ini sudah disiapkan untuk jalan lewat Docker Compose:
- `mysql`: database MySQL 8.4 dengan volume persisten - `mysql`: database MySQL 8.4 dengan volume persisten
- `vite`: hanya untuk development, tidak otomatis jalan saat production deploy - `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 Di Coolify
SSL tidak dipasang di container aplikasi. Untuk deploy di Coolify, HTTPS ditangani oleh reverse proxy Coolify dengan sertifikat Let's Encrypt. 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: Entrypoint container `app` otomatis menjalankan:
- `composer install`
- membuat `.env` dari `.env.docker.example` jika belum ada - membuat `.env` dari `.env.docker.example` jika belum ada
- `php artisan key:generate` jika `APP_KEY` belum ada - `php artisan key:generate` jika `APP_KEY` belum ada
- `php artisan migrate --force` - `php artisan migrate --force`
@@ -202,5 +203,5 @@ Ganti password akun awal setelah deploy.
- Pastikan `APP_URL` sesuai domain production. - Pastikan `APP_URL` sesuai domain production.
- Di Coolify, jangan publish host port manual. Set domain ke service `app` dan internal port `8000`. - Di Coolify, jangan publish host port manual. Set domain ke service `app` dan internal port `8000`.
- Volume `webgis_mysql_data` menyimpan data MySQL. - 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. - Jika hosting punya backup volume, backup volume MySQL dan folder project.
-4
View File
@@ -7,9 +7,6 @@ services:
working_dir: /var/www/html working_dir: /var/www/html
expose: expose:
- "8000" - "8000"
volumes:
- ./:/var/www/html
- webgis_vendor:/var/www/html/vendor
environment: environment:
APP_ENV: ${APP_ENV:-production} APP_ENV: ${APP_ENV:-production}
APP_DEBUG: ${APP_DEBUG:-false} APP_DEBUG: ${APP_DEBUG:-false}
@@ -61,6 +58,5 @@ services:
start_period: 30s start_period: 30s
volumes: volumes:
webgis_vendor:
webgis_node_modules: webgis_node_modules:
webgis_mysql_data: webgis_mysql_data:
+2 -1
View File
@@ -8,7 +8,8 @@ if [ ! -f .env ] && [ -f .env.docker.example ]; then
fi fi
if [ ! -f vendor/autoload.php ]; then 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 fi
php artisan config:clear --no-ansi php artisan config:clear --no-ansi