view docker/README.md @ 2159:5fdeb41f3ed4

Changed geoserver primary key for distance_marks_geoserver to 'id'.
author Sascha Wilde <wilde@intevation.de>
date Fri, 08 Feb 2019 12:50:42 +0100
parents 70471052f6b0
children b6b699385302
line wrap: on
line source

# Setup dev environment using Docker

- [Setup dev environment using Docker](#setup-dev-environment-using-docker)
  - [Network setup](#network-setup)
  - [Database setup](#database-setup)
  - [Create ER diagrams](#create-er-diagrams)
  - [GeoServer setup](#geoserver-setup)
  - [Gemma backend setup](#gemma-backend-setup)
  - [SPA setup](#spa-setup)

Run the `build` commands from the root of your checkout, because it is
assumed as the context!

Other example commands, too, assume they are run from the root of your
checkout.

## Network setup

Create a network to connect containers:

```shell
docker network create gemma
```

## Database setup

Build `gemma_db` docker image with e.g.:

```shell
docker build -t gemma_db -f docker/Dockerfile.db .
```

Get a running instance with e.g.:

```shell
docker run --name gemma_db -d -p 54321:5432 -v $PWD/schema:/opt/gemma \
           --network gemma gemma_db
```

Use `--network-alias gemma_db` if your container has a different name

Run tests for [Row-Level Security](https://www.postgresql.org/docs/11/ddl-rowsecurity.html) (RLS)
policies:

```shell
docker exec gemma_db ./run_tests.sh
```

## Create ER diagrams

Assuming you have installed `postgresql-autodoc` and
[graphviz](http://graphviz.org/) on a machine from which you can reach your
docker host, you can use the following:

ER diagram with waterway related tables:

```shell
postgresql_autodoc -p 54321 -h $dockerhost \
                   -d gemma -U sophie --password=so2Phie4 \
                   -t dot -l . -s 'waterway'
dot -Tpdf gemma.dot > gemma_waterway.pdf
```

Omit the `-s` option to get a diagram with all tables or use any other
schema name to see other parts of the whole picture.

## GeoServer setup

Build `gemma_geoserver` docker image with e.g.:

```shell
docker build -t gemma_geoserver -f docker/Dockerfile.geoserv .
```

Get a running instance with e.g.:

```shell
docker run --name gemma_geoserver -d -p 8280:8080 --network gemma \
           gemma_geoserver
```

Use `--network-alias gemma_geoserver` if you give your container
a different name.

## Gemma backend setup

Build `gemma_backend` docker image with e.g.:

```shell
docker build -t gemma_backend -f docker/Dockerfile.backend .
```

Get a running instance with e.g.:

```shell
docker run --name gemma_backend -v $PWD:/opt/gemma -d -p 8200:8000 \
           --network gemma gemma_backend
```

Use `--network-alias gemma_backend` if you give your container
a different name.

## SPA setup

Build `gemma_spa` docker image with e.g.:

```shell
docker build -t gemma_spa -f docker/Dockerfile.spa .
```

Get a running instance with e.g.:

```shell
docker run --name gemma_spa -v $PWD/client:/opt/gemma/client -d -p 8290:8080 \
           --network gemma gemma_spa
```

Now you should be able to use the application in your browser by going to
`http://HOSTNAME:8290`, with `HOSTNAME` being the hostname of your docker host.