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 in JSON-format locally in the secure area of CCM19. If you use the download-variant, 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-variant
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 - whereby 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 example-configuration file listed here can be found in the download-package in the directory www/examples/ - here CCM19 is installed in a subdirectory.
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,
# - "/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
# replace 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;
}