From 82331e5bfe7ccb44cfe9b2d108fe0de95d5e6348 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 2 Nov 2023 20:54:48 +0100 Subject: [PATCH] docker --- README.md | 47 +++++++++++++++++++ build-all-dockers.sh | 17 +++++++ build-and-push.sh | 17 +++++++ build-docker.sh | 22 +++++++++ delete-docker.sh | 7 +++ docker-compose.yml | 95 +++++++++++++++++++++++++++++++++++++++ nginx/Dockerfile | 5 +++ nginx/nginx.conf | 33 ++++++++++++++ remote-docker-compose.yml | 89 ++++++++++++++++++++++++++++++++++++ 9 files changed, 332 insertions(+) create mode 100644 README.md create mode 100755 build-all-dockers.sh create mode 100755 build-and-push.sh create mode 100755 build-docker.sh create mode 100755 delete-docker.sh create mode 100644 docker-compose.yml create mode 100644 nginx/Dockerfile create mode 100644 nginx/nginx.conf create mode 100644 remote-docker-compose.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa48f2f --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# Publishing new version + +``` +./delete-docker.sh +``` + +``` +./build-docker.sh +``` + +``` +./build-and-push.sh +``` + +# On the client side - fetch latest images + +## remote-docker-compose.yml + +Is the docker-compose.yml file that is used to deploy the application on a remote server. + +### Remove the old images + +``` +docker image rm dockreg.ex.umbach.dev/jnx-admin-dashboard-server dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy dockreg.ex.umbach.dev/jnx-log-manager-server +``` + +### Pull the new images + +``` +docker compose up +``` + +## Script used last time + +delete.sh + +``` +docker compose down +docker image rm dockreg.ex.umbach.dev/jnx-admin-dashboard-server dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy dockreg.ex.umbach.dev/jnx-log-manager-server +docker volume rm tet2_admin_dashboard_server_data tet2_log_manager_data +``` + +build.sh + +``` +docker compose up +``` diff --git a/build-all-dockers.sh b/build-all-dockers.sh new file mode 100755 index 0000000..ade39b2 --- /dev/null +++ b/build-all-dockers.sh @@ -0,0 +1,17 @@ +# only allow to run this script as root +if [ "$EUID" -ne 0 ] + then echo "Please run as root" + exit +fi + +original_dir=$(pwd) + +### +# Robot-control-manager +### + +cd "../robot-control-manager/" + +./build-docker.sh + +cd "$original_dir" \ No newline at end of file diff --git a/build-and-push.sh b/build-and-push.sh new file mode 100755 index 0000000..ef3f26a --- /dev/null +++ b/build-and-push.sh @@ -0,0 +1,17 @@ +#docker compose down + +# rm images +docker image rm jnx-admin-dashboard-proxy +docker image rm jnx-admin-dashboard-server + +# build images +docker compose build jnx-admin-dashboard-server +docker compose build jnx-admin-dashboard-proxy + +# tag images +docker image tag jnx-admin-dashboard-server:latest dockreg.ex.umbach.dev/jnx-admin-dashboard-server:latest +docker image tag jnx-admin-dashboard-proxy:latest dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy:latest + +# push to self-hosted docker registry +docker push dockreg.ex.umbach.dev/jnx-admin-dashboard-server +docker push dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy \ No newline at end of file diff --git a/build-docker.sh b/build-docker.sh new file mode 100755 index 0000000..7e16ca1 --- /dev/null +++ b/build-docker.sh @@ -0,0 +1,22 @@ +ORANGE='\033[0;33m' # Orange +GREEN='\033[0;32m' # Green +NC='\033[0m' # No color (reseting) + +# build backend go build +echo -e "${ORANGE}Starting go build${NC}" +cd ./admin-dashboard-backend +go build main.go +cd .. +echo -e "${GREEN}Go build finished${NC}" + +# build static web build +echo -e "${ORANGE}Starting static web build${NC}" +cd ./admin-dashboard-web +npm run build +cd .. +echo -e "${GREEN}Static web build finished${NC}" + +# create docker +#echo -e "${ORANGE}Starting docker creation${NC}" +#docker compose up + diff --git a/delete-docker.sh b/delete-docker.sh new file mode 100755 index 0000000..6fd0479 --- /dev/null +++ b/delete-docker.sh @@ -0,0 +1,7 @@ +#docker compose down + +# rm images +docker image rm jnx-admin-dashboard-server dockreg.ex.umbach.dev/jnx-admin-dashboard-server jnx-admin-dashboard-proxy dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy + +#docker volume rm admin-dashboard_server_data +#docker volume rm admin-dashboard_server_data \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4f85b38 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,95 @@ +version: "3" + +services: + jnx-admin-dashboard-server: + container_name: jnx-admin-dashboard-server + image: jnx-admin-dashboard-server:latest + build: + context: . + dockerfile: admin-dashboard-backend/Dockerfile + depends_on: + - mariadb + restart: always + volumes: + - admin_dashboard_server_data:/app + # CHANGE HERE - ONLY THE PATH ON YOUR SYSTEM: path_on_your_system:path_on_container + - ./admin-dashboard-data:/admin-dashboard-data + networks: + - jnx-admin-dashboard-network + environment: + - DOCKER=true + - DEBUG=true + - COLORIZED_OUTPUT=true + - HOST=0.0.0.0 + - PORT=8080 + - LOG_MANAGER_SERVER_URL=http://localhost:3000 + - FOLDER_GROUPTASKS_GROUPS=/admin-dashboard-data/groupTasks/groups/ + - FOLDER_GROUPTASKS_RUNNINGTASKS=/admin-dashboard-data/groupTasks/runningTasks/ + - FOLDER_PUBLIC_STATIC=/admin-dashboard-data/public/ + - LOG_LANGUAGE_GROUPTASKS=./grouptasks_lang_log_messages.json + - LOG_LANGUAGE_SYSTEM=./system_lang_log_messages.json + - MARIADB_HOSTNAME=mariadb + - MARIADB_PORT=3306 + - MARIADB_USERNAME=admindashboard + - MARIADB_PASSWORD=QHXNcxuRRyAdxCxVCmPkEuCsPfCdfLz2 + - MARIADB_DATABASE_NAME=jnxadmindashboard + - INVEX_API_BASE=https://XXXXXX # CHANGE HERE + - INVEX_API_TOKEN=XXXXXXXXXXX # CHANGE HERE + + mariadb: + container_name: jnx-admin-dashboard-db + image: mariadb:latest + restart: always + networks: + - jnx-admin-dashboard-network + environment: + MYSQL_ROOT_PASSWORD: xvRxvq24XbaFKCiuTbfYmkh4UYdSXbcd + MYSQL_DATABASE: jnxadmindashboard + MYSQL_USER: admindashboard + MYSQL_PASSWORD: QHXNcxuRRyAdxCxVCmPkEuCsPfCdfLz2 + volumes: + - db_data:/var/lib/mysql + + jnx-admin-dashboard-proxy: + image: jnx-admin-dashboard-proxy:latest + restart: always + build: + context: . + dockerfile: nginx/Dockerfile + ports: + # CHANGE HOST/PORT IF NEEDED + #- "127.0.0.1:80:80" + - "80:80" + networks: + - jnx-admin-dashboard-network + depends_on: + - jnx-admin-dashboard-server + - jnx-log-manager-server + + jnx-log-manager-server: + container_name: jnx-log-manager-server + image: jnx-log-manager-server:latest + restart: always + volumes: + - log_manager_data:/app + # CHANGE HERE - ONLY THE PATH ON YOUR SYSTEM: path_on_your_system:path_on_container + - ./log-manager-data:/log-manager-data + networks: + - jnx-admin-dashboard-network + environment: + - DOCKER=true + - DEBUG=true + - COLORIZED_OUTPUT=true + - HOST=0.0.0.0 + - PORT=3000 + - SSE_SERVER_ENABLED=true + - LOG_FOLDER=/log-manager-data/logs/ + - DAYS_TO_KEEP_LOGS=30 + +volumes: + db_data: + admin_dashboard_server_data: + log_manager_data: + +networks: + jnx-admin-dashboard-network: diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 0000000..f422347 --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:latest + +COPY ./admin-dashboard-web/build /usr/share/nginx/html + +COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..675ea4f --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,33 @@ +# nginx/nginx.conf +server { + listen 80; + + location /api/ { # api server + client_max_body_size 0; + proxy_http_version 1.0; + proxy_pass http://jnx-admin-dashboard-server:8080/; + } + + location /ws { # websocket server + proxy_read_timeout 10800s; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_pass http://jnx-admin-dashboard-server:8080/ws/; + proxy_http_version 1.1; + } + + location /lm/ { # log manager server + client_max_body_size 0; + proxy_http_version 1.0; + proxy_set_header Connection ""; # needed for sse + proxy_pass http://jnx-log-manager-server:3000/; + } + + location / { # frontend + root /usr/share/nginx/html; + index index.html; + + try_files $uri /index.html; + } +} diff --git a/remote-docker-compose.yml b/remote-docker-compose.yml new file mode 100644 index 0000000..dd45465 --- /dev/null +++ b/remote-docker-compose.yml @@ -0,0 +1,89 @@ +version: "3" + +services: + jnx-admin-dashboard-server: + image: dockreg.ex.umbach.dev/jnx-admin-dashboard-server:latest + container_name: jnx-admin-dashboard-server + depends_on: + - mariadb + restart: always + volumes: + - admin_dashboard_server_data:/app + # CHANGE HERE - ONLY THE PATH ON YOUR SYSTEM: path_on_your_system:path_on_container + - ./admin-dashboard-data:/admin-dashboard-data + networks: + - jnx-admin-dashboard-network + environment: + - DOCKER=true + - DEBUG=false + - COLORIZED_OUTPUT=true + - HOST=0.0.0.0 # DO NOT CHANGE THIS + - PORT=8080 # DO NOT CHANGE THIS + - LOG_MANAGER_SERVER_URL=http://jnx-log-manager-server:3000 + - FOLDER_GROUPTASKS_GROUPS=/admin-dashboard-data/groupTasks/groups/ + - FOLDER_GROUPTASKS_RUNNINGTASKS=/admin-dashboard-data/groupTasks/runningTasks/ + - FOLDER_PUBLIC_STATIC=/admin-dashboard-data/public/ + - LOG_LANGUAGE_GROUPTASKS=./grouptasks_lang_log_messages.json + - LOG_LANGUAGE_SYSTEM=./system_lang_log_messages.json + - MARIADB_HOSTNAME=mariadb + - MARIADB_PORT=3306 + - MARIADB_USERNAME=admindashboard + - MARIADB_PASSWORD=QHXNcxuRRyAdxCxVCmPkEuCsPfCdfLz2 + - MARIADB_DATABASE_NAME=jnxadmindashboard + - INVEX_API_BASE=https://XXXXXX # CHANGE HERE + - INVEX_API_TOKEN=XXXXXXXXXXX # CHANGE HERE + + mariadb: + container_name: jnx-admin-dashboard-db + image: mariadb:latest + restart: always + networks: + - jnx-admin-dashboard-network + environment: + MYSQL_ROOT_PASSWORD: xvRxvq24XbaFKCiuTbfYmkh4UYdSXbcd + MYSQL_DATABASE: jnxadmindashboard + MYSQL_USER: admindashboard + MYSQL_PASSWORD: QHXNcxuRRyAdxCxVCmPkEuCsPfCdfLz2 + volumes: + - db_data:/var/lib/mysql + + jnx-admin-dashboard-proxy: + image: dockreg.ex.umbach.dev/jnx-admin-dashboard-proxy:latest + restart: always + ports: + # CHANGE HOST/PORT IF NEEDED + #- "127.0.0.1:80:80" + - "80:80" + networks: + - jnx-admin-dashboard-network + depends_on: + - jnx-admin-dashboard-server + - jnx-log-manager-server + + jnx-log-manager-server: + container_name: jnx-log-manager-server + image: dockreg.ex.umbach.dev/jnx-log-manager-server:latest + restart: always + volumes: + - log_manager_data:/app + # CHANGE HERE - ONLY THE PATH ON YOUR SYSTEM: path_on_your_system:path_on_container + - ./log-manager-data:/log-manager-data + networks: + - jnx-admin-dashboard-network + environment: + - DOCKER=true + - DEBUG=false + - COLORIZED_OUTPUT=true + - HOST=0.0.0.0 + - PORT=3000 + - SSE_SERVER_ENABLED=true + - LOG_FOLDER=/log-manager-data/ + - DAYS_TO_KEEP_LOGS=30 + +volumes: + db_data: + admin_dashboard_server_data: + log_manager_data: + +networks: + jnx-admin-dashboard-network: