π Gitea Incus Deployment Script π
This script automates the deployment of Gitea using a single Incus container with Docker Compose. It provides a simple command-line interface to create a profile, install Gitea with PostgreSQL, backup data, and update the installation.
π Table of Contents
- β Prerequisites
- π Usage
- βοΈ Configuration
- π Script Behavior
- π Notes
- π οΈ Customization
- β Troubleshooting
β Prerequisites
- π¦ Incus installed and configured on your system
- π Sudo or root access
π Usage
Make the script executable:
chmod +x gitea
π§ Create Profile
Create an Incus profile for Gitea:
./gitea profile [-c cpu] [-r ram]
Options:
-c cpu: Specify the number of CPUs (optional, default: 2)-r ram: Specify the amount of RAM in GB (optional, default: 2GB)
π¦ Install Gitea
Install Gitea and PostgreSQL using Docker Compose:
./gitea install [-p dbpassword]
Options:
-p dbpassword: Specify a custom database password (optional)
If no password is provided, a secure random password will be generated automatically.
πΎ Backup Gitea
Create a backup of your Gitea installation:
./gitea backup
This will create a backup of your Gitea data and PostgreSQL database in the ./backups/ directory.
π Update Gitea
Update Gitea to the latest version:
./gitea update
This will pull the latest Docker images and restart the services.
βοΈ Configuration
You can customize the deployment by:
- π Environment File: Create a
.envfile in the same directory as the script to override the default settings:
CONTAINER_NAME="my-gitea"
HTTP_PORT="8080"
DB_USER="custom_user"
- π½ Data Volumes: By default, the script creates data volumes for persistence. You can customize the paths in the script:
incus config device add $CONTAINER_NAME gitea-data disk source=/path/to/host/storage path=/var/lib/gitea
incus config device add $CONTAINER_NAME postgres-data disk source=/path/to/host/postgres path=/var/lib/postgresql/data
π Script Behavior
- The script enforces the correct order of operations:
- β Profile must be created before installation
- π The script will create a network named "incusbr0" if it doesn't exist
- πΎ The root disk size for the Incus container is set to 20GB by default
- π Gitea will be accessible on port 80/443, and SSH access will be on port 2222
- π¦ The script creates a single Incus container with nesting enabled
- π³ Docker and Docker Compose are installed inside the Incus container
- π Gitea and PostgreSQL are deployed using Docker Compose within the Incus container
- π Nginx is configured as a reverse proxy with SSL via Certbot
π Notes
- π₯οΈ After installation, access Gitea through the web interface to complete the setup
- π The script provides the URL to access Gitea after installation
- π The latest versions of Gitea and PostgreSQL Docker images are used
- π Backups are stored in the
./backups/directory with timestamps
π οΈ Customization
You can modify the following variables in the script or through the .env file:
| Variable | Description | Default |
|---|---|---|
CONTAINER_NAME |
Name of the Incus container | gitea |
HTTP_PORT |
Port for HTTP traffic | 80 |
HTTPS_PORT |
Port for HTTPS traffic | 443 |
SSH_PORT |
Port for SSH access | 2222 |
PROFILE_NAME |
Name of the Incus profile | gitea |
ROOT_DISK_SIZE |
Size of the root disk for the container | 20GB |
NETWORK_NAME |
Name of the Incus network | incusbr0 |
DB_USER |
PostgreSQL database user for Gitea | gitea |
DB_PASS |
PostgreSQL database password | Generated or specified during install |
β Troubleshooting
If you encounter any issues:
-
π Check the Incus container status:
incus list -
π View the container logs:
incus exec gitea -- docker-compose logs -
π Ensure all required ports are open and not in use by other services
-
π Check Gitea logs:
incus exec gitea -- docker-compose logs server -
π Check Nginx logs:
incus exec gitea -- cat /var/log/nginx/error.log