feature/setup-workflow-pipeline: add deploy step and script #4

Merged
chimeudeonwop merged 8 commits from feature/setup-workflow-pipeline into main 2025-11-07 09:23:28 +00:00
4 changed files with 228 additions and 73 deletions

View File

@ -84,5 +84,19 @@ jobs:
run: |
docker images -a
docker system prune -f
docker images
echo "Cleanup done."
- name: Prepare deploy script
run: |
mkdir -p .gitea/scripts
echo "echo Deploying..." > .gitea/scripts/deploy-backend.sh
chmod +x .gitea/scripts/deploy-backend.sh
- name: Deploy to server via deploy script
run: |
ls -a
ls .gitea/scripts/
chmod +x .gitea/scripts/deploy-backend.sh
#.gitea/scripts/deploy-backend.sh ${{ gitea.actor }} ${{ vars.REGISTRY_URL }} my-app-backend v1.0.0
.gitea/scripts/deploy-backend.sh

View File

@ -135,75 +135,3 @@ jobs:
scp -o StrictHostKeyChecking=no -r frontend/.next root@$SERVER_IP:$WEB_ROOT/
echo "Frontend .next build successfully deployed to $SERVER_IP:$WEB_ROOT/.next"
backend-jobs:
name: Set up Java for Backend Tests and Build
if: ${{ github.ref == 'refs/heads/main' }} # skip
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Java 21 + Maven
run: |
echo "Detecting package manager..."
if command -v apt-get >/dev/null 2>&1; then
PM=apt
elif command -v apk >/dev/null 2>&1; then
PM=apk
elif command -v yum >/dev/null 2>&1; then
PM=yum
else
echo "No known package manager found. Will install JDK manually."
PM=none
fi
echo "Package manager detected: $PM"
if [ "$PM" = "apt" ]; then
apt-get update -y
apt-get install -y openjdk-21-jdk maven wget tar
JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
elif [ "$PM" = "apk" ]; then
apk update
apk add openjdk21 maven wget tar
JAVA_HOME=/usr/lib/jvm/java-21-openjdk
elif [ "$PM" = "yum" ]; then
yum install -y java-21-openjdk-devel maven wget tar
JAVA_HOME=/usr/lib/jvm/java-21-openjdk
else
# Fallback: manual download
JDK_URL="https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz"
mkdir -p /opt/jdk
wget -q -O /tmp/jdk.tar.gz $JDK_URL
tar -xzf /tmp/jdk.tar.gz -C /opt/jdk --strip-components=1
JAVA_HOME=/opt/jdk
fi
# Export JAVA_HOME and update PATH for subsequent steps
echo "JAVA_HOME=$JAVA_HOME" >> $GITEA_ENV
echo "$JAVA_HOME/bin" >> $GITEA_PATH
export JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
# Verify Java and Maven installation
java -version
mvn -version
- name: Verify Java setup
run: |
java -version
- name: Verify Java setup
run: |
ls -l $JAVA_HOME/bin/java
file $JAVA_HOME/bin/java || true
java -version
# Run backend tests and build
- name: Test & build backend
working-directory: .
run: |
mvn clean test -Dspring.profiles.active=test
echo "Backend test and build workflow successfully completed."

View File

@ -0,0 +1,11 @@
#! /bin/bash
set -e # Exit immediately if a command exits with a non-zero status
docker compose -f docker-compose-dev.yml down --remove-orphans --volumes
docker system prune -f
docker compose -f docker-compose-dev.yml up -d
echo "Started all containers successfully"

View File

