Skip to content
Snippets Groups Projects
Commit 001b7702 authored by Florian Bieringer's avatar Florian Bieringer
Browse files

Proof of concept socket

parent e5ab874b
No related branches found
No related tags found
No related merge requests found
.vscode/ .vscode/
mysql/*
\ No newline at end of file
...@@ -38,6 +38,9 @@ RUN make ...@@ -38,6 +38,9 @@ RUN make
# Add config template # Add config template
COPY config_local.php /var/www/studip/config/config_local.inc.php.dist.docker COPY config_local.php /var/www/studip/config/config_local.inc.php.dist.docker
# Fix bootstrap.php
COPY bootstrap.php /var/www/studip/lib/bootstrap.php
# Add custom entrypoint # Add custom entrypoint
COPY docker-entrypoint.sh /usr/local/bin/ COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/docker-entrypoint.sh RUN chmod u+x /usr/local/bin/docker-entrypoint.sh
......
<?php
# Lifter010: TODO
/*
* Copyright (c) 2009 Stud.IP CoreGroup
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*/
// Default environment, do not change. Change in config/config_local.inc.php.
const DEFAULT_ENV = 'production';
//software version - please leave it as it is!
$SOFTWARE_VERSION = explode(' ', trim(file_get_contents(__DIR__ . '/../VERSION')), 2)[1];
// Store startup time
$STUDIP_STARTUP_TIME = microtime(true);
global $PHP_SELF, $STUDIP_BASE_PATH;
$PHP_SELF = $_SERVER['PHP_SELF'] = $_SERVER['SCRIPT_NAME'];
$STUDIP_BASE_PATH = realpath(dirname(__FILE__) . '/..');
set_include_path(
$STUDIP_BASE_PATH
. PATH_SEPARATOR . $STUDIP_BASE_PATH . DIRECTORY_SEPARATOR . 'config'
. PATH_SEPARATOR . get_include_path()
);
$ABSOLUTE_PATH_STUDIP = $STUDIP_BASE_PATH . '/public/';
$CANONICAL_RELATIVE_PATH_STUDIP = dirname($_SERVER['PHP_SELF']);
if (DIRECTORY_SEPARATOR != '/') {
$CANONICAL_RELATIVE_PATH_STUDIP = str_replace(DIRECTORY_SEPARATOR, '/', $CANONICAL_RELATIVE_PATH_STUDIP);
}
// CANONICAL_RELATIVE_PATH_STUDIP should end with a '/'
if (substr($CANONICAL_RELATIVE_PATH_STUDIP,-1) != "/"){
$CANONICAL_RELATIVE_PATH_STUDIP .= "/";
}
$ABSOLUTE_URI_STUDIP = "";
// automagically compute ABSOLUTE_URI_STUDIP if $_SERVER['SERVER_NAME'] is set
if (isset($_SERVER['SERVER_NAME'])) {
// work around possible bug in lighttpd
if (mb_strpos($_SERVER['SERVER_NAME'], ':') !== false) {
list($_SERVER['SERVER_NAME'], $_SERVER['SERVER_PORT']) =
explode(':', $_SERVER['SERVER_NAME']);
}
$ABSOLUTE_URI_STUDIP = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
$ABSOLUTE_URI_STUDIP .= '://'.$_SERVER['SERVER_NAME'];
if ($_SERVER['HTTPS'] == 'on' && $_SERVER['SERVER_PORT'] != 443 ||
$_SERVER['HTTPS'] != 'on' && $_SERVER['SERVER_PORT'] != 80) {
$ABSOLUTE_URI_STUDIP .= ':'.$_SERVER['SERVER_PORT'];
}
$ABSOLUTE_URI_STUDIP .= $CANONICAL_RELATIVE_PATH_STUDIP;
}
// default ASSETS_URL, customize if required
$GLOBALS['ASSETS_URL'] = $ABSOLUTE_URI_STUDIP . 'assets/';
require __DIR__ . '/classes/StudipFileloader.php';
$added = StudipFileloader::load('config_defaults.inc.php config_local.inc.php', $GLOBALS, compact('STUDIP_BASE_PATH', 'ABSOLUTE_URI_STUDIP', 'ASSETS_URL', 'CANONICAL_RELATIVE_PATH_STUDIP'), true);
// If no ENV setting was found in the config files, assume ENV=production
if (!defined('Studip\ENV')) {
define('Studip\ENV', DEFAULT_ENV);
}
// if in dev mode and webpack dev server is running, adjust assets url
if (Studip\ENV === 'development' && !in_array('ASSETS_URL', $added) && function_exists('socket_create')) {
$wds_config = json_decode(
file_get_contents("{$STUDIP_BASE_PATH}/config/webpack.dev-server.config.json")
);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (@socket_connect($socket, $wds_config->host, $wds_config->port)) {
socket_close($socket);
$assets_url = sprintf(
"%s://%s:%u/%s/",
$wds_config->protocol,
$wds_config->host,
$wds_config->port,
basename(realpath(__DIR__ . '/..'))
);
$probe_headers = get_headers("{$assets_url}images/logos/studip-logo.svg");
if (strpos($probe_headers[0], '200') !== false) {
$GLOBALS['ASSETS_URL'] = $assets_url;
}
}
}
if (!file_exists($GLOBALS['STUDIP_BASE_PATH'] . '/config/config_local.inc.php')) {
require_once __DIR__ . '/classes/URLHelper.php';
URLHelper::setBaseUrl($GLOBALS['ABSOLUTE_URI_STUDIP']);
header('Location: ' . URLHelper::getURL('install.php'));
page_close();
die;
}
require __DIR__ . '/bootstrap-autoload.php';
// construct absolute URL for ASSETS_URL
if ($GLOBALS['ASSETS_URL'][0] === '/') {
$host = preg_replace('%^([a-z]+:/*[^/]*).*%', '$1', $GLOBALS['ABSOLUTE_URI_STUDIP']);
$GLOBALS['ASSETS_URL'] = $host . $GLOBALS['ASSETS_URL'];
} else if (!preg_match('/^[a-z]+:/', $GLOBALS['ASSETS_URL'])) {
$GLOBALS['ASSETS_URL'] = $GLOBALS['ABSOLUTE_URI_STUDIP'] . $GLOBALS['ASSETS_URL'];
}
require 'config.inc.php';
require 'lib/phplib/page_open.php';
require_once 'lib/functions.php';
require_once 'lib/language.inc.php';
require_once 'lib/visual.inc.php';
//setup default logger
Log::get()->setHandler($GLOBALS['TMP_PATH'] . '/studip.log');
if (Studip\ENV == 'development') {
Log::get()->setLogLevel(Log::DEBUG);
} else {
Log::get()->setLogLevel(Log::ERROR);
}
// set assets url
Assets::set_assets_url($GLOBALS['ASSETS_URL']);
// globale template factory anlegen
require_once 'vendor/flexi/lib/flexi.php';
$GLOBALS['template_factory'] = new Flexi_TemplateFactory("{$STUDIP_BASE_PATH}/templates");
// set default pdo connection
if (isset($GLOBALS['DB_STUDIP_HOST'])) {
try {
DBManager::getInstance()
->setConnection('studip',
'mysql:host=' . $GLOBALS['DB_STUDIP_HOST'] .
';dbname=' . $GLOBALS['DB_STUDIP_DATABASE'] .
';charset=utf8mb4',
$GLOBALS['DB_STUDIP_USER'],
$GLOBALS['DB_STUDIP_PASSWORD']);
} catch (PDOException $exception) {
header('HTTP/1.1 500 Internal Server Error');
die(sprintf('database connection %s failed', 'mysql:host=' . $GLOBALS['DB_STUDIP_HOST'] .
';dbname=' . $GLOBALS['DB_STUDIP_DATABASE']));
}
}
// set default pdo socket connection
if (isset($GLOBALS['DB_STUDIP_SOCKET'])) {
try {
DBManager::getInstance()
->setConnection('studip',
'mysql:unix_socket=' . $GLOBALS['DB_STUDIP_SOCKET'] .
';dbname=' . $GLOBALS['DB_STUDIP_DATABASE'] .
';charset=utf8mb4',
$GLOBALS['DB_STUDIP_USER'],
$GLOBALS['DB_STUDIP_PASSWORD']);
} catch (PDOException $exception) {
header('HTTP/1.1 500 Internal Server Error');
die(sprintf('database connection %s failed', 'mysql:unix_socket=' . $GLOBALS['DB_STUDIP_SOCKET'] .
';dbname=' . $GLOBALS['DB_STUDIP_DATABASE']));
}
}
// set slave connection
if (isset($GLOBALS['DB_STUDIP_SLAVE_HOST'])) {
try {
DBManager::getInstance()
->setConnection('studip-slave',
'mysql:host=' . $GLOBALS['DB_STUDIP_SLAVE_HOST'] .
';dbname=' . $GLOBALS['DB_STUDIP_SLAVE_DATABASE'] .
';charset=utf8mb4',
$GLOBALS['DB_STUDIP_SLAVE_USER'],
$GLOBALS['DB_STUDIP_SLAVE_PASSWORD']);
} catch (PDOException $exception) {
// if connection to slave fails, fall back to master instead
DBManager::getInstance()->aliasConnection('studip', 'studip-slave');
}
} else {
DBManager::getInstance()->aliasConnection('studip', 'studip-slave');
}
// set default exception handler
// command line or http request?
if (isset($_SERVER['REQUEST_METHOD'])) {
set_exception_handler('studip_default_exception_handler');
}
// Prime autoloader if cache is enabled (this cannot be in autoloader's
// bootstrap because the stud.ip cache needs to have a db conenction)
if ($GLOBALS['CACHING_ENABLE']) {
$cached = StudipCacheFactory::getCache()->read('STUDIP#autoloader-classes');
if ($cached) {
$class_lookup = json_decode($cached, true);
if (is_array($class_lookup)) {
$lookup_hash = md5($cached);
StudipAutoloader::addClassLookups($class_lookup);
}
}
register_shutdown_function(function () use ($lookup_hash) {
$cached = json_encode(StudipAutoloader::$class_lookup, JSON_UNESCAPED_UNICODE);
if (md5($cached) !== $lookup_hash) {
StudipCacheFactory::getCache()->write(
'STUDIP#autoloader-classes',
$cached,
7 * 24 * 60 * 60
);
}
});
}
// set default time zone
date_default_timezone_set(Config::get()->DEFAULT_TIMEZONE ? : @date_default_timezone_get());
// sample the request time and number of db queries every tenth time
register_shutdown_function(function ($timer) {
$timer('core.request_time', 0.1);
$query_count = DBManager::get()->query_count;
Metrics::gauge('core.database.queries', $query_count, 0.1);
}, Metrics::startTimer());
//include 'tools/debug/StudipDebugPDO.class.php';
/**
* @deprecated
*/
class DB_Seminar extends DB_Sql
{
public function __construct($query = false)
{
$this->Host = $GLOBALS['DB_STUDIP_HOST'];
$this->Database = $GLOBALS['DB_STUDIP_DATABASE'];
$this->User = $GLOBALS['DB_STUDIP_USER'];
$this->Password = $GLOBALS['DB_STUDIP_PASSWORD'];
parent::__construct($query);
}
}
if (Config::get()->EXTERN_ENABLE) {
require_once $GLOBALS['STUDIP_BASE_PATH'] . '/lib/extern/extern_config.inc.php';
require_once $GLOBALS['STUDIP_BASE_PATH'] . '/lib/extern/lib/extern_functions.inc.php';
}
if (Config::get()->CALENDAR_ENABLE) {
require_once 'lib/calendar_functions.inc.php';
}
if (Config::get()->SOAP_ENABLE) {
require_once 'lib/soap/StudipSoapClient' . (Config::get()->SOAP_USE_PHP5 ? '_PHP5' : '' ) . '.class.php';
}
if (Config::Get()->ILIAS_INTERFACE_ENABLE) {
require_once 'lib/ilias_interface/IliasUserObserver.php';
require_once 'lib/ilias_interface/IliasCourseObserver.php';
}
// set dummy navigation until db is ready
Navigation::setRootNavigation(new Navigation(''));
// set up default page layout
PageLayout::initialize();
// init notification observers
Studip\Activity\ActivityObserver::initialize();
FilesSearch\NotificationObserver::initialize();
if (Config::Get()->ILIAS_INTERFACE_ENABLE) {
IliasUserObserver::initialize();
IliasCourseObserver::initialize();
}
//Besser hier globale Variablen definieren...
$GLOBALS['_fullname_sql'] = [];
$GLOBALS['_fullname_sql']['full'] = "TRIM(CONCAT(title_front,' ',Vorname,' ',Nachname,IF(title_rear!='',CONCAT(', ',title_rear),'')))";
$GLOBALS['_fullname_sql']['full_rev'] = "TRIM(CONCAT(Nachname,', ',Vorname,IF(title_front!='',CONCAT(', ',title_front),''),IF(title_rear!='',CONCAT(', ',title_rear),'')))";
$GLOBALS['_fullname_sql']['no_title'] = "CONCAT(Vorname ,' ', Nachname)";
$GLOBALS['_fullname_sql']['no_title_rev'] = "CONCAT(Nachname ,', ', Vorname)";
$GLOBALS['_fullname_sql']['no_title_short'] = "CONCAT(Nachname,', ',UCASE(LEFT(TRIM(Vorname),1)),'.')";
$GLOBALS['_fullname_sql']['no_title_motto'] = "CONCAT(Vorname ,' ', Nachname,IF(motto!='',CONCAT(', ',motto),''))";
$GLOBALS['_fullname_sql']['full_rev_username'] = "TRIM(CONCAT(Nachname,', ',Vorname,IF(title_front!='',CONCAT(', ',title_front),''),IF(title_rear!='',CONCAT(', ',title_rear),''),' (',username,')'))";
//Initialize $SEM_TYPE and $SEM_CLASS arrays
$GLOBALS['SEM_CLASS'] = SemClass::getClasses();
$GLOBALS['SEM_TYPE'] = SemType::getTypes();
// set up global navigation
Navigation::setRootNavigation(new StudipNavigation(''));
/* set default umask to a sane value */
umask(022);
/*mail settings
----------------------------------------------------------------*/
if ($GLOBALS['MAIL_TRANSPORT']) {
$mail_transporter_name = mb_strtolower($GLOBALS['MAIL_TRANSPORT']) . '_message';
} else {
$mail_transporter_name = 'smtp_message';
}
include 'vendor/email_message/email_message.php';
include 'vendor/email_message/' . $mail_transporter_name . '.php';
$mail_transporter_class = $mail_transporter_name . '_class';
$mail_transporter = new $mail_transporter_class;
if ($mail_transporter_name == 'smtp_message') {
include 'vendor/email_message/smtp.php';
$mail_transporter->localhost = ($GLOBALS['MAIL_LOCALHOST'] == "") ? $_SERVER["SERVER_NAME"] : $GLOBALS['MAIL_LOCALHOST'];
$mail_transporter->smtp_host = ($GLOBALS['MAIL_HOST_NAME'] == "") ? $_SERVER["SERVER_NAME"] : $GLOBALS['MAIL_HOST_NAME'];
if (is_array($GLOBALS['MAIL_SMTP_OPTIONS'])) {
foreach ($GLOBALS['MAIL_SMTP_OPTIONS'] as $key => $value) {
$mail_transporter->{"smtp_$key"} = $value;
}
if ($mail_transporter->smtp_user !== '') {
include 'vendor/sasl/sasl.php';
}
}
}
$mail_transporter->default_charset = 'UTF-8';
$mail_transporter->SetBulkMail((int)$GLOBALS['MAIL_BULK_DELIVERY']);
StudipMail::setDefaultTransporter($mail_transporter);
unset($mail_transporter);
...@@ -17,10 +17,15 @@ namespace { ...@@ -17,10 +17,15 @@ namespace {
// default Stud.IP database (DB_Seminar) // default Stud.IP database (DB_Seminar)
$DB_STUDIP_HOST = getenv('MYSQL_HOST'); $DB_STUDIP_HOST = getenv('MYSQL_HOST');
$DB_STUDIP_SOCKET = getenv('MYSQL_SOCKET');
$DB_STUDIP_USER = getenv('MYSQL_USER'); $DB_STUDIP_USER = getenv('MYSQL_USER');
$DB_STUDIP_PASSWORD = getenv('MYSQL_PASSWORD'); $DB_STUDIP_PASSWORD = getenv('MYSQL_PASSWORD');
$DB_STUDIP_DATABASE = getenv('MYSQL_DATABASE'); $DB_STUDIP_DATABASE = getenv('MYSQL_DATABASE');
// Unset unused variables
if (!$DB_STUDIP_HOST) unset($DB_STUDIP_HOST);
if (!$DB_STUDIP_SOCKET) unset($DB_STUDIP_SOCKET);
/*URL /*URL
---------------------------------------------------------------- ----------------------------------------------------------------
customize if automatic detection fails, e.g. when installation is hidden customize if automatic detection fails, e.g. when installation is hidden
......
...@@ -4,7 +4,8 @@ services: ...@@ -4,7 +4,8 @@ services:
image: mariadb:10.4 image: mariadb:10.4
# The mysql volume has been deactivated to ensure that the database gets reinitialized every time # The mysql volume has been deactivated to ensure that the database gets reinitialized every time
# volumes: volumes:
- ./mysql:/var/run/mysqld
# - db_data:/var/lib/mysql # - db_data:/var/lib/mysql
restart: always restart: always
environment: environment:
...@@ -20,6 +21,9 @@ services: ...@@ -20,6 +21,9 @@ services:
# Modify branch to the svn branch you want to check out # Modify branch to the svn branch you want to check out
BRANCH: dev-branches/tic10856-tiled-courses BRANCH: dev-branches/tic10856-tiled-courses
volumes:
- ./mysql:/var/run/mysqld
# Redirect port to something (hopefully) unused # Redirect port to something (hopefully) unused
ports: ports:
- 8032:80 - 8032:80
...@@ -30,7 +34,8 @@ services: ...@@ -30,7 +34,8 @@ services:
MYSQL_DATABASE: studip_db MYSQL_DATABASE: studip_db
MYSQL_USER: studip_user MYSQL_USER: studip_user
MYSQL_PASSWORD: studip_password MYSQL_PASSWORD: studip_password
MYSQL_HOST: db # MYSQL_HOST: localhost
MYSQL_SOCKET: /var/run/mysqld/mysqld.sock
# Use automigrate to migrate your instance on startup # Use automigrate to migrate your instance on startup
# AUTO_MIGRATE: 1 # AUTO_MIGRATE: 1
......
...@@ -13,7 +13,12 @@ if [ ! -f $CONFIGFILE ]; then ...@@ -13,7 +13,12 @@ if [ ! -f $CONFIGFILE ]; then
cp "$CONF.dist" "$CONF" cp "$CONF.dist" "$CONF"
# Setup mysql database # Setup mysql database
echo "INSTALL DB" echo "Waiting for db to come up"
# If we deal with a socket and mysql host is not set overwrite the host to make MYSQL work
if [ -z $MYSQL_HOST ]; then
MYSQL_HOST='localhost'
fi;
# wait until MySQL is really available # wait until MySQL is really available
maxcounter=45 maxcounter=45
...@@ -28,6 +33,9 @@ if [ ! -f $CONFIGFILE ]; then ...@@ -28,6 +33,9 @@ if [ ! -f $CONFIGFILE ]; then
fi; fi;
done done
echo "Database answered"
echo "INSTALL DB"
mysql -f -u $MYSQL_USER -h $MYSQL_HOST -p$MYSQL_PASSWORD $MYSQL_DATABASE < ${STUDIP}/db/studip.sql mysql -f -u $MYSQL_USER -h $MYSQL_HOST -p$MYSQL_PASSWORD $MYSQL_DATABASE < ${STUDIP}/db/studip.sql
echo "INSTALL DEFAULT DATA" echo "INSTALL DEFAULT DATA"
mysql -f -u $MYSQL_USER -h $MYSQL_HOST -p$MYSQL_PASSWORD $MYSQL_DATABASE < ${STUDIP}/db/studip_default_data.sql mysql -f -u $MYSQL_USER -h $MYSQL_HOST -p$MYSQL_PASSWORD $MYSQL_DATABASE < ${STUDIP}/db/studip_default_data.sql
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment