The installed packages for Apache HTTP Server, PHP, and MariaDB already come with configuration files. It is recommended to store custom settings in separate files rather than modifying the existing configuration files. The default configuration settings are supplemented or overridden by the custom ones.
The memory_limit must be increased if needed, 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 ships custom Apache settings in files named .htaccess. These must be reviewed after each update and updated in the VirtualHost configuration.
In the next step, the Apache HTTP Server is restarted:
1
sudosystemctlrestarthttpdphp-fpm
For Apache to have read and write permissions in the future i-doit installation directory, this must be allowed by SELinux:
To ensure MariaDB delivers good performance and can be operated securely, a few steps are needed that should be carried out meticulously. This starts with a secure installation. The recommendations should be followed. The root user should receive a secure password:
1
sudomysql_secure_installation
Do not enable socket authentication for the root user, 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 started:
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