ศูนย์คู่มือ Ruk-Com PaaS

คู่มือการพัฒนา Deploy และดูแล Application บนแพลตฟอร์ม

RUK-COM PAAS / APPLICATION SETTINGS

คู่มือ 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

  1. สร้าง EnvironmentกับNode jsแอปพลิเคชันเซิร์ฟเวอร์

Image 36: create Node.js environment2. ติดตั้งมาเข้ารหัสกันเถอะโปรแกรมเสริมเพื่อสร้างใบรับรอง SSL ฟรีสำหรับแอปพลิเคชันของคุณ

Image 37: install Let’s Encrypt add-onเนื่องจากข้อกำหนดเฉพาะของกลไก 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
  1. สร้างแอปใหม่หรือผสานรวมการกำหนดค่า 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);
  1. เรียกใช้แอปพลิเคชันของคุณผ่านทางเว็บ SSH. ในตัวอย่างของเราเราใช้ตลอดไปผู้จัดการกระบวนการ(ซูโดะจำเป็นต้องฟังบนพอร์ตที่ได้รับสิทธิพิเศษ443).

สำเนา

cd /home/jelastic/ROOT
sudo forever start server.js

บันทึก:ควรปรับเปลี่ยนคำสั่งสำหรับผู้จัดการกระบวนการที่แตกต่างกันหรือคุณสามารถเริ่มแอปพลิเคชันของคุณได้โดยไม่ต้อง:

สำเนา

sudo node server.js

นั่นคือทั้งหมด! ไปที่แอปพลิเคชัน Node.js ของคุณhttps://เพื่อตรวจสอบการเข้าถึงและความถูกต้องของใบรับรอง

Image 38: Node.js application SSL access

การอัปเดตใบรับรอง

ใบรับรอง Let's Encrypt SSL ยังคงใช้ได้เป็นเวลา 90 วันหลังจากนั้นควรอัปเดตเพื่อให้การเข้ารหัสยังคงใช้งานได้ส่วนเสริมจะให้การต่ออายุอัตโนมัติ 30 วันก่อนหมดอายุอย่างไรก็ตามหลังจากอัปเดตใบรับรองแล้วคุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ (หากเป็นไปได้ควรโหลดซ้ำ) เพื่อใช้ใบรับรองใหม่

การดำเนินการสามารถเป็นอัตโนมัติควบคู่ไปกับการอัปเดตใบรับรองได้โดยใช้เว็บฮุค– สคริปต์แบบกำหนดเองที่ดำเนินการหลังจากการดำเนินการเสริมเริ่มต้น

ไปที่/var/lib/Ruk-Com PaaS/keys/letsencryptโฟลเดอร์ (สร้างหากหายไป) และเพิ่มไฟล์การตั้งค่าแบบกำหนดเองไฟล์. ขึ้นอยู่กับตัวจัดการกระบวนการ Node.jsสคริปต์รีสตาร์ท/โหลดซ้ำของคุณอาจแตกต่างกันไปตัวอย่างเช่น:

สำเนา

deployHook=sudo forever restart /home/jelastic/ROOT/server.js

Image 40: Let’s Encrypt update webhook

เคล็ดลับ:หรือคุณสามารถจัดเตรียม.ชสคริปต์พร้อมคำสั่งที่จำเป็น:

สำเนา

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 ของคุณ

Image 41: Lets Encrypt manual update

คำแนะนำเพิ่มเติม

  • สร้างตัวแปร Environment พร้อมเส้นทางไปยังใบรับรอง Let's Encrypt เพื่อหลีกเลี่ยง "ฮาร์ดโค้ด" และทำให้การแก้ไขง่ายขึ้นในกรณีที่มีการเปลี่ยนแปลงตำแหน่งของใบรับรอง
    • มาเข้ารหัสใบรับรองกัน-/var/lib/Ruk-Com PaaS/keys/fullchain.pem
    • มาเข้ารหัสคีย์ส่วนตัวกันเถอะ-/var/lib/Ruk-Com PaaS/keys/privkey.pem

Image 43: Let’s Encrypt certificates variables* เมื่อทำงานกับมาเข้ารหัสส่วนเสริมผ่าน API กันคุณสามารถใช้ปรับใช้ Hookพารามิเตอร์เพื่อจัดการตรรกะที่กำหนดเองเมื่อมีการออก/อัปเดตใบรับรอง