Sebagai developer, terkadang kita tidak bisa lari dari legacy project. Baru-baru ini, saya harus menghidupkan kembali aplikasi berbasis CodeIgniter 3 yang membutuhkan PHP 7.0. Masalahnya, PHP 7.0 dan Debian Stretch (base image-nya) sudah lama mencapai End of Life (EOL).
Di sistem immutable seperti Fedora Silverblue, menjalankan stack jadul ini di dalam kontainer adalah solusi paling bersih. Berikut adalah panduan setup LAMP Stack legacy menggunakan Podman, lengkap dengan trik repositori dan Composer.
Tantangan Repositori EOL
Masalah utama saat menggunakan php:7.0-apache sekarang adalah apt-get update pasti gagal karena server Debian Stretch sudah dipindahkan ke arsip. Kita harus melakukan patching pada sources.list di dalam Dockerfile agar bisa menginstall ekstensi yang dibutuhkan.
Struktur Project Modular
Agar rapi dan mudah dimigrasi, saya menggunakan struktur folder seperti ini:
legacy-lamp/
├── apache/
│ ├── Dockerfile
│ └── vhost.conf
├── mariadb/
│ └── Dockerfile
├── phpmyadmin/
├── code/ # Source code aplikasi (CI3/Laravel)
└── docker-compose.yaml
Dockerfile: Trik Archive & Composer 2.2
Inilah “resep rahasia” agar PHP 7.0 tetap bisa menginstall paket sistem dan menjalankan Composer modern (v2.2 LTS adalah versi terakhir yang mendukung PHP 7.0).
- apache/Dockerfile
FROM docker.io/library/php:7.0.33-apache
# 1. Fix repository untuk Debian Stretch (EOL) agar bisa install paket
RUN sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list && \
sed -i '/security.debian.org/d' /etc/apt/sources.list && \
sed -i '/stretch-updates/d' /etc/apt/sources.list && \
echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/10no-check-valid && \
echo 'Acquire::AllowInsecureRepositories "true";' >> /etc/apt/apt.conf.d/10no-check-valid && \
echo 'APT::Get::AllowUnauthenticated "true";' >> /etc/apt/apt.conf.d/10no-check-valid
# 2. Install dependencies & PHP extensions
RUN apt-get update && \
apt-get -o Acquire::AllowInsecureRepositories=true -o APT::Get::AllowUnauthenticated=true install -y \
libpng-dev libjpeg-dev libonig-dev libxml2-dev \
zip unzip git curl libmcrypt-dev libicu-dev \
&& docker-php-ext-install \
mysqli \
pdo \
pdo_mysql \
gd \
mbstring \
mcrypt \
bcmath \
zip \
intl
# 3. TAMBAHAN: Install Composer 2.2 LTS (Versi terakhir yang dukung PHP 7.0 secara stabil)
COPY --from=docker.io/library/composer:2.2 /usr/bin/composer /usr/bin/composer
# 4. Aktifkan mod_rewrite untuk CodeIgniter
RUN a2enmod rewrite
# 5. Konfigurasi virtual host
COPY vhost.conf /etc/apache2/sites-available/000-default.conf
# Tambahkan ini sebelum WORKDIR jika ingin melihat error langsung
RUN echo "display_errors = On" > /usr/local/etc/php/conf.d/error-reporting.ini && \
echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/error-reporting.ini
WORKDIR /var/www/html
# Pastikan user www-data memiliki akses ke folder code
RUN chown -R www-data:www-data /var/www/html
- apache/vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
- mariadb/Dockerfile
FROM mariadb:10.1.37
Konfigurasi Podman Compose
Satu hal krusial di Fedora Silverblue adalah SELinux. Kita harus menambahkan suffix :Z pada volume agar kontainer punya izin akses ke folder di host.
services:
lamp_apache:
build: ./apache
container_name: lamp_apache
ports:
- "8080:80"
volumes:
- ./code:/var/www/html:Z
networks:
- lamp_net
depends_on:
- lamp_mariadb
lamp_mariadb:
build: ./mariadb
container_name: lamp_mariadb
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: legacy_db
MYSQL_USER: legacy_user
MYSQL_PASSWORD: legacy_pass
ports:
- "3307:3306"
volumes:
- mariadb_data:/var/lib/mysql:Z
networks:
- lamp_net
phpmyadmin:
image: phpmyadmin/phpmyadmin:4.8.4
container_name: lamp_phpmyadmin
environment:
PMA_HOST: lamp_mariadb
PMA_PORT: 3306
ports:
- "9090:80"
depends_on:
- lamp_mariadb
networks:
- lamp_net
volumes:
mariadb_data:
networks:
lamp_net:
driver: bridge
Workflow Menjalankan Composer
Karena Composer sudah ada di dalam kontainer web, kita tidak perlu menginstallnya di Fedora host. Cukup jalankan via podman exec:
# Jalankan install di subfolder project
podman exec -it -w /var/www/html/nama-project legacy-lamp composer install
Tips Troubleshooting di Silverblue
Jika kamu menemui error 403 Forbidden atau Permission Denied saat menulis cache/logs:
- Pastikan volume menggunakan
:Z. - Jalankan
sudo restorecon -Rv ./codeuntuk mereset konteks SELinux. - Ubah ownership folder cache ke
www-datadi dalam kontainer.
Kesimpulan
Dengan memindahkan legacy environment ke kontainer Podman, kita tetap bisa produktif mengerjakan project lama tanpa harus mengompromikan keamanan dan stabilitas sistem operasi Fedora Silverblue kita.
Sampai jumpa di tutorial berikutnya!