Inhaltsverzeichnis

Docker

A web server for SoSci Survey can also be operated via a Docker container.

Warning: This manual is still incomplete (work in progress). It describes a minimal configuration without SSL encryption and further security mechanisms, intended for local operation. Do not use this configuration to operate a production system.

On Windows, it is best to install Docker Desktop for this purpose.

Configuration

Create a directory, e.g., C:\Data\sosci, and in it a file docker-compose.yml with the following content. Do not forget to enter your own data at the places marked with __Change__.

docker-compose.yml
services:
    mariadb:
        image: 'mariadb:11.0'
        working_dir: /application
        volumes:
            - './data:/application'
            - './data/mysql:/var/lib/mysql'
        environment:
            - MYSQL_ROOT_PASSWORD=__Change__
            - MYSQL_DATABASE=sosci
            - MYSQL_USER=sosci
            - MYSQL_PASSWORD=__Change__
        ports:
            - '63003:3306'

    webserver:
        image: 'nginx:alpine'
        working_dir: /application
        volumes:
            - './data:/application'
            - './conf/nginx.conf:/etc/nginx/conf.d/default.conf'
            - './survey:/var/www/html'
            - './log:/var/log'
        ports:
            - '63000:80'
            # - '443:443'

    php-fpm:
        build: php-fpm
        working_dir: /application
        volumes:
            - './data:/application'
            - './conf/php-ini-overrides.ini:/etc/php/8.4/fpm/conf.d/99-overrides.ini'
            - './conf/php-ini-overrides.ini:/etc/php/8.4/cli/conf.d/99-overrides.ini'
            - './survey:/var/www/html'
            - './log:/var/log'

Extract the SoSci Survey installation package to C:\Data\sosci\survey\, a file C:\Data\sosci\survey\index.html should exist afterwards.

Create the following configuration in C:\Data\sosci\conf\nginx.conf

nginx.conf
server {
    listen 80 default;
 
    client_max_body_size 128M;
 
    access_log /var/log/nginx/access.log;
 
    root /var/www/html;
    index index.php;
 
    # try to serve file directly, fallback to index.php
    location / {
	try_files $uri $uri/ =404;
	index index.php index.html;
    }
 
    if (!-e $request_filename) {
        rewrite ^.*$ /index.php last;
    }
 
    # Forbidden directories
    location ~ ^/(inc|lib|system)/ {
        deny all;
        return 403;
    }
    location ~ ^/files/(protected|upload|share)/ {
        deny all;
        return 403;
    }
    location ~ /\.ht {
        deny all;
        return 403;
    }
 
    # Use default favicon, so no entries will appear in the errorlog
    location ~ ^/.*/favicon\.ico$ {
        try_files /favicon.ico =404;
    }
 
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }
 
}

Furthermore, create the configuration C:\Data\sosci\conf\php-ini-overrides.ini

php-ini-overrides.ini
upload_max_filesize = 100M
post_max_size = 128M

Create a configuration C:\Data\sosci\php-fpm\Dockerfile

Dockerfile
FROM phpdockerio/php:8.4-fpm
WORKDIR "/application"
 
RUN apt-get update \
    && apt-get -y --no-install-recommends install \
        php8.4-bcmath \
        php8.4-gd \
        php8.4-imap \
        php8.4-intl \
        php8.4-memcached \
        php8.4-mysql \
        php8.4-xml \
        php8.4-gd \
        php8.4-mbstring \
        php8.4-zip \
        php8.4-apcu \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

Start the container on the command line or in the terminal with the following command:

  docker-compose up

In the future, you can then also start the containers directly in Docker Desktop.

Access to the Containers

You open the installation routine via http://localhost:63000/admin/install.php.

As the database server in the SoSci Survey installation, enter mariadb:3306.

Permissions

This solution uses different (Linux) users for the PHP process and for the web server. For access to the survey projects to work, set the option “limited writing (0x755)” for New projects' file permissions in the Server Settings, in the tab “Server”, in the section “Security”.