Back to Apps
Woodpecker

Deploy Woodpecker on Your Own Server

Simple CI engine with great extensibility. It runs your pipelines inside Docker containers.

🛠️ Developer Tools

Want to deploy Woodpecker on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Woodpecker?

Woodpecker is a simple CI engine with great extensibility. It is a community fork of the Drone CI system. It runs your pipelines inside Docker containers, so if you are already using them in your daily workflow, you'll love Woodpecker for sure. You should set up `WOODPECKER_HOST` and at least one version control system (e.g. `WOODPECKER_GITEA` for Gitea or `WOODPECKER_GITHUB` for GitHub etc.).

Self-Host Woodpecker

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

General
3

Deploy

Copy the configuration and run it on your server.

services:
  woodpecker:
    image: woodpeckerci/woodpecker-server:pull_1209
    environment:
      WOODPECKER_ADMIN: ""
      WOODPECKER_AGENT_SECRET: ca8b5f59f7b84c88a1e3dbc96624f6ad
      WOODPECKER_AUTHENTICATE_PUBLIC_REPOS: "false"
      WOODPECKER_BITBUCKET: "false"
      WOODPECKER_BITBUCKET_CLIENT: ""
      WOODPECKER_BITBUCKET_SECRET: ""
      WOODPECKER_CODING: "false"
      WOODPECKER_CODING_CLIENT: ""
      WOODPECKER_CODING_GIT_MACHINE: git.coding.net
      WOODPECKER_CODING_GIT_PASSWORD: ""
      WOODPECKER_CODING_GIT_USERNAME: ""
      WOODPECKER_CODING_SCOPE: user, project, project:depot
      WOODPECKER_CODING_SECRET: ""
      WOODPECKER_CODING_SKIP_VERIFY: "false"
      WOODPECKER_CODING_URL: https://coding.net
      WOODPECKER_DATABASE_DATASOURCE: woodpecker.sqlite
      WOODPECKER_DATABASE_DRIVER: sqlite3
      WOODPECKER_DEBUG_NOCOLOR: "true"
      WOODPECKER_DEBUG_PRETTY: "false"
      WOODPECKER_DEFAULT_CLONE_IMAGE: woodpeckerci/plugin-git:latest
      WOODPECKER_DOCKER_CONFIG: ""
      WOODPECKER_DOCS: https://woodpecker-ci.org/
      WOODPECKER_ESCALATE: plugins/docker,plugins/gcr,plugins/ecr,woodpeckerci/plugin-docker,woodpeckerci/plugin-docker-buildx
      WOODPECKER_GITEA: "false"
      WOODPECKER_GITEA_CLIENT: ""
      WOODPECKER_GITEA_SECRET: ""
      WOODPECKER_GITEA_SKIP_VERIFY: "false"
      WOODPECKER_GITEA_URL: https://try.gitea.io
      WOODPECKER_GITHUB: "false"
      WOODPECKER_GITHUB_CLIENT: ""
      WOODPECKER_GITHUB_MERGE_REF: "true"
      WOODPECKER_GITHUB_SECRET: ""
      WOODPECKER_GITHUB_SKIP_VERIFY: "false"
      WOODPECKER_GITHUB_URL: https://github.com
      WOODPECKER_GITLAB: "false"
      WOODPECKER_GITLAB_CLIENT: ""
      WOODPECKER_GITLAB_SECRET: ""
      WOODPECKER_GITLAB_SKIP_VERIFY: "false"
      WOODPECKER_GITLAB_URL: https://gitlab.com
      WOODPECKER_GOGS: "false"
      WOODPECKER_GOGS_GIT_PASSWORD: ""
      WOODPECKER_GOGS_GIT_USERNAME: ""
      WOODPECKER_GOGS_PRIVATE_MODE: "false"
      WOODPECKER_GOGS_SKIP_VERIFY: "false"
      WOODPECKER_GOGS_URL: https://github.com
      WOODPECKER_HOST: ""
      WOODPECKER_KEEPALIVE_MIN_TIME: ""
      WOODPECKER_LIMIT_CPU_QUOTA: "0"
      WOODPECKER_LIMIT_CPU_SET: ""
      WOODPECKER_LIMIT_CPU_SHARES: "0"
      WOODPECKER_LIMIT_MEM: "0"
      WOODPECKER_LIMIT_MEM_SWAP: "0"
      WOODPECKER_LIMIT_SHM_SIZE: "0"
      WOODPECKER_LOG_LEVEL: error
      WOODPECKER_OPEN: "false"
      WOODPECKER_ORGS: ""
      WOODPECKER_PROMETHEUS_AUTH_TOKEN: ""
      WOODPECKER_REPO_OWNERS: ""
      WOODPECKER_SESSION_EXPIRES: 72h
      WOODPECKER_STASH: "false"
      WOODPECKER_STASH_CONSUMER_KEY: ""
      WOODPECKER_STASH_CONSUMER_RSA: ""
      WOODPECKER_STASH_CONSUMER_RSA_STRING: ""
      WOODPECKER_STASH_GIT_PASSWORD: ""
      WOODPECKER_STASH_GIT_USERNAME: ""
      WOODPECKER_STASH_SKIP_VERIFY: "false"
      WOODPECKER_STASH_URL: ""
      WOODPECKER_STATUS_CONTEXT: ci/woodpecker
    volumes:
      - woodpecker-server:/var/lib/woodpecker
  woodpecker-agent:
    environment:
      WOODPECKER_AGENT_SECRET: ca8b5f59f7b84c88a1e3dbc96624f6ad
      WOODPECKER_BACKEND: docker
      WOODPECKER_DEBUG_NOCOLOR: "true"
      WOODPECKER_DEBUG_PRETTY: "false"
      WOODPECKER_GRPC_SECURE: "false"
      WOODPECKER_GRPC_VERIFY: "true"
      WOODPECKER_HEALTHCHECK: "true"
      WOODPECKER_HOSTNAME: ""
      WOODPECKER_KEEPALIVE_TIME: ""
      WOODPECKER_KEEPALIVE_TIMEOUT: 20s
      WOODPECKER_LOG_LEVEL: error
      WOODPECKER_MAX_PROCS: "1"
      WOODPECKER_SERVER: woodpecker:9000
      WOODPECKER_USERNAME: x-oauth-basic
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - woodpecker
volumes:
  woodpecker-server: {}

Then run:

docker compose up -d
4

Access

Once started, access your app at http://localhost:8000

Why Self-Host Woodpecker?

Full Data Ownership

Your data stays on your servers. No third-party access.

No Monthly Fees

Pay only for your server. No per-seat or usage charges.

Complete Control

Customize, backup, and scale on your own terms.

Privacy & Compliance

Meet GDPR, HIPAA, or internal security requirements.

Technical Details

Docker Image

woodpeckerci/woodpecker-server:${woodpecker_version}

Want to go faster?

Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.

Install on any Linux server:

sh -c "$(curl -sSL https://get.senate.sh)"