This commit is contained in:
2026-04-07 15:58:45 -07:00
parent 376f5530d7
commit e45e2c28a9
7 changed files with 197 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
state/**
tailscale-nginx/**

11
Dockerfile Normal file
View File

@@ -0,0 +1,11 @@
FROM gitea/gitea:latest
# Add Tailscale Alpine repository
RUN echo 'https://pkgs.tailscale.com/stable/alpine/v3.19/main' >> /etc/apk/repositories \
&& apk add --no-cache tailscale
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["gitea"]

46
docker-compose.gitea.yml Normal file
View File

@@ -0,0 +1,46 @@
version: "3.8"
services:
tailscale:
image: tailscale/tailscale:latest
hostname: tailscale-gitea
environment:
- TS_AUTHKEY=tskey-auth-kNm64Dbcts11CNTRL-4eLQjm2pQYCLdy285gNaYCFDF1KTjP71
# - TS_EXTRA_ARGS=--advertise-tags=tag:container
- TS_STATE_DIR=/var/lib/tailscale
- TS_USERSPACE=false
volumes:
- ./tailscale-nginx/state:/var/lib/tailscale
devices:
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
- net_raw
restart: unless-stopped
gitea:
image: gitea/gitea:latest
depends_on:
- tailscale
network_mode: service:tailscale
container_name: gitea
restart: unless-stopped
volumes:
- gitea-data:/data
- tailscale-state:/var/lib/tailscale
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__server__ROOT_URL=http://gitea/
- GITEA__server__HTTP_PORT=3000
- GITEA__server__DOMAIN=gitea
- GITEA__server__SSH_DOMAIN=gitea
- TAILSCALE_AUTHKEY=
- TAILSCALE_HOSTNAME=gitea
volumes:
gitea-data:
driver: local
tailscale-state:
driver: local

18
entrypoint.sh Normal file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
set -e
# Start tailscaled in background
tailscaled &
# Wait for tailscaled to be ready
until tailscale status >/dev/null 2>&1; do
sleep 0.5
done
# Authenticate with Tailscale
tailscale up --authkey="${TAILSCALE_AUTHKEY}" --hostname="${TAILSCALE_HOSTNAME:-gitea}"
echo "Tailscale connected: $(tailscale status --json | grep -o '"Hostname":"[^"]*"' | head -1 | cut -d'"' -f4)"
# Run Gitea
exec docker/entrypoint.sh "$@"

19
gitea-backup.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
# Gitea Backup Script
BACKUP_DIR="./gitea-backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
echo "Backing up Gitea data to $BACKUP_DIR/gitea-backup-$DATE.tar.gz..."
docker run --rm \
-v ai-game-2_gitea-data:/data \
-v "$(pwd)/$BACKUP_DIR":/backup \
alpine \
tar czf "/backup/gitea-backup-$DATE.tar.gz" -C /data .
echo "Backup complete!"
echo "Latest backup: $BACKUP_DIR/gitea-backup-$DATE.tar.gz"
ls -lh "$BACKUP_DIR"

52
gitea-setup.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash
# Gitea + Tailscale Docker Setup Script
# Access at http://gitea/ on your Tailscale network
set -e
echo "=== Gitea Docker Setup (Tailscale) ==="
echo ""
# Check for auth key
if ! grep -q "your-auth-key-here" docker-compose.gitea.yml 2>/dev/null; then
echo "✓ Auth key already configured"
else
echo "⚠️ WARNING: You need to set your Tailscale auth key in docker-compose.gitea.yml"
echo ""
echo "To get an auth key:"
echo " 1. Go to https://login.tailscale.com/admin/settings/keys"
echo " 2. Click 'Generate auth key'"
echo " 3. Set TAILSCALE_AUTHKEY in docker-compose.gitea.yml"
echo ""
read -p "Continue anyway? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Build and start
echo "[1/2] Building Docker image..."
docker compose -f docker-compose.gitea.yml build
echo "[2/2] Starting Gitea..."
docker compose -f docker-compose.gitea.yml up -d
echo ""
echo "=== Setup Complete! ==="
echo ""
echo "Access Gitea at: http://gitea/"
echo ""
echo "IMPORTANT: On first setup (web UI), configure Gitea with:"
echo " - Domain: gitea"
echo " - Base URL: http://gitea/"
echo " - SSH Domain: gitea"
echo ""
echo "Useful commands:"
echo " docker compose -f docker-compose.gitea.yml logs -f # View logs"
echo " docker compose -f docker-compose.gitea.yml restart # Restart"
echo " docker compose -f docker-compose.gitea.yml down # Stop"
echo ""
echo "To update your local repo:"
echo " git remote set-url origin http://gitea/youruser/ai-game-2.git"
echo " git push -u origin master"

49
nginx.conf Normal file
View File

@@ -0,0 +1,49 @@
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Gitea subfolder - completely transparent to Gitea
server {
listen 80;
server_name localhost;
client_max_body_size 20M;
location /gitea/ {
# Strip /gitea prefix when forwarding to Gitea
rewrite ^/gitea/(.*) /$1 break;
proxy_pass http://gitea:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /gitea;
# Rewrite Location headers (redirects)
proxy_redirect ~^(http|https)://([^/]+):3000(/.*)$ $1://$host/gitea$3;
# Rewrite URLs in response body (HTML, JSON, etc.)
sub_filter_once off;
sub_filter_types text/html application/json;
sub_filter 'http://gitea:3000' 'http://$host/gitea';
sub_filter 'http://raspberrypi:3000' 'http://$host/gitea';
sub_filter 'https://gitea:3000' 'http://$host/gitea';
sub_filter 'https://raspberrypi:3000' 'http://$host/gitea';
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
}