diff --git a/.gitea/workflows/main.yml b/.gitea/workflows/main.yml new file mode 100644 index 0000000..855d90d --- /dev/null +++ b/.gitea/workflows/main.yml @@ -0,0 +1,61 @@ +name: Build, Push, and Deploy to Nomad + +on: + push: + branches: + - main + +jobs: + docker-nomad: + runs-on: self-hosted + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Log in to Container Registry + run: echo ${{ secrets.password }} | docker login registry.i80.dk -u ${{ secrets.username }} --password-stdin + + - name: Build Docker Image + run: | + COMMIT_HASH=$(git rev-parse --short HEAD) + docker build -t registry.i80.dk/gitea/pythontemplateproject:latest -t registry.i80.dk/gitea/pythontemplateproject:${COMMIT_HASH} . + + + - name: Push Docker Image + run: | + COMMIT_HASH=$(git rev-parse --short HEAD) + echo "registry.i80.dk/gitea/pythontemplateproject:latest" + echo "registry.i80.dk/gitea/pythontemplateproject:${COMMIT_HASH}" + docker push registry.i80.dk/gitea/pythontemplateproject:${COMMIT_HASH} + docker push registry.i80.dk/gitea/pythontemplateproject:latest + + + - name: Validate Nomad Job + env: + NOMAD_ADDR: https://nomad.i80.dk + run: nomad job validate .gitea/workflows/nomad-job.hcl + + - name: Stop old deployment + env: + NOMAD_ADDR: https://nomad.i80.dk + run: nomad job stop -purge -no-shutdown-delay pythontemplateproject + continue-on-error: true + + + - name: Apply Nomad Job + env: + NOMAD_ADDR: https://nomad.i80.dk + run: nomad job run .gitea/workflows/nomad-job.hcl + + - name: Update Nginx Configuration + run: ssh runner@nomad sudo /opt/nginx_updater/venv/bin/python3 /opt/nginx_updater/nginx_updater.py pythontemplateproject + + + +# - name: Restart Nomad Job +# env: +# NOMAD_ADDR: https://nomad.i80.dk +# run: | +# nomad job stop pythontemplateproject +# sleep 5 # Optional: Wait to ensure the old allocation is stopped +# nomad job run .gitea/workflows/nomad-job.hcl diff --git a/.gitea/workflows/main.yml.tmpl b/.gitea/workflows/main.yml.tmpl index 6075429..cce4463 100644 --- a/.gitea/workflows/main.yml.tmpl +++ b/.gitea/workflows/main.yml.tmpl @@ -50,6 +50,8 @@ jobs: - name: Update Nginx Configuration run: ssh runner@nomad sudo /opt/nginx_updater/venv/bin/python3 /opt/nginx_updater/nginx_updater.py [[PROJECT_NAME]] + - name: Update Forwarder Configuration + run: ssh runner@nomad sudo /opt/nginx_updater/venv/bin/python3 /opt/nginx_updater/update_forwarder.py [[PROJECT_NAME]] # - name: Restart Nomad Job diff --git a/.gitea/workflows/nomad-job.hcl b/.gitea/workflows/nomad-job.hcl new file mode 100644 index 0000000..e4a0df7 --- /dev/null +++ b/.gitea/workflows/nomad-job.hcl @@ -0,0 +1,60 @@ +job "pythontemplateproject" { + region = "global" + datacenters = ["dc1"] + type = "service" + + update { + stagger = "60s" + max_parallel = 1 + progress_deadline = "6m" + } + + group "pythontemplateproject-group" { + count = 1 + + network { + port "port-app" { + to = 9048 # Internal application port + } + } + + # Register the service with Consul + service { + provider = "consul" + name = "pythontemplateproject" + port = "port-app" + + # Traefik-specific tags for routing + tags = [ + "PORT=${NOMAD_PORT_port-app}" + ] + + # Define a health check using TCP + check { + name = "tcp_check" + type = "tcp" + interval = "10s" + timeout = "2s" + } + } + + task "pythontemplateproject-task" { + driver = "docker" + + config { + image = "registry.i80.dk/gitea/pythontemplateproject:latest" + ports = ["port-app"] + } + + env { + APP_ENV = "production" + PORT = "${NOMAD_PORT_port-app}" + } + + resources { + cpu = 250 + memory = 80 + } + } + } +} diff --git a/.gitea/workflows/nomad-job.hcl.tmpl b/.gitea/workflows/nomad-job.hcl.tmpl index b3946ab..71756e0 100644 --- a/.gitea/workflows/nomad-job.hcl.tmpl +++ b/.gitea/workflows/nomad-job.hcl.tmpl @@ -1,4 +1,4 @@ -job "{{PROJECT_NAME}}" { +job "[[PROJECT_NAME]]" { region = "global" datacenters = ["dc1"] type = "service" @@ -42,7 +42,7 @@ job "{{PROJECT_NAME}}" { driver = "docker" config { - image = "registry.i80.dk/gitea/{{PROJECT_NAME}}:latest" + image = "registry.i80.dk/gitea/[[PROJECT_NAME]]:latest" ports = ["port-app"] } diff --git a/.gitignore b/.gitignore index 61660b6..82fef80 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .venv/* .ídea .idea/* +.gitea/**/build*/ + diff --git a/project-installer b/project-installer index e602fd7..83e9ac0 100755 Binary files a/project-installer and b/project-installer differ