สร้าง service ให้ nodejs app
18 June 2024
พอดีสร้าง ansible api ขึ้นมาด้วย nodejs จะได้เอาไว้ให้สามารถ run ansible playbook จากที่ไหนก็ได้ พอทำเสร็จแล้วก็อยากให้โปรแกรมที่เขียนไว้ autostart ขึ้นมาเองทุกครั้งที่มีการปิดเปิดเครื่อง รวมถึงอยากจะให้สามารถดูสถานะของ service ได้ สามารถ stop/start/restart service ได้ด้วย
พอคิดได้แล้วก็เอาไปคุยกับ chatgpt แล้วเอามาลองทำได้ผลตามนี้
เริ่มจากให้เราทำการสร้าง service file ขึ้นมาก่อน
sudo vi /etc/systemd/system/my-node-app.service
แล้วใส่ค่าตามนี้
[Unit]
Description=My Node.js Application
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/app.js
WorkingDirectory=/path/to/your/
Restart=always
User=nobody
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
# Adjust the above lines according to your setup
[Install]
WantedBy=multi-user.target
Description จะเป็นชื่อที่แสดงตอนที่เราดูสถานะของ service
/path/to/your/app.js เป็น full path พร้อมชื่อของตัวโปรแกรมของเรา
WorkingDirectory เป็น full path ของตัวโปรแกรม
User เป็น Owner ของตัวโปรแกรม
Group เป็น Group ของ Owner
ตัวอย่างที่เขียนจริง….
หลังจากเขียนเสร็จแล้วต้องทำการ reload daemon เพื่อให้ systemd รู้จัก service ที่เพิ่งสร้างขึ้นใหม่โดยใช้คำสั่ง
sudo systemctl daemon-reload
คราวนี้ก็มาตั้งให้ service autostart ทุกครั้งที่เปิดเครื่อง
sudo systemctl enable my-node-app
แค่นี้โปรแกรมเราก็จะ autostart ทุกครั้งที่เปิดเครื่องใหม่แล้ว
ถ้าเราอยากจะ stop/start/restart service ก็สามารถใช้คำสั่งต่าง ๆ เหล่านี้ได้
sudo systemctl stop my-node-app
sudo systemctl start my-node-app
sudo systemctl restart my-node-app
คราวนี้ลอง start service ขึ้นมาดูแล้วตรวจสอบสถานะ
จะเห็นว่าสถานะของ service เราเป็น running
คราวนี้ลองใช้เครื่องจากข้างนอกเรียก playbook ที่ต้องการสั่งเข้าไป
อันนี้สั่งผ่าน command line ของ windows ถ้าเราจะสั่งจากโปรแกรมที่เขึยนเอง หรือสั่งจาก postman ก็ได้นะครับ
เท่านี้ ansible api ที่เขียนด้วย nodejs เราก็จะ start ขึ้นมาพร้อมใช้งานทุกครั้งที่เราปิดเปิดเครื่องแล้วครับ