- ประเด็นคือ ย้าย Slim Framework 4++ จากเครื่อง มาอีกเครื่องซึ่ง php มันเป็น 7.0 ทำให้ api ใช้งานไม่ได้เพราะเค้าต้องการ 7.4
Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0".
- แต่เราจะไม่ไปยุ่งกับ Environment เครื่องหลัก เราแก้ปัญหาโดยติดตั้ง docker และใช้งาน container แทน
Step
- ที่เครื่องปลายทางที่ต้องการจะย้ายไป ให้ ssh เข้าไปตั้งค่าได้เลย
- ติดตั้ง docker-ce ให้เรียบร้อย และเช็คสถานะ systemctl status docker
- จากนั้นเราไปสร้าง Dockerfile ใน user เรา
$ cd /home/myuser & mkdir mydocker
$ cd mydocker
- คัดลอกโปรเจค slim framework ลงมา
$ scp -r user@server:/path/myslim ./
- เราจะได้ folder ชื่อ myslim ที่ client แล้ว
- สร้าง Docker file
$ nano Dockerfile
# Use the official PHP 7.4 with Apache base image
FROM php:7.4-apache
# Enable Apache mod_rewrite
RUN a2enmod rewrite
# Install GD extension and MySQL extension
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libzip-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
&& docker-php-ext-install mysqli pdo pdo_mysql zip
# Set up Apache configuration (optional: can adjust according to your needs)
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
# Restart Apache to ensure the modules and settings are applied
CMD ["apache2-foreground"]
- build image ใหม่จากต้นฉบับให้เป็นแบบคอนฟิกตามเราก่อนรัน และตั้งชื่อใหม่ จาก Dockerfile ที่เราได้ตั้งค่าต่างๆ ไว้ด้วยคำสั่ง
$ docker build -t php74-apache .
- ได้ image ของเราแล้วที่คอนฟิกพร้อม ตามต้องการของเรา จากนั้น สร้าง และ รัน container จาก image ของเรา
- กรณีรันโดยไม่ map web root folder ใน container
$ docker run -d -p 8080:80 --name my_php74_container php74-apache
- ทดสอบสร้างไฟล์ info.php ใน container
$ docker exec -it my_php74_container bash
root@1fxxxx:/var/www/html# echo "<?php phpinfo(); ?>" >> info.php
root@1fxxxx:/var/www/html# exit
- กรณีเราจะ map volumen กับ /home/myuser/mydocker/myslim ที่เครื่อง host
$ docker run -d -p 8080:80 --name my_php74_container \
-v /home/myuser/mydocker/myslim:/var/www/html php74-apache
- ทดสอบใช้งานโดย http://localhost:8080/endpoint
เพิ่มเติม
- กรณีนี้ เราทำ api เป็น sub folder แต่ย้ายมาแล้วเราเอาวางไว้ root web container เลยให้ทำการแล้วไขไฟล์ /home/myuser/mydocker/myslim
$ nano /home/myuser/mydocker/myslim/index.php
- ปิดการใช้แบบ subfolder ให้ comment ไว้เลย
/** set path for app subdirectory */
// $app->setBasePath('/mysubapp');
Ref
- https://chatgpt.com/share/6705face-c598-8010-b864-51a1763d4042