Gitea von Binary installieren: https://docs.gitea.com/installation/install-from-binary

  • Debian nach eigenem Standard
  • git installieren
  • User “git” erzeugen
  • Verzeichnisse unter /var/lib/gitea erzeugen und schützen
  • /etc/gitea erzeugen und schützen
  • passendes gitea von https://dl.gitea.com/gitea/ holen, auf /usr/local/bin/ kopieren
  • systemd Unit erzeugen – https://docs.gitea.com/installation/linux-service
  • Environment=HTTP_PROXY=xxxx einfügen
  • Environment=HTTPS_PROXY=xxxx einfügen
  • Environment=NO_PROXY=xxxx einfügen

Gitea Actions und Migrations (=Replica) über Proxy erlauben (/etc/gitea/app.ini):

[proxy]
PROXY_ENABLED = true
PROXY_URL =

[migrations]
ALLOW_LOCALNETWORKS = true
ALLOWED_DOMAINS = gitea.com

[actions]
ENABLED=true
DEFAULT_ACTIONS_URL=self
STORAGE_TYPE=local
  • HTTP_PORT, ROOT_URL, CERT_FILE, PROTOCOL für HTTPS

Notwendige actions von Gitea.com replizieren (leicht modifizierte Namen damit alles unter “actions” liegt):

  • Gitea Organisation “actions” erzeugen
  • Migration von https://gitea.com/docker/login-action auf docker-login in actions
  • Migration von https://gitea.com/docker/setup-buildx-action auf docker-setup-buildx in actions
  • Migration von https://gitea.com/docker/build-push-action auf docker-build-push in actions
  • Migration von https://gitea.com/actions/checkout auf checkout in actions

act_runner (ausführendes Organ) konfigurieren (https://docs.gitea.com/usage/actions/quickstart)

  • passendes Binary von https://dl.gitea.com/act_runner/ holen
  • auf passendem Level (Instance, Organization, Repository) Token erzeugen und Runner registrieren
  • –labels linux_x64 beim Register angeben (sollte im config.yaml unter runner:/labels stehen)
  • config erzeugen (./act_runner generate-config > config.yaml)
  • unter “runner:” Block “envs:” mit HTTP_PROXY: xxxx, HTTPS_PROXY: xxxx, NO_PROXY: xxxx einfügen
  • mit config starten: ./act_runner daemon -c ./config.yaml

Action secret GIT_ACCESS_TOKEN erzeugen

  • https://gitea-host/api/swagger#/user/userCreateToken
  • nur für single User sinnvoll weil Token vom User sein muss der git push durchführt

Action secrets für Webserverzertifikat erzeugen

  • CERT_CRT mit public key
  • CERT_KEY mit private key

Im Repository .gitea/workflows/docker.yaml erzeugen:

jobs:
  Homer-Build-and-Push-Docker-Image:
    runs-on: linux_x64
    steps:
      - run: echo "${{ gitea.actor }} did ${{ gitea.event_name }} to ${{ gitea.repository }}, branch ${{ gitea.ref }}"
      - name: Check out repository code
        uses: actions/checkout@v3
        with:
          username: ${{ gitea.actor }}
          password: ${{ secrets.GIT_ACCESS_TOKEN }}
      - 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 }}
      - name: Login docker
        uses: actions/docker-login@v2
        with:
          registry: ${{ env.DOCKER_REGISTRY }}
          username: ${{ gitea.actor }}
          password: ${{ secrets.GIT_ACCESS_TOKEN }}
      - name: Setup docker buildx
        uses: actions/docker-setup-buildx@v2
        env:
          HTTP_PROXY: ${{ env.HTTP_PROXY }}
          HTTPS_PROXY: ${{ env.HTTPS_PROXY }}
          NO_PROXY: ${{ env.NO_PROXY }}
        with:
           driver-opts: |
             env.http_proxy=${{ env.HTTP_PROXY }}
             env.https_proxy=${{ env.HTTPS_PROXY }}
             "env.no_proxy='${{ env.NO_PROXY }}'" 
           config-inline: |
             [registry."${{ env.DOCKER_REGISTRY }}"]
               ca=["/etc/docker/certs.d/${{ env.DOCKER_REGISTRY }}/GallaunerCA.crt"]             
      - name: Build and push docker image
        uses: actions/docker-build-push@v4
        env:
          ACTIONS_RUNTIME_TOKEN: ''
        with:
          context: .
          push: true
          tags: ${{ env.DOCKER_REGISTRY }}/gallauner/homer
          secrets: |
             "CERT_CRT=${{ secrets.CERT_CRT }}"
             "CERT_KEY=${{ secrets.CERT_KEY }}"
      - run: echo "🍏 This job's status is ${{ job.status }}."
  • runs-on: linux_x64 entspricht dem Label vom act_runner
  • Proxywerte aus dem Environment werden für pull von Basisimages benötigt
  • Custom CA der privaten Registry wird im config-inline von docker-setup-build eingefügt
  • Zertifikat für Webserver wird über secrets von docker-build-push eingefügt (siehe Dockerfile)

Dockerfile

FROM nginx:alpine
COPY homer /usr/share/nginx/html/
RUN --mount=type=secret,id=CERT_CRT \
   cp /run/secrets/CERT_CRT /etc/ssl/certs/homer.crt
RUN --mount=type=secret,id=CERT_KEY \
   cp /run/secrets/CERT_KEY /etc/ssl/private/homer.key
COPY <<EOF /etc/nginx/conf.d/default.conf
server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl_certificate /etc/ssl/certs/homer.crt;
    ssl_certificate_key /etc/ssl/private/homer.key;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
EOF
  • durch die “secrets” in der Action können die Secrets gemounted und kopiert werden