[{"data":1,"prerenderedAt":117},["ShallowReactive",2],{"seo-verification":3,"blog-woodpecker-ci-pipeline-vps-forgejo-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"title":9,"excerpt":10,"readTime":11,"views":12,"isPinned":13,"publishedAt":14,"category":15,"categories":20,"featuredImage":22,"bgImage":23,"posterImage":24,"relatedSolution":22,"intro":25,"sections":26,"ctaTitle":68,"ctaBody":69,"ctaButton":70,"ctaUrl":71,"relatedPosts":72},212,"woodpecker-ci-pipeline-vps-forgejo","Woodpecker CI and Forgejo: CI\u002FCD pipeline on a VPS","Deploy Woodpecker CI with Forgejo on your VPS for a self-hosted, lightweight and sovereign open source CI\u002FCD pipeline. Step-by-step Docker guide.",7,0,false,"2026-08-02T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":18},2,"Automation","automatisation","bg-brand-action\u002F10 text-brand-action",[21],{"id":16,"name":17,"slug":18,"color":19,"icon":18},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg","Woodpecker CI is an open source pipeline engine, a community fork of Drone CI under the Apache 2.0 license, built to integrate natively with Forgejo. Each step runs in an isolated Docker container, and the combined server and agent use less than 50 MB of RAM. On a VPS, builds run close to the git repository: no cloud queue, no minute quotas to watch.",[27,31,40,43,62,65],{"type":28,"title":29,"body":30},"h2","Why move away from cloud CI to a pipeline on your VPS","Cloud CI offerings bill by the build minute and impose shared queues whose wait time grows with volume. As repositories grow or tests multiply, the bill quickly exceeds the cost of a dedicated VPS. Hosting Forgejo and Woodpecker CI on the same server eliminates that network latency: the runner reads the code locally, without transit through a third-party infrastructure. You also choose when each pipeline update happens, and no integration secret leaves your machine.",{"type":32,"title":33,"items":34},"ul","What Woodpecker CI brings to a VPS",[35,36,37,38,39],"**Docker isolation per step** — each step runs in its own container, with no shared state between jobs.","**Small memory footprint** — the Woodpecker server and agent start up using less than 50 MB of RAM combined.","**Minimal YAML configuration** — a single `.woodpecker.yaml` file at the root of the repository is enough to describe the full pipeline.","**Native Forgejo integration** — Forgejo's OAuth2 is the only authentication mechanism required, with no extra plugin.","**Apache 2.0 licence** — the source code is auditable, the community fork is active, with no dependency on a proprietary vendor.",{"type":28,"title":41,"body":42},"Prerequisites: a VPS with Forgejo already running","Woodpecker CI can be installed on the same VPS as Forgejo or on a dedicated server. For both services combined, plan for 1 GB of RAM as a minimum and 2 GB for comfortable use with several active repositories. On the software side: Docker and Docker Compose, a dedicated subdomain for Woodpecker (for example `ci.your-domain.com`) pointing to the VPS IP, port 443 open for HTTPS, and SSH access. Forgejo must be reachable from the Woodpecker container via the internal Docker network or its public URL.",{"type":44,"title":45,"steps":46},"steps","Deploy Woodpecker CI on your VPS",[47,50,53,56,59],{"title":48,"body":49},"Create an OAuth App in Forgejo","In Forgejo, go to Settings → Applications → Manage OAuth2 Applications. Give the application a name (for example `woodpecker`) and enter the redirect URL: `https:\u002F\u002Fci.your-domain.com\u002Fauthorize`. Note the generated Client ID and Client Secret.",{"title":51,"body":52},"Write the Woodpecker docker-compose.yml","Create `\u002Fopt\u002Fwoodpecker\u002Fdocker-compose.yml` with two services: `woodpecker-server` (image `woodpeckerci\u002Fwoodpecker-server`) and `woodpecker-agent` (image `woodpeckerci\u002Fwoodpecker-agent`). On the server, set `WOODPECKER_GITEA_URL`, `WOODPECKER_GITEA_CLIENT`, `WOODPECKER_GITEA_SECRET` (the OAuth2 values you copied), `WOODPECKER_AGENT_SECRET` (a random string shared between server and agent), and `WOODPECKER_HOST=https:\u002F\u002Fci.your-domain.com`. The agent receives `WOODPECKER_SERVER=woodpecker-server:9000` and the same `WOODPECKER_AGENT_SECRET`.",{"title":54,"body":55},"Start the stack","In `\u002Fopt\u002Fwoodpecker`, run `docker compose up -d`. Check the logs with `docker compose logs -f woodpecker-server` until you see the server ready. The service listens internally on port 8000 (UI) and 9000 (gRPC agent).",{"title":57,"body":58},"Activate the repository in Woodpecker","Open `https:\u002F\u002Fci.your-domain.com` (behind your reverse proxy) and sign in with your Forgejo account via OAuth2. In the dashboard, click \"Add repository\" and select the project to activate. Woodpecker automatically registers a webhook in Forgejo to trigger builds.",{"title":60,"body":61},"Add a .woodpecker.yaml file to the repository","At the root of the repository, create `.woodpecker.yaml`. A minimal example: a `lint` step running `npm run lint` in the `node:20` image, a `test` step (`npm test`), and a `deploy` step conditional on the `main` branch that runs `ssh deploy@your-domain.com .\u002Fdeploy.sh`. Push the file: a build triggers immediately in Woodpecker.",{"type":63,"body":64},"tip","Place the Woodpecker server behind Traefik or Caddy with HTTPS and never expose it directly on port 8000. Store all pipeline secrets (SSH tokens, deployment API keys) in the repository **secrets** section of the Woodpecker dashboard — they are injected as environment variables during the build without appearing in the versioned `.woodpecker.yaml`.",{"type":28,"title":66,"body":67},"From git forge to continuous deployment: a complete sovereign stack","Forgejo manages code, issues and pull request reviews; Woodpecker CI orchestrates the test and deployment pipelines. Both communicate through OAuth2 and webhooks on your own network, with no dependency on GitHub, GitLab or a cloud integration service. This self-hosted stack meets the sovereignty requirements of agencies and technical teams who do not want their intellectual property or integration secrets to pass through external platforms.","Launch your CI\u002FCD stack on a ServOrbit VPS","A ServOrbit Cloud VPS with preconfigured Docker and a fixed IP lets you deploy Forgejo and Woodpecker CI in minutes, with resources you can scale as your pipelines grow.","Deploy on a ServOrbit VPS","\u002Fvps-cloud",[73,91,104],{"id":74,"slug":75,"title":76,"excerpt":77,"readTime":11,"views":78,"isPinned":13,"publishedAt":79,"category":80,"categories":85,"featuredImage":22,"bgImage":23,"posterImage":87,"relatedSolution":88},74,"heberger-gitea","Host Gitea on your own VPS","Deploy Gitea on a VPS with Docker, reverse proxy and SSL. A lightweight, fast Git forge, 100% under your control.",538,"2026-04-07T00:00:00+00:00",{"id":11,"name":81,"slug":82,"color":83,"icon":84},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[86],{"id":11,"name":81,"slug":82,"color":83,"icon":84},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":89,"appSlug":90},"developpement","gitea",{"id":92,"slug":93,"title":94,"excerpt":95,"readTime":11,"views":96,"isPinned":13,"publishedAt":97,"category":98,"categories":99,"featuredImage":22,"bgImage":23,"posterImage":101,"relatedSolution":102},75,"heberger-forgejo","Host Forgejo on your own VPS","Install Forgejo, the community fork of Gitea, on your VPS with Docker and SSL. A sovereign, 100% free Git forge.",575,"2026-04-06T00:00:00+00:00",{"id":11,"name":81,"slug":82,"color":83,"icon":84},[100],{"id":11,"name":81,"slug":82,"color":83,"icon":84},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"categorySlug":82,"appSlug":103},"forgejo",{"id":105,"slug":106,"title":107,"excerpt":108,"readTime":109,"views":12,"isPinned":13,"publishedAt":110,"category":111,"categories":112,"featuredImage":22,"bgImage":23,"posterImage":114,"relatedSolution":115},149,"heberger-n8n-vps","How to host n8n on a VPS","Deploy n8n on your VPS to automate your workflows between applications, 100% self-hosted, with Docker, a reverse proxy and HTTPS. Step-by-step guide.",8,"2026-01-27T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":18},[113],{"id":16,"name":17,"slug":18,"color":19,"icon":18},"\u002Fblog\u002Fcovers\u002Fheberger-n8n-vps-poster.svg",{"categorySlug":18,"appSlug":116},"n8n",1785671428878]