====== Docker - DokuWiki (with docker volume host directory for portability and direct access to data) ======
The main objective is to have:
- Easy to backup / restore data from DokuWiki a.k.a. sleeping with mind at ease.
- Easy portability a.k.a. I can have the Wiki run from my own Laptop in case of a major failure
- Small footprint a.k.a. A VM would take something between 10-20 GB to take with me. This way I can take the Docker Image and it's data in less then 2 GB.
This documentation was done using **Ubuntu Server 20.04 LTS** as a VirtualMachine, virtualized via **VirtualBox 6.1.8. **Ubuntu was configured to use LVM.
This documentation was also used successfully to deploy to a VPS.
I will be using a pre-made image from [[https://hub.docker.com/u/mprasil|https://hub.docker.com/u/mprasil]], found under [[https://hub.docker.com/r/mprasil/dokuwiki|https://hub.docker.com/r/mprasil/dokuwiki]]. A copy of the Documentation from the Docker Image can be found [[engineering:computer_science:docker:references:mprasil_dokuwiki|here]].
I'm assuming you already have Docker and Docker-Compose installed.
If not, go ahead and install them:
sudo apt install docker -y && sudo apt install docker-compose -y
----
===== Preparations due to LVM =====
First, after installing Ubuntu, we should expand the LVM to use the entire Free Space available. This is/was an issue at the time of writing (17/07/2020)
sudo lvm
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
exit
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Confirm with:
df -h
----
===== Avoiding "sudo docker command" =====
Let's add ourselfs to the Docker Group so we don't have to prefix every Docker command with 'sudo'
sudo gpasswd -a $USER docker
----
===== Creating the Volumes for Data =====
Now we need to create the docker volumes, which points to a local folder, so we can manipulate / migrate / backup the data easily if needed.
^General Example^Pratical Example|
|
docker volume create \
--driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
|
docker volume create \
--driver local \
--opt type=none \
--opt device=/media/docker-user/dokuwiki/storage/data \
--opt o=bind dokuwiki_data
|
We can either create all volumes and directories necessary manually, or use this script - **create_volumes.sh** - to create the folders and volumes in one go:
#!/bin/bash
STORAGE_PATH="/home/docker-user/dokuwiki"
mkdir -p "$STORAGE_PATH"/storage/{data,conf,lib/plugins,lib/tpl,logs}
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/data --opt o=bind dokuwiki_data
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/conf --opt o=bind dokuwiki_conf
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/lib/plugins --opt o=bind dokuwiki_lib-plugins
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/lib/tpl --opt o=bind dokuwiki_lib-tpl
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/logs --opt o=bind dokuwiki_logs
----
===== Creating the docker-compose.yml file =====
After that we can create our **docker-compose.yml** which will be used to manage our container:
version: '2'
volumes:
dokuwiki_data:
external: true
dokuwiki_conf:
external: true
dokuwiki_lib-plugins:
external: true
dokuwiki_lib-tpl:
external: true
dokuwiki_logs:
external: true
services:
dokuwiki:
image: 'mprasil/dokuwiki'
ports:
- '80:80'
volumes:
- dokuwiki_data:/dokuwiki/data
- dokuwiki_conf:/dokuwiki/conf
- dokuwiki_lib-plugins:/dokuwiki/lib/plugins
- dokuwiki_lib-tpl:/dokuwiki/lib/tpl
- dokuwiki_logs:/var/log
----
===== Starting the Container =====
Finally, if you already have Data from your previous DokuWiki, you can just copy/paste them in those previous created folders. Else you will just start a new DokuWiki once you start up the container. A few usefull commands to manage the container with docker-compose
^Command^Purpose|
|docker-compose up -d|Starts the Container and dettach (so you have your bash prompt back)|
|docker-compose down|Stops the Container|
|docker-compose ps|Checks the status of the Container|
Your container should now be accessible via [[http://.
Do note that https:// isn't available, since the container isn't listening on port 443. //
----
===== Backing Up / Migrating the Data =====
We can easily migrate the data by grabbing everything in the mounted volumes and collecting them into a tar(ball).
To do that we can create a file called **backtup_to_tar.sh** which when run will grab everything from //SOURCE_PATH// and output it into //BACKUP_PATH// with the name "dokuwiki_backup-date-time.tar" ex.: dokuwiki_backup-2020-07-24-13-21.tar
#!/bin/bash
SOURCE_PATH="/home/docker-user/dokuwiki"
BACKUP_PATH="/home/docker-user/backups"
BACKUP_NAME="dokuwiki_backup"
tar cvf "$BACKUP_PATH"/"$BACKUP_NAME"-$(date +"%Y-%m-%d-%H-%M").tar -C "$SOURCE_PATH"