The installed packages for Apache HTTP Server, PHP and MariaDB already include configuration files. It is recommended to save deviating settings in separate files instead of adapting the existing configuration files. The settings of the standard configuration are supplemented or overwritten by the user-defined settings.
The memory_limit must be increased if necessary, e.g. for very large reports or extensive documents. The value (in seconds) of session.gc_maxlifetime should be greater than or equal to the session timeout in the system settings of i-doit. The date.timezone parameter should be adjusted to the local time zone (see List of supported time zones).
<VirtualHost*:80>ServerNameidoit.example.com
ServerAdminwebmaster@example.com
DocumentRoot/var/www/htmlErrorLog/var/log/httpd/idoit_error.logCustomLog/var/log/httpd/idoit_access.logcombined
<Directory/var/www/html/>## See https://httpd.apache.org/docs/2.2/mod/core.html#allowoverrideAllowOverrideNone## Apache Web server configuration file for i-doit#### This file requires:#### - Apache HTTPD >= 2.4 with enabled modules:## - rewrite## - expires## - headers## - authz_core#### For performance and security reasons we put these settings## directly into the VirtualHost configuration and explicitly set## "AllowOverride none". After each i-doit update check if the .htaccess file, in the i-doit directory,## has changed and add the changes in the VirtualHost configuration.#### See the i-doit Knowledge Base for more details:## <https://kb.i-doit.com/>## Disable directory indexes:Options-Indexes+SymLinksIfOwnerMatch
<IfModulemod_authz_core.c>RewriteCond%{REQUEST_METHOD}=GET
RewriteRule"^$""/index.php"## Deny access to meta files:<Files"*.yml">Requirealldenied
</Files>## Deny access to hidden files:<FilesMatch"^\.">Requirealldenied
</FilesMatch>## Deny access to bash scripts:<FilesMatch"^(controller|.*\.sh)$">Requirealldenied
</FilesMatch>## Deny access to all PHP files…<Files"*.php">Requirealldenied
</Files>## Deny access to wrongly created config backup files like ...inc.php.0123123 instead of ...inc.012341.php<FilesMatch"\.php\.\d+$">Requirealldenied
</FilesMatch>## …except some PHP files in root directory:<FilesMatch"^(index\.php|controller\.php|proxy\.php)$"><IfModulemod_auth_kerb.c>Requirevalid-user
</IfModule><IfModule!mod_auth_kerb.c>Requireallgranted
</IfModule></FilesMatch>## …except some PHP files in src/:<Files"jsonrpc.php">Requireallgranted
</Files>## …except some PHP files in src/tools/php/:<FilesMatch"^(rt\.php|barcode_window\.php|barcode\.php)$">Requireallgranted
</FilesMatch>## …except some PHP files in src/tools/php/qr/:<FilesMatch"^(qr\.php|qr_img\.php)$">Requireallgranted
</FilesMatch>## …except some PHP files in src/tools/js/:<FilesMatch"^js\.php$">Requireallgranted
</FilesMatch></IfModule>## Deny access to some directories:<IfModulemod_alias.c>RedirectMatch403/imports/.*$
RedirectMatch403/log/.*$
RedirectMatch403/temp/.*(?<!\.(css|xsl))$
RedirectMatch403/upload/files/.*$
RedirectMatch403/upload/images/.*$
RedirectMatch403/vendor/.*$
</IfModule>## Cache static files:<IfModulemod_expires.c>ExpiresActiveOn# A2592000 = 30 daysExpiresByTypeimage/svg+xmlA2592000
ExpiresByTypeimage/gifA2592000
ExpiresByTypeimage/pngA2592000
ExpiresByTypeimage/jpgA2592000
ExpiresByTypeimage/jpegA2592000
ExpiresByTypeimage/icoA2592000
ExpiresByTypetext/cssA2592000
ExpiresByTypetext/javascriptA2592000
ExpiresByTypeimage/x-icon"access 1 year"ExpiresDefault"access 2 week"<IfModulemod_headers.c>HeaderappendCache-Control"public"</IfModule></IfModule>## Pretty URLs:<IfModulemod_rewrite.c>RewriteEngineOnRewriteRulefavicon\.ico$images/favicon.ico[L]
RewriteCond%{REQUEST_FILENAME}!-l
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule.*index.php[L,QSA]
</IfModule>## Deny access to all ini files…<Files"*.ini">Requirealldenied
</Files></Directory>TimeOut600ProxyTimeout600</VirtualHost>
i-doit provides different Apache settings in files with the name .htaccess. These must be checked after each update and updated in the VirtualHost configuration.
In the next step, the Apache HTTP server is restarted:
1
sudosystemctlrestarthttpdphp-fpm
In order for Apache to have read and write permissions in the future installation directory of i-doit, this must be permitted by SELinux:
To ensure that MariaDB delivers good performance and can be operated securely, a few steps are necessary that should be carried out meticulously. This starts with a secure installation. The recommendations should be followed. The user root should be given a secure password:
1
sudomysql_secure_installation
Do not activate socket authentication for the user root, as this would prevent i-doit from connecting to the database.
[mysqld]
# This is the number 1 setting to look at for any performance optimization
# It is where the data and indexes are cached: having it as large as possible will
# ensure MySQL uses memory and not disks for most read operations.
#
# Typical values are 1G (1-2GB RAM), 5-6G (8GB RAM), 20-25G (32GB RAM), 100-120G (128GB RAM).
innodb_buffer_pool_size = 1G
# Redo log file size, the higher the better.
# MySQL/MariaDB writes two of these log files in a default installation.
innodb_log_file_size = 512M
innodb_sort_buffer_size = 64M
sort_buffer_size = 262144 # default
join_buffer_size = 262144 # default
max_allowed_packet = 128M
max_heap_table_size = 32M
query_cache_min_res_unit = 4096
query_cache_type = 1
query_cache_limit = 5M
query_cache_size = 80M
tmp_table_size = 32M
max_connections = 200
innodb_file_per_table = 1
# Disable this (= 0) if you have slow harddisks
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 2048
table_definition_cache = 1024
table_open_cache = 2048
# Only if your have MySQL 5.6 or higher, do not use with MariaDB!
#table_open_cache_instances = 4
innodb_stats_on_metadata = 0
sql-mode = ""
Finally, MariaDB is restarted:
1
sudosystemctlrestartmariadb.service
Finally, we need to configure SELinux so that Apache can access the network and the database:
123456
# Allow Apache to connect to the database
sudosetsebool-Phttpd_can_network_connect_db1# Allow Apache to connect to the network
sudosetsebool-Phttpd_can_network_connect1# Allow Apache to connect to unusual pgsql Port for JDisc
sudosemanageport-a-tpostgresql_port_t-ptcp25321