From 3f93c24d50ecca3720e3599b4b2d395ac03c4666 Mon Sep 17 00:00:00 2001 From: Bernhard Heinloth <heinloth@cs.fau.de> Date: Wed, 6 Apr 2022 13:51:56 +0200 Subject: [PATCH] Webfrontend via Docker --- server/docker-compose.yml | 38 ++++++++++++++++++++++++++++++++++++++ server/docker.sql | 4 ++++ server/example-config.php | 6 +++--- server/insert_new_user.sql | 2 +- server/nginx.conf | 32 ++++++++++++++++++++++++++++++++ server/www/index.php | 18 +++++++++--------- 6 files changed, 87 insertions(+), 13 deletions(-) create mode 100644 server/docker-compose.yml create mode 100644 server/docker.sql create mode 100644 server/nginx.conf diff --git a/server/docker-compose.yml b/server/docker-compose.yml new file mode 100644 index 0000000..52829a6 --- /dev/null +++ b/server/docker-compose.yml @@ -0,0 +1,38 @@ +version: '3.7' +services: + web: + image: inf4/timecube + volumes: + # Adjust domain + - ./nginx.conf:/etc/nginx/sites-enabled/default + # Adjust database user and password + - ./www/config.php:/timecube/server/www/config.php + ports: + - 80:80 + restart: always + command: sh -c '/etc/init.d/php7.4-fpm start ; nginx -g "daemon off;"' + depends_on: + - db + db: + image: postgres:10.5 + restart: always + environment: + - PGUSER=postgres + # must be identical to www/config.php (and credentials should be changed!) + - POSTGRES_DB=timelog + - POSTGRES_USER=timelog + - POSTGRES_PASSWORD=YOUR_PASSWORD! + ports: + - 5438:5432 + volumes: + # lokal volume + - db:/var/lib/postgresql/data + # create the database tables + - ./docker.sql:/docker-entrypoint-initdb.d/0-docker.sql + # create the database tables + - ./database.sql:/docker-entrypoint-initdb.d/database.sql + # fill in user and timecube mac + - ./insert_new_user.sql:/docker-entrypoint-initdb.d/insert_new_user.sql +volumes: + db: + driver: local diff --git a/server/docker.sql b/server/docker.sql new file mode 100644 index 0000000..2a367d1 --- /dev/null +++ b/server/docker.sql @@ -0,0 +1,4 @@ +-- Our docker compose will create a user, but not the default postgres one. +-- Let's do it here. + +CREATE ROLE postgres; diff --git a/server/example-config.php b/server/example-config.php index 3a06011..d1de78a 100644 --- a/server/example-config.php +++ b/server/example-config.php @@ -1,8 +1,8 @@ <?php -$DBHOST="localhost"; +$DBHOST="db"; $DBNAME="timelog"; -$DBUSER="USER"; -$DBPASS="PASS"; +$DBUSER="postgres"; +$DBPASS="YOUR_PASSWORD!"; ?> diff --git a/server/insert_new_user.sql b/server/insert_new_user.sql index 0a60524..64643d7 100644 --- a/server/insert_new_user.sql +++ b/server/insert_new_user.sql @@ -38,7 +38,7 @@ WITH data ( name , email , alias , mac ), addside6 AS ( INSERT INTO cubesides (mac, side, category) SELECT mac, 6, id FROM addcat6 CROSS JOIN data ) -INSERT INTO connection (mac, side, voltage, time) +INSERT INTO connection (mac, id, voltage, time) SELECT mac, id, 0, extract(epoch from now()) FROM data CROSS JOIN addside0; COMMIT; diff --git a/server/nginx.conf b/server/nginx.conf new file mode 100644 index 0000000..ddf0723 --- /dev/null +++ b/server/nginx.conf @@ -0,0 +1,32 @@ +server { + listen 80 default_server; + server_name _; + root /timecube/server/www/; + + index index.php; + + location ~ /?config.php$ { + return 403; + } + + if (!-e $request_filename){ + rewrite ^/([^/]*)$ /$1/ redirect; + rewrite "^/([A-Fa-f0-9]{12})/?(.*)$" /index.php?mac=$1&alias=$1&site=$2 break; + rewrite ^/([^/]*)/?(.*)$ /index.php?alias=$1&site=$2 break; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; + } + + location ~ /\.ht { + deny all; + } + + location / { + try_files $uri $uri/ =404; + } + + +} diff --git a/server/www/index.php b/server/www/index.php index 4681e0b..cc4ae0f 100644 --- a/server/www/index.php +++ b/server/www/index.php @@ -123,18 +123,18 @@ switch ($site){ status('Eingetragen.', 200, 'OK'); break; - case 'data.csv': - header('Content-type: text/comma-separated-values'); - echo "From;To;Duration;FromISO;ToISO;name;hidden;MAC\n"; - $stmt_log = $pdo->prepare('SELECT data.begin AS begin, data.stop AS stop, categories.name AS name, categories.hidden AS hidden, data.mac AS mac FROM data JOIN categories ON (data.category = categories.id) WHERE categories.uid = ? ORDER BY begin, stop'); - if ($stmt_log->execute(array($user['uid']))) - while ($row_log = $stmt_log->fetch(PDO::FETCH_ASSOC)) - echo $row_log['begin'].';'.$row_log['stop'].';'.($row_log['stop']-$row_log['begin']).';'.date('c;',$row_log['begin']).date('c;',$row_log['stop']).$row_log['name'].';'.$row_log['hidden'].';'.$row_log['mac']."\r\n"; - break; + case 'data.csv': + header('Content-type: text/comma-separated-values'); + echo "From;To;Duration;FromISO;ToISO;name;hidden;MAC\n"; + $stmt_log = $pdo->prepare('SELECT data.begin AS begin, data.stop AS stop, categories.name AS name, categories.hidden AS hidden, data.mac AS mac FROM data JOIN categories ON (data.category = categories.id) WHERE categories.uid = ? ORDER BY begin, stop'); + if ($stmt_log->execute(array($user['uid']))) + while ($row_log = $stmt_log->fetch(PDO::FETCH_ASSOC)) + echo $row_log['begin'].';'.$row_log['stop'].';'.($row_log['stop']-$row_log['begin']).';'.date('c;',$row_log['begin']).date('c;',$row_log['stop']).$row_log['name'].';'.$row_log['hidden'].';'.$row_log['mac']."\r\n"; + break; case 'dashboard': case 'update': default: - include('dashboard.html'); + readfile('dashboard.html'); } ?> -- GitLab