Skip to content

Commit

Permalink
Add support for letsencrypt
Browse files Browse the repository at this point in the history
  • Loading branch information
Phillaf committed Jul 5, 2023
1 parent d622a81 commit 129a49e
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 7 deletions.
28 changes: 28 additions & 0 deletions .docker/mock-key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYCkwgemf1sbHJ
a25KnLeAKzVTBjym/GCFZaVuKPZ6UcutAuIUzI7Iyw4+VLA7gOkacrIgYeMuTFdW
ElGbEv5srMFnjos6+XJrYCwoj8zVJb7FNke0x6r83YbiWbzN7cPBDLfU5Ei1S+WY
yIhXnAvFkx3r3U8Jd60KeqniW1/rS4RaJOBo/LN81ilrJvFszXqrOhDTbwI+RxtR
7gHVaqR69RJg+oOECM6XqGLECC0LpX32SwQSrW5iFSb5+2jrz6G2SGlVVla11YSS
ZaHS/oAB2oex2MrE0jeyOB0LwW3lTcUH4pmWTbti95ZG2AGaQPsVXuLPgyS0Cm5n
JVu6nQvvAgMBAAECggEAb/9Ondu3P0kCaO/3ulhqTNiZiVQHZ24Yv68FRwmXVaxH
0YZYG/47215hIPEYd5CJx7tEGsOEWcEb2bQfeCwtl7srfHsKNOWSapXt7o013B34
Oxa7r71/KB3Tyk5JMdycCd2FA6nhA5O4EC+NdxWfiKqO7XLKgZb4LyGOJpnGLR0B
duV5bDgkWLecys1iN6901CEiXrM7ipoYVed5YQonpypWRoC0a0tI2ahyLKfj0ZmQ
VQV9QqSZXVsYcc4VaF+HGPJ0c1wGkAPDAAk9sdElDCBm2+RO+ncqBA14WQVUlsFu
oaeVutwdjy++uD5bVSdGk3CrJK5DNI7qscSPUJ3HKQKBgQD/L9TIlU3KV9c3FPO3
2Xh7H7oAuB5rtSKhtXb3e7qrO954X4ZZsStPtfzouKyI2nOjaB9Ieov9g6cIOs8d
8zv7k0ExqKjXhPIKLNNrP3a4eJWhPORgtQTCtv0S4vq3K/ccDvqjQD7ij1kttWVm
x2R6g+pMet+phNJTt9kFt3AzPQKBgQDYuohFch+8HeAriArgBaefZP82IwiY5ya6
fLTkiTyIbkPDRK5GBP1te9ca+aC0AwpPkZm/ne8AelUXKtfv/ZSYRscCV/GPhsT/
xkPvQe2Vz56edzi0XZejghCfVxDcUp80InmMuRGEy2kyhSCgsIcK9vyvyeEgIDsx
EOGl4a5+mwKBgQDYN8XaIq9j1+Oxdx4905TC9hHa1CZqanKqg6AGd56lwbdxVLb4
PiaNhoyA/yCpYDcE6I9BERyWNDuNvI6LOPHE6nMdyWMuISYXuv1z7LUB/qIBmR+E
VTxwYy2xGAMIusbIzmRNeH0P6BfOo9kEKcQYDreyD5Z9At5XMvo+XrxBnQKBgHhD
skDPHnsWHQIrANXlbWnO8qwI7sliY6RSdVLoMLYIcgPWhdqHBFaPxQLMCPg7Q6p5
wlaJfknGmJc9iAw9rAqAJAjR4lLh10mTrLkE3aEnT/7ha47y7KWoFC9HcizAkGWu
x8JmJCmLcrm9FCj3LEjSW8/0d7+LAy2sD3ssa9cHAoGAM+hyVtoDDnVU8Ehz2eux
QPLrg80B7GGIAyuTk0k3Jdn2nVbAm2CUFa+jzZ7uV7Pg+Ifm/TzE305v7LEOR0OI
JKk21Ze+wI7b4w0uePh/pVCZPs4XhViZ+1Pf7mu0vhFKWyASXS7F4qOdRBo9XfZJ
E9jiMHGrDtGibOmUM82dwxA=
-----END PRIVATE KEY-----
24 changes: 24 additions & 0 deletions .docker/mock.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIIEGDCCAoCgAwIBAgIRAJL47/to8oQIxWU2ihpSepcwDQYJKoZIhvcNAQELBQAw
ZTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMR0wGwYDVQQLDBRwaGls
QGVnZ3BsYW50IChQaGlsKTEkMCIGA1UEAwwbbWtjZXJ0IHBoaWxAZWdncGxhbnQg
KFBoaWwpMB4XDTIzMDcwNTA1NTczNloXDTI1MTAwNTA1NTczNlowSDEnMCUGA1UE
ChMebWtjZXJ0IGRldmVsb3BtZW50IGNlcnRpZmljYXRlMR0wGwYDVQQLDBRwaGls
QGVnZ3BsYW50IChQaGlsKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ANgKTCB6Z/Wxsclrbkqct4ArNVMGPKb8YIVlpW4o9npRy60C4hTMjsjLDj5UsDuA
6RpysiBh4y5MV1YSUZsS/myswWeOizr5cmtgLCiPzNUlvsU2R7THqvzdhuJZvM3t
w8EMt9TkSLVL5ZjIiFecC8WTHevdTwl3rQp6qeJbX+tLhFok4Gj8s3zWKWsm8WzN
eqs6ENNvAj5HG1HuAdVqpHr1EmD6g4QIzpeoYsQILQulffZLBBKtbmIVJvn7aOvP
obZIaVVWVrXVhJJlodL+gAHah7HYysTSN7I4HQvBbeVNxQfimZZNu2L3lkbYAZpA
+xVe4s+DJLQKbmclW7qdC+8CAwEAAaNgMF4wDgYDVR0PAQH/BAQDAgWgMBMGA1Ud
JQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFLwSTf/zvQoUr1zUkwMS4XSNt+Qr
MBYGA1UdEQQPMA2CC3Byb2ZsaWUuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQAHRK7w
pbbafy/GygKqOGg4gf68+MNATGOOb7JwvwuoJD1uq8jtExke3n3qLj0WPoCd2bqy
G97zLLU2rd4bfs/P1GOYvQ/KAHwQbE95aEevHMHQHeH6f0Ed2l0QfNy91EfjG36s
Vm2AxEpyZSzUWrVVcZ21Lg7yhg/FuDd+mb0EHPNifpw9hj/ww6ko95FMIybXuiBa
sE1pHJzyaag8XnB4B2CTMv2Xg3UuSiPs83csK+33j9yFI5YCfUG6Y7nRmU8qiOlz
FHUUUtjBPzveVkLIdc5oRIJfqSzVqEsCREgIbdgJxHrJ0R9J2gDXvfX/xcCx1rm9
zQBUMuNdUAOnAdCpdev+ddGosbjJ8DlMi7KOLDYL/wdD9fG3J3fxVkX0R+Xm2/Pl
odZsew3X7NvkX5y2q0gfsW1AAoOV2CeFrtFKRsRqLVwOCMeXoQofqosGXDdV7ZdE
/3qb7HT4U6sg/gqKqnZnjuA6zXfQQaV1si7JDbfU9DStCHsW/ERM1P0H01k=
-----END CERTIFICATE-----
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ FROM phpswoole/swoole:latest as dev

