Docker Consolidation Project, Part Eight
Test PhotoPrism Migration
I'm finally able to come back to this Docker migration and I'm going to work on PhotoPrism's migration today.
Steps performed on PHOTOPRISM-01
sudo apt updatesudo apt upgradesudo docker-compose downsudo docker-compose pullsudo docker-compose up -d
Now that PhotoPrism is up to date I can try to use their backup program.
sudo docker compose exec photoprism photoprism backup -i -f - > /home/david/Backups/Photoprism/photoprism-db-'date +%F'.sql
This command throws out permission errors, even run by sudo. Let's take it back to just their basic script, without my customization.
docker compose exec photoprism photoprism backup -i -fINFO[2024-01-30T16:01:01Z] writing backup to /photoprism/storage/backup/mysql/2024-01-30.sqlINFO[2024-01-30T16:01:02Z] completed in 1.062848897s
sudo /usr/bin/photoprism-backupsudo cp /home/david/Backups/PhotoPrism/Archive/storage.tar /mnt/picturessudo cp /home/david/storage/backup/mysql/2024-01-30.sql /mnt/pictures
While that's working I'm going to start working on my test environment.
Steps performed on TEST-01
sudo mkdir /apps/PhotoPrismnano /home/david/.win/PhotoPrism-Credential
username=_service_photoprism
password=
domain=domain.local
- I save
PhotoPrism-Credential chmod 600 /home/david/.win/PhotoPrism-Credentialsudo nano /etc/fstab
# Test mount for PhotoPrism
//10.10.10.XXX/Data/Pictures/PhotoPrism /mnt/PhotoPrism cifs credentials=/home/david/.win/PhotoPrism-Credential,uid=1000,gid=1000,iocharset=utf8,vers=2.0 0 0
- I save
fstab sudo mkdir /mnt/PhotoPrismsudo rebootmv /mnt/PhotoPrism/docker-compose.yml /home/david/tempmv /mnt/PhotoPrism/2024-01-30.sql /home/david/tempmv /mnt/PhotoPrism/storage.tar /home/david/temptar -xvzf /home/david/temp/storage.tar
Since that is going to take a while to unpack I take a pause for lunch before I come back to this.
sudo mv /home/david/temp/docker-compose.yml /apps/PhotoPrism/sudo nano /apps/PhotoPrism/docker-compose.yml
PHOTOPRISM_SITE_URL: "http://test1.domain.local/" # public server URL incl http:// or https:// and /path, :port is optional
- "/mnt/PhotoPrism:/photoprism/originals" # Network mount to pictures
- I save the file
docker-compose.yml cd /apps/PhotoPrismsudo docker-compose pullsudo docker-compose up -d
A quick test browse to http://test1.domain.local:2342 is successful.
sudo docker-compose downsudo mv /home/david/temp/2024-01-30.sql /apps/PhotoPrism/storage/backup/sudo mv serial/ /apps/PhotoPrism/storage/sudo mv users/ /apps/PhotoPrism/storage/sudo mv sidecar/ /apps/PhotoPrism/storage/sudo mv config/ /apps/PhotoPrism/storage/sudo mv cache/ /apps/PhotoPrism/storage/sudo mv backup/ /apps/PhotoPrism/storage/sudo mv albums/ /apps/PhotoPrism/storage/sudo cp 2024-01-30.sql /apps/PhotoPrism/storage/backupsudo chown -R root:root /apps/PhotoPrism/storagesudo docker-compose up -d
And with that it looks like everything is functioning correctly after moving the files. Now to pull in the backup.
sudo docker-compose exec photoprism photoprism restore -i -fERRO[2024-01-30T18:18:40Z] no backup file found in /photoprism/storage/backup/mysql
sudo mkdir /apps/PhotoPrism/storage/backup/mysqlsudo mv /apps/PhotoPrism/storage/backup/2024-01-30.sql /apps/PhotoPrism/storage/backup/mysqlcd /apps/PhotoPrismsudo docker-compose exec photoprism photoprism restore -i -f
Victory! It is working as I had hoped. So that's awesome! Now I can repeat the process and place the app on DOCKER-01.
Actual PhotoPrism Migration
Steps performed on DOCKER-01
mkdir /home/david/Backups/PhotoPrismmkdir /home/david/Backups/PhotoPrism/Archivesudo mkdir /mnt/PhotoPrismsudo mkdir /apps/PhotoPrismnano /home/david/.win/PhotoPrism-Credential
username=_service_photoprism
password=
domain=domain.local
- I save the
PhotoPrism-Credentialfile chmod 600 /home/david/.win/PhotoPrism-Credentialsudo nano /etc/fstab
# Mount for PhotoPrism
//10.10.10.XXX/Data/Pictures/PhotoPrism /mnt/PhotoPrism cifs credentials=/home/david/.win/PhotoPrism-Credential,uid=1000,gid=1000,iocharset=utf8,vers=2.0 0 0
- I saved
fstab sudo reboot
The mount is working correctly after the reboot so I can keep moving forward.
cp /mnt/PhotoPrism/2024-01-30.sql /home/david/tempcp /mnt/PhotoPrism/docker-compose.yml /home/david/tempcp /mnt/PhotoPrism/storage.tar /home/david/temptar -xvzf /home/david/temp/storage.tarsudo mv /home/david/temp/docker-compose.yml /apps/PhotoPrismcd /apps/PhotoPrismsudo chmod 644 docker-compose.ymlsudo chown root:root docker-compose.ymlsudo nano docker-compose.yml
PHOTOPRISM_SITE_URL: "http://docker1.domain.local/" # public server URL incl http:// or https:// and /path, :port is optional
- "/mnt/PhotoPrism:/photoprism/originals" # Network mount to pictures
- I save the
docker-compose.ymlfile sudo docker-compose pullsudo docker-compose up -dERROR: for photoprism_photoprism_1 Cannot start service photoprism: error while creating mount source path 'mnt/PhotoPrism': mkdir /mnt/PhotoPrism: file existsERROR: for photoprism Cannot start service photoprism: error while creating mount source path '/mnt/PhotoPrism': mkdir /mnt/PhotoPrism: file existsERROR: Encountered errors while bringing up the project.
That's interesting. Where's my error?
sudo docker-compose downsudo nano docker-compose.yml
I don't see anything wrong in my .yml file. No typos anywhere that would be causing trouble. What the heck did I mess up?
sudo docker-compose up -dsudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------
photoprism_mariadb_1 docker-entrypoint.sh mysql ... Up 3306/tcp
photoprism_photoprism_1 /scripts/entrypoint.sh /op ... Up 0.0.0.0:2342-
>2342/tcp,:::2342->2342/tcp,
2442/tcp, 2443/tcp
photoprism_watchtower_1 /watchtower Up (healthy) 8080/tcp
Ok....so that was a rather interesting error. Anyone have any ideas? I test browse to http://docker1.domain.local:2342 and PhotoPrism loads for me. Victory! Now to move my data in.
sudo docker-compose downcd /apps/PhotoPrism/storagesudo rm serialsudo rm -R albums/sudo rm -R backup/sudo rm -R cache/sudo rm -R config/sudo rm -R sidecar/sudo rm -R users/cd /home/david/temp/home/david/storagesudo cp serial /apps/PhotoPrism/storagesudo cp -R albums/ /apps/PhotoPrism/storage/sudo cp -R backup/ /apps/PhotoPrism/storage/sudo cp -R cache/ /apps/PhotoPrism/storage/sudo cp -R config/ /apps/PhotoPrism/storage/sudo cp -R sidecar/ /apps/PhotoPrism/storage/sudo cp -R users/ /apps/PhotoPrism/storage/sudo mkdir /apps/PhotoPrism/storage/backup/mysqlsudo cp 2024-01-30.sql /apps/PhotoPrism/storage/backup/mysqlcd /apps/PhotoPrismsudo docker-compose up -d
I go that same error message. Strange. What the heck is up with that?
sudo docker-compose up -d
It comes up without issues this time.
sudo docker-compose exec photoprism photoprism restore -i -fINFO[2024-01-30T23:24:10Z] restoring index from /photoprism/storage/backup/mysql/2024-01-30.sqlINFO[2024-01-30T23:24:16Z] migrating index database schemaINFO[2024-01-30T23:24:17Z] restored in 6.587121533s
There we go, all transitioned to the new server. My next step will be to tear down the test environment.
Steps performed on TEST-01
cd /apps/PhotoPrismsudo docker-compose downsudo rm -R app/PhotoPrismsudo nano /etc/fstab- I remove the entry for PhotoPrism and save
fstab cd /home/david/tempsudo rm 2024-01-30.sqlsudo rm storage.tarsudo rebootsudo rm -R /mnt/PhotoPrism
That's it for the test environment!
Decommission PHOTOPRISM-01
Steps performed on PHOTOPRISM-01
sudo shutdown now
Steps performed on DC-02 via Windows Admin Center
- I go to
DNS - I click on
domain.local - I select
PHOTOPRISM.domain.localand clickEdit - I change the
IP addressto DOCKER-01's IP address - I click
Save - I select
PHOTOS.domain.localand clickEdit - I change the
IP addressto DOCKER-01's IP address - I click
Save
Steps performed on HV-03 via Windows Admin Center
- I navigate to
Virtual Machines - I select
PHOTOPRISM-01 - I click
Manageand thenDelete - I select the option
Delete virtual hard disk files
Steps performed on desktop
- I deleted the
PHOTOPRISM-01SSH key files - I removed
PHOTOPRISM-01from the Windows TerminalJSONfile
Steps performed on DOCKER-01
cd /apps/PhotoPrismsudo nano docker-compose.yml- I change the following line:
PHOTOPRISM_SITE_URL: "https://photos.domain.com/" # public server URL incl http:// or https:// and /path, :port is optional
- I save the
docker-compose.ymlfile sudo docker-compose stopsudo docker-compose up -d
I go to test in a browser https://photos.domain.com, but it is not loading for me. I forgot about the firewall, is that it?
sudo ufw allow 2342
No that's not it, Docker by default opens the port in UFW so that wouldn't have been an issue. I verify my NGINX proxy is pointing to http://photos.domain.local:2342 and not an IP address so that should be just fine. I'm running out of time so I'll have to come back and figure out what's wrong tomorrow.