# docker-gdp

## Install docker (only once)
```
sudo pacman -S docker docker-compose docker-machine
```

## Clone this repos

this will clone this repos (main docker environement) and necessary other source code (synopsx, webapp, xml-tei sources, vuejs client)

```
git clone --recursive https://figureslibres.io/gogs/bachir/docker-gdp.git
```

## Docker

### start docker engine
```
sudo systemctl start docker
```

### build
only before the first run (may take some time)
```
sudo docker-compose build
```
or with args for groups and users
```
docker-compose build --no-cache --build-arg UID=$(id -u) --build-arg GID=$(id -g) --build-arg UNAME=$(id -un) --build-arg GNAME=$(id -gn) [client | basex]
```
### run
then each time you want to launch the app
```
sudo docker-compose up -d
```

## API
the api is ready, you can go to http://localhost:8984/home

### indexing
before you can use the client you need to trigger this url http://localhost:8984/indexing

## Client
open http://localhost:8988 in your browser

## Vhost or Cross Origins Policy
Cross origin poilicy will block the api requests from client

You'll need to install vhost domain for api and client, like dev.gdp.net and dev.api.gdp.net

Or in firefox install this addon to allow cors addons.mozilla.org/en-US/firefox/addon/cors-everywhere/

## Logs
to follow the webpack compilation process, run
```
sudo docker-compose logs -f
```

## Update
update the code
```
git pull origin master
git pull --recurse-submodules
```
restart the containers
```
docker-compose restart basex
docker-compose restart client
```
or rebuild if data was updated
```
docker-compose up -d --build
```
or
```sh
docker-compose build --no-cache [client | basex]
docker-compose up -d [client | basex]
```

## Prod
run containers for prod
```
docker-compose -f docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
```
client will be built the client container stop

basex container will stay up

you have to serve client/dist/index.html with your own webserver (e.g. nginx, apache, etc)

### nginx conf
```nginx
server {
  listen 80;
  server_name domain.tld;

  root /path/to/docker-gdp/client/dist/;
  index index.html;
  location / {
    try_files $uri $uri/ /index.html;
  }

  charset utf-8;

  location ~/api(.*)$ {
    proxy_pass http://127.0.0.1:8984$1;
    #proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
    proxy_redirect      off;
    add_header Access-Control-Allow-Origin *;
  }
}
```

## Doc

https://github.com/guidesDeParis/webapp/blob/master/install.md

http://docs.basex.org/wiki/Docker

https://hub.docker.com/r/basex/basexhttp