**Purpose**: Gitea is a painless self-hosted all-in-one software development service, it includes Git hosting, code review, team collaboration, package registry and CI/CD. It is similar to GitHub, Bitbucket and GitLab. Gitea was forked from Gogs originally and almost all the code has been changed.

[Detailed SMTP Configuration Reference](https://docs.gitea.com/administration/config-cheat-sheet)


## Docker Configuration
```jsx title="docker-compose.yml"
version: "3"

services:
  server:
    image: gitea/gitea:latest
    container_name: gitea
    privileged: true
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - TZ=America/Denver
      - GITEA__mailer__ENABLED=true
      - GITEA__mailer__FROM=${GITEA__mailer__FROM:?GITEA__mailer__FROM not set}
      - GITEA__mailer__PROTOCOL=smtp+starttls
      - GITEA__mailer__HOST=${GITEA__mailer__HOST:?GITEA__mailer__HOST not set}
      - GITEA__mailer__IS_TLS_ENABLED=true
      - GITEA__mailer__USER=${GITEA__mailer__USER:-apikey}
      - GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}"""
    restart: always
    volumes:
      - /srv/containers/gitea:/data
#      - /etc/timezone:/etc/timezone:ro
#      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    networks:
        docker_network:
          ipv4_address: 192.168.5.70
#    labels:
#      - "traefik.enable=true"
#      - "traefik.http.routers.gitea.rule=Host(`git.bunny-lab.io`)"
#      - "traefik.http.routers.gitea.entrypoints=websecure"
#      - "traefik.http.routers.gitea.tls.certresolver=letsencrypt"
#      - "traefik.http.services.gitea.loadbalancer.server.port=3000"
    depends_on:
      - postgres

  postgres:
    image: postgres:12-alpine
    ports:
      - 5432:5432
    volumes:
      - /srv/containers/gitea/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=gitea
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - TZ=America/Denver
    restart: always
    networks:
        docker_network:
          ipv4_address: 192.168.5.71

networks:
  docker_network:
    external: true
```

```jsx title=".env"
GITEA__mailer__FROM=noreply@bunny-lab.io
GITEA__mailer__HOST=mail.bunny-lab.io
GITEA__mailer__PASSWD=SecureSMTPPassword
GITEA__mailer__USER=noreply@bunny-lab.io
POSTGRES_PASSWORD=SomethingSuperSecure
```

## Traefik Reverse Proxy Configuration
If the container does not run on the same host as Traefik, you will need to manually add configuration to Traefik's dynamic config file, outlined below.
``` yaml
http:
  routers:
    git:
      entryPoints:
        - websecure
      tls:
        certResolver: letsencrypt
      http2:
      service: git
      rule: Host(`git.bunny-lab.io`)

  services:
    git:
      loadBalancer:
        servers:
          - url: http://192.168.5.70:3000
        passHostHeader: true
```