Zum Inhalt

Technology used

We rely on standards that have been tried and tested millions of times worldwide for the implementation of CCM19. The software is based on the PHP framework Symfony©, one of the most proven and secure frameworks available with over 600,000 developers worldwide.

Frontend widgets

The frontend widgets are implemented using pure Javascript, without recourse to frameworks such as jquery, vue or react, in order to avoid possible incompatibilities as far as possible.

Security

CCM19 makes intensive use of Content Security Policy (CSP) with the following regular restrictions:

Content-Security-Policy:
    default-src 'self';
    connect-src 'self' https://update.ccm19.de;
    script-src 'self' 'unsafe-inline';
    style-src 'self' 'unsafe-inline';
    img-src 'self' data:;
    frame-ancestors 'self';
    form-action 'self'

Storage without database

All data is stored locally in JSON format in the secure area of CCM19. If you use the download version, you will find the data in the /var directory of your installation.

The storage and processing is so efficient that even several million calls per day can be processed without any problems.

Storage with database

CCM19 alternatively uses MongoDB from version 4.0. In this variant, all data is stored in the database.

In this case, the /var directory is still used for caching purposes, so it must still be writable.

CCM19 requires multi-document transactions. These are only supported in replica sets and (from MongoDB version 4.2) in sharded clusters. It is therefore generally necessary to set up a replica set even with 1-server configurations. No other special settings are required.

Beta phase

Before the release, we carry out various tests to find and correct typical errors. Furthermore, there is an extended beta phase in which many customers participate and give us feedback before the final release.

System requirements for download version

The self-service / download version of CCM19 only requires

  • Linux or another POSIX-compatible operating system
  • PHP version 7.2 or higher
  • Apache httpd 2.2+ or nginx
  • And in the case of using the MongoDB database from version 4

Apache httpd

We recommend a LAMP server - although the M for MySQL is not necessary and can alternatively be replaced by MongoDB.

The following modules are required for operation with Apache httpd:

  • mod_rewrite
  • mod_headers (optional)
  • mod_expires (optional)

CCM19 is fully compatible with the caching module mod_cache. It is also recommended to optimize the performance of Apache httpd. For information on how to do this, please refer to the countless tutorials available on other pages.

nginx

If your web serveruses nginx , it may be necessary to make adjustments to the server configuration so that CCM19 runs satisfactorily after you have carried out the first step of the installation.

First find out the path to the configuration file of the nginx server for your (sub)domain (usually /etc/nginx/nginx.conf or /etc/nginx/conf.d/domainname.conf) and the socket path for the installed PHP FPM module (often unix:/run/php/php7.2-fpm.sock or similar) from your provider or server administrator.

Please also note the absolute path to the public directory of the CCM19 installation and the desired URL path to ccm19 (e.g. /ccm19).

The sample configuration file listed here can be found in the download package in the directory www/examples/ - CCM19 is installed in a subdirectory here.

Example:

# Add the content of this file to your nginx configuration within a
# server block if you want to run CCM19 in a subdirectory.
# This requires the PHP-FPM module with at least PHP 7.2.
#
# You must make the following adjustments:
# - Replace "/ccm19" with the URL path under which CCM19 should be accessible,
# - replace "/path/to/ccm/public" with the path to the public directory in your
# CCM19 installation (without / at the end!),
# - "unix:/run/php/php7.2-fpm.sock" depending on the server configuration with the
# socket path to your PHP-FPM module.

    set $ccm19_urlpath /ccm19;
    set $ccm19_realpath /path/to/ccm/public;

    location ~ /ccm19(/.*) {
        root $ccm19_realpath;
        try_files $1 @ccm19;
    }

    location ^~ /ccm19/index.php {
        return 403;
    }

    location @ccm19 {
        root $ccm19_realpath;

        fastcgi_index index.php;
        fastcgi_split_path_info ^(/ccm19)(/.*)$;
        set $path_info $fastcgi_path_info;

        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_param SCRIPT_NAME $ccm19_urlpath/index.php;
        fastcgi_param PATH_INFO $path_info;

        fastcgi_param HTTP_PROXY "";
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT $document_root;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param REQUEST_SCHEME $scheme;
        fastcgi_param HTTPS $https if_not_empty;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;

        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }