====== Information ====== * Piwigo * Bootstrap Darkroom Theme * [[information:realm_of_espionage|Realm of Espionage]] * https://media.realmofespionage.xyz ===== 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)]] * [[servers:linux:mariadb|MariaDB]] ====== Dependencies ====== * https://piwigo.org/guides/install/requirements * https://github.com/Piwigo/piwigo-videojs/wiki/How-to-add-videos * https://github.com/Piwigo/piwigo-videojs/wiki/Synchronize#requirement sudo zypper install php8-gd php8-exif php8-mbstring php8-mysql php8-opcache ====== Download Source ====== * https://github.com/Piwigo/Piwigo/commits/master/ * https://github.com/Piwigo/piwigo-bootstrap-darkroom/commits/master/ sudo git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/Piwigo.git' '/srv/www/media' && sudo chown -R 'wwwrun':'www' '/srv/www/media' && sudo chmod -R '0755' '/srv/www/media' sudo git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/srv/www/media/themes/bootstrap_darkroom' && sudo chown -R 'wwwrun':'www' '/srv/www/media/themes' && sudo chmod -R '0755' '/srv/www/media/themes' ====== Database ====== sudo mariadb CREATE DATABASE piwigo; CREATE USER 'piwigo'@'localhost' IDENTIFIED BY 'x'; GRANT ALL PRIVILEGES ON piwigo.* to 'piwigo'@'localhost'; FLUSH PRIVILEGES;EXIT; ====== nginx + PHP-FPM Configuration ====== ===== PHP-FPM Socket ===== sudo -e '/etc/php8/fpm/php-fpm.d/media.conf' && sudo systemctl restart 'php-fpm' [media] ; User/Group user = "wwwrun" group = "www" ; Socket listen = "/run/php-fpm/media.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" ; Piwigo php_value[max_execution_time] = "200" php_value[memory_limit] = "512M" php_value[post_max_size] = "100M" php_value[upload_max_filesize] = "20M" php_value[max_file_uploads] = "100" ; End ===== FastCGI ===== sudo -e '/etc/nginx/default.d/media.conf' location '~' '\.(php|phar)(/.*)?$' { fastcgi_split_path_info '^(.+\.(?:php|phar))(/.*)$'; fastcgi_intercept_errors 'on'; fastcgi_index 'index.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/media.sock'; } # End ===== Server Block ===== sudo -e '/etc/nginx/vhosts.d/media.conf' && sudo systemctl reload 'nginx' server { listen '443' 'ssl'; http2 'on'; server_name 'media.realmofespionage.xyz'; root '/srv/www/media'; index 'index.php'; include '/etc/nginx/default.d/media.conf'; include '/etc/nginx/default.d/headers.conf'; client_max_body_size '100M'; # access_log '/var/log/nginx/media-access.log'; # error_log '/var/log/nginx/media-error.log'; location '/' { index 'index.php'; try_files '$uri $uri/' '@rewrite'; } location '@rewrite' { rewrite '^/picture((/|$).*)$' '/picture.php$1' 'last'; rewrite '^/index((/|$).*)$' '/index.php$1' 'last'; rewrite '^/i((/|$).*)$' '/i.php$1' 'last'; } } # End ====== Initial Setup ====== * https://media.realmofespionage.xyz ====== Settings ====== * :!: Use a relay/bogus email address during account creation to protect against potential spam ((the webmaster URL in the footer shows the email in plaintext and looks tasty to bots)) * :!: Disable ''Allow user registration'' **immediately** under Configuration -> Options -> General -> Permissions * :?: Seemingly have to enable ''Activate comments'' in order to prevent broken CSS on the bottom of image pages, but can uncheck ''Comments for all'' so that nobody public can leave comments * Activate Boostrap Darkroom theme ===== Page Banner ===== ****

Tech, hardware, food, nature, and gaming pictures and videos!

