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
Last revisionBoth sides next revision
computer_science:docker:docker_dokuwiki_portable [2020/07/19 21:18] carlossousacomputer_science:docker:docker_dokuwiki_portable [2020/07/30 11:56] – [Backing Up / Migrating the Data] carlossousa
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.txt
  • Last modified: 2023/12/01 12:07
  • by 127.0.0.1