Kalo lu lagi baca artikel ini, kemungkinan besar lu sedang pusing tujuh keliling gara-gara CodeIgniter 4 error setelah dipindahin ke Docker.
Tenang ya, lu gak sendirian. Banyak yang CI4-nya mendadak ngamuk begitu masuk container. Gue juga pernah, dan rasanya pengen banting laptop
Tapi santai, kita beresin semuanya bareng-bareng.
Di tutorial santai ini kita bahas lengkap banget mulai dari:
- Setup Dockerfile yang benar
- Setup docker-compose
- Fix Forbidden (403)
- Fix InvalidArgumentException gara-gara .env
- Fix error cache yang gak bisa update (yang paling ngeselin)
Pokoknya lengkap dan anti-bikin stress.
Oke, siap? Gaskeun bro.
1. Setup Dockerfile Paling Aman Buat CI4
Kita mulai dari dasar dulu. Dockerfile ini udah aman banget buat CI4 karena udah lengkap dependency-nya.

FROM php:8.2-apache
# Install tools + intl + GD dependencies
RUN apt-get update && apt-get install -y \
zip unzip git libicu-dev libpng-dev libjpeg-dev libfreetype6-dev \
&& docker-php-ext-install mysqli pdo pdo_mysql intl
# Configure GD (jpeg + freetype)
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd
# Enable Apache mod_rewrite
RUN a2enmod rewrite
# Set DocumentRoot ke public/
RUN sed -ri -e 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!/var/www/html/public!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www/html
Ini udah komplit banget buat CI4. Lu gak perlu mikirin ekstensi PHP lagi. Tinggal pakai. Kalau project kamu butuh ekstensi tambahan yang gak ada di daftar ini (misalnya untuk image processing lebih advanced atau koneksi ke database lain), tinggal tambahin baris docker-php-ext-install yang sesuai di Dockerfile, terus build ulang image-nya.
2. Setup docker-compose.yml
Compose-nya simple tapi wajib benar.
version: '3.8'
services:
ci4-app:
image: ci4:latest
container_name: ci4-manajemen-vendor
ports:
- "5083:80"
volumes:
- GANTI LOKASI PROJEK CODEIGNITERMU DIMANA :/var/www/html
working_dir: /var/www/html
Intinya folder proyek di-host di-mount ke container.
Apache di container akan baca file-file itu.
3. Install Composer di Dalam Container
Cara standar:
docker exec -it ci4-manajemen-vendor bash
composer install
Atau sekalian:
docker compose up -d
docker exec -it ci4-manajemen-vendor bash -c "composer install"

Kalau ada error ekstensi, santai aja. Dockerfile lu udah siap tempur.
4. Fix Error Forbidden (403)
Biasanya muncul begini:
Permission denied: AH00529: unable to check htaccess file
Penyebab utamanya simpel: permission folder lu di-host gak bisa dibaca Apache di container.
Cara fix:
docker exec -it ci4-manajemen-vendor bash
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
exit
Akses ulang aman.

5. Fix InvalidArgumentException (Masalah .env)
Error ini muncul kalo:
- File .env lu ilang
- Lu rename .env jadi .bak
- Atau formatnya salah parse
Solusi paling gampang adalah bikin file .env baru:
cp env.example .env
Habis itu CI4 langsung adem ayem lagi.
Kalau kamu commit file .env ke Git secara sengaja buat kebutuhan tim (padahal biasanya .env itu di-gitignore), pastikan juga versi .env.example selalu diupdate setiap kali ada environment variable baru yang ditambahin di .env, biar rekan tim yang baru clone project gak bingung env variable mana aja yang perlu diisi.
6. Fix Error Cache Unable to Write
Ini dia error yang paling sering dan paling ngeselin:
CacheException: Cache unable to write to "/var/www/html/writable/cache/"
Kenapa bisa gitu?
Karena folder writable yang nempel ke host itu pakai permission user host.
Sementara Apache dalam container jalan sebagai user www-data.
Akhirnya Apache gak dikasih izin buat edit.
Cara memperbaikinya:
A. Fix dari Host (cara paling bener)
sudo chown -R $USER:$USER /path/proyek/writable
sudo chmod -R 775 /path/proyek/writable
Atau buat testing:
sudo chmod -R 777 /path/proyek/writable
B. Fix dari Dalam Container
docker exec -it ci4-manajemen-vendor bash
chmod -R 777 writable
exit

Habis itu refresh auto sembuh.

Langkah perlindungan ke depannya
Agar permission tidak bikin Git error lagi:
git config core.fileMode false
Bonus: Error “500 Internal Server Error” Blank Page
Kadang muncul juga kasus halaman blank putih doang tanpa pesan error jelas, cuma status 500. Ini biasanya karena display_errors di PHP dimatiin secara default di image production-like. Buat debugging sementara, masuk ke container dan cek log Apache langsung:
docker exec -it ci4-manajemen-vendor bash
tail -f /var/log/apache2/error.log
Dari situ biasanya langsung ketauan akar masalahnya, entah itu extension PHP yang belum keinstall, syntax error, atau masalah permission yang belum kebahas di atas. Selain itu, pastikan juga CI_ENVIRONMENT di file .env di-set ke development pas lagi proses debug, biar CodeIgniter nampilin detail error di browser, bukan cuma halaman blank.
Penutup
Nah bro, sekarang CodeIgniter 4 lu udah bisa jalan mulus di Docker tanpa drama lagi.
Dari forbidden, error .env, sampai cache yang gak mau update, semuanya udah kita sikat satu-satu.
Semoga artikel santai ini bisa bantu lu yang lagi pusing sama CI4 + Docker.
Kalo ada error yang lebih aneh lagi, tinggal panggil aja. Kita oprek bareng sambil ngopi santuy.
Sampai ketemu di tutorial berikutnya bro. Tetap semangat ngoding, tapi jangan lupa hidup juga ya

























