diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cc32f3d1..34f78ea8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -17,7 +17,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout repository uses: actions/checkout@v5 diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index 2fcd3d55..7c087e03 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -356,7 +356,7 @@ jobs: build-macos: runs-on: macos-latest - if: github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all' + if: (github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all') && github.event.inputs.artifact_destination != 'submit' needs: [] permissions: contents: write @@ -584,7 +584,7 @@ jobs: submit-to-chocolatey: runs-on: windows-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'windows' || github.event.inputs.build_type == '') permissions: contents: read @@ -689,7 +689,7 @@ jobs: submit-to-flatpak: runs-on: ubuntu-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'linux' || github.event.inputs.build_type == '') needs: [] permissions: contents: read @@ -776,7 +776,7 @@ jobs: submit-to-homebrew: runs-on: macos-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'macos') needs: [] permissions: contents: read @@ -801,11 +801,20 @@ jobs: URL="https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$DMG_NAME" mkdir -p release_asset - PATH="release_asset/$DMG_NAME" + DOWNLOAD_PATH="release_asset/$DMG_NAME" echo "Downloading DMG from $URL" - curl -L -o "$PATH" "$URL" - CHECKSUM=$(shasum -a 256 "$PATH" | awk '{print $1}') + if command -v curl &> /dev/null; then + curl -L -o "$DOWNLOAD_PATH" "$URL" + elif command -v wget &> /dev/null; then + wget -O "$DOWNLOAD_PATH" "$URL" + else + echo "Neither curl nor wget is available, installing curl" + brew install curl + curl -L -o "$DOWNLOAD_PATH" "$URL" + fi + + CHECKSUM=$(shasum -a 256 "$DOWNLOAD_PATH" | awk '{print $1}') echo "dmg_name=$DMG_NAME" >> $GITHUB_OUTPUT echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT @@ -872,7 +881,7 @@ jobs: submit-to-testflight: runs-on: macos-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'macos') needs: [] permissions: contents: write @@ -977,7 +986,7 @@ jobs: - name: Deploy to App Store Connect (TestFlight) if: steps.check_asc_creds.outputs.has_credentials == 'true' run: | - PKG_FILE=$(find artifact-mas -name "*.pkg" -type f | head -n 1) + PKG_FILE=$(find release -name "termix_macos_universal_mas.pkg" -type f | head -n 1) if [ -z "$PKG_FILE" ]; then echo "PKG file not found, exiting." exit 1 diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml new file mode 100644 index 00000000..5ecdd866 --- /dev/null +++ b/.github/workflows/openapi.yml @@ -0,0 +1,32 @@ +name: Generate OpenAPI Specification + +on: + workflow_dispatch: + +jobs: + generate-openapi: + name: Generate OpenAPI JSON + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Generate OpenAPI specification + run: npm run generate:openapi + + - name: Upload OpenAPI artifact + uses: actions/upload-artifact@v4 + with: + name: openapi-spec + path: openapi.json + retention-days: 90 diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml deleted file mode 100644 index 7c9db568..00000000 --- a/.github/workflows/translate.yml +++ /dev/null @@ -1,437 +0,0 @@ -name: Auto Translate - -on: - workflow_dispatch: - -permissions: - contents: write - pull-requests: write - -jobs: - translate-zh: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t zh --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-zh - path: src/locales/zh.json - continue-on-error: true - - translate-ru: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ru --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ru - path: src/locales/ru.json - continue-on-error: true - - translate-pt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pt --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-pt - path: src/locales/pt.json - continue-on-error: true - - translate-fr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t fr --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-fr - path: src/locales/fr.json - continue-on-error: true - - translate-es: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t es --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-es - path: src/locales/es.json - continue-on-error: true - - translate-de: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t de --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-de - path: src/locales/de.json - continue-on-error: true - - translate-hi: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t hi --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-hi - path: src/locales/hi.json - continue-on-error: true - - translate-bn: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t bn --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-bn - path: src/locales/bn.json - continue-on-error: true - - translate-ja: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ja --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ja - path: src/locales/ja.json - continue-on-error: true - - translate-vi: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t vi --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-vi - path: src/locales/vi.json - continue-on-error: true - - translate-tr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t tr --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-tr - path: src/locales/tr.json - continue-on-error: true - - translate-ko: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ko --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ko - path: src/locales/ko.json - continue-on-error: true - - translate-it: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t it --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-it - path: src/locales/it.json - continue-on-error: true - - translate-he: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t he --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-he - path: src/locales/he.json - continue-on-error: true - - translate-ar: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ar --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ar - path: src/locales/ar.json - continue-on-error: true - - translate-pl: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pl --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-pl - path: src/locales/pl.json - continue-on-error: true - - translate-nl: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nl --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-nl - path: src/locales/nl.json - continue-on-error: true - - translate-sv: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t sv --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-sv - path: src/locales/sv.json - continue-on-error: true - - translate-id: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t id --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-id - path: src/locales/id.json - continue-on-error: true - - translate-th: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t th --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-th - path: src/locales/th.json - continue-on-error: true - - translate-uk: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t uk --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-uk - path: src/locales/uk.json - continue-on-error: true - - translate-cs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t cs --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-cs - path: src/locales/cs.json - continue-on-error: true - - translate-ro: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ro --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ro - path: src/locales/ro.json - continue-on-error: true - - translate-el: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t el --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-el - path: src/locales/el.json - continue-on-error: true - - translate-nb: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nb --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-nb - path: src/locales/nb.json - continue-on-error: true - - create-pr: - needs: - [ - translate-zh, - translate-ru, - translate-pt, - translate-fr, - translate-es, - translate-de, - translate-hi, - translate-bn, - translate-ja, - translate-vi, - translate-tr, - translate-ko, - translate-it, - translate-he, - translate-ar, - translate-pl, - translate-nl, - translate-sv, - translate-id, - translate-th, - translate-uk, - translate-cs, - translate-ro, - translate-el, - translate-nb, - ] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.GHCR_TOKEN }} - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: translations-temp - - - name: Move translations to src/locales - run: | - cp translations-temp/translations-zh/zh.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ru/ru.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-pt/pt.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-fr/fr.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-es/es.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-de/de.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-hi/hi.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-bn/bn.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ja/ja.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-vi/vi.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-tr/tr.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ko/ko.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-it/it.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-he/he.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ar/ar.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-pl/pl.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-nl/nl.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-sv/sv.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-id/id.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-th/th.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-uk/uk.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-cs/cs.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ro/ro.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-el/el.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-nb/nb.json src/locales/ 2>/dev/null || true - rm -rf translations-temp - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.GHCR_TOKEN }} - commit-message: "chore: auto-translate to multiple languages" - branch: translations-update - delete-branch: true - title: "chore: Update translations for all languages" diff --git a/README.md b/README.md index 9ddf04d6..0ee5ccc8 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,6 @@ Achieved on September 1st, 2025

