Both sides previous revisionPrevious revisionNext revision | Previous revision |
servers:bsd:nginx:piwigo [2025/05/16 21:12] – Sean Rhone | servers:bsd:nginx:piwigo [2025/05/24 05:45] (current) – Sean Rhone |
---|
* Piwigo ((https://piwigo.org/)) | * Piwigo ((https://piwigo.org/)) |
* Bootstrap Darkroom Theme ((https://github.com/Piwigo/piwigo-bootstrap-darkroom)) | * Bootstrap Darkroom Theme ((https://github.com/Piwigo/piwigo-bootstrap-darkroom)) |
* ''master'' Branches ((https://github.com/Piwigo/Piwigo/tree/master)) ((https://github.com/Piwigo/piwigo-bootstrap-darkroom/tree/master)) | |
* [[Information:Realm of Espionage]] | * [[Information:Realm of Espionage]] |
* https://media.realmofespionage.xyz | * https://media.realmofespionage.xyz |
| |
* :!: WIP | |
| |
===== Prerequisites ===== | ===== Prerequisites ===== |
* https://github.com/Piwigo/piwigo-bootstrap-darkroom/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 git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/var/www/media/themes/bootstrap_darkroom' && sudo semanage fcontext --add --type 'httpd_sys_rw_content_t' '/var/www/media(/.*)?' && sudo restorecon -F -I -R '/var/www/media' && sudo chown -R 'nginx':'nginx' '/var/www/media' && sync | su - |
| |
| git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/Piwigo.git' '/usr/local/www/media' && chown -R 'www':'www' '/usr/local/www/media' && sync |
| |
| git clone --branch 'master' --depth '1' --recurse-submodules 'https://github.com/Piwigo/piwigo-bootstrap-darkroom.git' '/usr/local/www/media/themes/bootstrap_darkroom' && chown -R 'www':'www' '/usr/local/www/media' && sync |
| |
====== Database ====== | ====== Database ====== |
// Minimal Logging | // Minimal Logging |
$conf['log_level'] = 'EMERGENCY'; | $conf['log_level'] = 'EMERGENCY'; |
| |
| // Hide PHP Warnings |
| $conf['show_php_errors'] = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING; |
| |
// Header Links | // Header Links |
'https://realmofespionage.xyz' => 'Realm of Espionage', | 'https://realmofespionage.xyz' => 'Realm of Espionage', |
'https://wiki.realmofespionage.xyz' => 'RoE | Wiki', | 'https://wiki.realmofespionage.xyz' => 'RoE | Wiki', |
'https://social.realmofespionage.xyz/profile/espionage724' => 'RoE | Social', | |
'https://blog.realmofespionage.xyz' => 'RoE | Blog', | 'https://blog.realmofespionage.xyz' => 'RoE | Blog', |
'https://wiki.realmofespionage.xyz/personal:social_media' => 'Webmaster Info', | 'https://wiki.realmofespionage.xyz/user:espionage724' => 'Webmaster Info', |
'https://wiki.realmofespionage.xyz/servers:nginx:piwigo' => 'Instance Configuration Notes', | 'https://wiki.realmofespionage.xyz/servers:bsd:nginx:piwigo' => 'Instance Configuration Notes', |
); | ); |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' pull origin 'master'" | su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' pull origin 'master'" |
| |
===== Etc ===== | ===== Maintenance ===== |
| |
==== Media ==== | ==== Media ==== |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media' fsck --full --strict" | su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media' fsck --full --strict" |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media' rm --cached -r ." | mariadb-check -u 'root' -p -o -f -e --auto-repair 'piwigo' |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media' add --renormalize ." | |
| |
==== Theme ==== | ==== Theme ==== |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' fsck --full --strict" | su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' fsck --full --strict" |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' rm --cached -r ." | |
| |
su -m 'www' -c "'/usr/local/bin/git' -C '/usr/local/www/media/themes/bootstrap_darkroom' add --renormalize ." | |
| |
====== Services ====== | |
| |
===== Updater ===== | |
| |
==== Service ==== | |
| |
sudo -e '/etc/systemd/system/media-up.service' | |
| |
<code> | |
[Service] | |
User=nginx | |
Group=nginx | |
Type=oneshot | |
WorkingDirectory=/var/www/media | |
ExecStart='/usr/bin/git' -C '/var/www/media' pull origin 'master' | |
ExecStart='/usr/bin/git' -C '/var/www/media/themes/bootstrap_darkroom' pull origin 'master' | |
ExecStartPost='/usr/bin/sync'</code> | |
| |
==== Timer ==== | |
| |
* Every day at ''05:00:00'' | |
| |
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 | |
| |
<code> | |
[Unit] | |
Description=Piwigo Updater | |
After=network-online.target | |
Wants=network-online.target | |
| |
[Timer] | |
OnCalendar=*-*-* 05:00:00 | |
Persistent=true | |
| |
[Install] | |
WantedBy=timers.target</code> | |
| |
===== Maintenance ===== | |
| |
==== Service ==== | |
| |
sudo -e '/etc/systemd/system/media-m.service' | |
| |
<code> | |
[Service] | |
User=nginx | |
Group=nginx | |
Type=oneshot | |
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'</code> | |
| |
==== Timer ==== | |
| |
* ''01'' day of every month at ''05:20:00'' | |
| |
sudo -e '/etc/systemd/system/media-m.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-m.timer' --now && sudo systemctl start 'media-m' && sudo systemctl status 'media-m' -l | |
| |
<code> | |
[Unit] | |
Description=Piwigo Maintenance | |
After=network-online.target | |
Wants=network-online.target | |
| |
[Timer] | |
OnCalendar=*-*-01 05:20:00 | |
Persistent=true | |
| |
[Install] | |
WantedBy=timers.target</code> | |
| |
===== 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' | |
| |
<code> | |
[Service] | |
Type=oneshot | |
WorkingDirectory=/var/www | |
ExecStart='/usr/bin/bash' -c '"/usr/bin/tar" -czf "/home/CHANGEME/backups/piwigo-files-auto-"$$(date +%%Y-%%m-%%d)".tar.gz" "media"' | |
ExecStartPost='/usr/bin/sync'</code> | |
| |
=== Timer === | |
| |
* ''01'' day of every month at ''05:35:00'' | |
| |
sudo -e '/etc/systemd/system/media-fb.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'media-fb.timer' --now && sudo systemctl start 'media-fb' && sudo systemctl status 'media-fb' -l | |
| |
<code> | |
[Unit] | |
Description=Piwigo Files Backup | |
| |
[Timer] | |
OnCalendar=*-*-01 05:35:00 | |
Persistent=true | |
| |
[Install] | |
WantedBy=timers.target</code> | |
| |
==== Database ==== | |
| |
=== Database Auth === | |
| |
sudo mkdir -p '/var/lib/mysql/auth' && sudo -e '/var/lib/mysql/auth/piwigo' && sudo chown -R 'mysql':'mysql' '/var/lib/mysql/auth/piwigo' && sudo chmod '600' '/var/lib/mysql/auth/piwigo' && sync | |
| |
<code> | |
[mariadb-dump] | |
user=piwigo | |
password=x</code> | |
| |
=== 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' | |
| |
<code> | |
[Service] | |
Type=oneshot | |
WorkingDirectory=/var/lib/mysql/tmp | |
ExecStartPre='/usr/bin/mariadb-dump' --defaults-extra-file='/var/lib/mysql/auth/piwigo' --single-transaction 'piwigo' -r '/var/lib/mysql/tmp/piwigo.sql' | |
ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/piwigo.sql' | |
ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/piwigo.sql.gz" "/home/CHANGEME/backups/piwigo-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"' | |
ExecStartPost='/usr/bin/sync'</code> | |
| |
=== Timer === | |
| |
* Every day at ''05:45:00'' | |
| |
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 | |
| |
<code> | |
[Unit] | |
Description=Piwigo Database Backup | |
After=mariadb.service | |
| |
[Timer] | |
OnCalendar=*-*-* 05:45:00 | |
Persistent=true | |
| |
[Install] | |
WantedBy=timers.target</code> | |
| |
====== Backup ====== | ====== Backup ====== |
| |
* Create backup archive on server and transfer to client computer | ===== Folder ===== |
| |
===== Server ===== | su - |
| |
==== Stop Services ==== | cd '/usr/local/www' && tar -cvzf '/home/espionage724/piwigo-files-manual-'$(date +%Y-%m-%d)'.tar.gz' 'media' |
| |
**** | ===== Database ===== |
| |
sudo systemctl stop nginx php-fpm | |
| |
==== Backup Folder ==== | |
| |
**** | **** |
| |
cd '/var/www' && sudo tar -cvzf ~/'piwigo-files-manual-'$(date +%Y-%m-%d)'.tar.gz' 'media' && cd ~ && sync | mariadb-dump -u root -p --single-transaction 'piwigo' -r '/home/espionage724/piwigo-database-manual-'$(date +%Y-%m-%d)'.sql' |
| |
==== Backup Database ==== | ===== scp ===== |
| |
**** | |
| |
sudo mariadb-dump --defaults-extra-file='/var/lib/mysql/auth/piwigo' --single-transaction 'piwigo' -r ~/'piwigo-database-manual-'$(date +%Y-%m-%d)'.sql' && sync | |
| |
==== Start Services ==== | |
| |
**** | |
| |
sudo systemctl start nginx php-fpm | |
| |
===== Client ===== | |
| |
==== Transfer Files To Client ==== | |
| |
**** | **** |
====== Restore ====== | ====== Restore ====== |
| |
===== Client ===== | ===== scp ===== |
| |
==== Uncompress Database ==== | |
| |
* This is only needed if restoring an **automated** database backup ((manual doesn't gzip)) | |
| |
gunzip ~/'Downloads/piwigo-database-'*'.sql.gz' | |
| |
==== Transfer Files To Server ==== | |
| |
**** | **** |
scp ~/'Downloads/piwigo-files-'*'.tar.gz' ~/'Downloads/piwigo-database-'*'.sql' espionage724@192.168.1.152:~ | scp ~/'Downloads/piwigo-files-'*'.tar.gz' ~/'Downloads/piwigo-database-'*'.sql' espionage724@192.168.1.152:~ |
| |
==== Remove Files ==== | ===== Folder ===== |
| |
**** | |
| |
rm -f ~/'Downloads/piwigo-files-'*'.tar.gz' ~/'Downloads/piwigo-database-'*'.sql' && sync | |
| |
===== Server ===== | |
| |
==== Stop Services ==== | |
| |
**** | |
| |
sudo systemctl stop nginx php-fpm | |
| |
==== Remove Previous Folder ==== | |
| |
**** | |
| |
sudo rm -Rf '/var/www/media' | |
| |
==== Restore Piwigo Folder ==== | |
| |
**** | |
| |
cd '/var/www' && sudo tar -xvzf ~/'piwigo-files-'*'.tar.gz' 'media' && sudo semanage fcontext --add --type 'httpd_sys_rw_content_t' '/var/www/media(/.*)?' && sudo restorecon -F -I -R '/var/www/media' && sudo chown -R 'nginx':'nginx' '/var/www/media' && cd ~ && sync | |
| |
==== Drop Previous Database ==== | |
| |
sudo mariadb | |
| |
DROP DATABASE piwigo; | |
| |
FLUSH TABLES; | |
| |
EXIT | |
| |
==== Re-create Databases ==== | |
| |
sudo mariadb | |
| |
CREATE DATABASE piwigo; | |
| |
EXIT | |
| |
==== Restore Database ==== | |
| |
**** | |
| |
sudo mariadb 'piwigo' < ~/'piwigo-database-'*'.sql' && sync | |
| |
==== Reapply Permissions ==== | |
| |
sudo mariadb | |
| |
GRANT ALL PRIVILEGES ON piwigo.* to 'piwigo'@'localhost' IDENTIFIED BY 'x'; | |
| |
FLUSH PRIVILEGES; | |
| |
EXIT | |
| |
==== Start Services ==== | |
| |
**** | |
| |
sudo systemctl start nginx php-fpm | |
| |
==== Remove Backups ==== | |
| |
* Verify that Piwigo works before running | |
| |
rm ~/'piwigo-files-'*'.tar.gz' ~/'piwigo-database-'*'.sql' && sync | |
| |
====== Restore ====== | |
| |
===== Files ===== | |
| |
su - | su - |
rm -Rf '/usr/local/www/media' | rm -Rf '/usr/local/www/media' |
| |
cd '/usr/local/www' && tar -xvzf '/home/'*'/piwigo-files-'*'.tar.gz' 'media' && chown -R 'www':'www' '/usr/local/www/media' && cd ~ && sync | cd '/usr/local/www' && tar -xvzf '/home/espionage724/piwigo-files-'*'.tar.gz' 'media' && chown -R 'www':'www' '/usr/local/www/media' && cd ~ && sync |
| |
===== Database ===== | ===== Database ===== |
mariadb -u 'root' -p --execute='CREATE DATABASE piwigo;' | mariadb -u 'root' -p --execute='CREATE DATABASE piwigo;' |
| |
mariadb -u 'root' -p 'piwigo' < ~/'piwigo.sql' | mariadb -u 'root' -p 'piwigo' < '/home/espionage724/piwigo-database-manual-'*'.sql' |
| |