Deploy CodeIgniter 3 di Docker
Artikel ini diperbarui pada 30 November 2022.
Source code web app terdapat pada folder myweb, berikut ini adalah hal-hal yang saya lakukan untuk melakukan deploy CI3 di Docker.
Docker Image
Saya gunakan dua buah docker container untuk PHP + web server dan database. Pertama saya unduh docker image mysql versi 5.7.40 melalui perintah CLIsudo docker pull mysql:5.7.40
*supaya tidak perlu pakai sudo untuk mengeksekusi docker, caranya bisa dibaca di https://www.ardhi.web.id/2020/12/menjalankan-docker-tanpa-sudo-di-ubuntu.html
Kemudian yang kedua, saya buat custom docker image untuk PHP + web servernya. Saya gunakan PHP versi 5.6.38 dan Apache Httpd untuk web servernya. Buat file dengan nama Dockerfile untuk membangun custom image yang berisi PHP, web server Apache, dan sejumlah extension PHP lainnya. Isi dari Dockerfile adalah sebagai berikut
FROM php:5.6.38-apache RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_mysql mysql mysqli RUN a2enmod rewriteScript tersebut digunakan untuk membangun custom image yang berisi PHP 5.6.38 + web server Apache ditambah extension php-ext, pdo, pdo_mysql, mysql, dan mysqli.
Selanjutnya lakukan build image docker dari script Dockerfile yang sudah ditulis, melalui command line masuk ke direktori tempat Dockerfile berada selanjutnya eksekusi perintah berikut
sudo docker build -t php5 .Perintah docker build tersebut setelah dieksekusi akan menghasilkan image dengan nama php5 yang isinya telah didefinisikan dalam Dockerfile.
Container
Langkah selanjutnya adalah membuat container, saya menggunakan docker compose untuk menuliskan konfigurasi container yang akan digunakan. Buat file docker-compose.yml dengan isi sebagai berikut
# versi script docker-compose version: "3.8" services: php-apache-environment: #nama container container_name: php-apache # image docker yang digunakan image: php5 # port yang digunakan # port 80 di container, diakses melalui port 8080 di host OS ports: - "8080:80" # menghubungkan folder di host OS / laptop ke container # folder /var/www/html di sisi container # /home/linuxluv/myweb/ di host OS tempat menyimpan source code web volumes: - /home/linuxluv/myweb/:/var/www/html db: container_name: db image: mysql:5.7.40 restart: always # user name dan password untuk mengakses mysql environment: MYSQL_ROOT_PASSWORD: 'pass' MYSQL_USER: 'admin' MYSQL_PASSWORD: 'pass' ports: - "3306:3306" # menghubungkan folder di host OS / laptop ke container # agar database tersimpan permanen # /var/lib/mysql di container dimapping ke /home/linuxluv/dbvol di laptop volumes: - /home/linuxluv/dbvol:/var/lib/mysql
Selanjutnya container dapat dijalankan melalui perintah
sudo docker-compose up
Import database
Database dapat diimport agar masuk ke container dengan cara login lewat bash ke container dbsudo docker exec -it db bash
db adalah nama container database yang dibuat di docker-compose.yml, setelah berhasil login lanjutkan dengan mengcreate database dan dilanjutkan dengan import db (file .sql)
config.php
Ubah base_url di konfigurasi CI dengan mengedit file application/config/config.php. Ubah host dan port, misal di sini saya menggunakan port 8080 di localhost$config['base_url'] = 'http://localhost:8080/myweb
.htaccess
Selanjutnya edit file .htaccess di dalam folder myweb (source code web app) untuk mengakfitkan rewrite engine PHPOptions +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]Buka web browser dan ketik localhost:8080 untuk mengakses web app
databasenya gimana pak?
ReplyDeletemasih di server terpisah, belum didocker-kan
DeleteSudah saya update, database juga dibuat docker imagenya.
DeleteBisa di docker juga om. Cuma pas running di tambahi -- link .
ReplyDeleteAtau bisa juga connect pake docker network..
dockerfile nya disimpan diluar project atau di dalam projek ?
ReplyDeleteDi luar project. FYI : cara yang saya tulis ini masih kurang bagus, akan saya update nanti.
Deleteartikel sudah saya update
Deleteijin bertanya bang. Di saya, hanya $route['default_controller'] = 'home' saja yg bisa dijalankan. Begitu mengakses controller lain selain yg default_controller muncul pesan "The requested URL was not found on this server"
ReplyDeletemasukin ke route supaya bisa diakses, atau pake autoroute
DeleteIjin bertanya bang, kok hanya default_controller yg di route sj yg bisa diakses. Jika mengakses controller lain muncul pesan "The requested URL was not found on this server." Padahal di php-apache nya sdh diset volumes:
ReplyDelete- ./public:/var/www/html
masukin ke route supaya bisa diakses, atau pake autoroute
DeleteForbidden
ReplyDeleteYou don't have permission to access / on this server.
itu knp ya mas? saya docker nya install di vm ubuntu 22.04
kak knp pas di akses http://localhost:8080 >> Forbidden
ReplyDeleteYou don't have permission to access / on this server.
kira kira knp ya kak? syntax compose dll sudah benar
/ itu diarahkan ke folder mana di docker?
Delete