====== Information ====== * Piwigo * Bootstrap Darkroom Theme * [[information:realm_of_espionage|Realm of Espionage]] * https://media.realmofespionage.xyz ===== Prerequisites ===== * [[linux:distros:server:ubuntu_server|Ubuntu 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 apt install php-imagick php-intl php-mbstring php-mysql libimage-exiftool-perl mediainfo ffmpeg ====== 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' '/var/www/media' && sudo chown -R 'www-data':'www-data' '/var/www/media' && sudo chmod -R '0755' '/var/www/media' sudo git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/var/www/media/themes/bootstrap_darkroom' && sudo chown -R 'www-data':'www-data' '/var/www/media/themes' && sudo chmod -R '0755' '/var/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/php/8.4/fpm/pool.d/media.conf' && sudo systemctl restart 'php8.4-fpm' [media] ; User/Group user = "www-data" group = "www-data" ; Socket listen = "/run/php/media.sock" listen.owner = "www-data" listen.group = "www-data" 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" ; 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/snippets/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/media.sock'; } # End ===== Server Block ===== sudo -e '/etc/nginx/sites-available/media.conf' server { listen '443' 'ssl'; http2 'on'; server_name 'media.realmofespionage.xyz'; root '/var/www/media'; index 'index.php'; include '/etc/nginx/snippets/media.conf'; include '/etc/nginx/snippets/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 sudo ln -s -f '/etc/nginx/sites-available/media.conf' '/etc/nginx/sites-enabled/media.conf' && sudo systemctl reload 'nginx' ====== 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 -u 'www-data' -e '/var/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 'www-data':'www-data' '/etc/nginx/scripts/media/git-fix.sh' #!/bin/bash cd '/tmp' '/usr/bin/rm' -Rf '/var/www/media/.git' '/usr/bin/git' -C '/var/www/media' init --initial-branch='master' '/usr/bin/git' -C '/var/www/media' add '.' ######################################## '/usr/bin/git' -C '/var/www/media' config 'user.email' 'espionage724@x' ######################################## '/usr/bin/git' -C '/var/www/media' commit --message='x' '/usr/bin/git' -C '/var/www/media' remote add 'origin' 'https://github.com/Piwigo/Piwigo.git' '/usr/bin/git' -C '/var/www/media' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase '/usr/bin/git' -C '/var/www/media' reset --hard 'origin/master' '/usr/bin/git' -C '/var/www/media' gc --aggressive --prune='all' '/usr/bin/git' -C '/var/www/media' fsck --full --strict '/usr/bin/rm' -Rf '/var/www/media/themes/bootstrap_darkroom/.git' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' init --initial-branch='master' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' add '.' ######################################## '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' config 'user.email' 'espionage724@x' ######################################## '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' commit --message='x' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' remote add 'origin' 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' '/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' fsck --full --strict # End sudo -u 'www-data' '/etc/nginx/scripts/media/git-fix.sh' ====== Services ====== ===== Updater ===== ==== Service ==== sudo -e '/etc/systemd/system/media-up.service' [Service] User=www-data Group=www-data Type=oneshot WorkingDirectory=/var/www/media ExecStart='/usr/bin/git' -C '/var/www/media' reset --hard 'origin/master' ExecStart='/usr/bin/git' -C '/var/www/media' pull origin 'master' --rebase ExecStart='/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' ExecStart='/usr/bin/git' -C '/var/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=/var/www/media ExecStart='/usr/bin/bash' -c '"/usr/bin/tar" -czf "/home/CHANGEME/backups/piwigo-files-auto-"$$(date +%%Y-%%m-%%d)".tar.gz" -C "/var/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 '/var/lib/mysql/auth' && sudo -e '/var/lib/mysql/auth/piwigo' && sudo chown 'mysql':'mysql' '/var/lib/mysql/auth/piwigo' && sudo chmod '0600' '/var/lib/mysql/auth/piwigo' [mariadb-dump] user=piwigo password=x # End === Service === mkdir -p ~/'backups' && sudo mkdir -p '/var/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=/var/lib/mysql ExecStart='/usr/bin/bash' -c '"/usr/bin/mariadb-dump" --defaults-extra-file="/var/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=www-data Group=www-data Type=oneshot WorkingDirectory=/var/www/media ExecStart='/usr/bin/git' -C '/var/www/media' gc --aggressive --prune='all' ExecStart='/usr/bin/git' -C '/var/www/media' fsck --full --strict ExecStart='/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' ExecStart='/usr/bin/git' -C '/var/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 '/var/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 '/var/www/media' ===== Restore Files ===== **** sudo tar -xzf ~/'piwigo-files-'*'.tar.gz' -C '/var/www' 'media' && sudo chown -R 'www-data':'www-data' '/var/www/media' && sudo chmod -R '0755' '/var/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 'www-data' -s '/bin/bash' rm -Rf '/var/www/media/.git' git -C '/var/www/media' init --initial-branch='master' git -C '/var/www/media' add '.' git -C '/var/www/media' config 'user.email' 'espionage724@x' git -C '/var/www/media' commit --message='x' git -C '/var/www/media' remote add 'origin' 'https://github.com/Piwigo/Piwigo.git' git -C '/var/www/media' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase git -C '/var/www/media' reset --hard 'origin/master' git -C '/var/www/media' gc --aggressive --prune='all' git -C '/var/www/media' fsck --full --strict ==== Bootstrap Darkroom ==== * :!: Set email for ''user.email'' rm -Rf '/var/www/media/themes/bootstrap_darkroom/.git' git -C '/var/www/media/themes/bootstrap_darkroom' init --initial-branch='master' git -C '/var/www/media/themes/bootstrap_darkroom' add '.' git -C '/var/www/media/themes/bootstrap_darkroom' config 'user.email' 'espionage724@x' git -C '/var/www/media/themes/bootstrap_darkroom' commit --message='x' git -C '/var/www/media/themes/bootstrap_darkroom' remote add 'origin' 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' git -C '/var/www/media/themes/bootstrap_darkroom' pull --depth '1' --recurse-submodules 'origin' 'master' --rebase git -C '/var/www/media/themes/bootstrap_darkroom' reset --hard 'origin/master' git -C '/var/www/media/themes/bootstrap_darkroom' gc --aggressive --prune='all' git -C '/var/www/media/themes/bootstrap_darkroom' fsck --full --strict exit ===== MySQL Connection ===== * Windows uses ''127.0.0.1'' sudo -u 'www-data' -e '/var/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