Files
Inanis_Vault/21-Server Reference/homelab/stacks/gitea.md

86 lines
2.3 KiB
Markdown

# Gitea
Self-hosted Git service (GitHub alternative).
## Access
- **Tailscale:** [gitea.bunny-wyvern.ts.net](https://gitea.bunny-wyvern.ts.net)
- **LAN Web:** `http://192.168.2.114:3000`
- **LAN SSH:** `ssh://192.168.2.114:2222`
## Containers
| Container | Image | Role |
|---|---|---|
| `gitea` | `gitea/gitea:latest` | Web app + Git server |
| `gitea_db` | `mysql:8` | MySQL database |
| `gitea-tailscale-sidecar` | `tailscale/tailscale:latest` | Tailscale node |
## Compose File
**Path:** `/home/artanis/DockerFiles/gitea/docker-compose.yml`
```yaml
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=<redacted>
volumes:
- /home/artanis/DockerFiles/gitea/gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"
db:
image: mysql:8
container_name: gitea_db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=<redacted>
- MYSQL_DATABASE=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=<redacted>
volumes:
- /home/artanis/DockerFiles/gitea/gitea_db_data:/var/lib/mysql
gitea-tailscale-sidecar:
image: tailscale/tailscale:latest
container_name: gitea-tailscale-sidecar
restart: always
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- gitea_tailscale_state:/var/lib/tailscale
environment:
- TS_AUTHKEY=<redacted>
- TS_HOSTNAME=gitea
- TS_STATE_DIR=/var/lib/tailscale
network_mode: "service:gitea"
volumes:
gitea_tailscale_state:
```
## Data Layout
| Path | Contents |
|---|---|
| `/home/artanis/DockerFiles/gitea/gitea_data` | Gitea repos, config, attachments |
| `/home/artanis/DockerFiles/gitea/gitea_db_data` | MySQL data directory |
## Notes
- Database: MySQL 8 (separate container `gitea_db`)
- Port 2222 is exposed for SSH-based Git operations (clone/push via `ssh://`)
- Timezone files from the host are mounted read-only to keep Gitea's timestamps consistent