====== Information ====== * DokuWiki * [[information:realm_of_espionage|Realm of Espionage]] * https://wiki.realmofespionage.xyz ((you are here :p)) ===== Prerequisites ===== * [[linux:distros:server:opensuse_tumbleweed_server|openSUSE Tumbleweed (Server)]] * [[servers:linux:nginx_php_php-fpm|nginx + PHP + PHP-FPM]] * [[servers:linux:nginx:lets_encrypt|Certbot (Let's Encrypt)]] ====== Dependencies ====== * https://www.dokuwiki.org/requirements * https://www.dokuwiki.org/install:php * https://github.com/dokuwiki/dokuwiki/blob/master/composer.json sudo zypper install php8-bz2 php8-gd php8-intl php8-mbstring php8-sodium php8-zlib ====== Download Source ====== * https://github.com/dokuwiki/dokuwiki/commits/master/ sudo git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/splitbrain/dokuwiki.git' '/srv/www/wiki' && sudo chown -R 'wwwrun':'www' '/srv/www/wiki' && sudo chmod -R '0755' '/srv/www/wiki' ====== nginx + PHP-FPM Configuration ====== ===== PHP-FPM Socket ===== sudo -e '/etc/php8/fpm/php-fpm.d/wiki.conf' && sudo systemctl restart 'php-fpm' [wiki] ; User/Group user = "wwwrun" group = "www" ; Socket listen = "/run/php-fpm/wiki.sock" listen.owner = "wwwrun" listen.group = "www" listen.mode = "0662" ; Process Management pm = "ondemand" pm.max_children = "4" pm.process_idle_timeout = "30" ; Logging php_value[log_errors] = "0" php_value[error_reporting] = "~E_ALL" ; openSUSE php.ini Defaults php_value[session.save_path] = "/var/lib/php8/sessions" ; General php_value[date.timezone] = "America/New_York" ; End ===== FastCGI ===== sudo -e '/etc/nginx/default.d/wiki.conf' location '~' '\.(php|phar)(/.*)?$' { fastcgi_split_path_info '^(.+\.(?:php|phar))(/.*)$'; fastcgi_intercept_errors 'on'; fastcgi_index 'doku.php'; include 'fastcgi_params'; fastcgi_param 'SCRIPT_FILENAME' '$document_root$fastcgi_script_name'; fastcgi_param 'PATH_INFO' '$fastcgi_path_info'; fastcgi_param 'HTTPS' 'on'; fastcgi_pass 'unix:/run/php-fpm/wiki.sock'; } # End ===== Server Block ====== sudo -e '/etc/nginx/vhosts.d/wiki.conf' && sudo systemctl reload 'nginx' server { listen '443' 'ssl'; http2 'on'; server_name 'wiki.realmofespionage.xyz'; root '/srv/www/wiki'; index 'doku.php'; include '/etc/nginx/default.d/wiki.conf'; include '/etc/nginx/default.d/headers.conf'; client_max_body_size '10M'; add_header 'Content-Security-Policy' "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:" 'always'; # access_log '/var/log/nginx/wiki-access.log'; # error_log '/var/log/nginx/wiki-error.log'; # location = '/install.php' { # deny 'all'; # } # location '~' '/(conf|bin|inc)/' { # deny 'all'; # } # location '~' '/data/' { # internal; # } location '/' { try_files '$uri' '$uri/' '@dokuwiki'; } location '@dokuwiki' { rewrite '^/_media/(.*)' '/lib/exe/fetch.php?media=$1' 'last'; rewrite '^/_detail/(.*)' '/lib/exe/detail.php?media=$1' 'last'; rewrite '^/_export/([^/]+)/(.*)' '/doku.php?do=export_$1&id=$2' 'last'; rewrite '^/(.*)' '/doku.php?id=$1&$args' 'last'; } } # End ====== Initial Setup ====== * https://wiki.realmofespionage.xyz/install.php ====== Settings ====== ===== Template Style Settings ===== * Alternative background color: ''#484848'' (gray) * The general link color: ''#3d8bff'' (blue) * The width of the full site: ''85%'' ===== nginx Server Block Deny Directives ===== * Uncomment commented sections (except logs) * Do after initial setup sudo -e '/etc/nginx/vhosts.d/wiki.conf' && sudo systemctl reload 'nginx' ===== URL Rewrite ===== * Admin -> Configuration Settings -> DokuWiki -> Advanced -> userewrite .htaccess ===== Double-hyphen Convert Disable ===== * This prevents -- from becoming a – (long hyphen), which breaks some command's syntax echo '-- --' | sudo tee '/srv/www/wiki/conf/entities.local.conf' > '/dev/null' && sudo chown 'wwwrun':'www' '/srv/www/wiki/conf/entities.local.conf' ====== Scripts ====== ===== Git Fix ===== * :!: Set email for ''user.email'' sudo mkdir -p '/etc/nginx/scripts/wiki' && sudo -e '/etc/nginx/scripts/wiki/git-fix.sh' && sudo chmod '0500' '/etc/nginx/scripts/wiki/git-fix.sh' && sudo chown 'wwwrun':'www' '/etc/nginx/scripts/wiki/git-fix.sh' #!/bin/bash cd '/tmp' '/usr/bin/rm' -Rf '/srv/www/wiki/.git' '/usr/bin/git' -C '/srv/www/wiki' init --initial-branch='master' '/usr/bin/git' -C '/srv/www/wiki' add '.' ######################################## '/usr/bin/git' -C '/srv/www/wiki' config 'user.email' 'espionage724@x' ######################################## '/usr/bin/git' -C '/srv/www/wiki' commit --message='x' '/usr/bin/git' -C '/srv/www/wiki' remote add 'origin' 'https://github.com/dokuwiki/dokuwiki.git' '/usr/bin/git' -C '/srv/www/wiki' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase '/usr/bin/git' -C '/srv/www/wiki' reset --hard 'origin/master' '/usr/bin/git' -C '/srv/www/wiki' gc --aggressive --prune='all' '/usr/bin/git' -C '/srv/www/wiki' fsck --full --strict # End ==== Execute ==== sudo su 'wwwrun' -s '/bin/bash' '/etc/nginx/scripts/wiki/git-fix.sh' exit ====== Services ====== ===== Updater ===== ==== Service ==== sudo -e '/etc/systemd/system/wiki-up.service' [Service] User=wwwrun Group=www Type=oneshot WorkingDirectory=/srv/www/wiki ExecStart='/usr/bin/git' -C '/srv/www/wiki' reset --hard 'origin/master' ExecStart='/usr/bin/git' -C '/srv/www/wiki' pull origin 'master' --rebase ExecStart='/usr/bin/php' '/srv/www/wiki/bin/indexer.php' --clear ExecStart='/usr/bin/touch' '/srv/www/wiki/conf/local.php' ExecStartPost='/usr/bin/sync' # End ==== Timer ==== * Daily ''12:00:00 AM'' sudo -e '/etc/systemd/system/wiki-up.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'wiki-up.timer' --now && sudo systemctl start 'wiki-up' && sudo systemctl status 'wiki-up' -l [Unit] Description=DokuWiki Git Updater After=network-online.target Wants=network-online.target [Timer] OnCalendar=*-*-* 00:00:00 Persistent=true [Install] WantedBy=timers.target # End ===== Backup ===== ==== Service ==== mkdir -p ~/'backups' && sudo -e '/etc/systemd/system/wiki-fb.service' && sudo sed -i 's/CHANGEME/'$USER'/g' '/etc/systemd/system/wiki-fb.service' [Service] Type=oneshot WorkingDirectory=/srv/www/wiki ExecStart='/usr/bin/bash' -c '"/usr/bin/tar" -czf "/home/CHANGEME/backups/dokuwiki-files-auto-"$$(date +%%Y-%%m-%%d)".tar.gz" -C "/srv/www/wiki" "data/pages" "data/meta" "data/media" "data/media_meta" "data/attic" "data/media_attic" "conf"' ExecStartPost='/usr/bin/sync' # End ==== Timer ==== * Weekly (Monday) ''12:15:00 AM'' sudo -e '/etc/systemd/system/wiki-fb.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'wiki-fb.timer' --now && sudo systemctl start 'wiki-fb' && sudo systemctl status 'wiki-fb' -l [Unit] Description=DokuWiki Files Backup [Timer] OnCalendar=Mon *-*-* 00:15:00 Persistent=true [Install] WantedBy=timers.target # End ===== Maintenance ===== ==== Service ==== sudo -e '/etc/systemd/system/wiki-m.service' [Service] User=wwwrun Group=www Type=oneshot WorkingDirectory=/srv/www/wiki ExecStart='/usr/bin/git' -C '/srv/www/wiki' gc --aggressive --prune='all' ExecStart='/usr/bin/git' -C '/srv/www/wiki' fsck --full --strict ExecStartPost='/usr/bin/sync' # End ==== Timer ==== * Monthly (1st) ''12:30:00 AM'' sudo -e '/etc/systemd/system/wiki-m.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'wiki-m.timer' --now [Unit] Description=DokuWiki Maintenance [Timer] OnCalendar=*-*-01 00:30:00 Persistent=true [Install] WantedBy=timers.target # End sudo systemctl start 'wiki-m' && sudo systemctl status 'wiki-m' -l ====== Backup ====== ===== Files ===== **** sudo tar -czf ~/'dokuwiki-files-manual-'$(date +%Y-%m-%d)'.tar.gz' -C '/srv/www/wiki' 'data/pages' 'data/meta' 'data/media' 'data/media_meta' 'data/attic' 'data/media_attic' 'conf' ===== scp ===== **** scp espionage724@192.168.1.152:~/'dokuwiki-files-'*'.tar.gz' ~/'Downloads' ====== Restore ====== ===== scp ===== **** scp ~/'Downloads/dokuwiki-files-'*'.tar.gz' espionage724@192.168.1.152:~ ===== Stop nginx ===== **** sudo systemctl stop 'nginx' ===== Remove Existing Files ===== **** ls ~/'dokuwiki-files-'*'.tar.gz' && sudo rm -Rf '/srv/www/wiki/data/pages' '/srv/www/wiki/data/meta' '/srv/www/wiki/data/media' '/srv/www/wiki/data/media_meta' '/srv/www/wiki/data/attic' '/srv/www/wiki/data/media_attic' '/srv/www/wiki/conf' ===== Restore Files ===== **** sudo tar -xzf ~/'dokuwiki-files-'*'.tar.gz' -C '/srv/www/wiki' 'data/pages' 'data/meta' 'data/media' 'data/media_meta' 'data/attic' 'data/media_attic' 'conf' && sudo chown -R 'wwwrun':'www' '/srv/www/wiki' && sudo chmod -R '0755' '/srv/www/wiki' ===== Git Fix ===== * :!: Set email for ''user.email'' sudo su 'wwwrun' -s '/bin/bash' rm -Rf '/srv/www/wiki/.git' git -C '/srv/www/wiki' init --initial-branch='master' git -C '/srv/www/wiki' add '.' git -C '/srv/www/wiki' config 'user.email' 'espionage724@x' git -C '/srv/www/wiki' commit --message='x' git -C '/srv/www/wiki' remote add 'origin' 'https://github.com/dokuwiki/dokuwiki.git' git -C '/srv/www/wiki' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase git -C '/srv/www/wiki' reset --hard 'origin/master' git -C '/srv/www/wiki' gc --aggressive --prune='all' git -C '/srv/www/wiki' fsck --full --strict exit ===== Indexer ===== sudo su 'wwwrun' -s '/bin/bash' cd '/srv/www/wiki' && '/usr/bin/php' '/srv/www/wiki/bin/indexer.php' --clear exit ===== Start nginx ===== **** sudo systemctl start 'nginx' ===== Clean-up ===== **** rm -fv ~/'dokuwiki-files-'*'.tar.gz' ====== TODOs ====== * https://www.dokuwiki.org/cli?s%5B%5D=wantedpages.php * https://www.dokuwiki.org/rewrite