Let's Encrypt

Bart Eagle
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:35
0

Cześć,
Pewnie banalne pytanie ale grzebię ( po sieci nie - w dupie) już pod kilku godzin i nie znalazłem rozwiązania. Wykonałem betę na Node.js -> Express -> Handlebars ale okazało się potrzebuję ją uruchamiać przez HTTPS. Żeby nie bawić się zmianę certyfikatów co 45 dni postanowiłem wdrożyć Let's Encrypt pakietem "greenlock". Dokumentacja poprowadziła mnie do uruchomienia serwera HTTPS ale tylko z prostym tekstem "Hello, Encrypted World!" - ja bym chciał natomiast uruchomić całą wcześniej wykonaną aplikację - jeszcze jako świeżak tego nie mogę ogarnąć.

preflight.js (skrócony):

Kopiuj
require("greenlock-express")
    .init({
        packageRoot: __dirname,
        configDir: "./greenlock.d",

        maintainerEmail: "myster@hide.com",
        cluster: false
    })
    .ready(httpsWorker);

function httpsWorker(glx) {

    let httpsServer = glx.httpsServer(null, function (req, res) {
        res.end("Hello, Encrypted World!");
    });

    httpsServer.listen(443, "0.0.0.0", function () {
        console.info("Listening on ", httpsServer.address());
    });

    let httpServer = glx.httpServer();

    httpServer.listen(80, "0.0.0.0", function () {
        console.info("Listening on ", httpServer.address());
    });
}
//.....deklaracja zmiennych....

//....routing np:
app.use(bodyParser.urlencoded({
    extended: true
}))
app.use(express.json());
app.engine('handlebars', engine({
    defaultLayout: 'main',
}))
app.set('view engine', 'handlebars')
app.get('/', handlers.home)

app.get(...)
app.post(...)
.....
itd.

}))

//....funkcje aplikacji

server.js:

Kopiuj
"use strict";

var app = require("./preflight.js");

app.get("/hello", function(req, res) {
    res.end("Hello, Encrypted World!");
});

//require("greenlock-express")
require("../../")
    .init({
        packageRoot: __dirname,
        configDir: "./greenlock.d",

        maintainerEmail: "jon@example.com",

        cluster: false
    })
    .serve(app);

handlers.js (przykład)
np.

Kopiuj
const preflight = require('./../preflight')
  exports.home = (req, res) => res.render('home')
})

Pytanie brzmi gdzie i jak mam podpiąć moja aplikację.

edytowany 2x, ostatnio: Riddle
Xarviel
  • Rejestracja:ponad 3 lata
  • Ostatnio:około godziny
  • Postów:847
2

A próbowałeś zamienić funkcję ready na serve tak jak jest w przykładzie na githubie? (https://git.rootprojects.org/root/greenlock-express.js.git)

Czyli w najprostszej wersji byłoby coś takiego

Kopiuj
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

require("greenlock-express")
    .init({
        packageRoot: __dirname,
        configDir: "./greenlock.d",
        maintainerEmail: "jon@example.com",
        cluster: false,
    })
    .serve(app);

I serwer powinien się uruchomić na porcie 80 lub 433 (oczywiście konfigurację wartości musisz dostosować do własnych potrzeb).

edytowany 5x, ostatnio: Xarviel
Bart Eagle
Działa dzięki! Teraz tylko muszę poczytać dalej bo CSS nie pobiera
Xarviel
Nie wiem, czy ta biblioteka do certyfikatu coś zmienia, ale zazwyczaj trzeba kombinować w ten sposób https://expressjs.com/en/starter/static-files.html#serving-static-files-in-express
Bart Eagle
Tak, to było to - wyłączyłem przypadkowo te 2 linijki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.