- ดูทั้งหมด
$ docker ps -q | xargs docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
- ดู container เดียว
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
$ docker ps -q | xargs docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
failed to start daemon: Error initializing network controller: Error creating default "bridge" network: Failed to program NAT chain: ZONE_CONFLICT
Solved
$ sudo systemctl stop firewalld
$ sudo systemctl start docker
$ sudo systemclt start firewalld
sudo ip link delete docker0
sudo ip link delete br-xxxxx
sudo docker network create \
--driver=bridge \
--subnet=172.16.0.0/24 \
--ip-range=172.16.0.0/24 \
--gateway=172.16.0.1 \
hello-custom-net
sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https -y
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install nginx php8.3-fpm php8.3 php8.3-curl php8.3-xml php8.3-ziz php8.3-mbstring php8.3-mysql php8.3-gd -y
sudo apt install php8.2-sqlite3 php8.2-pdo-sqlite php8.2-pgsql
sudo apt install composer
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
server_name your_domain_or_ip; # Replace with your domain or IP address
root /var/www/html; # Or your web root directory
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
เพิ่มเติม
ปัญหาคือ
$ docker logs my-docker-name
$ compose install
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ compose install
$ chmod -R 707 storage
เพิ่มเติม
วิธีแรก
$ docker exec -it my-docker-name bash
# apt install nano
# nano /etc/apache2/sites-available/000-default.conf
# /etc/init.d/apache2 reload
วิธีที่ 2
$app = require_once __DIR__.'/../bootstrap/app.php';
$app = require_once __DIR__.'/bootstrap/app.php';
Code ที่มีปัญหากับไฟล์ภาพบางไฟล์ เมื่อวางหลัง WAF Cloudflare
Problem
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
Solved
Ref
https://stackoverflow.com/questions/11583562/how-to-kill-a-process-running-on-particular-port-in-linux
$ sudo fuser -k 8000/tcp
https://gemini.google.com/share/e70b6bf55e75
PM2 เป็นตัวจัดการโพรเซส (Process Manager) สำหรับ Node.js ที่มีประสิทธิภาพและนิยมใช้ในการนำแอปพลิเคชัน Node.js ไปใช้งานจริง (Production) บนเซิร์ฟเวอร์ มันช่วยให้แอปพลิเคชันของคุณทำงานได้อย่างต่อเนื่องตลอดเวลา (always-on), จัดการการโหลดบาลานซ์ (Load Balancing), และดูแลการรีสตาร์ทอัตโนมัติเมื่อเกิดข้อผิดพลาด
นี่คือวิธีการใช้งาน PM2 ตั้งแต่การติดตั้งไปจนถึงการใช้งานเบื้องต้น:
ติดตั้ง PM2 แบบ Global บนเซิร์ฟเวอร์ของคุณ เพื่อให้สามารถเรียกใช้คำสั่งได้จากทุกที่:
npm install -g pm2
มีหลายวิธีในการเริ่มต้นโปรเจกต์ด้วย PM2:
รันไฟล์หลักของแอปพลิเคชันของคุณ (สมมติว่าเป็น index.js หรือ app.js):
pm2 start index.js
คุณสามารถตั้งชื่อโพรเซสเพื่อระบุได้ง่ายขึ้น และตั้งค่าให้รีสตาร์ทอัตโนมัติเมื่อไฟล์มีการเปลี่ยนแปลง (สำหรับ Development/Testing):
pm2 start app.js --name "my-web-app" --watch
--name: ตั้งชื่อโพรเซส
--watch: โพรเซสจะรีสตาร์ทอัตโนมัติเมื่อโค้ดมีการเปลี่ยนแปลง (ควรปิดใน Production)
PM2 สามารถสร้างโพรเซสย่อย (Worker Processes) หลายตัวเพื่อใช้ประโยชน์จาก CPU หลายคอร์บนเซิร์ฟเวอร์ของคุณ ซึ่งช่วยเพิ่มประสิทธิภาพและรองรับการโหลดบาลานซ์:
# โดยที่ N คือจำนวน CPU Cores ที่คุณต้องการใช้ หรือใช้ 'max' เพื่อใช้ทุก Core
pm2 start app.js -i N
# หรือใช้ 'max' เพื่อใช้ทุก Core ที่มี
pm2 start app.js -i max
PM2 จะดูแลการกระจายคำขอ (Load Balancing) ไปยังโพรเซสย่อยทั้งหมดให้คุณโดยอัตโนมัติ
นี่คือคำสั่งพื้นฐานในการควบคุมโพรเซสที่คุณรันอยู่:
| คำสั่ง (Command) | คำอธิบาย (Description) |
pm2 status หรือ pm2 ls | แสดงรายการโพรเซสทั้งหมดที่รันอยู่พร้อมสถานะ |
| `pm2 stop <name | id>` |
| `pm2 restart <name | id>` |
| `pm2 delete <name | id>` |
pm2 stop all | หยุดโพรเซสทั้งหมด |
pm2 kill | ฆ่าโพรเซส Demon (โพรเซสหลักของ PM2) |
ใช้คำสั่งนี้เพื่อดู Log ทั้งหมดจากโพรเซสของคุณในหน้าจอเดียว:
pm2 logs
# หรือดู Log ของโพรเซสที่ระบุเท่านั้น
pm2 logs <name|id>
PM2 มีแดชบอร์ดใน Terminal ที่ช่วยให้คุณติดตามสถานะ CPU, Memory, และ Request Per Minute ได้แบบเรียลไทม์:
pm2 monit
สิ่งสำคัญใน Production คือการทำให้ PM2 และแอปพลิเคชันของคุณกลับมาทำงานได้ทันทีหลังจากที่เซิร์ฟเวอร์รีบูต:
สร้าง Startup Script:
pm2 startup
คำสั่งนี้จะสร้าง Service สำหรับระบบปฏิบัติการของคุณ (เช่น systemd บน Ubuntu) และแสดงคำสั่งที่คุณต้องรันต่อไป (ซึ่งมักจะต้องใช้ sudo)
บันทึกรายการโพรเซสปัจจุบัน:
หลังจากที่คุณเริ่มแอปพลิเคชันทั้งหมดที่คุณต้องการแล้ว ให้บันทึกรายการโพรเซสปัจจุบัน:
pm2 save
เมื่อเซิร์ฟเวอร์รีบูต PM2 จะโหลดโพรเซสทั้งหมดที่คุณบันทึกไว้กลับมาโดยอัตโนมัติ
pm2 install -g pm2
pm2 start app.js -i max --name "production-app" (เริ่มด้วยโหมด Cluster)
pm2 startup (ตั้งค่าให้รันเมื่อบูต)
pm2 save (บันทึกรายการโพรเซส)