# 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= 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= - MYSQL_DATABASE=gitea - MYSQL_USER=gitea - MYSQL_PASSWORD= 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= - 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