Tadinya gua mikir gak akan butuh Docker buat aplikasi-aplikasi yang gua bikin. Tapi setelah jumlahnya makin banyak, bahkan lebih dari 10 biji, gua akhirnya memutuskan untuk menggunakan Docker. Di sini kebanyakan aplikasi yang gua bikin itu aplikasi yang menggunakan Laravel sebagai framework-nya.
Awalnya gua nyobain Laravel Sail, pustaka bawaan Laravel untuk Docker, biar cepat jalan. Sayangnya, pustaka ini nggak mendukung SQLite. Akhirnya gua memutuskan buat bikin pengaturannya dari nol. Biar lebih fleksibel.
Gua pilih nginx
sebagai web server dan dibantu sama php-fpm
seperti layaknya biasa gua pake di sebuah server. Ternyata gak segampang itu! Setelah seharian mencoba berbagai cara bisa jalan tetap aja gagal. Sebenarnya semua lebih mudah menggunakan perintah php artisan serve
tapi dilarang sama dokumentasi Laravel.
Hampir putus asa, di detik-detik terakhir gua teringat Laravel Octane. Cara ini bahkan menurut gua lebih baik karena dengan menggunakan pustaka yang satu ini justru aplikasi Laravel semakin kencang. Gua pilih Frankenphp karena saat ini paling gampang buat disatuin dengan Laravel Octane.
Jadi begini konfigurasi Dockerfile
-nya:
FROM ubuntu:latest
LABEL maintainer="Ronald Nababan"
ARG DEBIAN_FRONTEND=noninteractive
WORKDIR /var/www/html
RUN apt update && apt upgrade -y && \
apt install -y zip unzip supervisor sqlite3 curl && \
apt install -y php-cli php-sqlite3 php-gd php-curl php-imap php-mbstring \
php-xml php-zip php-bcmath php-soap php-intl php-readline php-msgpack \
php-igbinary php-memcached php-pcov php-imagick php-xdebug && \
apt clean && rm -rf /var/lib/apt/lists/*
RUN curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
RUN ln -s /usr/local/bin/frankenphp /usr/local/bin/frankenphp
COPY . .
RUN cp .env.production .env
RUN composer install --optimize-autoloader --no-dev
RUN chown www-data:www-data -R storage && \
chown www-data:www-data database && \
chown www-data:www-data database/database.sqlite
RUN php artisan storage:link
EXPOSE 8000
ENTRYPOINT ["php", "artisan", "octane:start"]
Untuk memudahkan pemanggilan container-nya, berikut docker-compose.yml
:
services:
app:
build:
context: .
dockerfile: ./Dockerfile
container_name: app
ports:
- "8000:8000"
volumes:
- ./data/storage:/var/www/html/storage/app/public
- ./data/database.sqlite:/var/www/html/database/database.sqlite
restart: unless-stopped
Jalankan aplikasi dengan perintah berikut:
docker compose up -d
Langkah terakhir tinggal mapping aplikasi ini ke Cloudflare Tunnel dan semuanya akan berjalan dengan mulus!