{"id":13583103,"url":"https://github.com/heckenmann/docker-swarm-dashboard","last_synced_at":"2025-04-06T18:31:53.359Z","repository":{"id":30061492,"uuid":"123803337","full_name":"heckenmann/docker-swarm-dashboard","owner":"heckenmann","description":"Dashboard for Docker Swarm Cluster","archived":false,"fork":false,"pushed_at":"2025-04-01T20:38:47.000Z","size":11267,"stargazers_count":41,"open_issues_count":2,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-01T21:34:33.269Z","etag":null,"topics":["dashboard","docker","docker-swarm","docker-swarm-cluster","docker-swarm-dashboard","logging","monitoring","monitoring-tool","monitoring-tools"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/heckenmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-04T15:45:17.000Z","updated_at":"2025-04-01T20:38:50.000Z","dependencies_parsed_at":"2023-11-18T08:27:45.370Z","dependency_job_id":"b585cfce-d33c-4c8d-a6aa-ec60257613b8","html_url":"https://github.com/heckenmann/docker-swarm-dashboard","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heckenmann%2Fdocker-swarm-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heckenmann%2Fdocker-swarm-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heckenmann%2Fdocker-swarm-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heckenmann%2Fdocker-swarm-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heckenmann","download_url":"https://codeload.github.com/heckenmann/docker-swarm-dashboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247531045,"owners_count":20953884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","docker","docker-swarm","docker-swarm-cluster","docker-swarm-dashboard","logging","monitoring","monitoring-tool","monitoring-tools"],"created_at":"2024-08-01T15:03:15.442Z","updated_at":"2025-04-06T18:31:52.260Z","avatar_url":"https://github.com/heckenmann.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Community Tools"],"sub_categories":["Cluster Management"],"readme":"![Docker](https://github.com/heckenmann/docker-swarm-dashboard/actions/workflows/docker-publish.yml/badge.svg?branch=master)\n![CodeQL](https://github.com/heckenmann/docker-swarm-dashboard/actions/workflows/codeql.yml/badge.svg?branch=master)\n![Cypress](https://github.com/heckenmann/docker-swarm-dashboard/actions/workflows/cypress.yml/badge.svg?branch=master)\n\n# docker-swarm-dashboard\nDashboard for Docker Swarm Cluster\n\nDocker-Image Size: \u003c 25 MB\n\n_Use a stable release in production, not the master-build!\nDon't expose this service to the world! The endpoints offer the configuration of your services._\n\nIf you like this project, please give a ⭐ on github.\nFeedback would be nice.\n\n- [Tools](#tools)\n- [Frameworks \u0026 Libraries](#frameworks--libraries)\n- [Screenshots](#screenshots)\n- [Getting started](#getting-started)\n- [Development](#development)\n\n![whales](screenshots/whales.jpg)\n\n\n## Tools\nSpecial thanks to JetBrains for supporting this project with \u003ca href=\"https://www.jetbrains.com/community/opensource/#support\" target=\"_blank\"\u003eOpen Source development licenses\u003c/a\u003e.\n\n\u003ca href=\"https://www.jetbrains.com/\" target=\"_blank\"\u003e\u003cimg src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_square.svg\"  height=\"80px\" alt=\"JetBrains Black Box Logo logo.\" /\u003e\u003c/a\u003e\n                \u003ca href=\"https://www.jetbrains.com/go/\" target=\"_blank\"\u003e\u003cimg src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/GoLand_icon.svg\" height=\"80px\" alt=\"GoLand logo.\" /\u003e\u003c/a\u003e\n                \u003ca href=\"https://www.jetbrains.com/webstorm/\" target=\"_blank\"\u003e\u003cimg src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/WebStorm_icon.svg\" height=\"80px\" alt=\"WebStorm logo.\" /\u003e\u003c/a\u003e\n\n\n## Frameworks \u0026 Libraries\n- [ApexCharts](https://apexcharts.com/)\n- [Bootstrap](https://getbootstrap.com/)\n- [Cypress](https://www.cypress.io/)\n- [Fontawesome](https://fontawesome.com/)\n- [Gorilla](https://www.gorillatoolkit.org/)\n- [Jotai](https://jotai.org/)\n- [React](https://reactjs.org/)\n\n\n## Screenshots\n\n![Horizontal Dashboard](screenshots/dashboard_h.jpeg)\n![Horizontal Dashboard Dark](screenshots/darkmode.jpeg)\n![Vertical Dashboard](screenshots/dashboard_v.jpeg)\n![Stacks](screenshots/stacks.jpeg)\n![Nodes](screenshots/nodes.jpeg)\n![Tasks](screenshots/tasks.jpeg)\n![Ports](screenshots/ports.jpeg)\n![Logs Form](screenshots/logs.jpeg)\n![Logs](screenshots/logs-f.jpeg)\n\n\n## Getting started\n### Tags\n|Tag|Description|Image|\n|---|---|---|\n|e.g. 1.4.1|Stable release|ghcr.io/heckenmann/docker-swarm-dashboard:1.4.1|\n|latest|Latest stable release|ghcr.io/heckenmann/docker-swarm-dashboard:latest|\n|master|Current unstable master-build (not well tested)|ghcr.io/heckenmann/docker-swarm-dashboard:master|\n\n### Configuration\nDocker Swarm Dashboard supports environment variables for configuration\n\n* `DSD_HTTP_PORT`: HTTP port within the container. Usually does not need to be changed. Default is 8080.\n* `DSD_HANDLE_LOGS`: Set to `false` to prevent fetching and displaying logs.\n* `DSD_DASHBOARD_LAYOUT`: Default dashboard layout. Either `row` (default) or `column`.\n* `DSD_HIDE_SERVICE_STATES`: Comma-separated list of states to not show in the main dashboard.\n* `LOCALE`: Timestamp format based on a [BCP 47](https://www.rfc-editor.org/bcp/bcp47.txt) language tag.\n* `TZ`: [IANA Time zone](https://www.iana.org/time-zones) to display timestamps in.\n* `DSD_VERSION_CHECK_ENABLED`: When set to `true`, the system will check for updates and notify in the UI if a new version is available. If set to `false`, the version check will be skipped. Default is `false`.\n* `DSD_WELCOME_MESSAGE`: If set, this message will be displayed to the user in a modal dialog when the web application is opened in the browser.\n\n### Pull Image from ghcr.io\n```\ndocker pull ghcr.io/heckenmann/docker-swarm-dashboard:master\n```\n\n### docker-compose.yml\n```\n---\nversion: '3.5'\n\nservices:\n  docker-swarm-dashboard:\n    image: ghcr.io/heckenmann/docker-swarm-dashboard:master\n    deploy:\n      replicas: 1\n      placement:\n        constraints:\n          - node.role == manager\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - \"/var/run/docker.sock:/var/run/docker.sock\"\n    environment:\n      DOCKER_API_VERSION: 1.35\n```\n\n### docker-compose.yml with traefik and basic auth\nThis configuration sets a password for access. It is importand to configure ssl in traefik for better security.\n\nIn this example you can login with \"**docker / docker**\" on port 8080.\n\nHave a look at https://doc.traefik.io/traefik/user-guides/docker-compose/acme-tls/\n```\n---\nversion: '3.5'\n\nservices:\n  docker-swarm-dashboard:\n    image: ghcr.io/heckenmann/docker-swarm-dashboard:master\n    deploy:\n      replicas: 1\n      placement:\n        constraints:\n          - node.role == manager\n      labels:\n        - \"traefik.enable=true\"\n        - \"traefik.http.routers.dsd.entrypoints=web\"\n        - \"traefik.http.routers.dsd.middlewares=basic-auth\"\n        - \"traefik.http.services.dsd.loadbalancer.server.port=8080\"\n        - \"traefik.http.routers.dsd.rule=PathPrefix(`/`)\"\n        # Login with docker / docker\n        - \"traefik.http.middlewares.basic-auth.basicauth.users=docker:$$2y$$10$$81nFbUw842iBd7MlngMR4.1VBI9j6Y.vTiamBAqtVNfs4qehzZB.e\"\n    volumes:\n      - \"/var/run/docker.sock:/var/run/docker.sock\"\n    environment:\n      DOCKER_API_VERSION: 1.35\n\n  traefik:\n    image: \"traefik:v2.9\"\n    deploy:\n      placement:\n        constraints:\n          - node.role == manager\n    command:\n      #- \"--log.level=debug\"\n      #- \"--api.insecure=true\"\n      - \"--providers.docker=true\"\n      - \"--providers.docker.swarmMode=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - \"--entrypoints.web.address=:8080\"\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - \"/var/run/docker.sock:/var/run/docker.sock:ro\"\n```\n\n\n### Deploy on docker-swarm\nFrom the directory with docker-compose.yml run:\n```\ndocker stack deploy --compose-file docker-compose.yml docker-swarm-dashboard\n```\n\n\n### logs-generator (for testing)\n```\ndocker service create --name logger chentex/random-logger:latest 50 200\n```\n\n## Development\n### Local Build\n```\ndocker build -t ghcr.io/heckenmann/docker-swarm-dashboard:local .\n```\n\n### Run api-mock-server\n```\n# from app-src\nyarn run start-api-mock\n```\n### Run UI\n```\n# from app-src\nyarn run start-dev-server\n```\nWhen you run the UI with the api-mock-server, you have to open the ui with \"base\"-param (API-URL):\nhttp://localhost:3000#base=\"http%3A%2F%2Flocalhost%3A3001%2F\"\n\n### Run UI-tests\n```\n# from app-src\nyarn run cy:run\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheckenmann%2Fdocker-swarm-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheckenmann%2Fdocker-swarm-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheckenmann%2Fdocker-swarm-dashboard/lists"}