From d64e2f6b9c35816bcc698977404c6eaca83dfbe4 Mon Sep 17 00:00:00 2001 From: Adnan Hashmi Date: Tue, 23 Apr 2024 20:52:09 +0530 Subject: [PATCH] dockerfile and dev dockerfile Signed-off-by: Adnan Hashmi --- .gitignore | 3 + Dockerfile | 97 ++++++++++++------------- Dockerfile.dev | 109 +++++++++++++++++++++++++++++ docker-compose.yml | 13 ++-- setup_utils/cronjob.txt | 3 +- setup_utils/generate_config_ini.sh | 4 +- setup_utils/init_db.sh | 4 +- setup_utils/start.sh | 22 ++++-- setup_utils/supervisord-dev.conf | 92 ++++++++++++++++++++++++ setup_utils/supervisord.conf | 15 ++-- web-server/http-server.js | 2 +- web-server/scripts/build.sh | 2 +- web-server/scripts/server-init.sh | 2 +- web-server/scripts/setup-env.sh | 2 +- web-server/scripts/utils.sh | 2 +- web-server/scripts/zip.sh | 2 +- 16 files changed, 293 insertions(+), 81 deletions(-) create mode 100644 Dockerfile.dev create mode 100644 setup_utils/supervisord-dev.conf diff --git a/.gitignore b/.gitignore index 2f287429b..adf5520a9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ __pycache__/ # C extensions *.so +./*/config.ini +./backend/analytics_server/mhq/config/config.ini + # Distribution / packaging .Python build/ diff --git a/Dockerfile b/Dockerfile index 747688fcf..414f223f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,61 +7,65 @@ ARG FRONTEND_ENABLED=true ARG CRON_ENABLED=true # Build the backend -FROM python:3.9.19-alpine3.19 as backend-build +FROM python:3.9-slim as backend-build # Prevents Python from writing pyc files. ENV PYTHONDONTWRITEBYTECODE=1 WORKDIR /app/ COPY ./backend /app/backend -RUN apk update && \ - apk add --no-cache \ - git \ - postgresql-dev \ +RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ - musl-dev \ - python3-dev \ - && cd ./backend/analytics_server/ \ + libpq-dev \ + build-essential \ + && cd ./backend/ \ && python3 -m venv /opt/venv \ && /opt/venv/bin/pip install --upgrade pip \ && /opt/venv/bin/pip install -r requirements.txt -FROM node:16.20.2-alpine3.18 as node - # Final image -FROM postgres:alpine3.19 +FROM python:3.9-slim + +ENV DB_HOST=localhost +ENV DB_NAME=dora-oss +ENV DB_PASS=postgres +ENV DB_PORT=5434 +ENV DB_USER=postgres +ENV REDIS_HOST=localhost +ENV REDIS_PORT=6379 +ENV PORT=3333 +ENV SYNC_SERVER_PORT=9696 +ENV ANALYTICS_SERVER_PORT=9697 +ENV NEXT_PUBLIC_APP_ENVIRONMENT="staging" +ENV INTERNAL_API_BASE_URL=http://localhost:9696 +ENV INTERNAL_SYNC_API_BASE_URL=http://localhost:9697 +ENV NEXT_PUBLIC_APP_ENVIRONMENT="prod" WORKDIR /app COPY --from=backend-build /opt/venv /opt/venv -COPY --from=backend-build /usr/local/bin/ /usr/local/bin/ -COPY --from=backend-build /usr/local/lib/ /usr/local/lib/ -COPY --from=backend-build /usr/local/include /usr/local/include - -COPY --from=node /usr/lib /usr/lib -COPY --from=node /usr/local/lib /usr/local/lib -COPY --from=node /usr/local/include /usr/local/include -COPY --from=node /usr/local/bin /usr/local/bin COPY . /app/ -RUN apk add --no-cache \ +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ gcc \ - build-base \ - libpq \ - postgresql-dev \ - postgresql-client \ + build-essential \ + libpq-dev \ + cron \ + postgresql \ postgresql-contrib \ - redis \ + redis-server \ supervisor \ curl \ + && curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \ + && apt-get install -y nodejs \ && mkdir -p /etc/cron.d && mv /app/setup_utils/cronjob.txt /etc/cron.d/cronjob \ && chmod +x /app/setup_utils/start.sh /app/setup_utils/init_db.sh /app/setup_utils/generate_config_ini.sh \ && mv ./setup_utils/supervisord.conf /etc/supervisord.conf \ && mv /app/database-docker/db/ /app/ && rm -rf /app/database-docker/ \ - && su - postgres -c "initdb -D /var/lib/postgresql/data" \ - && su - postgres -c "echo \"host all all 0.0.0.0/0 md5\" >> /var/lib/postgresql/data/pg_hba.conf" \ - && su - postgres -c "echo \"listen_addresses='*'\" >> /var/lib/postgresql/data/postgresql.conf" \ - && su - postgres -c "rm -f /var/lib/postgresql/data/postmaster.pid" \ + && echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/15/main/pg_hba.conf \ + && echo "listen_addresses='*'" >> /etc/postgresql/15/main/postgresql.conf \ + && sed -i "s/^port = .*/port = ${DB_PORT}/" /etc/postgresql/15/main/postgresql.conf \ && npm install --global yarn --force \ && curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/download/v1.16.0/dbmate-linux-amd64 \ && chmod +x /usr/local/bin/dbmate \ @@ -79,7 +83,7 @@ RUN apk add --no-cache \ && touch /var/log/cron/cron.log \ && chmod 0644 /etc/cron.d/cronjob \ && crontab /etc/cron.d/cronjob \ - && /app/setup_utils/generate_config_ini.sh -t /app/apiserver/dora/config \ + && /app/setup_utils/generate_config_ini.sh -t /app/backend/analytics_server/mhq/config \ && cd /app/web-server \ && yarn && yarn build \ && rm -rf ./artifacts \ @@ -89,27 +93,18 @@ RUN apk add --no-cache \ && tar cfz /opt/venv.tar.gz /opt/venv/ \ && rm -rf /opt/venv && mkdir -p /opt/venv \ && yarn cache clean \ - && rm -rf /var/cache/apk/* + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -ENV POSTGRES_DB_ENABLED=$POSTGRES_DB_ENABLED -ENV DB_INIT_ENABLED=$DB_INIT_ENABLED -ENV REDIS_ENABLED=$REDIS_ENABLED -ENV BACKEND_ENABLED=$BACKEND_ENABLED -ENV FRONTEND_ENABLED=$FRONTEND_ENABLED -ENV CRON_ENABLED=$CRON_ENABLED -ENV DB_HOST=localhost -ENV DB_NAME=dora-oss -ENV DB_PASS=postgres -ENV DB_PORT=5432 -ENV DB_USER=postgres -ENV REDIS_HOST=localhost -ENV REDIS_PORT=6379 -ENV PORT=3000 -ENV NEXT_PUBLIC_APP_ENVIRONMENT="staging" -ENV INTERNAL_API_BASE_URL=http://localhost:9696 -ENV NEXT_PUBLIC_APP_ENVIRONMENT="prod" -ENV PATH="/opt/venv/bin:$PATH" +ENV POSTGRES_DB_ENABLED=true +ENV DB_INIT_ENABLED=true +ENV REDIS_ENABLED=true +ENV BACKEND_ENABLED=true +ENV FRONTEND_ENABLED=true +ENV CRON_ENABLED=true + +ENV PATH="/opt/venv/bin:/usr/lib/postgresql/15/bin:/usr/local/bin:$PATH" -EXPOSE 5432 6379 9696 3000 +EXPOSE 3333 -CMD ["/bin/sh", "-c", "/app/setup_utils/start.sh"] +CMD ["/bin/bash", "-c", "/app/setup_utils/start.sh"] diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 000000000..a383c01a1 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,109 @@ +ARG ENVIRONMENT=prod +ARG POSTGRES_DB_ENABLED=true +ARG DB_INIT_ENABLED=true +ARG REDIS_ENABLED=true +ARG BACKEND_ENABLED=true +ARG FRONTEND_ENABLED=true +ARG CRON_ENABLED=true + +# Build the backend +FROM python:3.9-slim as backend-build + +# Prevents Python from writing pyc files. +ENV PYTHONDONTWRITEBYTECODE=1 + +WORKDIR /app/ +COPY ./backend /app/backend +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libpq-dev \ + build-essential \ + && cd ./backend/ \ + && python3 -m venv /opt/venv \ + && /opt/venv/bin/pip install --upgrade pip \ + && /opt/venv/bin/pip install -r requirements.txt -r dev-requirements.txt + +# Final image +FROM python:3.9-slim + +WORKDIR /app +COPY --from=backend-build /opt/venv /opt/venv + +COPY . /app/ + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + gcc \ + build-essential \ + libpq-dev \ + cron \ + postgresql \ + postgresql-contrib \ + redis-server \ + supervisor \ + curl \ + && curl -fsSL https://deb.nodesource.com/setup_16.x | bash - \ + && apt-get install -y nodejs \ + && mkdir -p /etc/cron.d && mv /app/setup_utils/cronjob.txt /etc/cron.d/cronjob \ + && chmod +x /app/setup_utils/start.sh /app/setup_utils/init_db.sh /app/setup_utils/generate_config_ini.sh \ + && mv ./setup_utils/supervisord-dev.conf /etc/supervisord.conf \ + && mv /app/database-docker/db/ /app/ && rm -rf /app/database-docker/ \ + && echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/15/main/pg_hba.conf \ + && echo "listen_addresses='*'" >> /etc/postgresql/15/main/postgresql.conf \ + && npm install --global yarn --force \ + && curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/download/v1.16.0/dbmate-linux-amd64 \ + && chmod +x /usr/local/bin/dbmate \ + && mkdir -p /var/log/postgres \ + && touch /var/log/postgres/postgres.log \ + && mkdir -p /var/log/init_db \ + && touch /var/log/init_db/init_db.log \ + && mkdir -p /var/log/redis \ + && touch /var/log/redis/redis.log \ + && mkdir -p /var/log/apiserver \ + && touch /var/log/apiserver/apiserver.log \ + && mkdir -p /var/log/webserver \ + && touch /var/log/webserver/webserver.log \ + && mkdir -p /var/log/cron \ + && touch /var/log/cron/cron.log \ + && chmod 0644 /etc/cron.d/cronjob \ + && crontab /etc/cron.d/cronjob \ + && /app/setup_utils/generate_config_ini.sh -t /app/backend/analytics_server/mhq/config \ + && cd /app/web-server \ + && yarn \ + && rm -rf ./artifacts \ + && cd /app/ \ + && tar cfz web-server.tar.gz ./web-server \ + && rm -rf ./web-server && mkdir -p /app/web-server \ + && tar cfz /opt/venv.tar.gz /opt/venv/ \ + && rm -rf /opt/venv && mkdir -p /opt/venv \ + && yarn cache clean \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +ENV POSTGRES_DB_ENABLED=true +ENV DB_INIT_ENABLED=true +ENV REDIS_ENABLED=true +ENV BACKEND_ENABLED=true +ENV FRONTEND_ENABLED=true +ENV CRON_ENABLED=true +ENV ENVIRONMENT=dev + +ENV DB_HOST=localhost +ENV DB_NAME=dora-oss +ENV DB_PASS=postgres +ENV DB_PORT=5434 +ENV DB_USER=postgres +ENV REDIS_HOST=localhost +ENV REDIS_PORT=6379 +ENV PORT=3333 +ENV SYNC_SERVER_PORT=9696 +ENV ANALYTICS_SERVER_PORT=9697 +ENV NEXT_PUBLIC_APP_ENVIRONMENT="staging" +ENV INTERNAL_API_BASE_URL=http://localhost:9696 +ENV INTERNAL_SYNC_API_BASE_URL=http://localhost:9697 +ENV NEXT_PUBLIC_APP_ENVIRONMENT="prod" +ENV PATH="/opt/venv/bin:/usr/lib/postgresql/15/bin:/usr/local/bin:$PATH" + +EXPOSE 3333 + +CMD ["/bin/bash", "-c", "/app/setup_utils/start.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index 8d276c2aa..1947c16c7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,9 @@ services: - dora-metrics: - container_name: middleware + middleware-dev: + container_name: middleware-dev build: context: ./ - dockerfile: Dockerfile + dockerfile: Dockerfile.dev args: ENVIRONMENT: ${ENVIRONMENT} POSTGRES_DB_ENABLED: ${POSTGRES_DB_ENABLED:-true} @@ -18,9 +18,10 @@ services: ports: - "9696:9696" - - "3005:3000" - - "5436:5432" - - "6380:6379" + - "9697:9697" + - "3005:3333" + - "5436:5434" + - "6379:6379" extra_hosts: - "host.docker.internal:host-gateway" diff --git a/setup_utils/cronjob.txt b/setup_utils/cronjob.txt index b9b553d11..8fa20dec5 100644 --- a/setup_utils/cronjob.txt +++ b/setup_utils/cronjob.txt @@ -1,5 +1,4 @@ #!/usr/bin/env python3 # Every minute -*/30 * * * * PYTHONPATH=/app/backend/apiserver/ /opt/venv/bin/python3 /app/backend/apiserver/dora/service/sync_data.py >> /var/log/cron/cron.log 2>&1 - +* * * * * curl -X POST http://localhost:9697/sync >> /var/log/cron/cron.log 2>&1 diff --git a/setup_utils/generate_config_ini.sh b/setup_utils/generate_config_ini.sh index 30b0963c9..3b1a43343 100755 --- a/setup_utils/generate_config_ini.sh +++ b/setup_utils/generate_config_ini.sh @@ -1,5 +1,5 @@ -#!/bin/sh - +#!/bin/bash +target_path=../backend/analytics_server/mhq/config/ # Parse command line arguments while [[ $# -gt 0 ]]; do key="$1" diff --git a/setup_utils/init_db.sh b/setup_utils/init_db.sh index 72bac2f9a..0c6c7063b 100755 --- a/setup_utils/init_db.sh +++ b/setup_utils/init_db.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e set -u @@ -35,5 +35,3 @@ fi DB_URL="postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB?sslmode=disable" /usr/local/bin/dbmate -u "$DB_URL" up - -exit 0 diff --git a/setup_utils/start.sh b/setup_utils/start.sh index 7b736f0e9..9c1ff621e 100644 --- a/setup_utils/start.sh +++ b/setup_utils/start.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash echo 'MHQ_EXTRACT_BACKEND_DEPENDENCIES' if [ -f /opt/venv.tar.gz ]; then @@ -11,14 +11,24 @@ fi echo 'MHQ_EXTRACT_FRONTEND' if [ -f /app/web-server.tar.gz ]; then - mkdir -p /app/frontend/web-server - tar xzf /app/web-server.tar.gz -C /app/frontend/web-server --strip-components=2 + mkdir -p /app/web-server + tar xzf /app/web-server.tar.gz -C /app/web-server --strip-components=2 rm -rf /app/web-server.tar.gz else echo "Tar file /app/web-server.tar.gz does not exist. Skipping extraction." fi -pg_ctl stop -D /var/lib/postgres/data; - echo 'MHQ_STARTING SUPERVISOR' -/usr/bin/supervisord -c /etc/supervisord.conf + +if [ "$ENVIRONMENT" != "dev" ]; then + cd /app/web-server + yarn build +fi + +if [ "$ENVIRONMENT" = "dev" ]; then + SUPERVISOR_CONF="/etc/supervisord-dev.conf" +else + SUPERVISOR_CONF="/etc/supervisord.conf" +fi + +/usr/bin/supervisord -c "$SUPERVISOR_CONF" diff --git a/setup_utils/supervisord-dev.conf b/setup_utils/supervisord-dev.conf new file mode 100644 index 000000000..0d4b41a4c --- /dev/null +++ b/setup_utils/supervisord-dev.conf @@ -0,0 +1,92 @@ +[supervisord] +nodaemon=true + +[program:postgres] +priority=1 +user=postgres +command=/bin/bash -c "postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf" +stdout_logfile=/var/log/postgres/postgres.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/postgres/postgres.log +stderr_logfile_maxbytes=512KB +autorestart=false +environment=POSTGRES_DB_ENABLED=%(ENV_POSTGRES_DB_ENABLED)s +autostart=%(ENV_POSTGRES_DB_ENABLED)s + +[program:initialize_db] +priority=2 +command=/app/setup_utils/init_db.sh +directory=/app +startsecs=5 +stdout_logfile=/var/log/init_db/init_db.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/init_db/init_db.log +stderr_logfile_maxbytes=512KB +autorestart=false +environment=POSTGRES_DB_ENABLED=%(ENV_POSTGRES_DB_ENABLED)s +autostart=%(ENV_POSTGRES_DB_ENABLED)s + +[program:redis] +priority=3 +command=redis-server --protected-mode no +stdout_logfile=/var/log/redis/redis.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/redis/redis.log +stderr_logfile_maxbytes=512KB +autorestart=true +environment=REDIS_ENABLED=%(ENV_REDIS_ENABLED)s +autostart=%(ENV_REDIS_ENABLED)s + +[program:backend_sync] +priority=5 +command=/bin/bash -c "/opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9697 --reload sync_app:app" +directory=/app/backend/analytics_server +stdout_logfile=/var/log/apiserver/apiserver.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/apiserver/apiserver.log +stderr_logfile_maxbytes=512KB +autorestart=true +retry=3 +retry_delay=5 +environment=BACKEND_ENABLED=%(ENV_BACKEND_ENABLED)s +autostart=%(ENV_BACKEND_ENABLED)s + +[program:backend] +priority=4 +command=/bin/bash -c "/opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9696 --reload app:app" +directory=/app/backend/analytics_server +stdout_logfile=/var/log/apiserver/apiserver.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/apiserver/apiserver.log +stderr_logfile_maxbytes=512KB +autorestart=true +retry=3 +retry_delay=5 +environment=BACKEND_ENABLED=%(ENV_BACKEND_ENABLED)s +autostart=%(ENV_BACKEND_ENABLED)s + +[program:frontend] +command=/bin/bash -c "yarn dev" +directory=/app/web-server +stdout_logfile=/var/log/webserver/webserver.log +stdout_logfile_maxbytes=512KB +stderr_logfile=/var/log/webserver/webserver.log +stderr_logfile_maxbytes=512KB +autorestart=true +retry=3 +retry_delay=5 +environment=FRONTEND_ENABLED=%(ENV_FRONTEND_ENABLED)s +autostart=%(ENV_FRONTEND_ENABLED)s + +[program:cron] +command=/bin/bash -c " exec /usr/sbin/cron -f -l 1" +autorestart=true +startsecs=10 +stderr_logfile=/var/log/cron.log +stdout_logfile=/var/log/cron.log +stdout_logfile_maxbytes=512KB +stderr_logfile_maxbytes=512KB +retry=3 +retry_delay=5 +environment=CRON_ENABLED=%(ENV_CRON_ENABLED)s +autostart=%(ENV_CRON_ENABLED)s diff --git a/setup_utils/supervisord.conf b/setup_utils/supervisord.conf index 59b91c40a..726aaf06e 100644 --- a/setup_utils/supervisord.conf +++ b/setup_utils/supervisord.conf @@ -2,8 +2,9 @@ nodaemon=true [program:postgres] +priority=1 user=postgres -command=/bin/sh -c "pg_ctl start -D /var/lib/postgresql/data" +command=/bin/bash -c "postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf" stdout_logfile=/var/log/postgres/postgres.log stdout_logfile_maxbytes=512KB stderr_logfile=/var/log/postgres/postgres.log @@ -13,6 +14,7 @@ environment=POSTGRES_DB_ENABLED=%(ENV_POSTGRES_DB_ENABLED)s autostart=%(ENV_POSTGRES_DB_ENABLED)s [program:initialize_db] +priority=2 command=/app/setup_utils/init_db.sh directory=/app startsecs=5 @@ -25,6 +27,7 @@ environment=POSTGRES_DB_ENABLED=%(ENV_POSTGRES_DB_ENABLED)s autostart=%(ENV_POSTGRES_DB_ENABLED)s [program:redis] +priority=3 command=redis-server --protected-mode no stdout_logfile=/var/log/redis/redis.log stdout_logfile_maxbytes=512KB @@ -35,7 +38,8 @@ environment=REDIS_ENABLED=%(ENV_REDIS_ENABLED)s autostart=%(ENV_REDIS_ENABLED)s [program:backend_sync] -command=/bin/sh -c "/opt/venv/bin/pip install --upgrade pip && /opt/venv/bin/pip install -r requirements.txt && /opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9696 --reload sync_app:app" +priority=5 +command=/bin/bash -c "/opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9697 --reload sync_app:app" directory=/app/backend/analytics_server stdout_logfile=/var/log/apiserver/apiserver.log stdout_logfile_maxbytes=512KB @@ -48,7 +52,8 @@ environment=BACKEND_ENABLED=%(ENV_BACKEND_ENABLED)s autostart=%(ENV_BACKEND_ENABLED)s [program:backend] -command=/bin/sh -c "/opt/venv/bin/pip install --upgrade pip && /opt/venv/bin/pip install -r requirements.txt && /opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9696 --reload app:app" +priority=4 +command=/bin/bash -c "/opt/venv/bin/gunicorn -w 4 -b 0.0.0.0:9696 --reload app:app" directory=/app/backend/analytics_server stdout_logfile=/var/log/apiserver/apiserver.log stdout_logfile_maxbytes=512KB @@ -61,7 +66,7 @@ environment=BACKEND_ENABLED=%(ENV_BACKEND_ENABLED)s autostart=%(ENV_BACKEND_ENABLED)s [program:frontend] -command=/bin/sh -c "yarn http" +command=/bin/bash -c "yarn http" directory=/app/web-server stdout_logfile=/var/log/webserver/webserver.log stdout_logfile_maxbytes=512KB @@ -74,7 +79,7 @@ environment=FRONTEND_ENABLED=%(ENV_FRONTEND_ENABLED)s autostart=%(ENV_FRONTEND_ENABLED)s [program:cron] -command=/usr/sbin/crond -f -l 1 +command=/bin/bash -c " exec /usr/sbin/cron -f -l 1" autorestart=true startsecs=10 stderr_logfile=/var/log/cron.log diff --git a/web-server/http-server.js b/web-server/http-server.js index 73b597a46..8a28a7686 100644 --- a/web-server/http-server.js +++ b/web-server/http-server.js @@ -48,7 +48,7 @@ app } catch (e) { handleErrors(e); } - }).listen(3000, (err) => { + }).listen(port, (err) => { if (err) throw err; console.info(`> Server started on http://localhost:${port}`); }); diff --git a/web-server/scripts/build.sh b/web-server/scripts/build.sh index 5e1d3bcd4..1a4d53dfc 100755 --- a/web-server/scripts/build.sh +++ b/web-server/scripts/build.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash set -e DIR=$(dirname $0) diff --git a/web-server/scripts/server-init.sh b/web-server/scripts/server-init.sh index e205e5826..f21b2e86c 100755 --- a/web-server/scripts/server-init.sh +++ b/web-server/scripts/server-init.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash set -e DIR=$(dirname $0) diff --git a/web-server/scripts/setup-env.sh b/web-server/scripts/setup-env.sh index 79f6518a4..b6e89b50b 100755 --- a/web-server/scripts/setup-env.sh +++ b/web-server/scripts/setup-env.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash set -e DIR=$(dirname $0) diff --git a/web-server/scripts/utils.sh b/web-server/scripts/utils.sh index f7daf7836..53a076366 100755 --- a/web-server/scripts/utils.sh +++ b/web-server/scripts/utils.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash set -e function catch_force_exit() { diff --git a/web-server/scripts/zip.sh b/web-server/scripts/zip.sh index ea49dd6cb..f4ef7c2ff 100755 --- a/web-server/scripts/zip.sh +++ b/web-server/scripts/zip.sh @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash set -e DIR=$(dirname $0)