#!/bin/bash set -e CONTAINER_NAME="gitea" HOST_DATA_PATH="/opt/gitea-data" WEB_PORT="3000" SSH_PORT="2222" PROFILE_NAME="gitea-profile" ROOT_DISK_SIZE="10GB" NETWORK_NAME="incusbr0" echo "Creating Incus profile with 16GB memory limit and root disk..." incus profile create $PROFILE_NAME || true incus profile set $PROFILE_NAME limits.memory=16GB incus profile device add $PROFILE_NAME root disk path=/ pool=default size=$ROOT_DISK_SIZE echo "Ensuring network exists..." if ! incus network list | grep -q $NETWORK_NAME; then echo "Creating network $NETWORK_NAME..." incus network create $NETWORK_NAME fi echo "Creating host directory for Gitea data..." sudo mkdir -p $HOST_DATA_PATH sudo chmod 777 $HOST_DATA_PATH echo "Creating Incus container..." incus launch images:ubuntu/22.04 $CONTAINER_NAME -p $PROFILE_NAME echo "Attaching network to container..." incus network attach $NETWORK_NAME $CONTAINER_NAME echo "Configuring container..." incus config set $CONTAINER_NAME security.privileged=true incus config set $CONTAINER_NAME linux.kernel_modules=overlay,nf_nat incus config device add $CONTAINER_NAME gitea-data disk source=$HOST_DATA_PATH path=/var/lib/gitea incus config device add $CONTAINER_NAME gitea-ssh proxy listen=tcp:0.0.0.0:$SSH_PORT connect=tcp:127.0.0.1:22 incus config device add $CONTAINER_NAME gitea-web proxy listen=tcp:0.0.0.0:$WEB_PORT connect=tcp:127.0.0.1:3000 echo "Waiting for network to be ready..." sleep 10 echo "Installing Gitea dependencies..." incus exec $CONTAINER_NAME -- bash -c " apt update apt install -y wget git postgresql postgresql-contrib " echo "Setting up PostgreSQL..." incus exec $CONTAINER_NAME -- bash -c " sudo -u postgres psql -c \"CREATE USER gitea WITH PASSWORD 'gitea'\" sudo -u postgres psql -c \"CREATE DATABASE gitea OWNER gitea\" " echo "Installing Gitea..." incus exec $CONTAINER_NAME -- bash -c " wget -O gitea https://dl.gitea.io/gitea/1.18.0/gitea-1.18.0-linux-amd64 chmod +x gitea mv gitea /usr/local/bin/gitea " echo "Creating Gitea user and setting up directories..." incus exec $CONTAINER_NAME -- bash -c " adduser --system --group --disabled-password --home /var/lib/gitea --shell /bin/bash gitea mkdir -p /var/lib/gitea/{custom,data,log} chown -R gitea:gitea /var/lib/gitea/ chmod -R 750 /var/lib/gitea/ mkdir /etc/gitea chown root:gitea /etc/gitea chmod 770 /etc/gitea " echo "Creating Gitea service..." incus exec $CONTAINER_NAME -- bash -c "cat > /etc/systemd/system/gitea.service << EOL [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target After=postgresql.service [Service] RestartSec=2s Type=simple User=gitea Group=gitea WorkingDirectory=/var/lib/gitea/ ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini Restart=always Environment=USER=gitea HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target EOL" echo "Starting Gitea..." incus exec $CONTAINER_NAME -- bash -c " systemctl daemon-reload systemctl enable gitea systemctl start gitea " echo "Gitea setup complete!" echo "Access Gitea at http://$(incus exec $CONTAINER_NAME -- ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1):$WEB_PORT" echo "SSH access available on port $SSH_PORT"