# TikiWiki Docker Image

TikiWiki is full featured content management system written in PHP. You can
find more useful information at http://tiki.org

## Pulling

```
docker pull tikiwiki/tikiwiki:19.x
```

## Running

### Variables

Some env variables are provided to setup the database, but you can also mount
your configurations files inside container. The env vars and the default values
are listed below and the names are self explanatory.

```
TIKI_DB_VERSION=19
TIKI_DB_HOST='db'
TIKI_DB_USER
TIKI_DB_PASS
TIKI_DB_NAME=tikiwiki
```

### Single container

Example to get a running container below.

```
docker run --rm --name tiki --link mariadb:db \
    -e TIKI_DB_USER=tiki \
    -e TIKI_DB_PASS=wiki \
    -p 80:80 \
    -d tikiwiki/tikiwiki
```

### docker-compose

The following creates and start two containers:

1. TikiWiki with por 80 published on host
2. MariaDB instance with the schema `tikiwiki`

```yml
version: '2'
services:
  tiki:
    image: tikiwiki/tikiwiki:19.x
    ports:
    - "80:80"
    depends_on:
      - db
    environment:
      - TIKI_DB_USER=tiki
      - TIKI_DB_PASS=wiki
      - TIKI_DB_NAME=tikiwiki
  db:
    image: mariadb
    environment:
      - MYSQL_USER=tiki
      - MYSQL_PASSWORD=wiki
      - MYSQL_DATABASE=tikiwiki
      - MYSQL_ROOT_PASSWORD=tkwkiiii
      - TERM=dumb
```

### scalable mode with docker-compose

The following recipe makes possible to grow the amount of TikiWiki
containers, so in this way, it is possible to use more resources from
host to handle incoming traffic.

Concerning about this mode:

1. It it not compatible to web installer, so installing database using
command line is needed.
2. It is needed to have a reverse proxy load balancing traffic to TikiWiki
containers.

#### docker-compose.yml

This setup uses `eeacms/haproxy` container as reverse proxy and load balancer and
declare a set of volumes. When new **tiki** containers are created, they will share
the same set of volumes.

```yml
version: '3.7'

services:
  haproxy:
    image: eeacms/haproxy
    depends_on:
    - tiki
    ports:
    - "80:5000"
    environment:
      BACKENDS: "tiki"
      DNS_ENABLED: "true"
      LOG_LEVEL: "info"
  tiki:
    image: tikiwiki/tikiwiki:19.x
    depends_on:
      - db
    deploy:
      replicas: 2
    environment:
      - TIKI_DB_USER=tiki
      - TIKI_DB_PASS=wiki
      - TIKI_DB_NAME=tikiwiki
    volumes:
      - tiki_files:/var/www/html/files/
      - tiki_img_trackers:/var/www/html/img/trackers/
      - tiki_img_wiki_up:/var/www/html/img/wiki_up/
      - tiki_img_wiki:/var/www/html/img/wiki/
      - tiki_modules_cache:/var/www/html/modules/cache/
      - tiki_storage:/var/www/html/storage/
      - tiki_temp:/var/www/html/temp/
      - tiki_sessions:/var/www/sessions/
  db:
    image: mariadb
    environment:
      - MYSQL_USER=tiki
      - MYSQL_PASSWORD=wiki
      - MYSQL_DATABASE=tikiwiki
      - MYSQL_ROOT_PASSWORD=tkwkiiii
      - TERM=dumb
volumes:
  tiki_files:
  tiki_img_trackers:
  tiki_img_wiki_up:
  tiki_img_wiki:
  tiki_modules_cache:
  tiki_storage:
  tiki_temp:
  tiki_sessions:
```

#### Starting containers

First it is needed to copy the YML above in a folder with
a descriptive name, like `example.com`.

Then, inside the folder `example.com`, the following command
starts all container from docker-compose.yml.

```sh
docker-compose up -d
```

After wait all containers to start and the console prompt appears
again, the following command shows the containers running for
docker-compose.yml on folder `example.com`.

```
docker-compose ps
```

The output should be like:

```
        Name                      Command               State          Ports        
------------------------------------------------------------------------------------
examplecom_db_1        docker-entrypoint.sh mysqld      Up      3306/tcp            
examplecom_haproxy_1   /docker-entrypoint.sh hapr ...   Up      0.0.0.0:80->5000/tcp
examplecom_tiki_1      /entrypoint.sh apache2-for ...   Up      443/tcp, 80/tcp     
```

There is 1 container running for each service (**db**, **haproxy**, **tiki**)
in **example.com** folder.


#### Installing database

There is a command line installer available in tiki folder that should be used
to install the database. **WE CAN NOT USE THE WEB INSTALLER!**. The following
command installs Tiki database

```sh
docker-compose exec tiki php console.php database:install
```

#### Scaling containers

If more Tiki container is wanted, the following command launch new containers.

```sh
docker-compose scale tiki=3
```

Now, the following containers will be listed on `docker-compose ps`:

```sh
        Name                      Command               State          Ports        
------------------------------------------------------------------------------------
examplecom_db_1        docker-entrypoint.sh mysqld      Up      3306/tcp            
examplecom_haproxy_1   /docker-entrypoint.sh hapr ...   Up      0.0.0.0:80->5000/tcp
examplecom_tiki_1      /entrypoint.sh apache2-for ...   Up      443/tcp, 80/tcp     
examplecom_tiki_2      /entrypoint.sh apache2-for ...   Up      443/tcp, 80/tcp     
examplecom_tiki_3      /entrypoint.sh apache2-for ...   Up      443/tcp, 80/tcp     
```
