diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/conf/docker-compose.init.yml b/conf/docker-compose.init.yml new file mode 100644 index 0000000..470cf2d --- /dev/null +++ b/conf/docker-compose.init.yml @@ -0,0 +1,25 @@ +services: + gitea: + image: gitea/gitea:latest + container_name: gitea + restart: always + environment: + - ROOT_URL=${IPV4_ADDRESS}:3000/ + ports: + # - "2222:22" # <-- SSH access is disabled for initial setup, uncomment if needed + - "3000:3000" # Uncomment if you want to expose Gitea web interface directly (needed if not rooted behind a reverse proxy or for initial setup) + + volumes: + # Persistent storage for Gitea data, configuration, repositories, etc. + # Maps a named volume 'gitea_data' to the container's /data directory. + - ./data:/data + - /etc/timezone:/etc/timezone:ro # <--- Timezone settings + - /etc/localtime:/etc/localtime:ro # <--- Timezone settings + - ./data/git:/data/host_repos:ro # <--- Mount for Git repositories + - ./logs/:/data/gitea/log/:rw # <--- Mount for Gitea logs (neccessary for debugging and fail2ban) + + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/"] + interval: 1m30s + timeout: 10s + retries: 3 diff --git a/docker-compose.runner.yml b/docker-compose.runner.yml new file mode 100644 index 0000000..2eecb53 --- /dev/null +++ b/docker-compose.runner.yml @@ -0,0 +1,56 @@ +services: + runner: + image: docker.io/gitea/act_runner:nightly + + environment: + CONFIG_FILE: /config.yaml # <-- Path to the runner configuration file inside the container + GITEA_INSTANCE_URL: http://gitea:3000/ # <-- Use the internal Docker network URL + GITEA_RUNNER_REGISTRATION_TOKEN: asdasd # <-- REPLACE WITH YOUR REGISTRATION TOKEN + GITEA_RUNNER_NAME: FastFlaskRunner + + volumes: + - ./config/runner.yaml:/config.yaml # <-- Mount for runner configuration + - ./data/prod/pkgs:/prod/pkgs # <-- Mount for production packages + - ./data/prod/data:/prod/data # <-- Mount for production data + - ./data/develop:/develop/data # <-- Mount for development data + - /var/run/docker.sock:/var/run/docker.sock # <-- Mount Docker socket for Docker-in-Docker functionality (DoNotChange) + + depends_on: + - gitea + + restart: always + + networks: + - fast-services + + gitea: + image: gitea/gitea:latest + container_name: gitea + restart: always + environment: + - ROOT_URL=https://git.nxs.solutions/ # <-- Change to your Gitea URL either Domain or IP with protocol + ports: + - "2222:22" # <-- SSH access for Git operations (Change if needed to your preferred port) + # - "3000:3000" # Uncomment if you want to expose Gitea web interface directly (needed if not rooted behind a reverse proxy) + + volumes: + # Persistent storage for Gitea data, configuration, repositories, etc. + # Maps a named volume 'gitea_data' to the container's /data directory. + - ./data:/data + - /etc/timezone:/etc/timezone:ro # <--- Timezone settings + - /etc/localtime:/etc/localtime:ro # <--- Timezone settings + - ./data/git:/data/host_repos:ro # <--- Mount for Git repositories + - ./logs/:/data/gitea/log/:rw # <--- Mount for Gitea logs (neccessary for debugging and fail2ban) + + networks: + - fast-services + + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/"] + interval: 1m30s + timeout: 10s + retries: 3 + +networks: + fast-services: + external: true diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..27efd47 --- /dev/null +++ b/setup.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Ask the user if they want to start the initial setup or they want to migrate from an existing installation + +read -r -p "Do you want to start the initial setup? (y/n): " INSTALL_GITEA + +if [ -z "$INSTALL_GITEA" ] || [[ "$INSTALL_GITEA" != "y" && "$INSTALL_GITEA" != "n" ]]; then + echo "Skipping inital setup. Exiting..." + exit 1 +else + touch .env + IPV4_ADDRESS=$(hostname -I | awk '{print $1}') + export IPV4_ADDRESS + echo "Current IPv4 Address: $IPV4_ADDRESS" + echo "Temporary enable port 3000 for initial setup ..." + sudo ufw allow 3000/tcp + sudo ufw reload + sudo ufw status + # Start the initial setup docker compose file + echo "Starting initial setup container ..." + docker compose -f config/docker-compose.init.yml up -d + echo "Container is running at http://$IPV4_ADDRESS:3000" + echo "Please complete the setup in the web interface." + read -r -p "Please add a runner key or press any key to continue after completing the setup..." RUNNER_KEY + + if [ -n "$RUNNER_KEY" ]; then + echo "Runner key provided: $RUNNER_KEY" + echo "RUNNER_KEY=$RUNNER_KEY" >> .env + else + echo "No runner key provided. Continuing..." + fi + + echo "ROOT_URL=http://$IPV4_ADDRESS:3000" >> .env + echo "Stopping initial setup container ..." + docker compose -f config/docker-compose.init.yml down + echo "Disabling temporary port 3000 ..." + sudo ufw delete allow 3000/tcp + sudo ufw reload + sudo ufw status +fi + + +# Get the current IPv4 address + + +