- Published on
ลองสร้าง project php หลายตัวใส่ใน nginx ใน docker
สวัสดีคุณผู้อ่านทุกท่านเน้อครับ บทความวันนี้จะเป็นบทความเกี่ยวกับการสร้าง Project php หลาย ๆ ตัวใส่ใน nginx ใน Docker วิธีการทำจะต้องทำอย่างไร มาเริ่มกันเลยดีกว่าครับ
มาเริ่มกันเลย
เจมส์จะสร้างเป็น Project เปล่า ๆ ขึ้นมาก่อนเลยเน้อครับ โดย Project นี้เจมส์จะตั้งชื่อว่า learning-to-create-multiple-php-project-in-nginx
mkdir learning-to-create-multiple-php-project-in-nginx
cd ./learning-to-create-multiple-php-project-in-nginx
ตอนนี้เราอยู่ใน directory learning-to-create-multiple-php-project-in-nginx
แล้วเน้อครับ
ให้เราสร้าง directory ชื่อ project1 ขึ้นมาครับ
mkdir project1
จากนั้นให้เข้าไปใน project1 แล้วสร้าง Dockerfile ขึ้นมาครับ
cd ./project1
touch Dockerfile
โดยให้ใส่โค้ดใน Dockerfile ดังนี้ครับ
FROM php:8.0.2-fpm
WORKDIR /var/www/project1
และสร้างไฟล์ index.php ขึ้นมา
touch index.php
โดยเราจะให้แสดงผลว่า Project 1
<?php echo "Project 1"; ?>
ในส่วน Project 2 จะทำเหมือน Project 1 เลยครับ
เพียงแต่เราจะให้แสดงผลเป็น Project 2
แทน ซึ่งเราจะใช้คำสั่ง copy project1 เป็น project2 แล้วก็แก้ไขไฟล์ index.php ของ Project2
cp -r ../project1 ../project2
จากนั้นให้ย้อนไปอยู่ที่ root directory แล้วก็แก้ไขไฟล์ index.php
ใน project2
cd ..
แก้ให้ index.php ใน project2 แสดงผลเป็น Project 2
<?php echo "Project 2"; ?>
และแก้ Dockerfile ใน project2 ให้เป็นแบบนี้ครับ
FROM php:8.0.2-fpm
WORKDIR /var/www/project2
จากนั้นให้เราสร้าง directory ชื่อ nginx-config ที่ root project ครับ
mkdir nginx-config
แล้วก็เข้าไปใน directory nginx-config
cd ./nginx-config
จากนั้นให้สร้างไฟล์ชื่อ nginx.conf
ขึ้นมาครับ แล้วใส่โค้ดลงไปดังนี้ครับ
server {
listen 80;
server_name project1;
index index.php;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 404 /index.php;
root /var/www/project1;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass project1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
server {
listen 81;
server_name project2;
index index.php;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 404 /index.php;
root /var/www/project2;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass project2:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
จากนั้นให้เราย้อนกลับไปที่ root project อีกครั้ง
cd ..
ให้เราสร้างไฟล์ docker-compose.yaml
ขึ้นมาครับ
touch docker-compose.yaml
จากนั้นให้ใส่คำสั่งดังโค้ดด้านล่างลงไปครับ
version: '3'
services:
project1:
build:
context: ./project1
dockerfile: Dockerfile
container_name: project1-container
restart: always
working_dir: /var/www/project1
volumes:
- ./project1:/var/www/project1
project2:
build:
context: ./project2
dockerfile: Dockerfile
container_name: project2-container
restart: always
working_dir: /var/www/project2
volumes:
- ./project2:/var/www/project2
nginx:
image: nginx:1.19-alpine
container_name: nginx-container
restart: always
ports:
- 8081:80
- 8082:81
volumes:
- ./nginx-config:/etc/nginx/conf.d
- ./project1:/var/www/project1
- ./project2:/var/www/project2
เมื่อลอง Run คำสั่ง docker-compose up
เมื่อลองเข้า http://localhost:8081 จะพบว่าแสดงข้อความ Project 1
ขึ้นมา
เมื่อลองเข้า http://localhost:8082 จะพบว่าแสดงข้อความ Project 2
ขึ้นมา
การที่มันทราบว่า 8081 เป็น project1 และ 8082 เป็น project2 เนื่องจากไฟล์ nginx.conf ที่เราตั้งค่า ว่าในไฟล์นั้นเรา config ไว้ 2 port คือ 80 และ 81 โดยเมื่อเราเข้า 8081 มันจะไปที่ port 80 โดยดูจากไฟล์ docker-compose.yaml ซึ่ง port 80 เราตั้ง root project จะไปที่ /var/www/project1 (ใน nginx.conf) โดยจะตรงกับ /var/www/project1 ที่เรา mount อยู่เรียบร้อยแล้วในไฟล์ docker-compose.yaml ใน project1
ข้อควรระวัง ลองสังเกตใน nginx.conf ตรง
fastcgi_pass project1:9000;
ในส่วนที่เป็นproject1
ตรงนี้ต้องตรงกับชื่อ service ใน docker-compose.yaml ด้วย ไม่งั้นเมื่อเข้า http://localhost:8081 จะแสดงข้อความว่าfile not found
เรียบร้อยแล้วครับ หากบทความนี้มีส่วนไหนผิดพลาดประการใดก็ขออภัยมา ณ ที่นี้ด้วยครับ หรือหามีส่วนไหนเพิ่มเติมก็สามารถพิมพ์ คอมเม้นท์ทิ้งไว้ได้นะครับ
Github: https://github.com/jame3032002/learning-to-create-multiple-php-project-in-nginx