Last Time I got ssl from let's encrypt.
This time, execute a dart's https server at use ssl cert gotted last time.
import 'dart:io' as io;
const String cerbotWebRootPath = "/var/www/html";
const String privkeyPath = "/etc/letsencrypt/live/tetorica.net/privkey.pem";
const String fullchainPath = "/etc/letsencrypt/live/tetorica.net/fullchain.pem";
void main(List<String> arguments) async {
try {
print("start bind");
onRequest(io.HttpRequest request) async {
try {
print("receive requested ${request.uri}");
if (request.uri.path.startsWith("/.well-known/")) {
var acmeChallengeFilePath = "" +
cerbotWebRootPath +
request.uri.path.replaceAll(RegExp("\\?.*"), "");
acmeChallengeFilePath = acmeChallengeFilePath.replaceAll("/..", "/");
var acmeChallengeFile = io.File(acmeChallengeFilePath);
var acmeChallengeData = await acmeChallengeFile.readAsString();
request.response.write(acmeChallengeData);
request.response.close();
}
request.response.write("Hello");
request.response.close();
} catch (e, s) {
print("${e}");
print("${s}");
}
}
var httpServer = await io.HttpServer.bind("0.0.0.0", 80);
print("binded 80");
httpServer.listen((request) {
onRequest(request);
});
String key = io.Platform.script.resolve(privkeyPath).toFilePath();
String crt = io.Platform.script.resolve(fullchainPath).toFilePath();
io.SecurityContext context = new io.SecurityContext();
context.useCertificateChain(crt);
context.usePrivateKey(key, password: "");
var httpsServer = await io.HttpServer.bindSecure("0.0.0.0", 443, context);
print("binded 443");
httpsServer.listen((request) {
onRequest(request);
});
} catch (e, s) {
print("${e}");
print("${s}");
}
}
build and restart.
$ dart2native ./bin/main.dart
$ mv bin/main.exe /opt/main.exe
$ systemctl restart darthelloserver
and check from browser
Update ssl
check cron deamond
$ systemctl list-unit-files | grep cron
cron.service enabled enabled
setup cron
$ crontab -u root -e
00 04 03 * * certbot renew && systemctl restart darthelloserver
all code
https://github.com/kyorohiro/hao_dart_server_and_systemd/tree/dev03
Next
Dart's Http Server and Isolate
Top comments (0)