Browse Source

Merge pull request #678 from librespeed/fix-docker-images

alpine/debian docker image tests and fixes
sstidl 10 tháng trước cách đây
mục cha
commit
c0c2a41c23
6 tập tin đã thay đổi với 160 bổ sung47 xóa
  1. 9 16
      Dockerfile
  2. 23 21
      Dockerfile.alpine
  3. 21 9
      docker/entrypoint.sh
  4. 1 0
      docker/test/.env
  5. 104 0
      docker/test/docker-compose.yml
  6. 2 1
      docker/ui.php

+ 9 - 16
Dockerfile

@@ -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/*
 
@@ -42,11 +35,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"]

+ 23 - 21
Dockerfile.alpine

@@ -1,26 +1,26 @@
 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
+    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
@@ -49,11 +49,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"]

+ 21 - 9
docker/entrypoint.sh

@@ -3,6 +3,10 @@
 set -e
 set -x
 
+is_alpine() {
+  [ -f /etc/alpine-release ]
+}
+
 # Cleanup
 rm -rf /var/www/html/*
 
@@ -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
 
@@ -38,7 +42,7 @@ if [ "$MODE" != "backend" ]; then
 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
@@ -46,16 +50,16 @@ if [[ "$TELEMETRY" == "true" && ( "$MODE" == "frontend" || "$MODE" == "standalon
     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
@@ -77,14 +81,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
@@ -95,7 +107,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

+ 1 - 0
docker/test/.env

@@ -0,0 +1 @@
+COMPOSE_PROJECT_NAME=speedtest-test

+ 104 - 0
docker/test/docker-compose.yml

@@ -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

+ 2 - 1
docker/ui.php

@@ -9,7 +9,7 @@
 function I(i){return document.getElementById(i);}
 
 //LIST OF TEST SERVERS. See documentation for details if needed
-<?php 
+<?php
 $mode=getenv("MODE");
 if($mode=="standalone" || $mode=="dual"){ ?>
 var SPEEDTEST_SERVERS=[];
@@ -400,6 +400,7 @@ function initUI(){
 		html,body,#loading{
 			background:#202020;
 			color:#F4F4F4;
+			color-scheme:dark;
 		}
 		h1{
 			color:#E0E0E0;