feature/setup-workflow-pipeline: add deploy step and script #4
@ -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
|
||||
|
||||
@ -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."
|
||||
11
.gitea/workflows/scripts/deploy-backend.sh
Normal file
11
.gitea/workflows/scripts/deploy-backend.sh
Normal 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"
|
||||
202
docker/docker-compose-dev.yml
Normal file
202
docker/docker-compose-dev.yml
Normal 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)
|
||||
Reference in New Issue
Block a user