mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-06-04 20:42:58 +00:00
small fix, don't worry about it
This commit is contained in:
@@ -0,0 +1,465 @@
|
||||
# Gitea Git Hosting Template
|
||||
|
||||
## Overview
|
||||
Gitea is a painless self-hosted Git service. It is similar to GitHub, Bitbucket, and GitLab.
|
||||
|
||||
## Quick Start
|
||||
```bash
|
||||
# Create docker-compose.yml with the content below
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Docker Compose
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: gitea
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=gitea-db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea
|
||||
- GITEA__server__DOMAIN=git.yourdomain.com
|
||||
- GITEA__server__ROOT_URL=https://git.yourdomain.com/
|
||||
- GITEA__server__SSH_DOMAIN=git.yourdomain.com
|
||||
- GITEA__server__SSH_PORT=2222
|
||||
- GITEA__server__SSH_LISTEN_PORT=22
|
||||
- GITEA__webhook__ALLOWED_HOST_LIST=git.yourdomain.com
|
||||
- GITEA__service__DISABLE_REGISTRATION=true
|
||||
- GITEA__service__REQUIRE_SIGNIN_VIEW=true
|
||||
- GITEA__mailer__ENABLED=true
|
||||
- GITEA__mailer__FROM=git@yourdomain.com
|
||||
- GITEA__mailer__MAILER_TYPE=smtp
|
||||
- GITEA__mailer__HOST=smtp.gmail.com:587
|
||||
- GITEA__mailer__USER=your-email@gmail.com
|
||||
- GITEA__mailer__PASSWD=your-app-password
|
||||
- GITEA__security__INSTALL_LOCK=true
|
||||
- GITEA__security__SECRET_KEY=your-secret-key
|
||||
ports:
|
||||
- "2222:22"
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- gitea-data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
depends_on:
|
||||
- gitea-db
|
||||
networks:
|
||||
- gitea-network
|
||||
|
||||
gitea-db:
|
||||
image: postgres:15-alpine
|
||||
container_name: gitea-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=gitea
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=gitea
|
||||
volumes:
|
||||
- gitea-db:/var/lib/postgresql/data
|
||||
networks:
|
||||
- gitea-network
|
||||
|
||||
volumes:
|
||||
gitea-data:
|
||||
gitea-db:
|
||||
|
||||
networks:
|
||||
gitea-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
- `USER_UID`/`USER_GID`: User ID for file permissions
|
||||
- `GITEA__database__*`: Database configuration
|
||||
- `GITEA__server__*`: Server settings
|
||||
- `GITEA__service__*`: Service configuration
|
||||
- `GITEA__mailer__*`: Email configuration
|
||||
- `GITEA__security__*`: Security settings
|
||||
|
||||
## Setup Guide
|
||||
1. **Generate Secret Key**:
|
||||
```bash
|
||||
openssl rand -base64 32
|
||||
```
|
||||
|
||||
2. **Create Directories**:
|
||||
```bash
|
||||
mkdir -p gitea-data
|
||||
```
|
||||
|
||||
3. **Deploy**:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. **Access**: Open http://localhost:3000
|
||||
|
||||
5. **Initial Setup**:
|
||||
- Create admin account
|
||||
- Configure repository settings
|
||||
- Set up SSH keys
|
||||
|
||||
## Configuration
|
||||
|
||||
### App.ini Configuration
|
||||
```ini
|
||||
# /data/gitea/conf/app.ini
|
||||
[database]
|
||||
DB_TYPE = postgres
|
||||
HOST = gitea-db:5432
|
||||
NAME = gitea
|
||||
USER = gitea
|
||||
PASSWD = gitea
|
||||
|
||||
[server]
|
||||
DOMAIN = git.yourdomain.com
|
||||
ROOT_URL = https://git.yourdomain.com/
|
||||
SSH_DOMAIN = git.yourdomain.com
|
||||
SSH_PORT = 2222
|
||||
SSH_LISTEN_PORT = 22
|
||||
LFS_START_SERVER = true
|
||||
LFS_JWT_SECRET = your-lfs-jwt-secret
|
||||
|
||||
[service]
|
||||
DISABLE_REGISTRATION = true
|
||||
REQUIRE_SIGNIN_VIEW = true
|
||||
ENABLE_NOTIFY_MAIL = true
|
||||
|
||||
[mailer]
|
||||
ENABLED = true
|
||||
FROM = git@yourdomain.com
|
||||
MAILER_TYPE = smtp
|
||||
HOST = smtp.gmail.com:587
|
||||
USER = your-email@gmail.com
|
||||
PASSWD = your-app-password
|
||||
|
||||
[security]
|
||||
INSTALL_LOCK = true
|
||||
SECRET_KEY = your-secret-key
|
||||
```
|
||||
|
||||
### SSH Configuration
|
||||
```bash
|
||||
# Add SSH key to Gitea
|
||||
ssh-keygen -t ed25519 -C "your-email@example.com"
|
||||
|
||||
# Add public key to Gitea web interface
|
||||
# Test SSH connection
|
||||
ssh -T git@git.yourdomain.com -p 2222
|
||||
```
|
||||
|
||||
## Repository Management
|
||||
|
||||
### Create Repository
|
||||
```bash
|
||||
# Create new repository via API
|
||||
curl -X POST http://localhost:3000/api/v1/user/repos \
|
||||
-H "Authorization: token YOUR_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"my-repo","description":"My first repository","private":false}'
|
||||
```
|
||||
|
||||
### Clone Repository
|
||||
```bash
|
||||
# HTTPS clone
|
||||
git clone https://git.yourdomain.com/username/my-repo.git
|
||||
|
||||
# SSH clone
|
||||
git clone ssh://git@git.yourdomain.com:2222/username/my-repo.git
|
||||
```
|
||||
|
||||
### Push to Repository
|
||||
```bash
|
||||
cd my-repo
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
git remote add origin https://git.yourdomain.com/username/my-repo.git
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
## User Management
|
||||
|
||||
### Create User
|
||||
```bash
|
||||
# Create user via API
|
||||
curl -X POST http://localhost:3000/api/v1/admin/users \
|
||||
-H "Authorization: token YOUR_ADMIN_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"newuser","email":"user@example.com","password":"password","must_change_password":false}'
|
||||
```
|
||||
|
||||
### Organizations
|
||||
```bash
|
||||
# Create organization
|
||||
curl -X POST http://localhost:3000/api/v1/orgs \
|
||||
-H "Authorization: token YOUR_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"myorg","description":"My organization"}'
|
||||
```
|
||||
|
||||
## Actions (CI/CD)
|
||||
|
||||
### Enable Actions
|
||||
```yaml
|
||||
# In app.ini
|
||||
[actions]
|
||||
ENABLED = true
|
||||
|
||||
# Create .gitea/workflows/build.yml
|
||||
name: Build and Test
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18'
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
- name: Build
|
||||
run: npm run build
|
||||
```
|
||||
|
||||
### Package Registry
|
||||
```bash
|
||||
# Publish npm package
|
||||
npm publish --registry https://git.yourdomain.com/api/packages/npm
|
||||
|
||||
# Publish Docker image
|
||||
docker push git.yourdomain.com/username/my-image:latest
|
||||
```
|
||||
|
||||
## Reverse Proxy (Traefik)
|
||||
```yaml
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.gitea.rule=Host(`git.yourdomain.com`)"
|
||||
- "traefik.http.routers.gitea.tls=true"
|
||||
- "traefik.http.routers.gitea.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.gitea.loadbalancer.server.port=3000"
|
||||
```
|
||||
|
||||
## Backup Strategy
|
||||
```bash
|
||||
# Backup Gitea data
|
||||
docker run --rm -v gitea-data:/data -v $(pwd):/backup alpine tar czf /backup/gitea-backup.tar.gz -C /data .
|
||||
|
||||
# Backup PostgreSQL database
|
||||
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-backup.sql
|
||||
|
||||
# Restore database
|
||||
docker exec -i gitea-db psql -U gitea gitea < gitea-db-backup.sql
|
||||
|
||||
# Restore Gitea data
|
||||
docker run --rm -v gitea-data:/data -v $(pwd):/backup alpine tar xzf /backup/gitea-backup.tar.gz -C /data
|
||||
|
||||
# Restart after restore
|
||||
docker-compose restart gitea
|
||||
```
|
||||
|
||||
## Performance Optimization
|
||||
```yaml
|
||||
# For better performance
|
||||
environment:
|
||||
- GITEA__cache__ENABLED=true
|
||||
- GITEA__cache__ADAPTER=redis
|
||||
- GITEA__cache__HOST=redis://redis:6379/0
|
||||
- GITEA__queue__TYPE=redis
|
||||
- GITEA__queue__CONN_STR=redis://redis:6379/1
|
||||
|
||||
# Add Redis service
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: gitea-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- gitea-redis:/data
|
||||
networks:
|
||||
- gitea-network
|
||||
```
|
||||
|
||||
## Security
|
||||
|
||||
### SSH Keys
|
||||
```bash
|
||||
# Generate SSH key pair
|
||||
ssh-keygen -t ed25519 -C "gitea@yourdomain.com"
|
||||
|
||||
# Add to Gitea admin settings
|
||||
# Configure in app.ini
|
||||
[ssh]
|
||||
MINIMUM_KEY_SIZE = 2048
|
||||
AUTHORIZED_KEYS_ALLOW = true
|
||||
```
|
||||
|
||||
### Access Control
|
||||
```yaml
|
||||
environment:
|
||||
- GITEA__service__DISABLE_REGISTRATION=true
|
||||
- GITEA__service__REQUIRE_SIGNIN_VIEW=true
|
||||
- GITEA__security__LOGIN_REMEMBER_DAYS=30
|
||||
- GITEA__security__COOKIE_USERNAME=git
|
||||
- GITEA__security__COOKIE_REMEMBER_NAME=gitea_incredible
|
||||
```
|
||||
|
||||
### Two-Factor Authentication
|
||||
```yaml
|
||||
environment:
|
||||
- GITEA__security__TWO_FACTOR_ENABLED=true
|
||||
- GITEA__security__TWO_FACTOR_REQUIRE_SIGN_IN=true
|
||||
```
|
||||
|
||||
## Monitoring
|
||||
|
||||
### Health Checks
|
||||
```bash
|
||||
# Check Gitea health
|
||||
curl http://localhost:3000/api/v1/version
|
||||
|
||||
# Check database connection
|
||||
docker exec gitea-db pg_isready -U gitea
|
||||
```
|
||||
|
||||
### Logs
|
||||
```bash
|
||||
# View logs
|
||||
docker-compose logs -f gitea
|
||||
|
||||
# Check specific logs
|
||||
docker exec gitea tail -f /data/gitea/log/gitea.log
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
- **SSH connection issues**: Check SSH key configuration
|
||||
- **Database connection**: Verify PostgreSQL settings
|
||||
- **Performance problems**: Monitor resource usage
|
||||
- **Email issues**: Check SMTP configuration
|
||||
- **Repository access**: Verify permissions
|
||||
|
||||
## Maintenance
|
||||
```bash
|
||||
# Restart services
|
||||
docker-compose restart
|
||||
|
||||
# Update images
|
||||
docker-compose pull && docker-compose up -d
|
||||
|
||||
# Clean up old data
|
||||
docker exec gitea gitea admin cleanup
|
||||
|
||||
# Check repository integrity
|
||||
docker exec gitea gitea admin repo check
|
||||
```
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### LFS (Large File Storage)
|
||||
```yaml
|
||||
environment:
|
||||
- GITEA__server__LFS_START_SERVER=true
|
||||
- GITEA__server__LFS_JWT_SECRET=your-lfs-jwt-secret
|
||||
|
||||
# Install LFS client
|
||||
git lfs install
|
||||
|
||||
# Track large files
|
||||
git lfs track "*.zip"
|
||||
git add .gitattributes
|
||||
git commit -m "Add LFS tracking"
|
||||
```
|
||||
|
||||
### Mirror Repositories
|
||||
```bash
|
||||
# Create mirror
|
||||
curl -X POST http://localhost:3000/api/v1/repos/migrate \
|
||||
-H "Authorization: token YOUR_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"clone_addr":"https://github.com/user/repo.git","repo_name":"my-mirror","mirror":true}'
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
```bash
|
||||
# Create webhook
|
||||
curl -X POST http://localhost:3000/api/v1/repos/username/repo/hooks \
|
||||
-H "Authorization: token YOUR_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"type":"gitea","config":{"content_type":"json","url":"https://your-domain.com/webhook","events":["push"]}}'
|
||||
```
|
||||
|
||||
## Integration Examples
|
||||
|
||||
### GitHub Migration
|
||||
```bash
|
||||
# Migrate from GitHub
|
||||
curl -X POST http://localhost:3000/api/v1/repos/migrate \
|
||||
-H "Authorization: token YOUR_ACCESS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"clone_addr":"https://github.com/user/repo.git","repo_name":"repo","service_type":"github","auth_token":"GITHUB_TOKEN"}'
|
||||
```
|
||||
|
||||
### CI/CD Integration
|
||||
```yaml
|
||||
# GitHub Actions compatible workflows
|
||||
name: CI/CD Pipeline
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
```
|
||||
|
||||
### Package Registry
|
||||
```bash
|
||||
# Setup npm registry
|
||||
npm config set registry https://git.yourdomain.com/api/packages/npm
|
||||
|
||||
# Login to registry
|
||||
npm login --registry https://git.yourdomain.com/api/packages/npm
|
||||
|
||||
# Publish package
|
||||
npm publish
|
||||
```
|
||||
|
||||
## Customization
|
||||
|
||||
### Custom Themes
|
||||
```yaml
|
||||
# In app.ini
|
||||
[ui]
|
||||
DEFAULT_THEME = gitea-auto
|
||||
THEMES = gitea,gitea-auto,gitea-dark
|
||||
|
||||
# Custom CSS
|
||||
[ui.meta]
|
||||
AUTHOR = Your Name
|
||||
DESCRIPTION = Your Git Service
|
||||
KEYWORDS = git,forge,development
|
||||
```
|
||||
|
||||
### Custom Pages
|
||||
```yaml
|
||||
# Custom home page
|
||||
[ui]
|
||||
CUSTOM_EMOJIS = :gitea:,:git:
|
||||
SHOW_MILESTONES_DASHBOARD_PAGE = true
|
||||
SHOW_ISSUES_SUMMARY_PAGE = true
|
||||
```
|
||||
Reference in New Issue
Block a user