[{"data":1,"prerenderedAt":170},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-onedev-git-cicd-and-kanban-in-one-container-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":13,"excerpt":14,"readTime":15,"views":16,"isPinned":17,"publishedAt":18,"category":19,"categories":25,"featuredImage":27,"bgImage":28,"posterImage":29,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":27,"ctaBody":27,"ctaButton":111,"ctaUrl":112,"relatedPosts":113},311,"self-host-onedev-git-cicd-and-kanban-in-one-container",{"fr":10,"en":8,"ar":11,"es":12},"heberger-onedev-vps","onedev-على-vps-git-وcicd-وkanban-في-حاوية-واحدة","onedev-en-vps-git-cicd-y-kanban-autoalojados","Self-Host OneDev: Git, CI\u002FCD and Kanban in One Container","Deploy OneDev on your VPS: private Git forge, visual CI\u002FCD pipelines and Kanban boards. One container, no per-developer billing.",8,0,false,"2026-08-28T00:00:00+00:00",{"id":20,"name":21,"slug":22,"color":23,"icon":24},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[26],{"id":20,"name":21,"slug":22,"color":23,"icon":24},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-onedev-vps-poster.svg",{"categorySlug":31,"appSlug":32},"development","onedev","Looking for a self-hosted GitHub equivalent with built-in CI\u002FCD, without installing a separate runner or paying per developer? OneDev bundles a Git forge, a CI\u002FCD engine, Kanban boards and a package registry in a single Docker container — on a 2 GB RAM VPS.",[35,39,50,53,69,72,105,108],{"type":36,"title":37,"body":38},"h2","Why OneDev over Gitea alone?","Gitea is great for hosting code: it is lightweight, fast and covers all the needs of a classic Git forge. But the moment you want CI\u002FCD, you need to install a separate runner (`gitea\u002Fact_runner`), configure it, monitor its jobs and expose it to the network. OneDev does all this by default: when you push a `.onedev-buildspec.yml`, a pipeline is queued and runs in a Docker container on the same VPS — no additional service to configure.\n\nThis integration extends to issues and Kanban boards: instead of managing a project in a third application, OneDev's Kanban cards move automatically when a branch is created, a pull request opened or a commit merged. The result is a coherent developer workspace, without tab juggling.",{"type":40,"title":41,"items":42},"ul","What you get with OneDev",[43,44,45,46,47,48,49],"Complete Git forge: repositories, branches, tags, pull requests, code reviews, wikis and releases","Integrated CI\u002FCD with visual pipeline designer — no separate runner to install","Kanban boards with automatic transitions triggered by repository events","Docker\u002FOCI, npm, Maven, NuGet and Helm package registry hosted on the same URL","Code symbol search and diff navigation powered by static analysis","Authentication via LDAP, OAuth2 (GitHub, GitLab, Google) or local accounts","Import from GitHub, GitLab or Gitea with history, issues and pull requests",{"type":36,"title":51,"body":52},"Architecture: two containers, one URL","OneDev runs as two Docker containers: `1dev\u002Fserver` (the Java application) and `postgres:14` (the database). The application listens on port 6610; ServOrbit places an nginx vhost in front and handles TLS. Everything goes through the same domain: the web interface, HTTPS Git clones, CI webhooks and the package registry.\n\nThe `1dev\u002Fserver` image also embeds a local build agent. When a pipeline starts, it launches a Docker container for each build step — this is why the Docker socket (`\u002Fvar\u002Frun\u002Fdocker.sock`) is mounted in the OneDev container. This design is standard for self-hosted CI platforms (Jenkins, Drone, Woodpecker use it too) and allows configuring remote agents if you need parallelism or hardware isolation.\n\nThe PostgreSQL database stores repositories (as bare Git repositories in `\u002Fopt\u002Fonedev`), issues, members, CI jobs and configuration. A single Docker volume is enough to back everything up.",{"type":54,"title":55,"steps":56},"steps","Deploy OneDev in 4 steps",[57,60,63,66],{"title":58,"body":59},"Order a VPS with a domain","Choose a VPS with at least 2 GB of RAM — OneDev is a Java application that needs some headroom on startup. A domain is required: OneDev embeds the server URL in clone links, webhooks and OAuth redirects. Point a subdomain (`git.mycompany.com`) at your VPS, or use the free ServOrbit subdomain (`{app}.{dns_slug}.servorbit-dns.com`) which includes HTTPS automatically.",{"title":61,"body":62},"Automatic deployment from the marketplace","In your ServOrbit space, go to Marketplace → Development → OneDev → Deploy. ServOrbit generates database credentials, starts the two containers and configures the nginx vhost. The web interface is available over HTTPS within two minutes.",{"title":64,"body":65},"Initial setup wizard","Open your domain in a browser. OneDev shows a first-run wizard that asks you to create the administrator account and, crucially, to enter the server URL — enter your full HTTPS domain (`https:\u002F\u002Fgit.mycompany.com`). OneDev stores this URL and embeds it everywhere: clone links, email notifications, CI status badges. Take the time to set it correctly from the start.",{"title":67,"body":68},"First repository and first pipeline","Create a repository from the interface, clone it over HTTPS, add a `.onedev-buildspec.yml` at the root and push. OneDev detects the specification, queues the pipeline and runs it in a Docker container on your VPS — no additional configuration.",{"type":36,"title":70,"body":71},"The OneDev pipeline: .onedev-buildspec.yml","OneDev uses its own YAML pipeline format, different from GitHub Actions or GitLab CI. The basic structure consists of `jobs` with `steps`. Each step can use a Docker image, run a script, publish an artifact or send a notification.\n\nThe visual pipeline designer generates this YAML graphically: you add steps from the interface, configure Docker images, environment variables and triggers, and OneDev writes the file for you. Pipelines support build matrices, inter-step artifacts, and scheduling via `scheduleTrigger` for nightly tasks. A dedicated dashboard shows the status of all jobs in real time and keeps the full run history with timestamped logs.",{"type":73,"title":74,"headers":75,"rows":79},"comparison","OneDev vs Gitea vs GitLab CE",[5,76,77,78],"OneDev","Gitea","GitLab CE",[80,85,89,92,97,101],[81,82,83,84],"Built-in CI\u002FCD","Yes (agent included)","Via separate runner","Yes (GitLab runner)",[86,87,88,87],"Built-in Kanban","Yes","No (third-party)",[90,91,91,91],"Package registry","Docker, npm, Maven…",[93,94,95,96],"Typical RAM (1 dev)","~512 MB idle","~200 MB","2 GB minimum",[98,99,99,100],"License","MIT","MIT (EE proprietary)",[102,103,104,87],"Import GitHub\u002FGitLab","Yes (issues + PRs)","Yes (code only)",{"type":36,"title":106,"body":107},"Backing up OneDev","OneDev stores everything in two Docker volumes: `onedev_data` (Git repositories, config, jobs) and `onedev_db` (PostgreSQL). A full backup means archiving these two volumes. OneDev can also configure automatic backups to S3-compatible object storage from Site Administration → Settings → Backup Settings.",{"type":109,"body":110},"tip","Never expose the Docker socket directly on a public interface — it gives root access to the host machine. ServOrbit binds port 6610 to the loopback interface by default, keeping the OneDev web UI behind the nginx reverse proxy on port 443.","Voir les VPS Cloud","\u002Fmarketplace\u002Fdevelopment\u002Fonedev",[114,130,150],{"id":115,"slug":116,"slugs":117,"title":121,"excerpt":122,"readTime":15,"views":16,"isPinned":17,"publishedAt":123,"category":124,"categories":125,"featuredImage":27,"bgImage":28,"posterImage":127,"relatedSolution":128},74,"host-gitea-on-your-own-vps",{"fr":118,"en":116,"ar":119,"es":120},"heberger-gitea","استضافة-gitea-على-خادم-vps-الخاص-بك","alojar-gitea-en-un-vps","Host Gitea on your own VPS in 2026","Deploy Gitea on a VPS with Docker and SSL. Full guide: installation, migration to Forgejo v16 and governance comparison.","2026-04-07T00:00:00+00:00",{"id":20,"name":21,"slug":22,"color":23,"icon":24},[126],{"id":20,"name":21,"slug":22,"color":23,"icon":24},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":31,"appSlug":129},"gitea",{"id":131,"slug":132,"slugs":133,"title":137,"excerpt":138,"readTime":139,"views":16,"isPinned":17,"publishedAt":140,"category":141,"categories":146,"featuredImage":27,"bgImage":28,"posterImage":148,"relatedSolution":149},273,"migrate-cicd-to-gitea-or-forgejo-leave-github-actions",{"fr":134,"en":132,"ar":135,"es":136},"github-actions-payant-migrer-ci-cd-gitea-forgejo-vps","gitea-وforgejo-بديل-github-actions-المدفوع-على-vps","migrar-cicd-a-gitea-o-forgejo-sin-github-actions","Migrate CI\u002FCD to Gitea or Forgejo: leave GitHub Actions","Since March 2026, GitHub charges CI minutes on private repositories. Migrate to Gitea Actions or Forgejo on a VPS: same YAML files, fixed monthly cost.",11,"2026-08-16T00:00:00+00:00",{"id":142,"name":143,"slug":144,"color":145,"icon":144},2,"Automation","automatisation","bg-brand-action\u002F10 text-brand-action",[147],{"id":142,"name":143,"slug":144,"color":145,"icon":144},"\u002Fblog\u002Fcovers\u002Fgithub-actions-payant-migrer-ci-cd-gitea-forgejo-vps-poster.svg",{"categorySlug":31,"appSlug":129},{"id":151,"slug":152,"slugs":153,"title":157,"excerpt":158,"readTime":159,"views":16,"isPinned":17,"publishedAt":160,"category":161,"categories":166,"featuredImage":27,"bgImage":28,"posterImage":168,"relatedSolution":169},279,"migrate-your-github-repos-to-self-hosted-gitea-on-a-vps",{"fr":154,"en":152,"ar":155,"es":156},"migrer-depots-github-vers-gitea-vps","نقل-مستودعات-github-إلى-gitea-على-خادم-vps-خاص","migrar-repositorios-github-a-gitea-en-un-vps","Migrate Your GitHub Repos to Self-Hosted Gitea on a VPS","Export your repos, issues and labels via the GitHub API, import them into Gitea in under an hour, and update your local remotes — no history loss, no SaaS dependency.",9,"2026-08-18T00:00:00+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},3,"Deployment","deploiement","bg-success\u002F10 text-success",[167],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fmigrer-depots-github-vers-gitea-vps-poster.svg",{"categorySlug":31,"appSlug":129},1787975096097]