@ -0,0 +1,202 @@
networks:
hps-proxy-network:
driver: bridge
external: false
volumes:
auth_api_data:
acc_api_data:
lab_api_data:
dash_api_data:
audit_api_data:
services:
keycloak_api:
image: quay.io/keycloak/keycloak:26.2.5
container_name: keycloak
ports:
- "127.0.0.1:8080:8080"
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_DB: mariadb
KC_DB_URL_HOST: dev-keycloak.healthprosuite.com #host.docker.internal
KC_DB_URL_PORT: 3306
KC_DB_URL_DATABASE: keycloak
KC_DB_USERNAME: keycloakdevuser
KC_DB_PASSWORD: keycloakdevuser
KC_HEALTH_ENABLED: true
KC_METRICS_ENABLED: true
KC_HTTP_ENABLED: true
KC_HOSTNAME: https://dev-keycloak.healthprosuite.com #host.docker.internal
KC_HOSTNAME_STRICT: false
KC_HOSTNAME_STRICT_HTTPS: true #Only for local dev
KC_PROXY: edge
command: start-dev
#command: start --optimized #production mode
rabbitmq:
image: rabbitmq:management
container_name: rabbitmq
hostname: "${RABBITMQ_HOST}"
restart: always
ports:
- "127.0.0.1:5672:5672" # RabbitMQ communication port
- "127.0.0.1:15672:15672" # RabbitMQ Management UI
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: securepassword
RABBITMQ_NODENAME: rabbit@localhost
RABBITMQ_PORT: 5672
RABBITMQ_VHOST: /
networks:
- hps-proxy-network
volumes:
- ../rabbitmq_data:/var/lib/rabbitmq
auth_api:
#container_name: auth_backend
image: healthprosuite/services:auth-backend-1.0.0
ports:
- "127.0.0.1:5021:5021"
restart: always
env_file: .env
environment:
SPRING_PROFILES_ACTIVE: "${SPRING_PROFILES_ACTIVE}"
SPRING_DATASOURCE_URL: "${SPRING_DATASOURCE_URL_AUTH}"
SPRING_DATASOURCE_USERNAME: "${SPRING_DATASOURCE_USERNAME_AUTH}"
SPRING_DATASOURCE_PASSWORD: "${SPRING_DATASOURCE_PASSWORD_AUTH}"
SPRING_DATASOURCE_DRIVERCLASSNAME: "${SPRING_DATASOURCE_DRIVERCLASSNAME}"
AUTHSERVICE_JWT_SECRET: "${AUTHSERVICE_JWT_SECRET}"
SPRING_RABBITMQ_HOST: "${SPRING_RABBITMQ_HOST}"
SPRING_RABBITMQ_USERNAME: "${SPRING_RABBITMQ_USERNAME}"
SPRING_RABBITMQ_PASSWORD: "${SPRING_RABBITMQ_PASSWORD}"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_ID: oic-dashboard-oauth2-client-credentials
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_SECRET: VrWiz6aQoyPWwzcdBoNj4CR26ZJqPS4m
AUTHSERVICE_KEYCLOAK_HOST: https://dev-keycloak.healthprosuite.com #http://host.docker.internal:8080
volumes:
- auth_api_data:/app
- ~/development/healthprosuite/hospitals:/hospitals/logo
networks:
- hps-proxy-network
depends_on:
- rabbitmq
- keycloak_api
acc_api:
container_name: acc_backend
image: healthprosuite/services:acc-backend-${APP_VERSION}
ports:
- "127.0.0.1:5022:5022"
restart: always
env_file: .env
environment:
SPRING_PROFILES_ACTIVE: "${SPRING_PROFILES_ACTIVE}"
SPRING_DATASOURCE_URL: "${SPRING_DATASOURCE_URL_ACC}"
SPRING_DATASOURCE_USERNAME: "${SPRING_DATASOURCE_USERNAME_ACC}"
SPRING_DATASOURCE_PASSWORD: "${SPRING_DATASOURCE_PASSWORD_ACC}"
SPRING_DATASOURCE_DRIVERCLASSNAME: "${SPRING_DATASOURCE_DRIVERCLASSNAME}"
SPRING_RABBITMQ_HOST: "${SPRING_RABBITMQ_HOST}"
SPRING_RABBITMQ_USERNAME: "${SPRING_RABBITMQ_USERNAME}"
SPRING_RABBITMQ_PASSWORD: "${SPRING_RABBITMQ_PASSWORD}"
ACCOUNTING_SERVICE_JWT_SECRET: "${AUTHSERVICE_JWT_SECRET}"
volumes:
- acc_api_data:/app
- ~/hospitals:/hospitals
networks:
- hps-proxy-network
depends_on:
- rabbitmq
- auth_api
lab_api:
container_name: lab_backend
image: healthprosuite/services:lab-backend-${APP_VERSION}
ports:
- "127.0.0.1:5023:5023"
restart: always
env_file: .env
environment:
SPRING_PROFILES_ACTIVE: "${SPRING_PROFILES_ACTIVE}"
SPRING_DATASOURCE_URL: "${SPRING_DATASOURCE_URL_LAB}"
SPRING_DATASOURCE_USERNAME: "${SPRING_DATASOURCE_USERNAME_LAB}"
SPRING_DATASOURCE_PASSWORD: "${SPRING_DATASOURCE_PASSWORD_LAB}"
SPRING_DATASOURCE_DRIVERCLASSNAME: "${SPRING_DATASOURCE_DRIVERCLASSNAME}"
SPRING_RABBITMQ_HOST: "${SPRING_RABBITMQ_HOST}"
SPRING_RABBITMQ_USERNAME: "${SPRING_RABBITMQ_USERNAME}"
SPRING_RABBITMQ_PASSWORD: "${SPRING_RABBITMQ_PASSWORD}"
LAB_SERVICE_JWT_SECRET: "${AUTHSERVICE_JWT_SECRET}"
volumes:
- lab_api_data:/app
- ~/development/healthprosuite/laboratory:/laboratory
networks:
- hps-proxy-network
depends_on:
- rabbitmq
- auth_api
- acc_api
audit_api:
container_name: audit_backend
image: healthprosuite/services:audit-backend-${APP_VERSION}
ports:
- "127.0.0.1:5025:5025"
restart: always
env_file: .env
environment:
SPRING_PROFILES_ACTIVE: "${SPRING_PROFILES_ACTIVE}"
SPRING_DATASOURCE_URL: "${SPRING_DATASOURCE_URL_AUDIT}"
SPRING_DATASOURCE_USERNAME: "${SPRING_DATASOURCE_USERNAME_AUDIT}"
SPRING_DATASOURCE_PASSWORD: "${SPRING_DATASOURCE_PASSWORD_AUDIT}"
SPRING_RABBITMQ_HOST: "${SPRING_RABBITMQ_HOST}"
AUDIT_SERVICE_JWT_SECRET: "${AUTHSERVICE_JWT_SECRET}"
volumes:
- audit_api_data:/app
networks:
- hps-proxy-network
depends_on:
- rabbitmq
- auth_api
- lab_api
- acc_api
dash_api:
container_name: dash_backend
image: healthprosuite/services:dash-backend-${APP_VERSION}
#profiles:
#- skipme
ports:
- "127.0.0.1:2020:2020"
restart: always
env_file: .env
environment:
SPRING_PROFILES_ACTIVE: "${SPRING_PROFILES_ACTIVE}"
SPRING_DATASOURCE_URL: "${SPRING_DATASOURCE_URL_DASH}"
SPRING_DATASOURCE_USERNAME: "${SPRING_DATASOURCE_USERNAME_DASH}"
SPRING_DATASOURCE_PASSWORD: "${SPRING_DATASOURCE_PASSWORD_DASH}"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_ID: oic-dashboard-oauth2-client-credentials
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENT_SECRET: VrWiz6aQoyPWwzcdBoNj4CR26ZJqPS4m
SPRING_SECURITY_OAUTH2_RESOURCE_SERVER_JWT_JWT_SET_URI: https://dev-keycloak.healthprosuite.com
SPRING_KEYCLOAK_HOST: https://dev-keycloak.healthprosuite.com #http://127.0.0.1:8080 #http://host.docker.internal:8080
APPLICATION_WEB_CLIENT_HOST: https://dev-auth-service.healthprosuite.com/auth/v1 #http://host.docker.internal:5021/auth/v1
APPLICATION_KEYCLOAK_SERVER_URL: https://dev-keycloak.healthprosuite.com #http://127.0.0.1:8080 #http://host.docker.internal:8080
APPLICATION_KEYCLOAK_REALM: Dashboard-HPS-Realm
volumes:
- dash_api_data:/app
networks:
- hps-proxy-network
depends_on:
- auth_api
- acc_api
- keycloak_api
icd-api:
container_name: icd-api
image: whoicd/icd-api
ports:
- "0.0.0.0:8000:80"
environment:
- acceptLicense=true # Required parameter to agree with license
- saveAnalytics=${SAVE_ANALYTICS:-true} # Optional: set to true to send analytics to WHO
- include=${INCLUDE:-2024-01_en} # Optional: set the language or release version (e.g., 2024-01_en, 2024-01_es for Spanish)