Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new frontend implementing fromScratch design #649

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 10 additions & 16 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
FROM php:8-apache

# use docker-php-extension-installer for automatically get the right packages installed
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/


# Install extensions
RUN apt-get update && apt-get install -y --no-install-recommends \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libpq-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql pgsql \
&& rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc \
&& apt-get remove -y libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libpq-dev \
RUN install-php-extensions iconv gd pdo pdo_mysql pdo_pgsql pgsql

RUN rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc \
&& apt autoremove -y \
&& rm -rf /var/lib/apt/lists/*

Expand All @@ -23,6 +16,7 @@ RUN mkdir -p /speedtest/

# Copy sources
COPY backend/ /speedtest/backend
COPY frontend/ /speedtest/frontend

COPY results/*.php /speedtest/results/
COPY results/*.ttf /speedtest/results/
Expand All @@ -42,11 +36,11 @@ ENV PASSWORD=password
ENV TELEMETRY=false
ENV ENABLE_ID_OBFUSCATION=false
ENV REDACT_IP_ADDRESSES=false
ENV WEBPORT=80
ENV WEBPORT=8080

# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
STOPSIGNAL SIGWINCH

# Final touches
EXPOSE 80
EXPOSE ${WEBPORT}
CMD ["bash", "/entrypoint.sh"]
53 changes: 29 additions & 24 deletions Dockerfile.alpine
Original file line number Diff line number Diff line change
@@ -1,35 +1,38 @@
FROM php:8-alpine

# Install extensions
RUN apk add --quiet --no-cache \
bash \
apache2 \
apache2-ssl \
php83-apache2 \
php83-ctype \
php83-openssl \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
libpq-dev \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql pgsql \
&& rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc \
&& apk del --quiet --no-cache \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
libpq-dev

RUN ln -sf /dev/stdout /var/log/apache2/access.log && \
ln -sf /dev/stderr /var/log/apache2/error.log
php-apache2 \
php-ctype \
php-gd \
php-openssl \
php-pdo \
php-pdo_mysql \
php-pdo_pgsql \
php-pdo_sqlite \
php-pgsql \
php-session \
php-sqlite3

# use docker-php-extension-installer for automatically get the right packages installed
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/


# Install extensions
RUN install-php-extensions iconv gd pdo pdo_mysql pdo_pgsql pgsql

#RUN ln -sf /dev/stdout /var/log/apache2/access.log && \
# ln -sf /dev/stderr /var/log/apache2/error.log
RUN ln -sf /proc/self/fd/1 /var/log/apache2/access.log && \
ln -sf /proc/self/fd/1 /var/log/apache2/error.log


# Prepare files and folders
RUN mkdir -p /speedtest/

# Copy sources
COPY backend/ /speedtest/backend
COPY frontend/ /speedtest/frontend

COPY results/*.php /speedtest/results/
COPY results/*.ttf /speedtest/results/
Expand All @@ -49,11 +52,13 @@ ENV PASSWORD=password
ENV TELEMETRY=false
ENV ENABLE_ID_OBFUSCATION=false
ENV REDACT_IP_ADDRESSES=false
ENV WEBPORT=80
ENV WEBPORT=8080

# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
STOPSIGNAL SIGWINCH

WORKDIR /var/www/html

# Final touches
EXPOSE 80
EXPOSE ${WEBPORT}
CMD ["bash", "/entrypoint.sh"]
33 changes: 23 additions & 10 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
set -e
set -x

is_alpine() {
[ -f /etc/alpine-release ]
}

# Cleanup
rm -rf /var/www/html/*

Expand All @@ -13,7 +17,7 @@ cp /speedtest/*.js /var/www/html/
cp /speedtest/favicon.ico /var/www/html/

# Set custom webroot on alpine
if [ -f /etc/alpine-release ]; then
if is_alpine; then
sed -i "s#\"/var/www/localhost/htdocs\"#\"/var/www/html\"#g" /etc/apache2/httpd.conf
fi

Expand All @@ -34,28 +38,29 @@ fi

# Set up unified index.php
if [ "$MODE" != "backend" ]; then
cp /speedtest/ui.php /var/www/html/index.php
cp -av /speedtest/frontend/* /var/www/html/
echo '[{"name":"local","server":"/backend", "dlURL": "garbage.php", "ulURL": "empty.php", "pingURL": "empty.php", "getIpURL": "getIP.php", "sponsorName": "", "sponsorURL": "", "id":1 }]' > /var/www/html/server-list.json
fi

# Apply Telemetry settings when running in standalone or frontend mode and telemetry is enabled
if [[ "$TELEMETRY" == "true" && ( "$MODE" == "frontend" || "$MODE" == "standalone" || "$MODE" == "dual" ) ]]; then
if [[ "$TELEMETRY" == "true" && ("$MODE" == "frontend" || "$MODE" == "standalone" || "$MODE" == "dual") ]]; then
cp -r /speedtest/results /var/www/html/results

if [ "$MODE" == "frontend" ]; then
mkdir /var/www/html/backend
cp /speedtest/backend/getIP_util.php /var/www/html/backend
fi

if [ "$DB_TYPE" == "mysql" ]; then
if [ "$DB_TYPE" == "mysql" ]; then
sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$MySql_username = '\''.*'\''/$MySql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$MySql_password = '\''.*'\''/$MySql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$MySql_hostname = '\''.*'\''/$MySql_hostname = '\'$DB_HOSTNAME\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$MySql_databasename = '\''.*'\''/$MySql_databasename = '\'$DB_NAME\''/g' /var/www/html/results/telemetry_settings.php
if [ "$DB_PORT" != "" ]; then
if [ "$DB_PORT" != "" ]; then
sed -i 's/$MySql_port = '\''.*'\''/$MySql_port = '\'$DB_PORT\''/g' /var/www/html/results/telemetry_settings.php
fi
elif [ "$DB_TYPE" == "postgresql" ]; then
elif [ "$DB_TYPE" == "postgresql" ]; then
sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$PostgreSql_username = '\''.*'\''/$PostgreSql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
sed -i 's/$PostgreSql_password = '\''.*'\''/$PostgreSql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
Expand All @@ -77,14 +82,22 @@ if [[ "$TELEMETRY" == "true" && ( "$MODE" == "frontend" || "$MODE" == "standalon
fi

mkdir -p /database/
chown www-data /database/
if is_alpine; then
chown apache /database/
else
chown www-data /database/
fi
fi

chown -R www-data /var/www/html/*
if is_alpine; then
chown -R apache /var/www/html/*
else
chown -R www-data /var/www/html/*
fi

# Allow selection of Apache port for network_mode: host
if [ "$WEBPORT" != "80" ]; then
if [ -f /etc/alpine-release ]; then
if is_alpine; then
sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/httpd.conf
else
sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/ports.conf
Expand All @@ -95,7 +108,7 @@ fi
echo "Done, Starting APACHE"

# This runs apache
if [ -f /etc/alpine-release ]; then
if is_alpine; then
exec httpd -DFOREGROUND
else
exec apache2-foreground
Expand Down
1 change: 1 addition & 0 deletions docker/test/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
COMPOSE_PROJECT_NAME=speedtest-test
104 changes: 104 additions & 0 deletions docker/test/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
## this is a docker compose file used to test all scenarios
## do not use it in production

services:
###################### POSTGRESQL ################################
pg:
image: postgres:alpine
environment:
POSTGRES_PASSWORD: Not4SecureProduction
POSTGRES_USER: librespeed
volumes:
# mount init script from source to create database tables
- ../../results/telemetry_postgresql.sql:/docker-entrypoint-initdb.d/01-init.sql

speedtest-debian-pg:
build:
context: ../..
dockerfile: Dockerfile
environment: &env_vars_pg
- PASSWORD=gimmeTheStats1337
- DB_HOSTNAME=pg
- DB_NAME=librespeed
- DB_PASSWORD=Not4SecureProduction
- DB_TYPE=postgresql
- DB_USERNAME=librespeed
- [email protected]
- ENABLE_ID_OBFUSCATION=true
- MODE=standalone
- REDACT_IP_ADDRESSES=true
- TELEMETRY=true
ports:
- 9123:8080

speedtest-alpine-pg:
build:
context: ../..
dockerfile: Dockerfile.alpine
environment: *env_vars_pg
ports:
- 9124:8080

####################### MYSQL ##############################

mysql:
image: mysql:lts
environment:
MYSQL_ROOT_PASSWORD: Not4SecureProduction
MYSQL_USER: librespeed
MYSQL_PASSWORD: Not4SecureProduction
MYSQL_DATABASE: librespeed
volumes:
# mount init script from source to create database tables
- ../../results/telemetry_mysql.sql:/docker-entrypoint-initdb.d/01-init.sql

speedtest-debian-mysql:
# check at http://localhost:9125/results/sanitycheck.php
build:
context: ../..
dockerfile: Dockerfile
environment: &env_vars_mysql
- PASSWORD=gimmeTheStats1337
- DB_HOSTNAME=mysql
- DB_NAME=librespeed
- DB_PASSWORD=Not4SecureProduction
- DB_TYPE=mysql
- DB_USERNAME=librespeed
- [email protected]
- ENABLE_ID_OBFUSCATION=true
- MODE=standalone
- REDACT_IP_ADDRESSES=true
- TELEMETRY=true
ports:
- 9125:8080
speedtest-alpine-mysql:
build:
context: ../..
dockerfile: Dockerfile.alpine
environment: *env_vars_mysql
ports:
- 9126:8080

###### SQLITE ######
speedtest-debian-sqlite:
# check at http://localhost:9125/results/sanitycheck.php
build:
context: ../..
dockerfile: Dockerfile
environment: &env_vars_sqlite
- PASSWORD=gimmeTheStats1337
- [email protected]
- ENABLE_ID_OBFUSCATION=true
- MODE=standalone
- REDACT_IP_ADDRESSES=true
- TELEMETRY=true
ports:
- 9127:8080

speedtest-alpine-sqlite:
build:
context: ../..
dockerfile: Dockerfile.alpine
environment: *env_vars_sqlite
ports:
- 9128:8080
Loading