-#### Top Technologies - -[![React Badge](https://img.shields.io/badge/-React-61DBFB?style=flat-square&labelColor=black&logo=react&logoColor=61DBFB)](#) -[![TypeScript Badge](https://img.shields.io/badge/-TypeScript-3178C6?style=flat-square&labelColor=black&logo=typescript&logoColor=3178C6)](#) -[![Node.js Badge](https://img.shields.io/badge/-Node.js-3C873A?style=flat-square&labelColor=black&logo=node.js&logoColor=3C873A)](#) -[![Vite Badge](https://img.shields.io/badge/-Vite-646CFF?style=flat-square&labelColor=black&logo=vite&logoColor=646CFF)](#) -[![Tailwind CSS Badge](https://img.shields.io/badge/-TailwindCSS-38B2AC?style=flat-square&labelColor=black&logo=tailwindcss&logoColor=38B2AC)](#) -[![Docker Badge](https://img.shields.io/badge/-Docker-2496ED?style=flat-square&labelColor=black&logo=docker&logoColor=2496ED)](#) -[![SQLite Badge](https://img.shields.io/badge/-SQLite-003B57?style=flat-square&labelColor=black&logo=sqlite&logoColor=003B57)](#) -[![Radix UI Badge](https://img.shields.io/badge/-Radix%20UI-161618?style=flat-square&labelColor=black&logo=radixui&logoColor=161618)](#) -

@@ -85,6 +74,7 @@ Supported Devices: - Chocolatey Package Manager - Linux (x64/ia32) - Portable + - AUR - AppImage - Deb - Flatpak @@ -120,6 +110,18 @@ volumes: driver: local ``` +# Sponsors + +

+ + DigitalOcean + +          + + Crowdin + +

+ # Support If you need help or want to request a feature with Termix, visit the [Issues](https://github.com/Termix-SSH/Support/issues) page, log in, and press `New Issue`. diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..51095a4b --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,3 @@ +files: + - source: /src/locales/en.json + translation: /src/locales/translated/%two_letters_code%.json diff --git a/docker/Dockerfile b/docker/Dockerfile index f29cfb3b..29313736 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,7 +19,7 @@ COPY . . RUN find public/fonts -name "*.ttf" ! -name "*Regular.ttf" ! -name "*Bold.ttf" ! -name "*Italic.ttf" -delete RUN npm cache clean --force && \ - npm run build + NODE_OPTIONS="--max-old-space-size=2048" npm run build # Stage 3: Build backend FROM deps AS backend-builder @@ -74,6 +74,9 @@ VOLUME ["/app/data"] EXPOSE ${PORT} 30001 30002 30003 30004 30005 30006 +HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ + CMD node -e "require('http').get('http://localhost:30001/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))" + COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh diff --git a/docker/nginx-https.conf b/docker/nginx-https.conf index 7788848b..45455b81 100644 --- a/docker/nginx-https.conf +++ b/docker/nginx-https.conf @@ -1,3 +1,5 @@ +worker_processes 1; +master_process off; pid /app/nginx/nginx.pid; error_log /app/nginx/logs/error.log warn; @@ -286,6 +288,15 @@ http { proxy_buffering off; } + location ~ ^/network-topology(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location /health { proxy_pass http://127.0.0.1:30001; proxy_http_version 1.1; diff --git a/docker/nginx.conf b/docker/nginx.conf index ac6b7112..9e884581 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,3 +1,5 @@ +worker_processes 1; +master_process off; pid /app/nginx/nginx.pid; error_log /app/nginx/logs/error.log warn; @@ -275,6 +277,15 @@ http { proxy_buffering off; } + location ~ ^/network-topology(/.*)?$ { + proxy_pass http://127.0.0.1:30001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location /health { proxy_pass http://127.0.0.1:30001; proxy_http_version 1.1; diff --git a/index.html b/index.html index b376f7cd..83e38e8e 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,13 @@ + + + + + + + Termix