ในบทช่วยสอนนี้เราจะได้เรียนรู้วิธีตั้งค่าโปรแกรมประยุกต์บนเว็บ Koa.js สำหรับการผลิตโดยใช้ Node.js เราจะทำการเชื่อมโยงโดเมนตัวอย่างกับพร็อกซีย้อนกลับการใช้ Apache และเรียนรู้วิธีจัดการกับตัวจัดการกระบวนการที่เหมาะสม โดยไม่ต้องกังวลใจต่อไปเริ่มกันเลย
คำอธิบายสั้น ๆ ของ Node.js, Koa.js และ Apache
Node.js เป็นเฟรมเวิร์ก JavaScript ที่ทำงานข้ามแพลตฟอร์มได้อย่างรวดเร็วโดยใช้เอ็นจิ้น V8 ของ Chrome มันถูกใช้ในทั้งเดสก์ท็อปและเซิร์ฟเวอร์และมีชื่อเสียงในการจัดการห่วงเหตุการณ์แบบเธรดเดี่ยว Node.js มีการลงทะเบียนแพ็คเกจที่เรียกว่า Node Package Manager (NPM) ซึ่งโฮสต์มากกว่าครึ่งล้านแพ็คเกจ แพคเกจ NPM (หรือโมดูล) เป็นแกนหลักหลักของ Node.js เนื่องจากเป็นรหัสที่ขับเคลื่อนโดยชุมชนที่สามารถเป็นประโยชน์ในแอปพลิเคชัน Node.js ของคุณ ในแอป Koa.js ของเรา Node.js เป็นส่วนหลักของฟังก์ชั่น
Koa.js เป็นเฟรมเวิร์กทางเว็บที่เรียบง่ายสร้างขึ้นบนแพลตฟอร์ม Node.js สร้างขึ้นโดยทีมเดียวกันภายใต้กรอบงาน Express.js ที่ได้รับความนิยมเป้าหมายของมันคือการลดขนาดกรอบงาน Express.js ที่เรียบง่ายให้แล้วโดยการไม่รวมมิดเดิลแวร์จากแกนกลางของมัน คุณลักษณะที่สำคัญของ Koa.js คือข้อเท็จจริงที่ว่าไม่มีการโทรกลับ Koa.js สร้างจากเครื่องกำเนิดไฟฟ้าที่ใช้ ES6 และคุณสมบัติของ ES6 เช่นสัญญา
Apache เป็นเว็บเซิร์ฟเวอร์แบบโอเพ่นซอร์สยอดนิยมใช้เป็นจุดเริ่มต้นพื้นฐานสำหรับเว็บเซิร์ฟเวอร์ ในบทช่วยสอนนี้เราจะใช้ Apache เป็น reverse proxy ซึ่งจะช่วยให้เราเชื่อมโยงแอปพลิเคชันของเรากับโดเมนตัวอย่าง หากคุณไม่มีโดเมนบทช่วยสอนนี้ยังคงใช้ได้สำหรับคุณโดยมีความแตกต่างเพียงอย่างเดียวคือเว็บไซต์จะทำงานบน VPS IP ของคุณแทนโดเมน
การตั้งค่า Node.js
เช่นเดียวกับกรอบงาน Node.js คุณจะต้องติดตั้ง Node.js บน VPS ของคุณ เพื่อประโยชน์ของบทช่วยสอนนี้ฉันจะสมมติว่าคุณได้ติดตั้ง Node.js ในระบบของคุณแล้ว ถ้าไม่ได้คุณก็สามารถทำตามคำแนะนำที่นี่
การตั้งค่าไดเรกทอรีแอปพลิเคชันของเรา
เราจะต้องสร้างโฟลเดอร์ซึ่งจะมีไฟล์หลักของแอปพลิเคชันของเรา
mkdir site
คุณสามารถแทนที่site
ด้วยชื่ออื่น ๆ ที่คุณต้องการสำหรับไดเรกทอรี ต่อไปเราจะต้องเริ่มต้นไฟล์แพ็คเกจ Node.js ของเรา เปลี่ยนเป็นไดเร็กทอรีที่คุณเพิ่งสร้างและรันnpm init
และทำตามพร้อมต์ ในท้ายที่สุดควรมีลักษณะดังนี้:
{
"name": "site",
"version": "1.0.0",
"description": "Koa.js Site",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yourname",
"license": "ISC"
}
กำลังติดตั้ง Koa.js
ตอนนี้เรามีการตั้งค่าไดเรกทอรีของเราแล้วเราสามารถติดตั้ง Koa.js. ได้ ในไดเรกทอรีการทำงานปัจจุบัน/site
พิมพ์ต่อไปนี้
npm install koa
สิ่งนี้จะดาวน์โหลดโมดูล Koa.js จาก NPM และติดตั้งในไดเรกทอรีโครงการของเราเพื่อใช้ในอนาคต ต่อไปเราจะสร้างไฟล์แอปพลิเคชันตัวอย่างของเราที่จะเก็บรหัสแอปของเรา หากต้องการทำเช่นนั้นให้สร้างindex.js
ไฟล์
nano index.js
เมื่ออยู่ในไฟล์ให้สร้างแอปพลิเคชันตัวอย่าง
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
console.log('Website is live!')
บันทึกและปิดไฟล์ CTRL+ X.
เราต้องการตรวจสอบให้แน่ใจว่าใบสมัครของเราทำงานอย่างถูกต้อง ในการเริ่มต้นใช้node index.js
งานและคุณจะเห็นWebsite is live
ในคอนโซล
การติดตั้ง Apache
ตอนนี้เรารู้ว่าเว็บไซต์ของเราใช้งานได้เราสามารถทำการติดตั้ง Apache และอ้างอิงได้
sudo apt install -y libapache2-mod-proxy-html libxml2-dev
ในการใช้คุณสมบัติ reverse proxy ที่พบใน Apache เราจะต้องเปิดใช้งานโมดูลที่จำเป็น
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
โมดูลเหล่านี้บางส่วนอาจถูกเปิดใช้งานแล้ว แต่ก็เป็นการดีเสมอที่จะตรวจสอบอีกครั้ง
ตอนนี้เราต้องแก้ไขไฟล์กำหนดค่าเริ่มต้นสำหรับ Apache
sudo nano /etc/apache2/sites-enabled/000-default.conf
ที่นี่เราจะต้องเพิ่มบล็อกสำหรับแอปพลิเคชันของเรา
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:3000/
ProxyPassReverse / http://0.0.0.0:3000
ServerName localhost
</VirtualHost>
CTRLบันทึกไฟล์ X+
คุณอาจสังเกตเห็นว่าเรากำลังใช้พอร์ต3000
เป็นพอร์ตสำหรับเราProxyPass
และProxyPassReverse
IP เนื่องจากเป็นพอร์ตเดียวกับที่เรากำลังเรียกใช้แอปพลิเคชันของ Koa.js เราจึงจำเป็นต้องใส่พอร์ตที่ถูกต้อง
เมื่อมีการเปลี่ยนแปลงเราจะต้องรีสตาร์ท Apache และเปิดใช้งานแอปพลิเคชัน Koa.js อีกครั้ง
sudo systemctl restart apache2
สิ่งนี้จะช่วยให้มั่นใจได้ว่าไฟล์การกำหนดค่าของเราใช้งานได้และพร้อมใช้งานเมื่อเราเริ่มโปรแกรม Koa.js เมื่อรีสตาร์ท Apache แล้วให้กลับไปที่ไดเรกทอรีไซต์ของคุณแล้วเริ่มแอปพลิเคชัน Koa.js อย่างที่เราทำก่อนหน้านี้ จากเว็บเบราว์เซอร์นำทางhttp://yourdomain
หรือหรือจากhttp://yourip:
นั้นคุณจะเห็น "Hello World"
การจัดการแอปพลิเคชันของเราด้วย systemd
ตอนนี้เราได้ครอบคลุมพื้นฐานของการสร้างแอปพลิเคชันตัวอย่าง Koa.js แล้วเราตระหนักดีว่าในสภาพแวดล้อมการใช้งานจริง ผู้จัดการกระบวนการเป็นความต้องการอย่างแน่นอน นั่นคือสิ่งที่ systemd เข้ามาเล่น กล่าวง่ายๆว่า systemd ประกอบด้วยซอฟต์แวร์ที่จัดเตรียมโครงสร้างพื้นฐานสำหรับระบบ Linux เช่นเดียวกับ "init" มันมีระบบในการจัดการกระบวนการผู้ใช้หลังจากการเริ่มต้นระบบ ในกรณีของแอปพลิเคชันของเรา systemd ช่วยให้เราสามารถเริ่มเว็บไซต์ของเราโดยอัตโนมัติหลังจากระบบรีบูตในกรณีที่มีเหตุการณ์ที่ขัดขวางการทำงานของระบบ นอกจากนี้ยังมีชุดเครื่องมือที่มีประโยชน์เมื่อจัดการแอปพลิเคชันของเรา ส่วนที่ดีที่สุดคือความจริงที่ว่ามันสร้างขึ้นใน Ubuntu 16.04 LTS ดังนั้นเราไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติม
สร้างบริการ systemd
service
ทุกสิ่งที่เราจะต้องเริ่มต้นโปรแกรมของเราจะได้รับการบรรจุอยู่ในไฟล์ที่เรียกว่า มันเก็บรายละเอียดเกี่ยวกับแอพของเราเช่นชื่อไดเรกทอรีสภาพแวดล้อมและอื่น ๆ ในการสร้างไฟล์ระบบของเราให้เปิดโปรแกรมแก้ไขข้อความ
sudo nano /lib/systemd/system/site.service
แก้ไขและบันทึกไฟล์เช่นนี้
[Unit]
Description=desc here
Documentation=https://example.com
After=network.target
[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
แทนที่youruser
ด้วยชื่อผู้ใช้ของเซิร์ฟเวอร์ของคุณ นี่คือบทสรุปอย่างรวดเร็วของฟิลด์สำคัญ:
After
- สิ่งนี้แจ้งให้ systemd รอจนกระทั่งอินเตอร์เฟสเครือข่ายพร้อมก่อนเริ่มต้นแอปพลิเคชันของเรา
Environment
- ที่นี่เราสามารถระบุตัวแปรสภาพแวดล้อมสำหรับแอปพลิเคชันของเรา พอร์ต Node.js ของเราเป็นหนึ่งในนั้น
Type
- สิ่งนี้แจ้งให้ systemd ทราบว่าแอปของเราสามารถเริ่มต้นใช้งานได้โดยไม่ต้องรอสิทธิ์ของผู้ใช้และอื่น ๆ
User
- สิ่งนี้บอก systemd ว่าเราต้องการเรียกใช้แอปพลิเคชันภายใต้บัญชีผู้ใช้ของเราซึ่งแนะนำ การรันแอ็พพลิเคชันในฐานะผู้ใช้รูทสามารถนำไปสู่ความปลอดภัยลดลงมากมาย
ExecStart
- โดยพื้นฐานแล้วคำสั่งที่ systemd จะทำงานเพื่อเริ่มแอปพลิเคชันของเราคล้ายกับวิธีที่เราเริ่มต้นด้วยตนเองก่อน
Restart
- บอก systemd ภายใต้เงื่อนไขที่จะรีสตาร์ทแอปพลิเคชันของเรา ในกรณีนี้เราต้องการให้เว็บไซต์ของเราเริ่มต้นใหม่ในกรณีที่มีข้อผิดพลาด
เริ่มบริการ systemd
ตอนนี้เราพร้อมที่จะเริ่มบริการ systemd ของเราแล้ว
sudo systemctl daemon-reload
นี่เป็นสิ่งจำเป็นเมื่อใดก็ตามที่ไฟล์เซอร์วิส systemd เปลี่ยนแปลงเพื่อให้ systemd ลงทะเบียนการเปลี่ยนแปลงใหม่ที่ทำ
จากนั้นเริ่มแอปพลิเคชันของคุณ
sudo systemctl start site
นำทางไปยังไซต์ในเบราว์เซอร์ของคุณอีกครั้งเพื่อตรวจสอบว่าทุกอย่างใช้งานได้
คีย์ systemd การจัดการฟังก์ชั่น
stop
- หยุดแอปพลิเคชันอย่างสมบูรณ์
restart
- หยุดแอปพลิเคชันและเริ่มต้นอีกครั้งภายใต้กระบวนการใหม่
enable
- บอกให้ systemd เริ่มต้นแอปพลิเคชันเมื่อใดก็ตามที่คุณเปิดเครื่องคอมพิวเตอร์
status
- แสดงข้อมูลเกี่ยวกับแอปพลิเคชั่นที่กำลังทำงานเช่นสถานะการออนไลน์สถานะแอพพลิเคชั่นและอื่น ๆ
หากต้องการใช้ฟังก์ชันใด ๆ เหล่านี้ให้เรียกใช้สิ่งต่อไปนี้
systemctl <function> site
ข้อสรุป
เราได้ตั้งค่าแอปพลิเคชัน Koa.js สำเร็จแล้วและเรียนรู้วิธีย้อนกลับพรอกซีรวมทั้งจัดการกับ systemd ตอนนี้คุณพร้อมที่จะขยายแอปพลิเคชันและสร้างตามตัวอย่าง หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Koa.js และสิ่งอื่น ๆ ที่คุณสามารถทำได้โปรดเยี่ยมชมเว็บไซต์ของพวกเขาเพื่อรับข้อมูลที่เป็นประโยชน์เพิ่มเติม นอกจากนั้นถ้าคุณต้องการที่จะเรียนรู้เพิ่มเติมเกี่ยวกับกระบวนการผู้จัดการ systemd ของอ่านเอกสารสำหรับมันนี่ สุดท้ายหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ reverse proxy ของ Apache อย่าลังเลที่จะตรวจสอบพวกเขาที่นี่