From 8e4be9c9f47f72d8c8e5e453f1a93990f7dd1a76 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 17:14:14 +0200 Subject: [PATCH] move deps into extra script, docker for testing start script --- deployment/bare_metal/Dockerfile | 117 ++++++++++++++++++ deployment/bare_metal/install-missing-deps.sh | 40 ++++++ deployment/bare_metal/start.sh | 32 ++--- .../migration/2_5_1-2_5_2/README.md | 15 --- .../migration/2_5_1-2_5_2/upgradeNodeJs.sh | 20 --- 5 files changed, 164 insertions(+), 60 deletions(-) create mode 100644 deployment/bare_metal/Dockerfile create mode 100644 deployment/bare_metal/install-missing-deps.sh delete mode 100644 deployment/hetzner_cloud/migration/2_5_1-2_5_2/README.md delete mode 100644 deployment/hetzner_cloud/migration/2_5_1-2_5_2/upgradeNodeJs.sh diff --git a/deployment/bare_metal/Dockerfile b/deployment/bare_metal/Dockerfile new file mode 100644 index 000000000..58e85dbc7 --- /dev/null +++ b/deployment/bare_metal/Dockerfile @@ -0,0 +1,117 @@ +##### Base Image ########################################################################## +## This image is used to test start.sh ################################################### +########################################################################################### +FROM debian:12 as base + +ARG BRANCH_NAME=master + + +#RUN apt update && apt install -y \ + # python3-systemd \ + #git \ + #mariadb-server \ + #nginx \ + #curl \ + #build-essential \ + #gnupg \ + #logrotate \ + #automysqlbackup \ + #expect + +RUN apt update && apt install -y \ + bash \ + git \ + mariadb-server \ + nginx \ + gettext \ + curl + +##### Install Image ####################################################################### +## Simulate parts from install script to get a minimal configuration to test start script # +########################################################################################### +FROM base as install + +WORKDIR /app + +ARG BRANCH_NAME=master +ENV BRANCH_NAME=$BRANCH_NAME +# COPY . . +RUN git clone https://github.com/gradido/gradido.git --branch $BRANCH_NAME +WORKDIR /app/gradido + +# setup nginx +WORKDIR /app/gradido/deployment/bare_metal/nginx +RUN rm /etc/nginx/sites-enabled/default +RUN mkdir log +ENV NGINX_UPDATE_PAGE_ROOT=/app/gradido/deployment/bare_metal/nginx/update-page +ENV GRADIDO_LOG_PATH=/app/gradido/deployment/bare_metal/nginx/log +ENV COMMUNITY_HOST=_ +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < ./sites-available/gradido.conf.template > ./sites-available/gradido.conf +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < ./sites-available/update-page.conf.template > ./sites-available/update-page.conf +RUN mkdir ./sites-enabled +RUN ln -s /app/deployment/bare_metal/nginx/sites-available/update-page.conf /app/deployment/bare_metal/nginx/sites-enabled/default +RUN ln -s /app/deployment/bare_metal/nginx/sites-enabled/default /etc/nginx/sites-enabled +RUN ln -s /app/deployment/bare_metal/nginx/common /etc/nginx/ +RUN rmdir /etc/nginx/conf.d +RUN ln -s /app/deployment/bare_metal/nginx/conf.d /etc/nginx/ +RUN nginx -t + +SHELL ["/bin/bash", "--login", "-c"] +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash +RUN nvm install 16 && nvm use 16 && nvm alias default 16 + +# Add nvm to PATH for future RUN instructions +ENV NODE_VERSION=16 \ + PATH=$NVM_DIR/versions/node/v16/bin:$PATH + +# Install yarn +RUN npm i -g yarn + +# Install pm2 +RUN npm i -g pm2 && pm2 startup + +# create db user +ENV DB_USER=gradido +RUN DB_PASSWORD=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32) +ENV DB_PASSWORD=$DB_PASSWORD + +RUN +RUN service mariadb start && mysql < database/.env + +# Configure backend +RUN JWT_SECRET=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32; echo); +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < backend/.env.template > backend/.env + +# Configure frontend +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < frontend/.env.template > frontend/.env + +# Configure admin +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < admin/.env.template > admin/.env + +# Configure dht-node +RUN FEDERATION_DHT_SEED=$(< /dev/urandom tr -dc a-f0-9 | head -c 32; echo); +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < dht-node/.env.template > dht-node/.env + +# Configure federation +RUN envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < federation/.env.template > federation/.env + +##### Start Image ######################################################################### +## This image is used to test start.sh ################################################### +########################################################################################### +FROM install as start + +WORKDIR /app/gradido/deployment/bare_metal + +# mock sudo +RUN echo -e '#!/bin/bash\nshift 0\nexec "$@"' > /usr/local/bin/sudo && \ + chmod +x /usr/local/bin/sudo +SHELL ["/bin/bash", "--login", "-c"] +RUN ./start.sh $BRANCH_NAME diff --git a/deployment/bare_metal/install-missing-deps.sh b/deployment/bare_metal/install-missing-deps.sh new file mode 100644 index 000000000..f7d284e2d --- /dev/null +++ b/deployment/bare_metal/install-missing-deps.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Ensure required tools are installed + +# make sure correct node version is installed +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" +if ! command -v nvm &> /dev/null +then + echo "'nvm' is missing, will be installed now!" + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash +fi +install_nvm() { + nvm install + nvm use + nvm alias default + npm i -g yarn pm2 + pm2 startup +} +nvm use || install_nvm + +# check for some tools and install them, when missing +# bun https://bun.sh/install, faster packet-manager as yarn +if ! command -v bun &> /dev/null +then + if ! command -v unzip &> /dev/null + then + echo "'unzip' is missing, will be installed now!" + sudo apt-get install -y unzip + fi + echo "'bun' is missing, will be installed now!" + curl -fsSL https://bun.sh/install | BUN_INSTALL=/usr/local bash + export PATH="/root/.bun/bin:${PATH}" +fi +# turbo https://turborepo.com/docs/getting-started +if ! command -v turbo &> /dev/null +then + echo "'turbo' is missing, will be installed now!" + bun install --global turbo +fi diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index e396cfad9..b58b9c706 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -2,25 +2,7 @@ # stop if something fails set -euo pipefail -# check for some tools and install them, when missing -# bun https://bun.sh/install, faster packet-manager as yarn -if ! command -v bun &> /dev/null -then - if ! command -v unzip &> /dev/null - then - echo "'unzip' is missing, will be installed now!" - sudo apt-get install -y unzip - fi - echo "'bun' is missing, will be installed now!" - curl -fsSL https://bun.sh/install | BUN_INSTALL=/usr/local bash - export PATH="/root/.bun/bin:${PATH}" -fi -# turbo https://turborepo.com/docs/getting-started -if ! command -v turbo &> /dev/null -then - echo "'turbo' is missing, will be installed now!" - bun install --global turbo -fi +bash ./install-missing-deps.sh # check for parameter FAST_MODE=false @@ -144,22 +126,22 @@ sudo /etc/init.d/nginx restart # helper functions log_step() { local message="$1" - echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console + echo -e "\e[34m$message\e[0m" # > /dev/tty # blue in console echo "

