Docker Consolidation Project, Part Six
Build a Dedicated Docker Test Server
So I've gotten a number of my containers successfully migrated over to DOCKER-01 so the last thing I wanted to work on for this was to make a test machine that I can use to play with new containers.
Steps performed on HV-03 via Windows Admin Center
- I navigate to
Virtual Machine - I click on
Addand thenNew- Name:
TEST-01 - Generation:
2 (Recommended) - Virtual CPUs:
4 - Memory (GB):
16 - Network:
Default external switch - New Disk:
- Size:
100GB
- Size:
- Select
Install an operating system later - I click on
Create
- Name:
- I select
TEST-01 - I click on
Settings - I go to
Disks- I select
Use an existing virtual hard disk or ISO image file- Path:
c:\Images\Debian\debian-12.1.0-amd64-netinst.iso
- Path:
- I click on
OK - I click on
Save disk settings
- I select
- I move to
Boot OrderDVDHard DiskNetwork adapter- I click on
Save boot order
- I navigate to
Security- Enable Secure Boot:
Yes - Template:
Microsoft UEFI Certificate Authority - I click on
Save security setting
- Enable Secure Boot:
- I click on
Close
Install TEST-01 Operating System
Steps performed on TEST-01 via console
- I click on
Install - Language:
English - Location:
United States - Keyboard:
American English - Hostname:
TEST-01 - Domain name:
domain.local - I set
root's password - Full Name:
david - Username:
david - I set
david's password - Timezone:
Eastern - Partition:
Guided - use entire disk - Scan extra installation media:
no - Package Manager:
United States - Archive mirror:
deb.debian.org - HTTP proxy information:
(blank) - Participate in the package usage survey:
yes - Software to install:
SSH Serverstandard system utilities
- I click
Continue - I unmount my Debian ISO and reboot the server
Configure Operating System
Configure Sudo
Steps performed on TEST-01
apt install sudo/sbin/adduser david sudoAdding user 'david' to group 'sudo' ...Done.
Configure Network
Steps performed on TEST-01
- nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 10.10.10.XXX
gateway 10.10.10.254
netmask 255.255.255.0
- I save the file
interfaces systemctl restart networking
Steps performed on DC-02 via Windows Admin Center
- I navigate to
DNS - I select
domain.local - I click on
Create a new DNS record- DNS record type:
HOST (A) - Record Name:
TEST1 - FQDN:
TEST1.domain.local - IP Address:
10.10.10.XXX - Time to live:
3600 - I click on
Create
- DNS record type:
Configure SSH Key
Steps performed on desktop via Windows Terminal
ssh-keygen -t ed25519Move-Item -Path c:\Users\david\filename* -Destination c:\Users\david\.ssh -Force- I open Windows Terminal's
Settings - I open the
JSONfile and add the following:
{
"colorScheme": "Ubuntu-ColorScheme",
"commandline": "ssh -i \"~/.ssh/test-01\" [email protected]",
"experimental.retroTerminalEffect": false,
"font":
{
"face": "Cascadia Code"
},
"guid": "{0caa0dad-35be-5f56-a8ff-XXXXXXXXXXXX}",
"hidden": false,
"name": "TEST-01",
"tabTitle": "TEST-01"
},
- I make sure the
GUIDis unique and saveJSON
Configure SSH
Steps performed on TEST-01
mkdir /home/david/.sshnano /home/david/.ssh/authorized_keys- I paste in the public key and save
authorized_keys chmod 600 /home/david/.ssh/authorized_keyssudo nano /etc/ssh/sshd_configPermitRootLogin noPubkeyAuthentication yesPubkeyAcceptedKeyTypes ssh-ed25519PasswordAuthentication noAuthorizedKeysFile /home/david/.ssh/authorized_keys
- I save the file
sshd_config sudo sshd -tsudo systemctl restart ssh
Configure Firewall
Steps performed on TEST-01
sudo apt install ufwsudo ufw allow 22sudo ufw enable
Configure Fail2Ban
Steps performed on TEST-01
sudo apt install fail2bansudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 100m
findtime = 5m
maxretry = 5
ignoreip = 10.10.10.XXX
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
- I save the file
jail.local sudo systemctl enable fail2bansudo systemctl start fail2ban
Install Docker and Docker Compose
Steps performed on TEST-01
sudo apt install dockersudo apt install docker-compose
Well that takes care of my test server, which I wanted to have running before I migrated Photoprism and Paperless-NGX. I've been using both quite a lot and so I have a lot of data in each and I would rather not have to start over with them. So my plan is to test migrating them to TEST-01 and when successful I can just repeat the steps on DOCKER-01. Seems reasonable to me.
Migrate Paperless-NGX
It looks like the recommended way to do this is with the exporter and importer. I'll start by setting up a container for Paperless-NGX on TEST-01.
Steps performed on TEST-01
sudo mkdir /apps/Paperless-NGXcd /apps/Paperless-NGXsudo nano docker-compose.env
PAPERLESS_URL=http://test1.domain.local:8000
PAPERLESS_TIME_ZONE=America/Detroit
PAPERLESS_OCR_LANGUAGE=eng
PAPERLESS_SECRET_KEY=
- I saved
docker-compose.env sudo nano docker-compose.yml
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), MariaDB is used as the database server.
# - Apache Tika and Gotenberg servers are started with paperless and paperless
# is configured to use these services. These provide support for consuming
# Office documents (Word, Excel, Power Point and their LibreOffice counter-
# parts.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
# - redisdata:/data
- /var/lib/docker/volumes/paperless_redisdata:/data
db:
image: docker.io/library/mariadb:10
restart: unless-stopped
volumes:
# - dbdata:/var/lib/mysql
- /var/lib/docker/volumes/paperless_dbdata:/var/lib/mysql
environment:
MARIADB_HOST: paperless
MARIADB_DATABASE: paperless
MARIADB_USER: paperless
MARIADB_PASSWORD: paperless
MARIADB_ROOT_PASSWORD: paperless
ports:
- "3306:3306"
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
# - data:/usr/src/paperless/data
- /apps/Paperless-NGX/data:/usr/src/paperless/data
# - media:/usr/src/paperless/media
- /mnt/Paperless-NGX:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- /apps/Paperless-NGX/consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: db
PAPERLESS_DBUSER: paperless # only needed if non-default username
PAPERLESS_DBPASS: paperless # only needed if non-default password
PAPERLESS_DBPORT: 3306
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
# Updated the image from gotenberg:7.4 to gotenberg:7.8
image: docker.io/gotenberg/gotenberg:7.8
restart: unless-stopped
# These lines were part of the original compose file but appear to have been depreciated for newer version.
# environment:
# CHROMIUM_DISABLE_ROUTES: 1
# These lines were added on the update from gotenberg:7.4 to gotenberg:7.8
# The gotenberg chromium route is used to convert .eml files. We do not
# want to allow external content like tracking pixels or even javascript.
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
tika:
image: ghcr.io/paperless-ngx/tika:latest
restart: unless-stopped
#volumes:
# data:
# media:
# dbdata:
# redisdata:
- I saved the
docker-compose.ymlfile
I work towards setting up a test mount on my fileserver for this test.
..... and this is a real bummer because at this point I lost the rest of my notes for migrating Paperless-NGX. Obsidian crashed, and either it lost the rest of my notes or iCloud did. Either way, it was successful though so I was able to remove my test environment from TEST-01 and decommissioned PAPERLESS-01.