2

I have been digging through the internet for 3 days now. I'm sure at this point I'm just doing something silly, but I'm hoping someone can point out what that is as I've gone through so many troubleshooting posts on this I don't know which way is up anymore.

My goal is to run Drone and Gitea on subdomains on a machine I own. This configuration seems to get me the farthest in that Gitea and Drone are both running, Drone redirects to Gitea for Oauth, but then Gitea can't redirect back. I've tried using the names of docker containers in various network settings which doesn't seem to have gotten me any further.

Docker-compose:

version: "3"

networks:
  gitnet:
    external: false
    driver: bridge

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - ROOT_URL=http://git.example.com
    restart: always
    networks:
      - gitnet
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2221:22"

  drone:
    image: drone/drone:latest
    container_name: drone
    ports:
      - "8000:8000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./volumes/drone:/var/lib/drone/
    restart: always
    depends_on:
      - gitea
    networks:
      - gitnet
    environment:
      - DRONE_AGENTS_ENABLED=true
      - DRONE_GITEA_CLIENT_ID=0329da8e-5ec7-44e8-8d23-6d3d9f8bae33
      - DRONE_GITEA_CLIENT_SECRET=YFEPxrbcjXilN5m8tbIQCW6hK80e-yH7jS3CjSw-8dM=
      - DRONE_GITEA_SERVER=https://git.example.com
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_TLS_AUTOCERT=false
      - DRONE_SERVER_PORT=:8000
      - DRONE_SERVER_HOST=drone.example.com
      - DRONE_SERVER_PROTO=https
      - DRONE_RPC_SECRET=secret
      - DRONE_RUNNER_NETWORKS=gitnet

  drone-runner-docker:
    image: drone/drone-runner-docker:latest
    container_name: drone-runner-docker
    restart: always
    networks:
      - gitnet
    depends_on:
      - drone
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_HOST=drone.example.com
      - DRONE_RPC_PROTO=https
      - DRONE_RPC_SECRET=secret
      - DRONE_RUNNER_NAME=drone-runner-docker
      - DRONE_UI_USERNAME=test
      - DRONE_UI_PASSWORD=test
      - DRONE_RUNNER_NETWORKS=gitnet

Nginx conf:

events {
    worker_connections 1024;
}

http {
    upstream plex_backend {
        server localhost:32400;
        keepalive 32;
    }

    upstream drone {
        server localhost:8000;
        keepalive 32;
    }

    server {
        listen 80;
        listen [::]:80;
        server_name _;

        location / {
            return 301 https://$host$request_uri;
        }

        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }
    }

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name git.example.com;

        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        location / {
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;

            proxy_pass  http://localhost:3000;
        }
    }
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name drone.example.com;

        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        location / {
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_pass_request_headers on;

            proxy_pass  http://drone;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_buffering off;
            chunked_transfer_encoding off;
        }
        # location /rpc/ {
        #   grpc_pass   grpc://drone;
        # }
    }
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name plex.example.com;

        [...]
    }
}

Error in nginx logs:

2021/03/23 13:24:25 [error] 10#10: *2 upstream sent too large http2 frame: 4740180 while reading response header from upstream, client: 192.168.1.254, server: drone.example.com, request: "POST /rpc/v2/ping HTTP/2.0", upstream: "grpc://127.0.0.1:8000", host: "drone.example.com"

Update

I tried rolling back the grpc changes since I don't really see anyone else using that and added git.example.com and drone.example.com to my hosts file. This has gotten me back to successfully pinging the drone server with the drone runners, but I get the following error when trying to oauth:

[error] 10#10: *6 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.108, server: drone.example.com, request: "GET /login?code=vQhr-[...]YG5F8wx7w%3D&state=4d65822107fcfd52 HTTP/2.0", upstream: "http://127.0.0.1:8000/login?code=vQhr-[...]8wx7w%3D&state=4d65822107fcfd52", host: "drone.example.com"

TheTrooble
  • 53
  • 9

0 Answers0