computer_science:docker:docker_dokuwiki_portable

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
computer_science:docker:docker_dokuwiki_portable [2020/07/19 21:18] carlossousacomputer_science:docker:docker_dokuwiki_portable [2023/12/01 12:07] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Docker - DokuWiki (with docker volume host directory for portability and direct access to data) ====== ====== Docker - DokuWiki (with docker volume host directory for portability and direct access to data) ======
  
-This documentation was done using **Ubuntu Server 20.04 LTS** as a VirtualMachine, virtualized via **VirtualBox 6.1.8.**+The main objective is to have:
  
-Ubuntu was configured to use LVM.+  - 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 [[:computer_science:docker:references:mprasil_dokuwiki|here]].
  
 I'm assuming you already have Docker and Docker-Compose installed. I'm assuming you already have Docker and Docker-Compose installed.
  
-if not, go ahead and install them (sudo apt-get install docker -y && sudo apt-get install docker-compose -y)+If not, go ahead and install them
 + 
 +<code bash> 
 +sudo apt install docker -y && sudo apt install docker-compose -y 
 + 
 + 
 +</code> 
 + 
 +---- 
 + 
 +===== Preparations due to LVM =====
  
-First, after installing Ubuntu, we should expand the LVM to use the entire Fee Space available. This is/was an issue at the time of writing (17/07/2020)+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)
  
 <code bash> <code bash>
 sudo lvm sudo lvm
 +
  
 </code> </code>
Line 18: Line 37:
 <code bash> <code bash>
 lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
 +
  
 </code> </code>
  
-| |<code>+<code bash> 
 +exit
  
  
-</code>     <code bash>+</code>
  
 +<code bash>
 +sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
  
-</code>     <code bash> 
-exit 
  
 +</code>
  
-</code>     <code bash> +Confirm with:
-sudo resize2fs /dev/ubuntu-vg/ubuntu-lv+
  
- +<code bash>
-</code>       Confirm with:  <code bash>+
 df -h df -h
  
  
-</code>       | +</code>
-|Let's add ourselfs to the Docker Group so we don't have to prefix every command from Docker with 'sudo'|<code bash> +
-sudo gpasswd -a $USER docker+
  
 +----
  
-</code>       | 
-|Now let's create a docker volume, which points to a local folder, so we can manipulate / migrate / backup the data easily if needed.| | 
  
-–driver local \ –opt type=none \ –opt device=/home/user/test \ –opt o=bind \ test_vol+===== Avoiding "sudo docker command" =====
  
-Practical Example:+Let's add ourselfs to the Docker Group so we don't have to prefix every Docker command with 'sudo'
  
 <code bash> <code bash>
 +sudo gpasswd -a $USER docker
 +
 +
 +</code>
 +
 +----
 +
 +===== 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|
 +|<code bash>
 +docker volume create \
 +--driver local \
 +--opt type=none \
 +--opt device=/home/user/test \
 +--opt o=bind \
 +test_vol
 +
 +
 +</code>       |<code bash>
 docker volume create \ docker volume create \
 --driver local \ --driver local \
 --opt type=none \ --opt type=none \
---opt device=/media/share/UbuntuDocker/dokuwiki/storage/data \+--opt device=/media/docker-user/dokuwiki/storage/data \
 --opt o=bind dokuwiki_data --opt o=bind dokuwiki_data
 +
 +
 +</code>       |
 +
 +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:
 +
 +<code bash>
 +#!/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
  
  
 </code> </code>
  
-|+----
  
-| | | +===== Creating the docker-compose.yml file =====
-| | | +
-| | | +
-| | | +
-| | | +
-| | | +
-| | |+
  
-\\+After that we can create our **docker-compose.yml**  which will be used to manage our container: 
 + 
 +<code bash> 
 +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 
 + 
 + 
 +</code> 
 + 
 +---- 
 + 
 +===== 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://<VM/HOST_IP|http://<VM/HOST_IP]]>
 + 
 +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 
 +<code bash> 
 +#!/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" 
 + 
 + 
 +</code>
  
  
  • computer_science/docker/docker_dokuwiki_portable.1595193537.txt.gz
  • Last modified: 2023/12/01 12:07
  • (external edit)