Files
github-action-runner/README.md
T
2026-07-08 15:11:38 +03:00

118 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GitHub Action Runners (Docker Compose)
Self-hosted GitHub Actions runners running in Docker, based on
[myoung34/docker-github-actions-runner](https://github.com/myoung34/docker-github-actions-runner).
## Quick start
### 1. Create the data folder for your org
Each runner stores its work directory under `data/<your-org-name>`:
```bash
mkdir -p data/myorg
```
### 2. Get a GitHub access token
1. Go to **https://github.com/settings/tokens** (on your **user** account, not the org).
2. Click **Generate new token (classic)**.
3. **Name:** something like `github-self-hosted-runners`.
4. **Expiration:** set to **No expiration**.
5. Check these scopes:
- `admin:org`
- `admin:org_hook`
- `notifications`
- `read:public_key`
- `read:repo_hook`
- `repo`
- `workflow`
6. Generate and copy the token (it looks like `ghp_XXXXXXXXXXXXXXXXXXXXXXXXXX`).
### 3. Configure `docker-compose.yml`
Edit the service and set your values:
```yaml
services:
github-runner-myorg:
image: git.neo24.net/public/github-action-runner:latest
#image: myoung34/github-runner:latest
restart: unless-stopped
container_name: github-runner-myorg
privileged: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data/myorg:/home/runner/work
environment:
DOCKER_HOST: unix:///var/run/docker.sock
RUNNER_NAME: ghr-myorg
RUNNER_GROUP: self-hosted
RUNNER_SCOPE: org
ORG_NAME: myorg
LABELS: self-hosted,linux,docker,x64
RUNNER_WORKDIR: /home/runner/work
ACCESS_TOKEN: ghp_XXXXXXXXXXXXXXXXXXXXXXXXXX
```
Replace `myorg` with your org name and paste your token into `ACCESS_TOKEN`.
> **Important:** `RUNNER_GROUP` must be `self-hosted`. The GitHub runner group
> name must match this value exactly (see step 4).
### 4. Create the runner group (name must be `self-hosted`)
The group **name must be exactly `self-hosted`** — it has to match
`RUNNER_GROUP: self-hosted` in `docker-compose.yml`. Any other name will fail
registration.
1. Go to **https://github.com/organizations/myorg/settings/actions/runner-groups**.
2. Create a new group and set **Group name** to `self-hosted` (exact spelling).
3. **Repository access:** select **Selected repositories**, then choose which repos may use this runner.
4. Optionally enable **Allow public repositories** if you need runners on public repos (security risk — read GitHub’s warning first).
5. **Workflow access:** select **All workflows** (or restrict to specific workflows if you prefer).
> Replace `myorg` in the URL above with your actual org name.
### 5. Start the runner
```bash
docker compose up -d
```
With `RUNNER_GROUP: self-hosted` set, the runner registers into that group
automatically. Confirm it under **GitHub → Org → Settings → Actions → Runners**
(and under **Runner groups → self-hosted**).
If it landed in the Default group instead, open the runner and move it into
`self-hosted`.
## Useful commands
```bash
docker compose logs -f # follow logs
docker compose down # stop and remove
docker compose pull # update the image
```
## Adding more runners
Copy the service block, rename it (e.g. `github-runner-otherorg`), give it a unique
`container_name` / `RUNNER_NAME`, point its volume at a new `data/<org>` folder, and
create that folder with `mkdir -p data/<org>`.
## Notes
- The runner group **must** be named `self-hosted` so it matches
`RUNNER_GROUP: self-hosted` in `docker-compose.yml`.
- The default image is mirrored to `git.neo24.net/public/github-action-runner:latest`.
To re-mirror the upstream image (see `cmd-to-push.txt`):
```bash
docker buildx imagetools create \
--tag git.neo24.net/public/github-action-runner:latest \
myoung34/github-runner:latest
```
- Keep your `ACCESS_TOKEN` secret — don't commit it to a public repo.