# Local backend :::danger The local backend will execute the pipelines on the local system without any isolation of any kind. ::: :::note This backend is still pretty new and cannot be treated as stable. Its implementation and configuration can change at any time. ::: Since the code runs directly in the same context as the agent (same user, same filesystem), a malicious pipeline could be used to access the agent configuration especially the `WOODPECKER_AGENT_SECRET` variable. It is recommended to use this backend only for private setup where the code and pipeline can be trusted. You shouldn't use it for a public facing CI where anyone can submit code or add new repositories. You shouldn't execute the agent as a privileged user (root). The local backend will use a random directory in $TMPDIR to store the cloned code and execute commands. In order to use this backend, you need to download (or build) the [binary](https://github.com/woodpecker-ci/woodpecker/releases/latest) of the agent, configure it and run it on the host machine. ## Configuration ### Server Enable connection to the server from the outside of the docker environment by exposing the port 9000: ```yaml # docker-compose.yml for the server version: '3' services: woodpecker-server: [...] ports: - 9000:9000 [...] environment: - [...] ``` ### Agent You can use the `.env` file to store environmental variables for configuration. At the minimum you need the following information: ```ini # .env for the agent WOODPECKER_AGENT_SECRET=replace_with_your_server_secret WOODPECKER_SERVER=replace_with_your_server_address:9000 ``` ## Running the agent Start the agent from the directory with the `.env` file: `woodpecker-agent` :::note When using the `local` backend, the [plugin-git](https://github.com/woodpecker-ci/plugin-git) binary must be in your `$PATH` for the default clone step to work. If not, you can still write a manual clone step. ::: ## Further configuration ### Specify the shell to be used for a pipeline step The `image` entry is used to specify the shell, such as Bash or Fish, that is used to run the commands. ```yaml # .woodpecker.yml steps: build: image: bash commands: [...] ``` ### Using labels to filter tasks You can use the [agent configuration options](../15-agent-config.md#woodpecker_filter_labels) and the [pipeline syntax](../../20-usage/20-pipeline-syntax.md#labels) to only run certain pipelines on certain agents. Example: Define a `label` `type` with value `exec` for a particular agent: ```ini # .env for the agent WOODPECKER_FILTER_LABELS=type=exec ``` Then, use this `label` `type` with value `exec` in the pipeline definition, to only run on this agent: ```yaml # .woodpecker.yml labels: type: exec steps: [...] ```