appwrite/app/http.php

122 lines
3.6 KiB
PHP
Raw Normal View History

2020-06-26 09:54:37 +00:00
<?php
require_once __DIR__.'/../vendor/autoload.php';
2020-11-19 06:56:14 +00:00
use Appwrite\Database\Validator\Authorization;
2020-10-29 13:18:21 +00:00
use Utopia\Swoole\Files;
use Utopia\Swoole\Request;
use Appwrite\Utopia\Response;
2020-06-26 12:27:58 +00:00
use Swoole\Process;
use Swoole\Http\Server;
2020-06-26 09:54:37 +00:00
use Swoole\Http\Request as SwooleRequest;
use Swoole\Http\Response as SwooleResponse;
2020-06-26 12:27:58 +00:00
use Utopia\App;
use Utopia\CLI\Console;
2020-07-04 22:24:09 +00:00
// xdebug_start_trace('/tmp/trace');
2021-03-10 11:26:38 +00:00
Files::load(__DIR__ . '/../public');
include __DIR__ . '/controllers/general.php';
$domain = App::getEnv('_APP_DOMAIN', '');
Console::info('Issuing a TLS certificate for the master domain ('.$domain.') in 30 seconds.
Make sure your domain points to your server IP or restart your Appwrite server to try again.'); // TODO move this to installation script
ResqueScheduler::enqueueAt(\time() + 30, 'v1-certificates', 'CertificatesV1', [
'document' => [],
'domain' => $domain,
'validateTarget' => false,
'validateCNAME' => false,
]);
$register->set('cache', function () use ($register) { // Register cache connection
$redis = $register->get('redisPool')->get();
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
return $redis;
}, true);
2021-03-10 11:26:38 +00:00
Swoole\Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
2021-01-20 11:49:36 +00:00
$http = new Server("0.0.0.0", App::getEnv('PORT', 80));
2020-07-01 08:55:14 +00:00
2020-10-27 19:56:37 +00:00
$payloadSize = max(4000000 /* 4mb */, App::getEnv('_APP_STORAGE_LIMIT', 10000000 /* 10mb */));
2020-07-19 15:17:57 +00:00
2020-06-26 12:27:58 +00:00
$http
2020-06-26 09:54:37 +00:00
->set([
'open_http2_protocol' => true,
2020-07-06 19:29:13 +00:00
// 'document_root' => __DIR__.'/../public',
// 'enable_static_handler' => true,
2020-07-02 06:44:16 +00:00
'http_compression' => true,
'http_compression_level' => 6,
2020-07-19 15:17:57 +00:00
'package_max_length' => $payloadSize,
2020-06-26 09:54:37 +00:00
])
;
2020-06-26 12:27:58 +00:00
$http->on('WorkerStart', function($serv, $workerId) {
2020-07-07 17:59:42 +00:00
Console::success('Worker '.++$workerId.' started succefully');
2020-06-26 09:54:37 +00:00
});
2020-06-26 12:27:58 +00:00
$http->on('BeforeReload', function($serv, $workerId) {
2020-06-26 09:54:37 +00:00
Console::success('Starting reload...');
});
2020-06-26 12:27:58 +00:00
$http->on('AfterReload', function($serv, $workerId) {
2020-06-26 09:54:37 +00:00
Console::success('Reload completed...');
});
2020-07-19 15:17:57 +00:00
$http->on('start', function (Server $http) use ($payloadSize) {
2020-10-27 19:56:37 +00:00
Console::success('Server started succefully (max payload is '.number_format($payloadSize).' bytes)');
2020-07-08 15:08:14 +00:00
Console::info("Master pid {$http->master_pid}, manager pid {$http->manager_pid}");
2020-06-26 12:27:58 +00:00
// listen ctrl + c
Process::signal(2, function () use ($http) {
2020-07-08 15:08:14 +00:00
Console::log('Stop by Ctrl+C');
2020-06-26 12:27:58 +00:00
$http->shutdown();
});
2020-06-26 09:54:37 +00:00
});
2020-07-01 22:34:05 +00:00
$http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swooleResponse) {
2020-07-01 08:55:14 +00:00
$request = new Request($swooleRequest);
$response = new Response($swooleResponse);
2020-07-06 19:29:13 +00:00
if(Files::isFileLoaded($request->getURI())) {
2020-07-11 04:16:24 +00:00
$time = (60 * 60 * 24 * 365 * 2); // 45 days cache
2020-07-06 19:29:13 +00:00
$response
->setContentType(Files::getFileMimeType($request->getURI()))
->addHeader('Cache-Control', 'public, max-age='.$time)
->addHeader('Expires', \date('D, d M Y H:i:s', \time() + $time).' GMT') // 45 days cache
->send(Files::getFileContents($request->getURI()))
;
return;
}
2020-10-27 17:24:18 +00:00
$app = new App('America/New_York');
2020-07-01 08:55:14 +00:00
2020-06-26 12:27:58 +00:00
try {
2020-11-19 06:56:14 +00:00
Authorization::cleanRoles();
Authorization::setRole('*');
2020-07-01 08:55:14 +00:00
$app->run($request, $response);
2020-06-26 12:27:58 +00:00
} catch (\Throwable $th) {
2020-10-25 13:48:04 +00:00
Console::error('[Error] Type: '.get_class($th));
Console::error('[Error] Message: '.$th->getMessage());
Console::error('[Error] File: '.$th->getFile());
Console::error('[Error] Line: '.$th->getLine());
2020-07-01 22:34:05 +00:00
if(App::isDevelopment()) {
$swooleResponse->end('error: '.$th->getMessage());
}
2020-12-22 19:53:49 +00:00
else {
$swooleResponse->end('500: Server Error');
}
2020-06-26 12:27:58 +00:00
}
2020-06-26 09:54:37 +00:00
});
2020-10-19 16:54:21 +00:00
$http->start();