{"id":16537674,"url":"https://github.com/alcounit/selenosis-deploy","last_synced_at":"2026-03-06T07:08:17.294Z","repository":{"id":48921679,"uuid":"309396241","full_name":"alcounit/selenosis-deploy","owner":"alcounit","description":"selenosis kubernetes deployment","archived":false,"fork":false,"pushed_at":"2026-03-05T04:00:46.000Z","size":1774,"stargazers_count":12,"open_issues_count":0,"forks_count":17,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-05T04:58:15.373Z","etag":null,"topics":["automated-testing","automation","deployment","docker","k8s","kubernetes","selenium","selenium-grid","selenium-server","webdriver"],"latest_commit_sha":null,"homepage":"","language":"Go Template","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alcounit.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-02T14:32:52.000Z","updated_at":"2026-03-05T03:59:51.000Z","dependencies_parsed_at":"2026-02-05T00:04:48.411Z","dependency_job_id":null,"html_url":"https://github.com/alcounit/selenosis-deploy","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/alcounit/selenosis-deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alcounit%2Fselenosis-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alcounit%2Fselenosis-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alcounit%2Fselenosis-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alcounit%2Fselenosis-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alcounit","download_url":"https://codeload.github.com/alcounit/selenosis-deploy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alcounit%2Fselenosis-deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30164963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T04:43:31.446Z","status":"ssl_error","status_checked_at":"2026-03-06T04:40:30.133Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["automated-testing","automation","deployment","docker","k8s","kubernetes","selenium","selenium-grid","selenium-server","webdriver"],"created_at":"2024-10-11T18:43:09.319Z","updated_at":"2026-03-06T07:08:17.277Z","avatar_url":"https://github.com/alcounit.png","language":"Go Template","funding_links":[],"categories":[],"sub_categories":[],"readme":"# selenosis-deploy Helm chart\n\n## Architecture\n\n![diagram](https://github.com/user-attachments/assets/c483699a-cf94-47a4-a2cf-448f21e39bf3)\n\n\n## Summary\n\nThis chart deploys the full Selenosis stack:\n- [selenosis](selenosis) — Selenium hub/proxy for creating sessions and routing traffic.\n- [browser-controller](https://github.com/alcounit/browser-controller) — Kubernetes controller that reconciles `Browser` and `BrowserConfig` CRDs into Pods.\n- [browser-service](https://github.com/alcounit/browser-service) — REST + event stream API for managing `Browser` resources.\n- [browser-ui](https://github.com/alcounit/browser-ui) — UI + VNC WebSocket proxy backed by browser-service.\n\nCRDs for `Browser` and `BrowserConfig` are managed as Helm template resources (`templates/crds/`) and applied on every `helm install` and `helm upgrade`. Installation can be disabled with `--set crds.enabled=false` if you manage CRDs outside of Helm.\nEach service is configurable via Helm values that map to the environment variables described in the individual project READMEs.\n\n## Installation\n\n### From Helm Repository\n\nAdd the Selenosis Helm repository:\n\n```sh\nhelm repo add selenosis https://alcounit.github.io/selenosis-deploy/\nhelm repo update\n```\n\nInstall the chart:\n\n```sh\nhelm install selenosis selenosis/selenosis-deploy -n selenosis --create-namespace\n```\n\n### From Git Repository\n\nClone and install directly:\n\n```sh\ngit clone https://github.com/alcounit/selenosis-deploy.git\ncd selenosis-deploy\nhelm upgrade --install selenosis . -n selenosis --create-namespace --wait\nhelm status selenosis -n selenosis\n```\n\n## CRD Management\n\nCRDs are part of the chart templates and are controlled by the `crds` values block:\n\n```yaml\ncrds:\n  enabled: true  # set to false to skip CRD installation\n  keep: true     # adds helm.sh/resource-policy: keep — CRDs are not deleted on helm uninstall\n```\n\n**Install without CRDs** (when CRDs are already applied or managed externally):\n\n```sh\nhelm install selenosis selenosis/selenosis-deploy -n selenosis --create-namespace --set crds.enabled=false\n```\n\n**Upgrade without touching CRDs:**\n\n```sh\nhelm upgrade selenosis selenosis/selenosis-deploy -n selenosis --set crds.enabled=false\n```\n\n\u003e Unlike the legacy `crds/` directory approach, CRDs in templates are updated by `helm upgrade` when the schema changes. If you are upgrading from a previous chart version that used `crds/`, follow the [migration guide](https://github.com/alcounit/selenosis-deploy/releases).\n\n## BrowserConfig examples\n\nReady-to-use `BrowserConfig` manifests are in `examples/`. Apply any of them after deploying the chart:\n\n```sh\nkubectl apply -n selenosis -f ./examples/\u003cfilename\u003e.yaml\n```\n\n### Selenoid (twilio/selenoid)\n\nImages from the Twilio-maintained Selenoid image family. VNC is built into the image and enabled via the `ENABLE_VNC=true` env var. Minimal two-container setup: browser + seleniferous sidecar.\n\n- [browserconfig-selenoid-twilio-chrome-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-selenoid-twilio-chrome-example.yaml)\n- [browserconfig-selenoid-twilio-firefox-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-selenoid-twilio-firefox-example.yaml)\n\n```sh\nhelm upgrade selenosis . -n selenosis --set browserUI.vncPassword=\"selenoid\"\n```\n\n### Selenium Standalone (selenium/standalone)\n\nOfficial Selenium project standalone images with a built-in VNC server. Password is configured via `SE_VNC_PASSWORD`. Minimal two-container setup: browser + seleniferous sidecar.\n\n- [browserconfig-selenium-standalone-chrome-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-selenium-standalone-chrome-example.yaml) \n- [browserconfig-selenium-standalone-firefox-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-selenium-standalone-firefox-example.yaml)\n\n```sh\nhelm upgrade selenosis . -n selenosis --set browserUI.vncPassword=\"${se_vnc_password}\"\n```\n\n### Moon (quay.io/browser)\n\nImages from Moon project, distributed via `quay.io/browser`. VNC requires a full X11 sidecar stack: `xvfb` (X server), `openbox` (window manager), and `x11vnc` (VNC server) — all from `quay.io/aerokube`. Also requires a `usergroup` ConfigMap (included in the manifests) to map the `user:4096` identity used by the browser containers.\n\n- [browserconfig-moon-chrome-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-moon-chrome-example.yaml)\n- [browserconfig-moon-firefox-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-moon-firefox-example.yaml)\n\n```sh\nhelm upgrade selenosis . -n selenosis --set browserUI.vncPassword=\"selenoid\"\n```\n\nPlaywright-specific Moon images for CDP/BiDi protocol sessions.\n\n- [browserconfig-moon-playwright-chrome-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-moon-playwright-chrome-example.yaml)\n- [browserconfig-moon-playwright-firefox-example.yaml](https://github.com/alcounit/selenosis-deploy/blob/main/examples/browserconfig-moon-playwright-firefox-example.yaml)\n\n\n## Service types\n\nEach service supports `ClusterIP`, `NodePort`, or `LoadBalancer`.\n\nExample values:\n\n```yaml\nbrowserUI:\n  service:\n    type: NodePort\n    port: 8080\n    nodePort: 30080\n\nbrowserService:\n  service:\n    type: LoadBalancer\n    port: 8080\n\nselenosis:\n  service:\n    type: ClusterIP\n    port: 4444\n```\n\nApply:\n\n```sh\nhelm upgrade --install selenosis . -n selenosis -f values.local.yaml\n```\n\n## Ingress Configuration\n\nExpose services via Ingress for external access with TLS and WebSocket support.\n\nEach component (selenosis and browserUI) has its own ingress configuration under its respective section.\n\n### Basic Setup (NGINX Ingress Controller)\n\n```yaml\nselenosis:\n  ingress:\n    enabled: true\n    className: nginx\n    host: selenosis.example.com\n\nbrowserUI:\n  ingress:\n    enabled: true\n    className: nginx\n    host: ui.example.com\n    # CRITICAL: WebSocket support for VNC proxy\n    annotations:\n      nginx.ingress.kubernetes.io/proxy-read-timeout: \"3600\"\n      nginx.ingress.kubernetes.io/proxy-send-timeout: \"3600\"\n      nginx.ingress.kubernetes.io/websocket-services: \"browser-ui\"\n```\n\n### With TLS/SSL Certificate\n\n```yaml\nselenosis:\n  ingress:\n    enabled: true\n    className: nginx\n    host: selenosis.example.com\n    annotations:\n      cert-manager.io/cluster-issuer: \"letsencrypt-prod\"\n    tls:\n      secretName: selenosis-tls\n\nbrowserUI:\n  ingress:\n    enabled: true\n    className: nginx\n    host: ui.example.com\n    annotations:\n      cert-manager.io/cluster-issuer: \"letsencrypt-prod\"\n      nginx.ingress.kubernetes.io/proxy-read-timeout: \"3600\"\n      nginx.ingress.kubernetes.io/proxy-send-timeout: \"3600\"\n      nginx.ingress.kubernetes.io/websocket-services: \"browser-ui\"\n    tls:\n      secretName: browser-ui-tls\n```\n\n**Important**: Browser UI requires WebSocket support for the VNC proxy. The above annotations are required for NGINX Ingress Controller. Other ingress controllers may require different annotations.\n\nApply:\n\n```sh\nhelm upgrade --install selenosis . -n selenosis -f ingress-values.yaml\n```\n\n## Maintainer Release Process\n\nTo create a new chart release:\n\n1. Update `Chart.yaml` version:\n   ```yaml\n   version: 2.0.3\n   ```\n\n2. Commit and push:\n   ```sh\n   git add Chart.yaml\n   git commit -m \"Bump chart version to 2.0.3\"\n   git push\n   ```\n\n3. Create and push tag:\n   ```sh\n   git tag v2.0.3\n   git push origin v2.0.3\n   ```\n\n4. GitHub Actions will automatically:\n   - Lint and package the chart\n   - Create GitHub Release with chart tarball\n   - Publish to Helm repository (GitHub Pages)\n\n5. Users can now install the new version:\n   ```sh\n   helm repo update\n   helm upgrade selenosis selenosis/selenosis-deploy --version 2.0.3\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falcounit%2Fselenosis-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falcounit%2Fselenosis-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falcounit%2Fselenosis-deploy/lists"}