diff --git a/.dockerignore b/.dockerignore index 939fd11..2a11f34 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,5 @@ Dockerfile .dockerignore -examples/ .gitignore README.md travelynx.conf diff --git a/Dockerfile b/Dockerfile index b7067b9..289660a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,28 +2,16 @@ FROM debian:stretch-slim ARG DEBIAN_FRONTEND=noninteractive +COPY cpanfile /app/cpanfile +WORKDIR /app + RUN apt-get update && apt-get install --no-install-recommends -y \ cpanminus \ build-essential \ libpq-dev \ git \ - ssmtp \ - && cpanm -in --no-man-pages \ - Cache::File \ - Crypt::Eksblowfish \ - DateTime \ - DateTime::Format::Strptime \ - DBI \ - DBD::Pg \ - Email::Sender \ - Geo::Distance \ - Geo::Distance::XS \ - Mojolicious \ - Mojolicious::Plugin::Authentication \ - Travel::Status::DE::IRIS \ - UUID::Tiny \ - JSON \ - Mojo::Pg \ + cron \ + && cpanm -in --no-man-pages --installdeps . \ && rm -rf ~/.cpanm \ && apt-get purge -y \ build-essential \ @@ -31,6 +19,5 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ && apt-get autoremove -y COPY . /app -WORKDIR /app CMD ["/app/docker-run.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index ac482e0..0b7336d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,17 @@ x-common-env: &common-env TRAVELYNX_DB_NAME: travelynx TRAVELYNX_DB_USERNAME: travelynx TRAVELYNX_DB_PASSWORD: travelynx + TRAVELYNX_SECRET: 12345678 + TRAVELYNX_MAIL_DISABLE: 1 + MOJO_MODE: development + +x-common-config: &common-config + volumes: + - ./examples/docker/travelynx.conf:/app/travelynx.conf + build: . + networks: + - backend + services: database: image: postgres:11 @@ -14,16 +25,16 @@ services: volumes: - ./examples/docker/postgres-init.sh:/docker-entrypoint-initdb.d/init.sh travelynx: - build: . + <<: *common-config ports: - "8000:8093" - networks: - - backend - volumes: - - ./examples/docker/travelynx.conf:/app/travelynx.conf environment: <<: *common-env - TRAVELYNX_MAIL_DISABLE: 1 - TRAVELYNX_SECRET: 12345678 + cron: + <<: *common-config + environment: + <<: *common-env + CRON: 1 + networks: - backend: + backend: \ No newline at end of file diff --git a/docker-run.sh b/docker-run.sh index 29ffa7b..696aa35 100755 --- a/docker-run.sh +++ b/docker-run.sh @@ -4,6 +4,14 @@ set -eu WAIT_DB_HOST=${TRAVELYNX_DB_HOST} WAIT_DB_PORT=5432 +check_config() { + if [ ! -f travelynx.conf ] + then + echo "The configuration file is missing" + exit 1 + fi +} + wait_for_db() { set +e for i in $(seq 1 ${WAIT_DB_TIMEOUT:-5}) @@ -11,30 +19,40 @@ wait_for_db() { (echo >/dev/tcp/${WAIT_DB_HOST}/${WAIT_DB_PORT}) &>/dev/null if [ $? -eq 0 ]; then break + else + echo "Can't reach DB @ ${WAIT_DB_HOST}:${WAIT_DB_PORT}" fi sleep 1 done set -e } -if [ ! -f travelynx.conf ] -then - echo "The configuration file is missing" - exit 1 -fi +run_app() { + if [ \ + "${TRAVELYNX_MAIL_DISABLE:-0}" -eq 0 \ + -a "${TRAVELYNX_MAIL_HOST:-unset}" != "unset" \ + ] + then + export EMAIL_SENDER_TRANSPORT=SMTP + export EMAIL_SENDER_TRANSPORT_HOST=${TRAVELYNX_MAIL_HOST} + export EMAIL_SENDER_TRANSPORT_PORT=${TRAVELYNX_MAIL_PORT:-25} + fi -if [ \ - "${TRAVELYNX_MAIL_DISABLE:-0}" -eq 0 \ - -a "${TRAVELYNX_MAIL_HOST:-unset}" != "unset" \ -] -then - export EMAIL_SENDER_TRANSPORT=SMTP - export EMAIL_SENDER_TRANSPORT_HOST=${TRAVELYNX_MAIL_HOST} - export EMAIL_SENDER_TRANSPORT_PORT=${TRAVELYNX_MAIL_PORT:-25} -fi + perl index.pl database migrate + exec /usr/local/bin/hypnotoad -f index.pl +} + +run_cron() { + exec perl index.pl worker +} + +check_config wait_for_db -perl index.pl database migrate +if [ "${CRON:-0}" -ne "0" ] +then + run_cron +fi -exec /usr/local/bin/hypnotoad -f index.pl +run_app \ No newline at end of file