===== config.inc.php ===== * [[https://piwigo.org/forum/viewtopic.php?pid=159584#p159584|nginx Rewrite source]] * [[https://doc.piwigo.org/import-and-manage-photos/file-formats-compatible-piwigo#block-5cef6409208a4b3ead19b930f85942b2|Video Uploading source]] * [[https://github.com/Piwigo/Piwigo/blob/master/include/config_default.inc.php|More Settings]] sudo -e '/srv/www/media/local/config/config.inc.php' && sudo chown -v 'wwwrun':'www' '/srv/www/media/local/config/config.inc.php' 'Realm of Espionage', 'https://wiki.realmofespionage.xyz/start' => 'RoE | Wiki', 'https://blog.realmofespionage.xyz' => 'RoE | Blog', 'https://social.realmofespionage.xyz/profile/espionage724' => 'RoE | Social', 'https://forums.realmofespionage.xyz' => 'RoE | Forums', 'https://wiki.realmofespionage.xyz/user:espionage724' => 'Webmaster Info', 'https://wiki.realmofespionage.xyz/servers:linux:nginx:piwigo' => 'Instance Configuration Notes', ); // Video Uploading $conf['upload_form_all_types'] = true; $conf['file_ext'] = array_merge( $conf['picture_ext'], array('mp4','webmv','m4v','webm','mov') ); // End ?> ====== Scripts ====== ===== Git Fix ===== * :!: Set email for **both** ''user.email'' sudo mkdir -p '/etc/nginx/scripts/media' && sudo -e '/etc/nginx/scripts/media/git-fix.sh' && sudo chmod '0500' '/etc/nginx/scripts/media/git-fix.sh' && sudo chown 'wwwrun':'www' '/etc/nginx/scripts/media/git-fix.sh' #!/bin/bash cd '/tmp' '/usr/bin/rm' -Rf '/srv/www/media/.git' '/usr/bin/git' -C '/srv/www/media' init --initial-branch='master' '/usr/bin/git' -C '/srv/www/media' add '.' ######################################## '/usr/bin/git' -C '/srv/www/media' config 'user.email' 'espionage724@x' ######################################## '/usr/bin/git' -C '/srv/www/media' commit --message='x' '/usr/bin/git' -C '/srv/www/media' remote add 'origin' 'https://github.com/Piwigo/Piwigo.git' '/usr/bin/git' -C '/srv/www/media' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase '/usr/bin/git' -C '/srv/www/media' reset --hard 'origin/master' '/usr/bin/git' -C '/srv/www/media' gc --aggressive --prune='all' '/usr/bin/git' -C '/srv/www/media' fsck --full --strict '/usr/bin/rm' -Rf '/srv/www/media/themes/bootstrap_darkroom/.git' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' init --initial-branch='master' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' add '.' ######################################## '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' config 'user.email' 'espionage724@x' ######################################## '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' commit --message='x' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' remote add 'origin' 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' '/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' fsck --full --strict # End ==== Execute ==== sudo su 'wwwrun' -s '/bin/bash' '/etc/nginx/scripts/media/git-fix.sh' exit ====== Services ====== ===== Updater ===== ==== Service ==== sudo -e '/etc/systemd/system/media-up.service' [Service] User=wwwrun Group=www Type=oneshot WorkingDirectory=/srv/www/media ExecStart='/usr/bin/git' -C '/srv/www/media' reset --hard 'origin/master' ExecStart='/usr/bin/git' -C '/srv/www/media' pull origin 'master' --rebase ExecStart='/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' ExecStart='/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' pull origin 'master' --rebase ExecStartPost='/usr/bin/sync' # End ==== Timer ==== * Daily ''01:00:00 AM'' sudo -e '/etc/systemd/system/media-up.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-up.timer' --now && sudo systemctl start 'media-up' && sudo systemctl status 'media-up' -l [Unit] Description=Piwigo Git Updater After=network-online.target Wants=network-online.target [Timer] OnCalendar=*-*-* 01:00:00 Persistent=true [Install] WantedBy=timers.target # End ===== Backup ===== ==== Files ==== === Service === mkdir -p ~/'backups' && sudo -e '/etc/systemd/system/media-fb.service' && sudo sed -i 's/CHANGEME/'$USER'/g' '/etc/systemd/system/media-fb.service' [Service] Type=oneshot WorkingDirectory=/srv/www/media ExecStart='/usr/bin/bash' -c '"/usr/bin/tar" -czf "/home/CHANGEME/backups/piwigo-files-auto-"$$(date +%%Y-%%m-%%d)".tar.gz" -C "/srv/www" "media"' ExecStartPost='/usr/bin/sync' # End === Timer === * Monthly (2nd) ''01:15:00 AM'' sudo -e '/etc/systemd/system/media-fb.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-fb.timer' --now [Unit] Description=Piwigo Files Backup [Timer] OnCalendar=*-*-02 01:15:00 Persistent=true [Install] WantedBy=timers.target # End sudo systemctl start 'media-fb' && sudo systemctl status 'media-fb' -l ==== Database ==== === Database Auth === sudo mkdir -p '/srv/lib/mysql/auth' && sudo -e '/srv/lib/mysql/auth/piwigo' && sudo chown 'mysql':'mysql' '/srv/lib/mysql/auth/piwigo' && sudo chmod '0600' '/srv/lib/mysql/auth/piwigo' [mariadb-dump] user=piwigo password=x # End === Service === mkdir -p ~/'backups' && sudo mkdir -p '/srv/lib/mysql/tmp' && sudo -e '/etc/systemd/system/media-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/media-db.service' [Service] Group=mysql Type=oneshot WorkingDirectory=/srv/lib/mysql ExecStart='/usr/bin/bash' -c '"/usr/bin/mariadb-dump" --defaults-extra-file="/srv/lib/mysql/auth/piwigo" --single-transaction --quick "piwigo" -r "/home/CHANGEME/backups/piwigo-database-auto-"$$(date +%%Y-%%m-%%d)".sql"' ExecStartPost='/usr/bin/sync' # End === Timer === * Monthly (2nd) ''01:10:00 AM'' sudo -e '/etc/systemd/system/media-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-db.timer' --now && sudo systemctl start 'media-db' && sudo systemctl status 'media-db' -l [Unit] Description=Piwigo Database Backup After=mariadb.service [Timer] OnCalendar=*-*-02 01:10:00 Persistent=true [Install] WantedBy=timers.target # End ===== Maintenance ===== ==== Service ==== sudo -e '/etc/systemd/system/media-m.service' [Service] User=wwwrun Group=www Type=oneshot WorkingDirectory=/srv/www/media ExecStart='/usr/bin/git' -C '/srv/www/media' gc --aggressive --prune='all' ExecStart='/usr/bin/git' -C '/srv/www/media' fsck --full --strict ExecStart='/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' ExecStart='/usr/bin/git' -C '/srv/www/media/themes/bootstrap_darkroom' fsck --full --strict ExecStartPost='/usr/bin/sync' # End ==== Timer ==== * Monthly (2nd) ''01:30:00 AM'' sudo -e '/etc/systemd/system/media-m.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-m.timer' --now [Unit] Description=Piwigo Maintenance After=network-online.target Wants=network-online.target [Timer] OnCalendar=*-*-02 01:30:00 Persistent=true [Install] WantedBy=timers.target # End sudo systemctl start 'media-m' && sudo systemctl status 'media-m' -l ====== Backup ====== ===== Files ===== **** sudo tar -czf ~/'piwigo-files-manual-'$(date +%Y-%m-%d)'.tar.gz' -C '/srv/www' 'media' ===== Database ===== **** sudo mariadb-dump --single-transaction --quick 'piwigo' -r ~/'piwigo-database-manual-'$(date +%Y-%m-%d)'.sql' ===== scp ===== scp espionage724@192.168.1.152:~/'piwigo-files-'*'.tar.gz' ~/'Downloads' scp espionage724@192.168.1.152:~/'piwigo-database-'*'.sql' ~/'Downloads' ====== Restore ====== ===== scp ===== scp ~/'Downloads/piwigo-files-'*'.tar.gz' espionage724@192.168.1.152:~ scp ~/'Downloads/piwigo'*'.sql' espionage724@192.168.1.152:~ ===== Stop nginx ===== **** sudo systemctl stop 'nginx' ===== Remove Existing Files ===== **** ls ~/'piwigo-files-'*'.tar.gz' && sudo rm -Rf '/srv/www/media' ===== Restore Files ===== **** sudo tar -xzf ~/'piwigo-files-'*'.tar.gz' -C '/srv/www' 'media' && sudo chown -R 'wwwrun':'www' '/srv/www/media' && sudo chmod -R '0755' '/srv/www/media' ===== Restore Database ===== * [[#database|Initial set-up]] sudo mariadb --execute='DROP DATABASE piwigo;' sudo mariadb --execute='CREATE DATABASE piwigo;' sudo mariadb 'piwigo' < ~/'piwigo'*'.sql' ===== Git Fix ===== * :!: Set email for ''user.email'' sudo su 'wwwrun' -s '/bin/bash' rm -Rf '/srv/www/media/.git' git -C '/srv/www/media' init --initial-branch='master' git -C '/srv/www/media' add '.' git -C '/srv/www/media' config 'user.email' 'espionage724@x' git -C '/srv/www/media' commit --message='x' git -C '/srv/www/media' remote add 'origin' 'https://github.com/Piwigo/Piwigo.git' git -C '/srv/www/media' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase git -C '/srv/www/media' reset --hard 'origin/master' git -C '/srv/www/media' gc --aggressive --prune='all' git -C '/srv/www/media' fsck --full --strict ==== Bootstrap Darkroom ==== * :!: Set email for ''user.email'' rm -Rf '/srv/www/media/themes/bootstrap_darkroom/.git' git -C '/srv/www/media/themes/bootstrap_darkroom' init --initial-branch='master' git -C '/srv/www/media/themes/bootstrap_darkroom' add '.' git -C '/srv/www/media/themes/bootstrap_darkroom' config 'user.email' 'espionage724@x' git -C '/srv/www/media/themes/bootstrap_darkroom' commit --message='x' git -C '/srv/www/media/themes/bootstrap_darkroom' remote add 'origin' 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' git -C '/srv/www/media/themes/bootstrap_darkroom' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase git -C '/srv/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' git -C '/srv/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' git -C '/srv/www/media/themes/bootstrap_darkroom' fsck --full --strict exit ===== MySQL Connection ===== * Windows uses ''127.0.0.1'' sudo -e '/srv/www/media/local/config/database.inc.php' && sudo chown -v 'wwwrun':'www' '/srv/www/media/local/config/database.inc.php' $conf['db_host'] = 'localhost'; ===== Start nginx ===== **** sudo systemctl start 'nginx' ===== Clean-up ===== **** rm -fv ~/'piwigo-files-'*'.tar.gz' ~/'piwigo'*'.sql' ====== TODOs ====== * Show title on pictures (long titles get cut-off in navbar) * AI ([[https://piwigo.org/forum/viewtopic.php?pid=192438#p192438|post]], [[https://github.com/Piwigo/Piwigo/commits/master/include/config_default.inc.php|config.inc.php]]) * :?: Below is remaining packages not installed from old installs sudo dnf install libvorbis poppler-utils sudo zypper install php8-bz2 php8-zlib