Files
homelab-agents/HOW-TO-GUIDE.md
Homelab Automation 7a46e82c7a Fix configuration: Use internal IP for clone commands, domain via Pangolin Tunnel
- Reverted ROOT_URL to HTTP on internal IP (100.120.125.113:3000)
- Clone commands use internal IP (works on local network and with Pangolin)
- Added note: Access UI at https://git.pdmarf.co.uk via Pangolin Tunnel
- Pangolin Tunnel handles HTTPS → HTTP conversion

Users on local network: Clone using http://100.120.125.113:3000/pdm/[repo]
Users via Pangolin: Access UI at https://git.pdmarf.co.uk
Both methods work with same repositories
2025-11-23 15:07:37 +00:00

543 lines
12 KiB
Markdown

# Gitea How-To Guide
Quick reference guide for using Gitea at http://100.120.125.113:3000 to manage your homelab projects.
## Table of Contents
- [Getting Started](#getting-started)
- [Terminology](#terminology)
- [Cloning Repositories](#cloning-repositories)
- [Making Changes](#making-changes)
- [Pushing Changes](#pushing-changes)
- [Common Workflows](#common-workflows)
- [Troubleshooting](#troubleshooting)
---
## Getting Started
### About Your Gitea Server
**Note:** Access via Pangolin Tunnel at https://git.pdmarf.co.uk if outside the local network.
- **Server URL: http://100.120.125.113:3000 (or https://git.pdmarf.co.uk via Pangolin)
- **User**: pdm
- **Available Repositories**:
- `homelab-agents` - Shared AI agent prompts (pull-only on VPS)
- `vps-system-apps` - VPS system configuration (push for backup)
- Additional project repositories as needed
---
## Terminology
### Workstation
Your **main development machine** where you do most of your work. This could be:
- Your laptop (MacBook, Windows laptop, Linux laptop)
- Your desktop computer
- Any machine you consider your primary development environment
**Not** a VPS - it's a machine you have physical access to or directly control.
### VPS
A **Virtual Private Server** - a remote machine hosted in the cloud or on another system. Examples:
- Your system-apps VPS at your hosting provider
- Remote servers you manage
- Machines you SSH into rather than use directly
### Repository
A project folder tracked by git with version history. Each repository can be:
- `homelab-agents` - The shared agents repository
- `vps-system-apps` - Your VPS configuration repository
- Any other project you create
---
## Cloning Repositories
Cloning creates a local copy of a repository on your workstation or VPS.
### Clone homelab-agents (Shared Prompts)
Use this to get the latest AI agent prompts on your VPS:
```bash
git clone http://100.120.125.113:3000/pdm/homelab-agents.git ~/.homelab-agents
```
This creates a `~/.homelab-agents` directory with all shared agent definitions and templates.
**Use Cases:**
- Getting agent prompts on a new VPS
- Keeping agents synchronized across systems
- Read-only reference for development
### Clone vps-system-apps (Project Configuration)
Use this to get your VPS configuration repository:
```bash
git clone http://100.120.125.113:3000/pdm/vps-system-apps.git ~/projects/system-apps
```
This creates a `~/projects/system-apps` directory with Docker, scripts, and documentation.
**Use Cases:**
- Setting up a new VPS with existing configuration
- Cloning on your workstation for editing
- Working on system configuration with version history
### Clone Any Other Project Repository
For future projects, use the same pattern:
```bash
git clone http://100.120.125.113:3000/pdm/[project-name].git ~/projects/[project-name]
```
---
## Making Changes
### Checking Repository Status
See what files have changed:
```bash
cd ~/projects/system-apps
git status
```
Output shows:
- Modified files (red) - existing files you changed
- Untracked files (red) - new files not yet in git
- Staged files (green) - files ready to commit
### Viewing Specific Changes
See exactly what changed in a file:
```bash
git diff docker-compose/docker-compose.yml
```
Or see all changes:
```bash
git diff
```
### Creating a Local Branch (Optional)
For experimental work, create a separate branch:
```bash
git checkout -b feature/new-monitoring-stack
# ... make your changes ...
git add .
git commit -m "Add Prometheus monitoring stack"
```
To switch back to main branch:
```bash
git checkout main
```
---
## Pushing Changes
### Basic Push Workflow
After making changes, follow these three steps:
#### Step 1: Stage Your Changes
Add all modified files to staging:
```bash
cd ~/projects/system-apps
git add -A
```
Or add specific files:
```bash
git add docker-compose/docker-compose.yml
git add scripts/deploy.sh
```
#### Step 2: Commit Your Changes
Create a commit with a descriptive message:
```bash
git commit -m "Add health checks to Docker services"
```
**Good commit message practices:**
- Start with action verb: "Add", "Fix", "Update", "Refactor"
- Be specific: what changed and why
- Keep it concise (under 72 characters for first line)
**Examples:**
```bash
git commit -m "Add Prometheus scrape config for Docker metrics"
git commit -m "Fix disk space alert threshold in monitoring"
git commit -m "Update deployment documentation with new workflow"
git commit -m "Refactor docker-compose.yml for better organization"
```
#### Step 3: Push to Gitea
Send your commits to the Gitea server:
```bash
git push origin main
```
**Success looks like:**
```
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 456 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://100.120.125.113:3000/pdm/vps-system-apps.git
abc1234..def5678 main -> main
```
---
## Common Workflows
### Workflow 1: Edit on Your Workstation, Push to Gitea
**Workstation** = Your main development machine (laptop, desktop, etc.)
```bash
# Step 1: On your workstation, clone the repository
# (e.g., your laptop or desktop computer)
git clone http://100.120.125.113:3000/pdm/vps-system-apps.git ~/projects/system-apps
# Step 2: Edit files on your workstation using vim, VS Code, or any editor
cd ~/projects/system-apps
vim docker-compose/docker-compose.yml
vim scripts/deploy.sh
# Step 3: Check what you changed
git status
# Step 4: Stage and commit
git add -A
git commit -m "Update Docker services with new health checks"
# Step 5: Push to Gitea
git push origin main
# Now your changes are backed up on Gitea and can be deployed to your VPS
```
**When to use this workflow:**
- Editing configuration files on your computer
- Writing scripts and documentation
- Testing changes before deploying to VPS
### Workflow 2: Update Agents on VPS
```bash
# On your VPS (remote server)
cd ~/.homelab-agents
# Get latest agents from Gitea
git pull origin main
# Now use the agents in your work
cat agents/sysadmin-session-closer.md
```
### Workflow 3: Work on VPS, Backup to Gitea
```bash
# On your VPS (remote server)
cd ~/projects/system-apps
# Make changes directly on the VPS
vim scripts/backup.sh
vim docker-compose/docker-compose.yml
# Back up your work to Gitea
git add -A
git commit -m "Update backup script with better error handling"
git push origin main
# Now your work is backed up and version-controlled on Gitea!
```
### Workflow 4: Create and Test New Feature
```bash
# Create a new branch for experimental work
git checkout -b feature/new-setup
# Make your changes
# Test everything locally
# If it works, merge back to main
git checkout main
git merge feature/new-setup
# Push to Gitea
git push origin main
# Delete the feature branch (optional)
git branch -d feature/new-setup
```
---
## Useful Git Commands
### View Commit History
See what changed and when:
```bash
# Show last 10 commits
git log --oneline -10
# Show commits with files changed
git log --stat -5
# Show specific commit details
git show abc1234
```
### Undo Changes
If you made a mistake:
```bash
# Discard changes to a specific file (not yet committed)
git checkout -- scripts/deploy.sh
# Discard all uncommitted changes
git reset --hard HEAD
# Undo the last commit (keep your changes)
git reset --soft HEAD~1
# Undo the last commit (discard changes)
git reset --hard HEAD~1
```
### Compare Versions
See differences between versions:
```bash
# Changes not yet committed
git diff
# Changes between two commits
git diff abc1234 def5678
# Changes between branches
git diff main feature/new-setup
```
### Sync with Latest Changes
Get updates from Gitea:
```bash
# Fetch latest without merging
git fetch origin
# Pull latest and merge (recommended)
git pull origin main
```
---
## Troubleshooting
### "fatal: could not read Username"
**Problem:** Git is asking for authentication but you don't have credentials saved.
**Solution 1 - Use HTTPS with saved credentials:**
```bash
git config --global credential.helper store
git clone http://100.120.125.113:3000/pdm/homelab-agents.git
# Enter username (pdm) and password when prompted
# Credentials are saved for future use
```
**Solution 2 - Configure git user:**
```bash
git config --global user.name "pdm"
git config --global user.email "your@email.com"
```
### "Permission denied" on push
**Problem:** Your push was rejected, possibly due to:
- Network access to Gitea server
- Repository permissions
- Authentication issue
**Check network access:**
```bash
ping 100.120.125.113
curl -I http://100.120.125.113:3000
```
**Verify remote URL:**
```bash
git remote -v
# Should show: origin http://100.120.125.113:3000/pdm/[project].git
```
**Test Gitea access:**
```bash
# Try to fetch (read-only test)
git fetch origin
```
### "branch is behind" or merge conflicts
**Problem:** Someone else pushed changes, and you have local changes too.
**Solution:**
```bash
# Get latest from Gitea
git pull origin main
# If conflicts occur, manually edit the conflicted files
git add .
git commit -m "Resolve merge conflicts"
git push origin main
```
### Repository not found
**Problem:** Repository URL is incorrect or repository doesn't exist on Gitea.
**Solution:**
```bash
# Verify correct URL format:
# http://100.120.125.113:3000/pdm/[exact-project-name].git
# Check what repositories exist by visiting:
http://100.120.125.113:3000/pdm
# Update remote if needed
git remote set-url origin http://100.120.125.113:3000/pdm/correct-name.git
```
### Lost changes or need to recover
**Problem:** You made changes but accidentally ran `git reset --hard`
**Solution - Find your work:**
```bash
# See recent commits even if hidden
git reflog
# Restore to a specific commit
git reset --hard abc1234
```
---
## Quick Reference Card
```bash
# Cloning
git clone http://100.120.125.113:3000/pdm/homelab-agents.git ~/.homelab-agents
git clone http://100.120.125.113:3000/pdm/vps-system-apps.git ~/projects/system-apps
# Status and viewing changes
git status # See what changed
git diff # See exact changes
git log --oneline -10 # See recent commits
# Committing and pushing
git add -A # Stage all changes
git commit -m "Your message" # Create commit
git push origin main # Push to Gitea
# Getting updates
git pull origin main # Get latest from Gitea
git fetch origin # Check for updates without merging
# Branches
git checkout -b feature-name # Create new branch
git checkout main # Switch to main branch
git merge feature-name # Merge branch into main
# Undoing
git reset --hard HEAD~1 # Undo last commit
git checkout -- filename # Undo changes to file
git revert abc1234 # Create new commit undoing old one
```
---
## Tips and Best Practices
### ✓ Do
- **Pull before you push** - Get latest changes first: `git pull origin main`
- **Commit frequently** - Small, focused commits are easier to understand
- **Write good commit messages** - Future you will thank you
- **Test before pushing** - Verify changes work before committing
- **Use meaningful branch names** - `feature/monitoring-stack` not `test123`
- **Keep backups** - Push to Gitea regularly for safety
### ✗ Don't
- **Don't commit secrets** - Never commit passwords, API keys, or tokens
- **Don't push broken code** - Test locally first
- **Don't commit generated files** - Use `.gitignore` for compiled code, dependencies
- **Don't force push to main** - Unless you really know what you're doing
- **Don't let changes sit locally** - Push to Gitea for backup regularly
- **Don't ignore errors** - Read error messages carefully before asking for help
---
## Getting Help
### Git Help
```bash
git help [command] # Get help for a command
git help commit # Example: help for commit command
```
### Check Gitea Web Interface
Visit http://100.120.125.113:3000 to:
- Browse repository files
- View commit history
- See who changed what
- Manage repository settings
### Verify Your Setup
```bash
# Check git version
git --version
# Check global config
git config --global -l
# Test Gitea access
git clone http://100.120.125.113:3000/pdm/homelab-agents.git test-repo
# If successful, you're all set!
rm -rf test-repo
```
---
**Happy coding! Your homelab now has version control.** 🚀