Wednesday, October 9, 2024

Use docker container run Slim Framework 4 on Ubuntu 18.04

  • ประเด็นคือ ย้าย 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

No comments:

Post a Comment

Popular Posts