From 927cca9db5e20c88ce8cf15f0f68f1cb0d566473 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Sun, 1 Feb 2026 19:03:13 -0500 Subject: [PATCH] Refactor Docker Compose configurations and add Unraid support - Update docker-compose files for dev, local, and prod environments - Improve service definitions and environment variable handling - Add Unraid-specific Docker Compose and environment files - Remove deprecated .env.example and dockercomposeforserver.yml - Streamline configuration management across environments --- .env.example | 40 -------------- docker-compose.dev.yml | 84 +++++++++++++++--------------- docker-compose.local.yml | 104 +++++++++++++++++++++---------------- docker-compose.prod.yml | 103 ++++++++++++++++++++---------------- dockercomposeforserver.yml | 54 ------------------- unraid-docker-compose.yml | 71 +++++++++++++++++++++++++ unraid-env | 51 ++++++++++++++++++ 7 files changed, 281 insertions(+), 226 deletions(-) delete mode 100644 .env.example delete mode 100644 dockercomposeforserver.yml create mode 100644 unraid-docker-compose.yml create mode 100644 unraid-env diff --git a/.env.example b/.env.example deleted file mode 100644 index d11a331..0000000 --- a/.env.example +++ /dev/null @@ -1,40 +0,0 @@ -# EAMCO Environment Variables -# Copy this file to .env and fill in actual values -# NEVER commit .env to version control - -# =========================================== -# Database Credentials (All Services) -# =========================================== -POSTGRES_USERNAME=postgres -POSTGRES_PW=your_password_here -POSTGRES_SERVER=192.168.1.204 -POSTGRES_PORT=5432 -POSTGRES_DBNAME=auburnoil - -# =========================================== -# Flask Secret Key (eamco_office_api) -# =========================================== -# Generate with: python -c "import secrets; print(secrets.token_hex(32))" -SECRET_KEY=your_secret_key_here - -# =========================================== -# Authorize.net API Credentials -# =========================================== -# Production credentials (used by LOCAL and PRODUCTION modes) -AUTHORIZE_API_LOGIN_ID=your_api_login_id_here -AUTHORIZE_TRANSACTION_KEY=your_transaction_key_here - -# Development/Sandbox credentials (used by DEVELOPMENT mode) -AUTHORIZE_API_LOGIN_ID_DEV=your_sandbox_api_login_id_here -AUTHORIZE_TRANSACTION_KEY_DEV=your_sandbox_transaction_key_here - -# =========================================== -# VoIP.ms Credentials (eamco_voipms) -# =========================================== -VOIPMS_API_USERNAME=your_voipms_username -VOIPMS_API_PASSWORD=your_voipms_password -TARGET_DID=your_did_number -TARGET_SIP_ACCOUNT=your_sip_account -TARGET_CELLPHONE_1=your_cellphone_1 -TARGET_CELLPHONE_2=your_cellphone_2 -VOIPMS_API_URL=https://voip.ms/api/v1/rest.php diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index e183810..81d6844 100755 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,81 +1,83 @@ - - name: eamco services: backend_office_dev: restart: always build: - context: ../eamco_office_api - dockerfile: Dockerfile.dev + context: ../eamco_office_api + dockerfile: Dockerfile.dev volumes: - - ../eamco_office_api:/app + - ../eamco_office_api:/app ports: - '9510:4056' command: 'python3 app.py --host 0.0.0.0' - frontend_office_dev: - restart: on-failure - build: - context: ../eamco_office_frontend - dockerfile: Dockerfile.dev - volumes: - - ../eamco_office_frontend:/app - ports: - - '9511:5173' - command: 'vite dev --host --port 5173' - + restart: on-failure + build: + context: ../eamco_office_frontend + dockerfile: Dockerfile.dev + volumes: + - ../eamco_office_frontend:/app + ports: + - '9511:5173' + command: 'vite dev --host --port 5173' money_dev: restart: on-failure build: - context: ../eamco_money_api - dockerfile: Dockerfile.dev + context: ../eamco_money_api + dockerfile: Dockerfile.dev volumes: - - ../eamco_money_api:/app + - ../eamco_money_api:/app ports: - '9513:8000' command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' - auto_dev: restart: on-failure build: - context: ../eamco_auto_api - dockerfile: Dockerfile.dev + context: ../eamco_auto_api + dockerfile: Dockerfile.dev volumes: - - ../eamco_auto_api:/app + - ../eamco_auto_api:/app ports: - '9514:8000' command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' - + service_dev: + restart: on-failure + build: + context: ../eamco_service + dockerfile: Dockerfile.dev + volumes: + - ../eamco_service:/app + ports: + - '9515:8000' + command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' playground_dev: restart: on-failure build: - context: ../eamco_playground - dockerfile: Dockerfile.dev + context: ../eamco_playground + dockerfile: Dockerfile.dev volumes: - - ../eamco_playground:/app + - ../eamco_playground:/app ports: - '9520:8000' command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' - - - - authorize_dev: restart: on-failure build: - context: ../eamco_authorize - dockerfile: Dockerfile.dev + context: ../eamco_authorize + dockerfile: Dockerfile.dev volumes: - - ../eamco_authorize:/app + - ../eamco_authorize:/app ports: - '9516:8000' + env_file: + - .env environment: - MODE=DEVELOPMENT - AUTHORIZE_API_LOGIN_ID_DEV=${AUTHORIZE_API_LOGIN_ID_DEV} @@ -86,26 +88,24 @@ services: - POSTGRES_DBNAME=eamco command: 'uvicorn app.main:app --reload --host 0.0.0.0 --port 8000' - voipms_dev: restart: on-failure build: - context: ../eamco_voipms - dockerfile: Dockerfile.dev + context: ../eamco_voipms + dockerfile: Dockerfile.dev volumes: - - ../eamco_voipms:/app + - ../eamco_voipms:/app ports: - '9517:8000' command: 'uvicorn app.main:app --reload --host 0.0.0.0 --port 8000' - address_checker_dev: restart: on-failure build: - context: ../eamco_address_checker - dockerfile: Dockerfile.dev + context: ../eamco_address_checker + dockerfile: Dockerfile.dev volumes: - - ../eamco_address_checker:/app + - ../eamco_address_checker:/app environment: - MODE=dev ports: diff --git a/docker-compose.local.yml b/docker-compose.local.yml index b111b4c..7b45bc9 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -1,20 +1,19 @@ - name: eamco services: frontend_office_local: - restart: on-failure - build: - context: ../eamco_office_frontend - dockerfile: Dockerfile.local - ports: - - '9611:80' + restart: on-failure + build: + context: ../eamco_office_frontend + dockerfile: Dockerfile.local + ports: + - '9611:80' backend_office_local: restart: always build: - context: ../eamco_office_api - dockerfile: Dockerfile.local + context: ../eamco_office_api + dockerfile: Dockerfile.local ports: - '9610:80' environment: @@ -26,48 +25,61 @@ services: - SECRET_KEY=${SECRET_KEY} money_service_local: - restart: on-failure - build: - context: ../eamco_money_api - dockerfile: Dockerfile.local - environment: - - MODE=LOCAL - - POSTGRES_USERNAME=${POSTGRES_USERNAME} - - POSTGRES_PW=${POSTGRES_PW} - - POSTGRES_SERVER=${POSTGRES_SERVER} - - POSTGRES_DBNAME=${POSTGRES_DBNAME} - ports: - - '9613:8000' - command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' + restart: on-failure + build: + context: ../eamco_money_api + dockerfile: Dockerfile.local + environment: + - MODE=LOCAL + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + ports: + - '9613:8000' + command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' auto_local: - restart: on-failure - build: - context: ../eamco_auto_api - dockerfile: Dockerfile.local - ports: - - '9614:8000' - environment: - - MODE=LOCAL - - POSTGRES_USERNAME=${POSTGRES_USERNAME} - - POSTGRES_PW=${POSTGRES_PW} - - POSTGRES_SERVER=${POSTGRES_SERVER} - - POSTGRES_DBNAME=${POSTGRES_DBNAME} - command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' + restart: on-failure + build: + context: ../eamco_auto_api + dockerfile: Dockerfile.local + ports: + - '9614:8000' + environment: + - MODE=LOCAL + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' + + service_local: + restart: on-failure + build: + context: ../eamco_service + dockerfile: Dockerfile.local + ports: + - '9615:8000' + environment: + - MODE=LOCAL + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + command: 'uvicorn main:app --reload --host 0.0.0.0 --port 8000' authorize_local: restart: on-failure build: - context: ../eamco_authorize - dockerfile: Dockerfile.local + context: ../eamco_authorize + dockerfile: Dockerfile.local volumes: - - ../eamco_authorize:/app + - ../eamco_authorize:/app ports: - '9616:8000' environment: - MODE=LOCAL - - AUTHORIZE_API_LOGIN_ID=${AUTHORIZE_API_LOGIN_ID} - - AUTHORIZE_TRANSACTION_KEY=${AUTHORIZE_TRANSACTION_KEY} - POSTGRES_USERNAME=${POSTGRES_USERNAME} - POSTGRES_PW=${POSTGRES_PW} - POSTGRES_SERVER=${POSTGRES_SERVER} @@ -77,10 +89,10 @@ services: voipms_local: restart: on-failure build: - context: ../eamco_voipms - dockerfile: Dockerfile.local + context: ../eamco_voipms + dockerfile: Dockerfile.local volumes: - - ../eamco_voipms:/app + - ../eamco_voipms:/app ports: - '9617:8000' environment: @@ -100,10 +112,10 @@ services: address_checker_local: restart: on-failure build: - context: ../eamco_address_checker - dockerfile: Dockerfile.local + context: ../eamco_address_checker + dockerfile: Dockerfile.local volumes: - - ../eamco_address_checker:/app + - ../eamco_address_checker:/app environment: - MODE=LOCAL ports: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 4c5046c..ad73bd8 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,19 +1,17 @@ - name: eamco services: frontend_office_prod: - restart: on-failure - build: - context: ../eamco_office_frontend - dockerfile: Dockerfile.prod - + restart: on-failure + build: + context: ../eamco_office_frontend + dockerfile: Dockerfile.prod backend_office_prod: restart: always build: - context: ../eamco_office_api - dockerfile: Dockerfile.prod + context: ../eamco_office_api + dockerfile: Dockerfile.prod ports: - '9510:80' environment: @@ -25,48 +23,61 @@ services: - SECRET_KEY=${SECRET_KEY} money_service_prod: - restart: on-failure - build: - context: ../eamco_money_api - dockerfile: Dockerfile.prod - ports: - - '9513:8000' - environment: - - MODE=PRODUCTION - - POSTGRES_USERNAME=${POSTGRES_USERNAME} - - POSTGRES_PW=${POSTGRES_PW} - - POSTGRES_SERVER=${POSTGRES_SERVER} - - POSTGRES_DBNAME=${POSTGRES_DBNAME} - command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + restart: on-failure + build: + context: ../eamco_money_api + dockerfile: Dockerfile.prod + ports: + - '9513:8000' + environment: + - MODE=PRODUCTION + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' auto_prod: - restart: on-failure - build: - context: ../eamco_auto_api - dockerfile: Dockerfile.prod - ports: - - '9514:8000' - environment: - - MODE=PRODUCTION - - POSTGRES_USERNAME=${POSTGRES_USERNAME} - - POSTGRES_PW=${POSTGRES_PW} - - POSTGRES_SERVER=${POSTGRES_SERVER} - - POSTGRES_DBNAME=${POSTGRES_DBNAME} - command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + restart: on-failure + build: + context: ../eamco_auto_api + dockerfile: Dockerfile.prod + ports: + - '9514:8000' + environment: + - MODE=PRODUCTION + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + + service_prod: + restart: on-failure + build: + context: ../eamco_service + dockerfile: Dockerfile.prod + ports: + - '9515:8000' + environment: + - MODE=PRODUCTION + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' authorize_prod: restart: on-failure build: - context: ../eamco_authorize - dockerfile: Dockerfile.prod + context: ../eamco_authorize + dockerfile: Dockerfile.prod volumes: - - ../eamco_authorize:/app + - ../eamco_authorize:/app ports: - '9516:8000' environment: - MODE=PRODUCTION - - AUTHORIZE_API_LOGIN_ID=${AUTHORIZE_API_LOGIN_ID} - - AUTHORIZE_TRANSACTION_KEY=${AUTHORIZE_TRANSACTION_KEY} - POSTGRES_USERNAME=${POSTGRES_USERNAME} - POSTGRES_PW=${POSTGRES_PW} - POSTGRES_SERVER=${POSTGRES_SERVER} @@ -76,10 +87,10 @@ services: voipms_prod: restart: on-failure build: - context: ../eamco_voipms - dockerfile: Dockerfile.prod + context: ../eamco_voipms + dockerfile: Dockerfile.prod volumes: - - ../eamco_voipms:/app + - ../eamco_voipms:/app ports: - '9517:8000' environment: @@ -99,9 +110,13 @@ services: address_checker_prod: restart: on-failure build: - context: ../eamco_address_checker - dockerfile: Dockerfile.prod + context: ../eamco_address_checker + dockerfile: Dockerfile.prod environment: - MODE=PRODUCTION + - POSTGRES_USERNAME=${POSTGRES_USERNAME} + - POSTGRES_PW=${POSTGRES_PW} + - POSTGRES_SERVER=${POSTGRES_SERVER} + - POSTGRES_DBNAME=${POSTGRES_DBNAME} ports: - '9518:8000' diff --git a/dockercomposeforserver.yml b/dockercomposeforserver.yml deleted file mode 100644 index 4d7749e..0000000 --- a/dockercomposeforserver.yml +++ /dev/null @@ -1,54 +0,0 @@ -# 'version' attribute is removed as it's obsolete. -# 'name' attribute is also managed by Compose Manager, so we can remove it. - -services: - - frontend_office_prod: - restart: on-failure - image: anekdotin/eamco-frontend_office_prod:latest - ports: - - '9511:80' - - backend_office_prod: - restart: on-failure - image: anekdotin/eamco-backend_office_prod:latest - ports: - - '9510:80' - environment: - - MODE=PRODUCTION - - auto_service_prod: - restart: on-failure - image: anekdotin/eamco-auto_prod:latest - ports: - - '9514:8000' - environment: - - MODE=PRODUCTION - command: 'uvicorn main:app --host 0.0.0.0 --port 8000' - - money_service_prod: - restart: on-failure - image: anekdotin/eamco-money_service_prod:latest - ports: - - '9513:8000' - command: 'uvicorn main:app --host 0.0.0.0 --port 8000' - - - authorize_prod: - restart: on-failure - image: anekdotin/eamco-authorize_prod:latest - environment: - - MODE=PRODUCTION - ports: - - '9516:8000' - command: 'uvicorn app.main:app --reload --host 0.0.0.0 --port 8000' - - - voipms_prod: - restart: on-failure - image: anekdotin/eamco-voipms_prod:latest - environment: - - MODE=PRODUCTION - ports: - - '9517:8000' - command: 'uvicorn app.main:app --reload --host 0.0.0.0 --port 8000' \ No newline at end of file diff --git a/unraid-docker-compose.yml b/unraid-docker-compose.yml new file mode 100644 index 0000000..afe4dc0 --- /dev/null +++ b/unraid-docker-compose.yml @@ -0,0 +1,71 @@ +version: '3.8' +services: + + frontend_office_prod: + restart: on-failure + image: anekdotin/eamco-frontend_office_prod:latest + ports: + - '9511:80' + env_file: + - unraid-env + + backend_office_prod: + restart: always + image: anekdotin/eamco-backend_office_prod:latest + ports: + - '9510:80' + env_file: + - unraid-env + + money_service_prod: + restart: on-failure + image: anekdotin/eamco-money_service_prod:latest + ports: + - '9513:8000' + env_file: + - unraid-env + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + + auto_prod: + restart: on-failure + image: anekdotin/eamco-auto_prod:latest + ports: + - '9514:8000' + env_file: + - unraid-env + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + + service_prod: + restart: on-failure + image: anekdotin/eamco-service_prod:latest + ports: + - '9515:8000' + env_file: + - unraid-env + command: 'uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2' + + authorize_prod: + restart: on-failure + image: anekdotin/eamco-authorize_prod:latest + ports: + - '9516:8000' + env_file: + - unraid-env + command: 'uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 2' + + voipms_prod: + restart: on-failure + image: anekdotin/eamco-voipms_prod:latest + ports: + - '9517:8000' + env_file: + - unraid-env + command: 'uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 2' + + address_checker_prod: + restart: on-failure + image: anekdotin/eamco-address_checker_prod:latest + ports: + - '9518:8000' + env_file: + - unraid-env diff --git a/unraid-env b/unraid-env new file mode 100644 index 0000000..5c4bfd8 --- /dev/null +++ b/unraid-env @@ -0,0 +1,51 @@ +# Unraid Environment Configuration +# =========================================== +# General +# =========================================== +MODE="PRODUCTION" +PYTHONUNBUFFERED=1 +PYTHONFAULTHANDLER=1 + +# =========================================== +# URLs +# =========================================== +# Pointing to the backend office API +VITE_BASE_URL="http://192.168.1.204:9510" +VITE_MONEY_URL="http://192.168.1.204:9513" +VITE_AUTO_URL="http://192.168.1.204:9514" +VITE_SERVICE_URL="http://192.168.1.204:9515" +VITE_AUTHORIZE_URL="http://192.168.1.204:9516" +VITE_ADDRESS_CHECKER_URL="http://192.168.1.204:9518" + +# =========================================== +# Database Credentials +# =========================================== +# POSTGRES_SERVER is set to your Unraid IP +POSTGRES_USERNAME=postgres +POSTGRES_PW=password +POSTGRES_SERVER=192.168.1.204 +POSTGRES_DBNAME=auburnoil + +# =========================================== +# Authorize.net +# =========================================== +# Production credentials found in eamco_deploy/.env +AUTHORIZE_API_LOGIN_ID=4d2Mn6H23R +AUTHORIZE_TRANSACTION_KEY=7B94d8xfTQXv37WS + +# =========================================== +# VoIP.ms +# =========================================== +# Credentials found in eamco_voipms/.env +VOIPMS_API_USERNAME=eddwinn@gmail.com +VOIPMS_API_PASSWORD=!Gofionago123catdog +TARGET_DID=5084268800 +TARGET_SIP_ACCOUNT=407323_auburnoil@washington2.voip.ms +TARGET_CELLPHONE_1=7743342638 +TARGET_CELLPHONE_2=9143306100 + +# =========================================== +# Flask Secret Key +# =========================================== +# Generated for this deployment +SECRET_KEY=174ac9a094b957fdb8081c334439f92523c1b4887b59c63d92e4b6c33354445f