คู่มือ Let's Encrypt SSL with Node.js สำหรับ การตั้งค่า Application
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
คำสั่ง ชื่อเมนู พารามิเตอร์ และค่าตัวอย่างในกรอบ Code คงรูปแบบตามระบบเพื่อให้คัดลอกและตรวจสอบได้ถูกต้อง
แพลตฟอร์มนี้ทำการผูกใบรับรอง SSL โดยอัตโนมัติสำหรับกองซอฟต์แวร์ส่วนใหญ่เมื่อทำงานกับมาเข้ารหัสกันเถอะส่วนเสริมอย่างไรก็ตามการทำงานอัตโนมัติแบบสำเร็จรูปเป็นเรื่องยากสำหรับ Node Node.js เนื่องจากข้อกำหนดเฉพาะของสแต็กในแอปพลิเคชัน Node.js จะมีการออกใบรับรอง Let's Encrypt แต่ไม่ถูกผูกไว้ - เพียงเก็บไว้ที่/var/lib/Ruk-Com PaaS/keysไดเรกทอรีคุณสามารถใช้ใบรับรองเหล่านี้ในแอปพลิเคชันของคุณได้ด้วยตนเองโดยการสร้างเว็บเซิร์ฟเวอร์และอ่านใบรับรองโดยตรงจากโค้ด
เคล็ดลับ:คุณสามารถวาง aโหลดบาลานเซอร์Node ด้านหน้าเซิร์ฟเวอร์ Node.js ของคุณเพื่อทำหน้าที่เป็นพร็อกซีย้อนกลับที่มาเข้ารหัส SSL กันเถอะสามารถติดตั้งส่วนเสริมบนบาลานเซอร์ดังกล่าวได้โดยได้รับประโยชน์จากการทำงานอัตโนมัติทันทีที่แกะกล่อง
แนวทางดังกล่าวเหมาะสำหรับโครงการขนาดใหญ่ที่ต้องการใช้มาตราส่วนแนวนอนเนื่องจากจะต้องใช้ Node โหลดบาลานเซอร์อยู่แล้ว
คู่มือนี้จะเป็นตัวอย่างพื้นฐานเกี่ยวกับวิธีการใช้งานโปรแกรมเสริม Let’s Encrypt SSL สำหรับแอปพลิเคชัน Node.js
การใช้ SSL กับ NodeJS
- สร้าง EnvironmentกับNode jsแอปพลิเคชันเซิร์ฟเวอร์
2. ติดตั้งมาเข้ารหัสกันเถอะโปรแกรมเสริมเพื่อสร้างใบรับรอง SSL ฟรีสำหรับแอปพลิเคชันของคุณ
เนื่องจากข้อกำหนดเฉพาะของกลไก Node.js โปรแกรมเสริม Let's Encrypt จึงสร้างใบรับรอง SSL เท่านั้นคุณต้องปรับรหัสแอปพลิเคชันของคุณด้วยตนเองเพื่ออ่านใบรับรองจาก:
- /var/lib/Ruk-Com PaaS/keys/privkey.pem
- /var/lib/Ruk-Com PaaS/keys/fullchain.pem
- /var/lib/Ruk-Com PaaS/keys/ca.cer
- สร้างแอปใหม่หรือผสานรวมการกำหนดค่า HTTPSลงในแอปพลิเคชันที่มีอยู่ตรวจสอบตัวอย่างด้านล่าง:
- แอปพลิเคชันใหม่– แทนที่เนื้อหาของค่าเริ่มต้นเซิร์ฟเวอร์.jsไฟล์ใน/home/รักคอม PaaS/ROOTไดเรกทอรี
สำเนา
const https = require('node:https');
const fs = require('node:fs');
const options = {
key: fs.readFileSync('/var/lib/jelastic/keys/privkey.pem'),
cert: fs.readFileSync('/var/lib/jelastic/keys/fullchain.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(443);
console.log("The HTTPS server has started at: https://localhost:443/");
- แอปพลิเคชันที่มีอยู่– เช่นปรับใช้ค่าเริ่มต้น “สวัสดีชาวโลก” จัดทำแพ็คเกจและแก้ไขไฟล์/home/รักคอม PaaS/ROOT/server.jsไฟล์เพื่อทำงานบน HTTPS
สำเนา
#!/usr/bin/env node
var https = require("https"),
url = require("url"),
ejs = require("ejs"),
fs = require("fs"),
os = require("os"),
staticResource = require("static-resource"),
port = 443,
serverUrl,
handler,
favicon;
const options = {
key: fs.readFileSync('/var/lib/jelastic/keys/privkey.pem'),
cert: fs.readFileSync('/var/lib/jelastic/keys/fullchain.pem')
};
serverUrl = "https://localhost:" + port + "/";
handler = staticResource.createHandler(fs.realpathSync("./public"));
favicon = fs.realpathSync('./public/favicon.png');
https.createServer(options, function (req, res) {
var path = url.parse(req.url).pathname;
if (path === "/") {
res.writeHead(200, {"Content-Type": "text/html"});
res.write(ejs.render(fs.readFileSync("./index.ejs", "utf8"), {
hostname: os.hostname()
}));
res.end();
} else if (req.method === 'GET' && path === '/favicon.png') {
res.setHeader('Content-Type', 'image/png');
fs.createReadStream(favicon).pipe(res);
} else {
if (!handler.handle(path, req, res)) {
res.writeHead(404);
res.write("404");
res.end();
}
}
}).listen(port);
console.log("The HTTPS server has started at: " + serverUrl);
- เรียกใช้แอปพลิเคชันของคุณผ่านทางเว็บ SSH. ในตัวอย่างของเราเราใช้ตลอดไปผู้จัดการกระบวนการ(ซูโดะจำเป็นต้องฟังบนพอร์ตที่ได้รับสิทธิพิเศษ443).
สำเนา
cd /home/jelastic/ROOT
sudo forever start server.js
บันทึก:ควรปรับเปลี่ยนคำสั่งสำหรับผู้จัดการกระบวนการที่แตกต่างกันหรือคุณสามารถเริ่มแอปพลิเคชันของคุณได้โดยไม่ต้อง:
สำเนา
sudo node server.js
นั่นคือทั้งหมด! ไปที่แอปพลิเคชัน Node.js ของคุณhttps://เพื่อตรวจสอบการเข้าถึงและความถูกต้องของใบรับรอง
การอัปเดตใบรับรอง
ใบรับรอง Let's Encrypt SSL ยังคงใช้ได้เป็นเวลา 90 วันหลังจากนั้นควรอัปเดตเพื่อให้การเข้ารหัสยังคงใช้งานได้ส่วนเสริมจะให้การต่ออายุอัตโนมัติ 30 วันก่อนหมดอายุอย่างไรก็ตามหลังจากอัปเดตใบรับรองแล้วคุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ (หากเป็นไปได้ควรโหลดซ้ำ) เพื่อใช้ใบรับรองใหม่
การดำเนินการสามารถเป็นอัตโนมัติควบคู่ไปกับการอัปเดตใบรับรองได้โดยใช้เว็บฮุค– สคริปต์แบบกำหนดเองที่ดำเนินการหลังจากการดำเนินการเสริมเริ่มต้น
ไปที่/var/lib/Ruk-Com PaaS/keys/letsencryptโฟลเดอร์ (สร้างหากหายไป) และเพิ่มไฟล์การตั้งค่าแบบกำหนดเองไฟล์. ขึ้นอยู่กับตัวจัดการกระบวนการ Node.jsสคริปต์รีสตาร์ท/โหลดซ้ำของคุณอาจแตกต่างกันไปตัวอย่างเช่น:
สำเนา
deployHook=sudo forever restart /home/jelastic/ROOT/server.js
เคล็ดลับ:หรือคุณสามารถจัดเตรียม.ชสคริปต์พร้อมคำสั่งที่จำเป็น:
สำเนา
deployHook: /path/to/your/file.sh
ตรวจสอบให้แน่ใจว่าไฟล์สคริปต์ของคุณสามารถเรียกใช้งานได้ (chmod +x {ชื่อไฟล์}). ตัวอย่างเช่นเนื้อหาสคริปต์อาจเป็นดังนี้:
สำเนา
#!/bin/bash
echo "This is example of deployHook script" >> /tmp/testFile
นอกจากนี้คุณยังสามารถกำหนดค่า hook การอัพเดตผ่าน API ได้โดยใช้ปรับใช้ Hookพารามิเตอร์. ดูมาเข้ารหัส SSL กันเถอะบทความเพื่อดูรายละเอียดเพิ่มเติม
คุณสามารถทริกเกอร์การอัปเดตใบรับรองได้ด้วยตนเองจากส่วนเสริมเมนูสำหรับเซิร์ฟเวอร์ Node.js ของคุณ
คำแนะนำเพิ่มเติม
- สร้างตัวแปร Environment พร้อมเส้นทางไปยังใบรับรอง Let's Encrypt เพื่อหลีกเลี่ยง "ฮาร์ดโค้ด" และทำให้การแก้ไขง่ายขึ้นในกรณีที่มีการเปลี่ยนแปลงตำแหน่งของใบรับรอง
- มาเข้ารหัสใบรับรองกัน-/var/lib/Ruk-Com PaaS/keys/fullchain.pem
- มาเข้ารหัสคีย์ส่วนตัวกันเถอะ-/var/lib/Ruk-Com PaaS/keys/privkey.pem
* เมื่อทำงานกับมาเข้ารหัสส่วนเสริมผ่าน API กันคุณสามารถใช้ปรับใช้ Hookพารามิเตอร์เพื่อจัดการตรรกะที่กำหนดเองเมื่อมีการออก/อัปเดตใบรับรอง