$message

" >> "$UPDATE_HTML" # blue in html } log_error() { local message="$1" - echo -e "\e[31m$message\e[0m" > /dev/tty # red in console + echo -e "\e[31m$message\e[0m" # > /dev/tty # red in console echo "$message" >> "$UPDATE_HTML" # red in html } log_warn() { local message="$1" - echo -e "\e[33m$message\e[0m" > /dev/tty # orange in console + echo -e "\e[33m$message\e[0m" # > /dev/tty # orange in console echo "$message" >> "$UPDATE_HTML" # orange in html } log_success() { local message="$1" - echo -e "\e[32m$message\e[0m" > /dev/tty # green in console + echo -e "\e[32m$message\e[0m" # > /dev/tty # green in console echo "

$message

" >> "$UPDATE_HTML" # green in html } @@ -168,7 +150,7 @@ log_success() { onError() { local exit_code=$? log_error "Command failed!" - log_error " /\\_/\\ Line: $LINENO" + log_error " /\\_/\\ Line: $(caller 0)" log_error "( o.o ) Exit Code: $exit_code" log_error " > ^ < Offending command: '$BASH_COMMAND'" log_error "" @@ -181,7 +163,7 @@ log_step "Stop and delete all Gradido services" # check if pm2 has processes, maybe it was already cleared from a failed update # pm2 delete all if pm2 has no processes will trigger error and stop script # so let's check first -if [ "$(pm2 prettylist)" != "[]" ]; then +if [ "$(echo "$(pm2 prettylist)" | tail -n 1)" != "[]" ]; then pm2 delete all pm2 save else diff --git a/deployment/hetzner_cloud/migration/2_5_1-2_5_2/README.md b/deployment/hetzner_cloud/migration/2_5_1-2_5_2/README.md deleted file mode 100644 index 7534ce060..000000000 --- a/deployment/hetzner_cloud/migration/2_5_1-2_5_2/README.md +++ /dev/null @@ -1,15 +0,0 @@ -## Migrate from Gradido Version 2.5.1 to 2.5.2 -### What -We need to upgrade the used nodejs version in deployment. Until now for pm2, backend, dht-node, federation nodejs 16 was used, -but some newer npm libs don't work with this old nodejs version so we upgrade to nodejs 18.20.7 - -### What you can do now -You need to only run this [upgradeNodeJs.sh](upgradeNodeJs.sh) with `release-2_5_2-beta` as parameter -```bash -cd /home/gradido/gradido/deployment/hetzner_cloud/migration/2_5_1-2_5_2 -sudo ./upgradeNodeJs.sh `release-2_5_2-beta` -``` - -It will stop pm2, install new nodejs version + pm2 + yarn, remove nodejs 16. -Then it will call start.sh with first parameter of ./upgradeNodeJs.sh as his first parameter - diff --git a/deployment/hetzner_cloud/migration/2_5_1-2_5_2/upgradeNodeJs.sh b/deployment/hetzner_cloud/migration/2_5_1-2_5_2/upgradeNodeJs.sh deleted file mode 100644 index baef7550d..000000000 --- a/deployment/hetzner_cloud/migration/2_5_1-2_5_2/upgradeNodeJs.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# check for parameter -if [ -z "$1" ]; then - echo "Usage: Please provide a branch name as the first argument." - exit 1 -fi - -# stop all services -pm2 delete all -pm2 save - -# upgrade node js version -nvm install 18.20.7 -nvm use 18.20.7 -nvm alias default 18.20.7 -npm install -g pm2 yarn -nvm uninstall 16 - -# Start gradido -sudo -u gradido $SCRIPT_PATH/start.sh $1 \ No newline at end of file