From 2b00c234344554f0e81fc13c8a01df16bb61370a Mon Sep 17 00:00:00 2001 From: 4TT1L4 <2914096+4TT1L4@users.noreply.github.com> Date: Fri, 15 Mar 2024 10:01:53 +0100 Subject: [PATCH 1/3] Dockerize#24 --- .dockerignore | 3 +++ Dockerfile | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..905fe14 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +Dockerfile +.* +dist-newstyle diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..996c2cb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,67 @@ +FROM haskell:9.2.8-slim as builder + +ENV LANG C.UTF-8 + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + autoconf \ + automake \ + build-essential \ + chrony \ + libncursesw5 \ + liblzma-dev \ + libpq-dev \ + libssl-dev \ + libsystemd-dev \ + libtool \ + pkg-config \ + procps \ + snapd \ + wget \ + tmux && \ + rm -rf /var/lib/apt/lists/* + +# Update and install wget and ca-certificates to download yq +RUN wget https://github.com/mikefarah/yq/releases/download/v4.6.1/yq_linux_amd64 -O /usr/local/bin/yq && \ + chmod +x /usr/local/bin/yq && \ + rm -rf /var/lib/apt/lists/* + +# Libsodium: +RUN git clone https://github.com/input-output-hk/libsodium && \ + cd libsodium && \ + git checkout dbb48cc && \ + ./autogen.sh && \ + ./configure && \ + make && \ + make install + +# Libsecp256k1: +RUN git clone https://github.com/bitcoin-core/secp256k1 && \ + cd secp256k1 && \ + git checkout ac83be33d0956faf6b7f61a60ab524ef7d6a473a && \ + ./autogen.sh && \ + ./configure --prefix=/usr --enable-module-schnorrsig --enable-experimental && \ + make && \ + make install + +ENV LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" +ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" + +# ==================================[ BUILD ]======================================== +WORKDIR /DEX + +# COPY **/*.cabal ./ +# RUN cabal build --only-dependencies -j4 geniusyield-orderbot + +COPY . . + +RUN cabal update +RUN cabal build all + +# =============================[ DEX CONTRACTS API ]================================ +LABEL org.opencontainers.image.source="https://github.com/geniusyield/dex-contracts-api" + +# Default values: +# TODO: Add + +ENTRYPOINT ["/bin/bash", "./start.sh"] From 7d70285baa110c5a3646d17d2241e21932d19126 Mon Sep 17 00:00:00 2001 From: 4TT1L4 <2914096+4TT1L4@users.noreply.github.com> Date: Thu, 21 Mar 2024 11:43:14 +0100 Subject: [PATCH 2/3] Dockerize#24 --- Dockerfile | 4 +--- docker-compose.yml | 27 +++++++++++++++++++++++++ start.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 docker-compose.yml create mode 100644 start.sh diff --git a/Dockerfile b/Dockerfile index 996c2cb..14bdaab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,11 +50,9 @@ ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" # ==================================[ BUILD ]======================================== WORKDIR /DEX -# COPY **/*.cabal ./ -# RUN cabal build --only-dependencies -j4 geniusyield-orderbot +# TODO: first build only dependencies COPY . . - RUN cabal update RUN cabal build all diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c7ea4e6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3.8' +services: + backend: + image: sha256:4e7f93853238619bc97207db356730e5d6b1f50b80f270d91e623b5867d26943 + container_name: backend + secrets: + - CORE_MAESTRO_API_KEY + - MAESTRO_API_KEY + - SERVER_API_KEY + environment: + SERVER_CONFIG: | + coreProvider: + maestroToken: <> + turboSubmit: false + networkId: "mainnet" # supported: mainner ot preprod + logging: + - type: {tag: stderr} + severity: "Debug" # Debug, Info, Warning or Error + verbosity: V2 # Available: `V0`, `V1`, `V2`, `V3` and `V4` (See katip docs for details) + port: 8082 + maestroToken: <> + serverApiKey: <> + restart: always +secrets: + CORE_MAESTRO_API_KEY: { file: ./secrets/core_maestro_api_key } + MAESTRO_API_KEY: { file: ./secrets/maesto_api_key } + SERVER_API_KEY: { file: ./secrets/server_api_key } diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..d6e757f --- /dev/null +++ b/start.sh @@ -0,0 +1,49 @@ +#!/bin/bash +echo "======[geniusyield-server]======" +echo "Startup checks...." +# Check if SERVER_CONFIG environment variable is set +if [ -z "$SERVER_CONFIG" ]; then + echo "Error: SERVER_CONFIG environment variable is not set." >&2 + exit 1 # Exit code 1 for unset variable +fi +if [ -z "$CORE_MAESTRO_API_KEY" ]; then + echo "Error: CORE_MAESTRO_API_KEY environment variable is not set." >&2 + exit 1 # Exit code 1 for unset variable +fi +if [ -z "$MAESTRO_API_KEY" ]; then + echo "Error: MAESTRO_API_KEY environment variable is not set." >&2 + exit 1 # Exit code 1 for unset variable +fi +if [ -z "$SERVER_API_KEY" ]; then + echo "Error: SERVER_API_KEY environment variable is not set." >&2 + exit 1 # Exit code 1 for unset variable +fi + +# Check if yq is installed +if ! command -v yq &> /dev/null; then + echo "Error: yq is not installed. Please install yq to validate YAML content." >&2 + exit 2 # Exit code 2 for yq not installed +fi + +# Attempt to parse SERVER_CONFIG as YAML +echo "$SERVER_CONFIG" | yq eval . - > /dev/null 2>&1 +if [ $? -ne 0 ]; then + echo "Error: SERVER_CONFIG does not contain a valid YAML document." >&2 + exit 3 # Exit code 3 for invalid YAML content +fi + +# If the script reaches this point, SERVER_CONFIG is both set and valid +echo "SERVER_CONFIG is set and contains a valid YAML document." +echo "====================================" +echo "Replace placeholders...." +export SERVER_CONFIG=$(echo "$SERVER_CONFIG" | sed "s%<>%$CORE_MAESTRO_API_KEY%g") +export SERVER_CONFIG=$(echo "$SERVER_CONFIG" | sed "s%<>%$MAESTRO_API_KEY%g") +export SERVER_CONFIG=$(echo "$SERVER_CONFIG" | sed "s%<>%$SERVER_API_KEY%g") +echo "[OK] Done. Replaced placeholders." +echo "====================================" +# TODO: remove +echo $SERVER_CONFIG +echo "====================================" +echo "Starting geniusyield-server..." +set -x +cabal run geniusyield-server -- serve From 3a5285d9b07fd96f95c971485969810daee563c3 Mon Sep 17 00:00:00 2001 From: 4TT1L4 <2914096+4TT1L4@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:19:40 +0100 Subject: [PATCH 3/3] Dockerize#24 --- .dockerignore | 6 ++++++ Dockerfile | 7 ++----- Makefile | 5 +++++ docker-compose.yml | 25 +++++++++++-------------- start.sh | 11 ++++------- 5 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 Makefile diff --git a/.dockerignore b/.dockerignore index 905fe14..6ddd5e9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,9 @@ Dockerfile .* +secrets +secrets/* dist-newstyle +.git +.github +.dockerignore +.gitignore diff --git a/Dockerfile b/Dockerfile index 14bdaab..1edf43b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,12 +54,9 @@ WORKDIR /DEX COPY . . RUN cabal update -RUN cabal build all +RUN cabal build all --enable-tests --enable-benchmarks -# =============================[ DEX CONTRACTS API ]================================ +# =============================[ SERVER ]================================ LABEL org.opencontainers.image.source="https://github.com/geniusyield/dex-contracts-api" -# Default values: -# TODO: Add - ENTRYPOINT ["/bin/bash", "./start.sh"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1ac9367 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +.PHONY: build + +build: + docker build -t ghcr.io/geniusyield/server:latest . + diff --git a/docker-compose.yml b/docker-compose.yml index c7ea4e6..aca9d6a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,24 @@ version: '3.8' services: - backend: - image: sha256:4e7f93853238619bc97207db356730e5d6b1f50b80f270d91e623b5867d26943 - container_name: backend - secrets: - - CORE_MAESTRO_API_KEY - - MAESTRO_API_KEY - - SERVER_API_KEY + server: + image: ghcr.io/geniusyield/server:latest + container_name: server + env_file: + - path: ./secrets/default.env environment: + CORE_MAESTRO_API_KEY: ${CORE_MAESTRO_API_KEY} + MAESTRO_API_KEY: ${MAESTRO_API_KEY} + SERVER_API_KEY: ${SERVER_API_KEY} SERVER_CONFIG: | coreProvider: maestroToken: <> turboSubmit: false - networkId: "mainnet" # supported: mainner ot preprod + networkId: "mainnet" # supported: mainnet ot preprod logging: - type: {tag: stderr} - severity: "Debug" # Debug, Info, Warning or Error - verbosity: V2 # Available: `V0`, `V1`, `V2`, `V3` and `V4` (See katip docs for details) + severity: "Debug" # Options: Debug, Info, Warning or Error + verbosity: V2 # Options: `V0`, `V1`, `V2`, `V3` and `V4` (See katip docs for details) port: 8082 maestroToken: <> serverApiKey: <> restart: always -secrets: - CORE_MAESTRO_API_KEY: { file: ./secrets/core_maestro_api_key } - MAESTRO_API_KEY: { file: ./secrets/maesto_api_key } - SERVER_API_KEY: { file: ./secrets/server_api_key } diff --git a/start.sh b/start.sh index d6e757f..758b20c 100644 --- a/start.sh +++ b/start.sh @@ -2,19 +2,19 @@ echo "======[geniusyield-server]======" echo "Startup checks...." # Check if SERVER_CONFIG environment variable is set -if [ -z "$SERVER_CONFIG" ]; then +if [ -z "./SERVER_CONFIG" ]; then echo "Error: SERVER_CONFIG environment variable is not set." >&2 exit 1 # Exit code 1 for unset variable fi -if [ -z "$CORE_MAESTRO_API_KEY" ]; then +if [ -z "./CORE_MAESTRO_API_KEY" ]; then echo "Error: CORE_MAESTRO_API_KEY environment variable is not set." >&2 exit 1 # Exit code 1 for unset variable fi -if [ -z "$MAESTRO_API_KEY" ]; then +if [ -z "./MAESTRO_API_KEY" ]; then echo "Error: MAESTRO_API_KEY environment variable is not set." >&2 exit 1 # Exit code 1 for unset variable fi -if [ -z "$SERVER_API_KEY" ]; then +if [ -z "./SERVER_API_KEY" ]; then echo "Error: SERVER_API_KEY environment variable is not set." >&2 exit 1 # Exit code 1 for unset variable fi @@ -41,9 +41,6 @@ export SERVER_CONFIG=$(echo "$SERVER_CONFIG" | sed "s%<>%$MAEST export SERVER_CONFIG=$(echo "$SERVER_CONFIG" | sed "s%<>%$SERVER_API_KEY%g") echo "[OK] Done. Replaced placeholders." echo "====================================" -# TODO: remove -echo $SERVER_CONFIG -echo "====================================" echo "Starting geniusyield-server..." set -x cabal run geniusyield-server -- serve