RUN docker-php-ext-install mysqli pdo_mysql

RUN apt-get update && apt-get install -y certbot

FROM dev as build

COPY ./bootstrap /var/www/bootstrap
Expand All @@ -10,5 +12,9 @@ COPY ./src /var/www/src
COPY ./composer.json /var/www/composer.json
COPY ./migration.php /var/www/migration.php
COPY ./server.php /var/www/server.php
COPY ./letsencrypt /var/www/letsencrypt

COPY ./.docker/mock.pem /etc/letsencrypt/live/proflie.com/fullchain.pem
COPY ./.docker/mock-key.pem /etc/letsencrypt/live/proflie.com/privkey.pem

RUN composer update
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ services:
- RECAPTCHA_PRIVATE
ports:
- "80:80"
- "443:443"
volumes:
- ".:/var/www"
- "/var/www/mysql-data"
Expand Down
Empty file.
47 changes: 40 additions & 7 deletions server.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,33 @@

Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL);

$http = new Swoole\Http\Server("0.0.0.0", 80);
$http->set([
$https = new Swoole\Http\Server("0.0.0.0", 443, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$http = $https->addListener("0.0.0.0", 80, SWOOLE_SOCK_TCP);

$https->set([
'ssl_cert_file' => '/etc/letsencrypt/live/proflie.com/fullchain.pem',
'ssl_key_file' => '/etc/letsencrypt/live/proflie.com/privkey.pem',
'log_level' => 0,
'open_http2_protocol' => true,
//'open_http2_protocol' => true,
]);
$http->on("request", function (Request $request, Response $response) use ($routes, $services, $domainWithoutDotCom) {

$http->on("request", function (Request $request, Response $response) {
try {
if (letsEncrypt($request, $response))
return;

$response->redirect("https://{$request->header['host']}{$request->server['request_uri']}", 302); // todo: switch to 301 permanent redirect
} catch(\Throwable $e) {
var_dump($request);
throw $e;
}
});

$https->on("request", function (Request $request, Response $response) use ($routes, $services, $domainWithoutDotCom) {
try {
if (letsEncrypt($request, $response))
return;

if (getStatic($request, $response))
return;

Expand All @@ -41,7 +60,23 @@
}
});

$http->start();
$https->start();

function letsEncrypt(Request $request, Response $response): bool
{
if (substr($request->server['request_uri'], 0, 28) !== "/.well-known/acme-challenge/") {
return false;
}

$staticFile = __DIR__ . "/letsencrypt/.well-known/acme-challenge/" . substr($request->server['request_uri'], 28);

if (!file_exists($staticFile)) {
return false;
}

$response->sendfile($staticFile);
return true;
}

function getStatic(Request $request, Response $response): bool
{
Expand All @@ -54,7 +89,6 @@ function getStatic(Request $request, Response $response): bool
return false;
};

$response->header('Content-Type', 'text/javascript');
$response->sendfile($staticFile);
return true;
}
Expand Down Expand Up @@ -92,6 +126,5 @@ function getPhp(Request $request, Response $response, array $services, $routes):
$response->end();
return true;
}

return false;
}

0 comments on commit 129a49e

Please sign in to comment.