สร้าง service ให้ nodejs app

Prawit Tangmanopeanchai
2 min readJun 18, 2024

--

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 ขึ้นมาพร้อมใช้งานทุกครั้งที่เราปิดเปิดเครื่องแล้วครับ

--

--

Prawit Tangmanopeanchai
Prawit Tangmanopeanchai

Written by Prawit Tangmanopeanchai

Head of Cloud Implementation Unit at gosoft (Thailand)

No responses yet