This environment is set up for learning how to work with Gitea โ a painless self-hosted Git service that provides a GitHub-like experience for managing repositories, issues, and collaborative development workflows.
๐ง System Components
gitea: The Git hosting platform daemon running as a systemd service.
๐ ๏ธ Tools
tea: The official command-line client for Gitea.git: Version control system for managing repositories.
๐ฏ Getting Started
Access the Web Interface
Gitea is accessible at: http://gitea.local
Pre-configured user account:
- Username:
laborant - Password:
iximiuz
Create a new repository
# Create a new directory
mkdir test
cd test
# Initialize a new Git repository
git init
# Create a README file
echo "Hello world" > README.md
git add README.md
git commit -m "Initial commit"
export REPO=test-$(hostname)
# Create a new repository via tea CLI
tea repo create --name $REPO
# Push the repository to Gitea
git remote add origin "git@gitea.local:laborant/${REPO}.git"
git push -u origin main
Run Gitea Actions
The playground comes with runners configured for running Gitea Actions.
Create a workflow directory:
mkdir -p .gitea/workflows
Place a workflow file in the workflow directory:
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions ๐
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "๐ The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "๐ง This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "๐ The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "๐ก The ${{ gitea.repository }} repository has been cloned to the runner."
- run: echo "๐ฅ๏ธ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- run: echo "๐ This job's status is ${{ job.status }}."
Commit and push the changes:
git add .
git commit -m "add actions"
git push
๐ Learn More
Happy learning! ๐
A real VM, not a container
Get root on a VM with its own kernel, so Docker, Kubernetes, and systemd just work.
Read the docs โ
SSH from browser or CLI
Use the built-in web terminal, or connect with labctl ssh, plain ssh, scp, or rsync.
Read the docs โ
Drive it with AI
Let Claude, Codex, or any MCP client start this playground and run commands in it.
Read the docs โ
Expose HTTP(S) ports
Give any web app running inside the VM a public URL - for yourself or to share with others.
Read the docs โ
Share terminals
Invite others into your terminal session, or open it yourself from another device.
Read the docs โ
Customize with init scripts
Add shell scripts that run at boot to install packages, clone repos, or seed test data.
Read the docs โ
Private networking
VMs reach the internet via NAT with no public IP; several VMs share bridge networks.
Read the docs โ
Ephemeral or persistent
By default, VMs are destroyed when the session ends; enable persistence to keep the disks for next time.
Read the docs โ
Built-in container registry
A private registry.iximiuz.com for every playground to share images across services and VMs.
Read the docs โ