diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ac482e0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3.6" +x-common-env: &common-env + TRAVELYNX_DB_HOST: database + TRAVELYNX_DB_NAME: travelynx + TRAVELYNX_DB_USERNAME: travelynx + TRAVELYNX_DB_PASSWORD: travelynx +services: + database: + image: postgres:11 + networks: + - backend + environment: + <<: *common-env + volumes: + - ./examples/docker/postgres-init.sh:/docker-entrypoint-initdb.d/init.sh + travelynx: + build: . + ports: + - "8000:8093" + networks: + - backend + volumes: + - ./examples/docker/travelynx.conf:/app/travelynx.conf + environment: + <<: *common-env + TRAVELYNX_MAIL_DISABLE: 1 + TRAVELYNX_SECRET: 12345678 +networks: + backend: diff --git a/docker-run.sh b/docker-run.sh index f147b77..29ffa7b 100755 --- a/docker-run.sh +++ b/docker-run.sh @@ -1,6 +1,22 @@ -#!/bin/sh +#!/bin/bash set -eu +WAIT_DB_HOST=${TRAVELYNX_DB_HOST} +WAIT_DB_PORT=5432 + +wait_for_db() { + set +e + for i in $(seq 1 ${WAIT_DB_TIMEOUT:-5}) + do + (echo >/dev/tcp/${WAIT_DB_HOST}/${WAIT_DB_PORT}) &>/dev/null + if [ $? -eq 0 ]; then + break + fi + sleep 1 + done + set -e +} + if [ ! -f travelynx.conf ] then echo "The configuration file is missing" @@ -17,6 +33,8 @@ then export EMAIL_SENDER_TRANSPORT_PORT=${TRAVELYNX_MAIL_PORT:-25} fi +wait_for_db + perl index.pl database migrate exec /usr/local/bin/hypnotoad -f index.pl diff --git a/examples/docker/postgres-init.sh b/examples/docker/postgres-init.sh new file mode 100644 index 0000000..a8c59d1 --- /dev/null +++ b/examples/docker/postgres-init.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER ${TRAVELYNX_DB_USERNAME} PASSWORD '${TRAVELYNX_DB_PASSWORD}'; + CREATE DATABASE ${TRAVELYNX_DB_NAME}; + GRANT ALL PRIVILEGES ON DATABASE ${TRAVELYNX_DB_NAME} TO ${TRAVELYNX_DB_USERNAME}; +EOSQL \ No newline at end of file diff --git a/examples/docker/travelynx.conf b/examples/docker/travelynx.conf new file mode 100644 index 0000000..8f3f56f --- /dev/null +++ b/examples/docker/travelynx.conf @@ -0,0 +1,26 @@ +{ + cache => { + schedule => $ENV{TRAVELYNX_IRIS_CACHE} // '/var/cache/travelynx/iris', + realtime => $ENV{TRAVELYNX_IRISRT_CACHE} // '/var/cache/travelynx/iris-rt', + }, + db => { + host => $ENV{TRAVELYNX_DB_HOST} // 'die("Please set TRAVELYNX_DB_HOST")', + database => $ENV{TRAVELYNX_DB_NAME} // 'travelynx', + user => $ENV{TRAVELYNX_DB_USERNAME} // 'travelynx', + password => $ENV{TRAVELYNX_DB_PASSWORD} // die("Please set TRAVELYNX_DB_PASSWORD"), + }, + hypnotoad => { + accepts => $ENV{TRAVELYNX_HYPNOTOAD_ACCEPTS} // 100, + clients => $ENV{TRAVELYNX_HYPNOTOAD_CLIENTS} // 10, + listen => [ $ENV{TRALELYNX_HYPNOTOAD_LISTEN} // 'http://*:8093' ], + pid_file => '/tmp/travelynx.pid', + workers => $ENV{TRAVELYNX_HYPNOTOAD_WORKERS} // 2, + spare => $ENV{TRAVELYNX_HYPNOTOAD_SPARE} // 2, + }, + mail => { + disabled => $ENV{TRAVELYNX_MAIL_DISABLE} // 0, + }, + secrets => [ + $ENV{TRAVELYNX_SECRET} // die("Please set TRAVELYNX_SECRET"), + ], +};