Gitea provides lightweight self-hosted Git hosting, issue tracking, and CI/CD, replacing heavy Jira stacks with a single low-footprint Go binary.
Gitea was created in late 2016 when contributors to Gogs forked the repository to replace single-maintainer management with community stewardship. Written in Go, it packages Git hosting, code review, and issue tracking into a lightweight binary that runs comfortably on modest servers. That architecture continues to prioritize operational simplicity and minimal resource overhead.
Running Jira demands significant operational effort. Jira Data Center requires a dedicated Java runtime, gigabytes of memory, and recurring administrator maintenance, while Jira Cloud locks teams into per-seat monthly subscriptions. Gitea replaces that infrastructure complexity with a single static Go binary idling under two hundred megabytes of RAM. Systems administrators can deploy it on an inexpensive VPS or a tiny container, connect it to SQLite or PostgreSQL, and manage code alongside issues without external synchronization plugins.
The trade-off centers on workflow customization. Jira offers intricate issue schemas, conditional state engines, SLA clocks, and complex agile burndown charts. Gitea trades that administrative overhead for development velocity. Its issue tracker provides markdown descriptions, branch references, milestones, assignees, and kanban boards directly linked to pull requests and commits. For agencies and small engineering teams, choosing Gitea removes the friction of running separate trackers while keeping code and tickets under internal control.
gitea dump package repositories, configuration, and database records into portable archives quickly.Can Gitea replace Jira for software teams? Gitea replaces Jira for teams needing standard bug tracking, milestone planning, and kanban boards tied to repositories. It cannot replace Jira for organizations requiring custom ticket fields, complex approval chains, or portfolio-level reporting.
What server resources are required to run Gitea? A basic instance runs on one CPU core with 512 MB of memory and SQLite, while teams using PostgreSQL and containerized CI runners should provision two cores and two gigabytes of RAM.
Does Gitea support CI/CD pipelines out of the box? Gitea includes Gitea Actions, a built-in workflow engine compatible with GitHub Actions YAML that dispatches jobs to external runner daemons.
Gitea is an ideal self-hosted platform for small teams, agencies, and operations leads seeking a lightweight development hub that unifies git hosting, issue tracking, and automation on modest infrastructure. Its permissive MIT licensing allows unrestricted internal deployment or bundling into client solutions without licensing penalties, while ongoing active development guarantees dependable security updates and continuous improvements. Teams with deep enterprise governance needs should keep their dedicated issue trackers, but everyone else will appreciate the operational simplicity.
Commands from the official package registries. Each package is matched to Gitea through the registry's own link to its source code or website.
brew install giteabrew install giteasudo pacman -S giteaWe started this exact setup from scratch in a clean Linux machine on Nov 1, 2026 and checked it through Gitea's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p gitea && cd gitea
curl -fsSL https://open-source.store/tools/gitea/compose.yml -o compose.ymlcat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 12)
GITEA_ROOT_URL=http://localhost:3000
EOFPOSTGRES_PASSWORD — Password of the bundled PostgreSQL database. Generated above; keep it secret.GITEA_ROOT_URL — Public URL where Gitea is reached (e.g. https://git.example.com); set this to your server's public URL.docker compose up -dnetworks:
gitea:
external: false
services:
server:
image: docker.gitea.com/gitea:28.2.0
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=${POSTGRES_PASSWORD}
- GITEA__server__ROOT_URL=${GITEA_ROOT_URL}
- GITEA__service__DISABLE_REGISTRATION=true
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
ports:
- "3000:3000"
- "222:22"
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:3000/api/healthz"]
interval: 10s
timeout: 5s
retries: 5
db:
image: docker.io/library/postgres:18
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U gitea -d gitea"]
interval: 5s
timeout: 5s
retries: 10
Lint, codegen, breaking-change checks and dependency management in one Git-native CLI. Open source, no registry lock-in.
Show that Gitea is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 41 s: docker.gitea.com/gitea:28.2.0, docker.io/library/postgres:18.
Based on the upstream setup. Official PostgreSQL compose. Images pinned (gitea 28.2.0, postgres 18), database password and root URL moved to .env, public registration disabled for public server safety, host timezone mounts dropped, healthchecks added.
gitea | 2026-11-01T00:48:55.056892716Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.057397008Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpustakaan/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.057740049Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /ghost/api/admin/authentication/setup/ for 192.168.64.99:60342, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.057911424Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60328, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058066299Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /ghost/api/admin/authentication/setup/ for 192.168.64.99:60334, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058177841Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /ghost/api/v3/admin/authentication/setup/ for 192.168.64.99:60342, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058314674Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpustakaan/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60328, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058419091Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /ghost/api/v3/admin/authentication/setup/ for 192.168.64.99:60334, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058684591Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /slims/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.058937758Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /custom/%3Cimg%20src=x%20onerror=alert(document.domain)%3E for 192.168.64.99:60298, 404 Not Found in 1.9ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.058962716Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /slims/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60328, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.059085841Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpustakaan/slims/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.059196424Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /share/api/notes/%3Cimg%20src=x%20onerror=alert(document.domain)%3E for 192.168.64.99:60298, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.059314758Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpustakaan/slims/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60328, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.059427633Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /e-library/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.059987466Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /devices.inc.php?search=True&searchField=antani'+union+select+(select+concat(0x223e3c42523e5b70726f6a6563742d646973636f766572795d)+limit+0,1),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL+--+&searchColumn=n.id&searchOption=contains for 192.168.64.99:60352, 404 Not Found in 0.4ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:55.060144841Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpus/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060258258Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /share/api/images/%3Cimg%20src=x%20onerror=alert(document.domain)%3E/filename for 192.168.64.99:60334, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060390508Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /e-library/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60328, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060518549Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /digilib/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060709341Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /new/newhttp://interact.sh for 192.168.64.99:60360, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060849591Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /perpus/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60334, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.060965174Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /bulian/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.061094633Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /digilib/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60360, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.061259924Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /library/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.0ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.062024049Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /custom/%3Cimg%20src=x%20onerror=alert(document.domain)%3E for 192.168.64.99:60074, 404 Not Found in 4.7ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.062822799Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /share/api/notes/%3Cimg%20src=x%20onerror=alert(document.domain)%3E for 192.168.64.99:60074, 404 Not Found in 0.3ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.063868924Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /bulian/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60300, 404 Not Found in 0.9ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.063876174Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /share/api/images/%3Cimg%20src=x%20onerror=alert(document.domain)%3E/filename for 192.168.64.99:60074, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.063993549Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /library/index.php/%22--%3E%3Cscript%3Ealert%28document.domain%29%3C/script%3E/index.php for 192.168.64.99:60352, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.066419799Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /devices.inc.php?search=True&searchField=antani'+union+select+(select+concat(0x223e3c42523e5b70726f6a6563742d646973636f766572795d)+limit+0,1),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL+--+&searchColumn=n.id&searchOption=contains for 192.168.64.99:60372, 404 Not Found in 9.1ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:55.523752508Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /modules/thumb/thumb.php?url=cnRzcDovL2EK&debug=1&transport=%7C%7C+%28echo+%27%5BS%5D%27%3B+id%3B+echo+%27%5BE%5D%27%29%23%3B for 192.168.64.99:60352, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.524125633Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /modules/thumb/thumb.php?url=cnRzcDovL2EK&debug=1&transport=%7C%7C+%28echo+%27%5BS%5D%27%3B+id%3B+echo+%27%5BE%5D%27%29%23%3B for 192.168.64.99:60074, 404 Not Found in 0.4ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.525539591Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /__nuxt_error?stack=%0A%3Cscript%3Ealert(document.domain)%3C%2Fscript%3E for 192.168.64.99:60342, 404 Not Found in 4.4ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:55.525827133Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /__nuxt_error?stack=%0A%3Cscript%3Ealert(document.domain)%3C%2Fscript%3E for 192.168.64.99:60312, 404 Not Found in 2.0ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:55.528199591Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /wp-admin/admin-ajax.php?action=heateor_sss_sharing_count&urls[%3Cimg%20src%3dx%20onerror%3dalert(document.domain)%3E] for 192.168.64.99:60312, 404 Not Found in 1.3ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.528961925Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /wp-admin/admin-ajax.php?action=heateor_sss_sharing_count&urls[%3Cimg%20src%3dx%20onerror%3dalert(document.domain)%3E] for 192.168.64.99:60342, 404 Not Found in 1.3ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.532217383Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /php/telnet_form.php?hostname=%3C%2Ftitle%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E%3Ctitle%3E for 192.168.64.99:60312, 404 Not Found in 1.1ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.532242466Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /php/telnet_form.php?hostname=%3C%2Ftitle%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E%3Ctitle%3E for 192.168.64.99:60342, 404 Not Found in 0.9ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:55.998097342Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /images//////////////////../../../../../../../../etc/passwd for 192.168.64.99:60352, 404 Not Found in 1.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.998370550Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /images//////////////////../../../../../../../../etc/passwd for 192.168.64.99:60074, 404 Not Found in 1.2ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:55.999249092Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /browser_search_plugin.php?type=text%27%22()%26%25<acx><ScRiPt>alert(document.domain)</ScRiPt> for 192.168.64.99:60342, 404 Not Found in 2.7ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:55.999259300Z 2026/11/01 00:48:55 HTTPRequest [I] router: completed GET /browser_search_plugin.php?type=text%27%22()%26%25<acx><ScRiPt>alert(document.domain)</ScRiPt> for 192.168.64.99:60312, 404 Not Found in 2.8ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.018782967Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /preview.php?controller=Load&action=index&catid=moztj%22%3E%3Cscript%3Ealert(document.domain)%3C%2fscript%3Ems3ea&down_up=a for 192.168.64.99:60312, 404 Not Found in 1.2ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.018805717Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /preview.php?controller=Load&action=index&catid=moztj%22%3E%3Cscript%3Ealert(document.domain)%3C%2fscript%3Ems3ea&down_up=a for 192.168.64.99:60342, 404 Not Found in 1.6ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.021565675Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /plugins/generic/tinymce/plugins/justboil.me/dialog-v4.htm for 192.168.64.99:60342, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:56.021727008Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /plugins/generic/tinymce/plugins/justboil.me/dialog-v4.htm for 192.168.64.99:60312, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:56.040054883Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /files.md5 for 192.168.64.99:60312, 404 Not Found in 2.4ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.041226800Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /authenticationserverservlet for 192.168.64.99:60342, 404 Not Found in 2.2ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.048666550Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /authenticationserverservlet for 192.168.64.99:60074, 404 Not Found in 9.5ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.050307842Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /files.md5 for 192.168.64.99:60352, 404 Not Found in 0.6ms @ user/home.go:705(user.UsernameSubRoute) gitea | 2026-11-01T00:48:56.052288508Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /testrail/files.md5 for 192.168.64.99:60312, 404 Not Found in 0.6ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:56.057567800Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /api/model_report/file/download?index=/&ext=/etc/passwd for 192.168.64.99:60312, 404 Not Found in 0.6ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:56.057781008Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /api/model_report/file/download?index=/&ext=/etc/passwd for 192.168.64.99:60074, 404 Not Found in 0.1ms @ <autogenerated>:1(WebNotFound) gitea | 2026-11-01T00:48:56.062197467Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /testrail/files.md5 for 192.168.64.99:60342, 404 Not Found in 5.7ms @ context/repo.go:807(context.RepoAssignment) gitea | 2026-11-01T00:48:56.800254925Z 2026/11/01 00:48:56 .../src/net/http/server.go:2358:HandlerFunc.ServeHTTP() [I] PING DATABASE postgres gitea | 2026-11-01T00:48:56.800617342Z 2026/11/01 00:48:56 HTTPRequest [I] router: completed GET /api/healthz for [::1]:53690, 200 OK in 0.6ms @ healthcheck/check.go:76(healthcheck.Check) gitea | 2026-11-01T00:49:06.837310930Z 2026/11/01 00:49:06 .../src/net/http/server.go:2358:HandlerFunc.ServeHTTP() [I] PING DATABASE postgres gitea | 2026-11-01T00:49:06.837336472Z 2026/11/01 00:49:06 HTTPRequest [I] router: completed GET /api/healthz for [::1]:35622, 200 OK in 0.8ms @ healthcheck/check.go:76(healthcheck.Check) gitea | 2026-11-01T00:49:09.067055014Z banner exchange: Connection from 192.168.64.99 port 51584: invalid format [preauth] gitea | 2026-11-01T00:49:09.078072598Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:09.078091764Z banner exchange: Connection from 192.168.64.99 port 51582: invalid format [preauth] gitea | 2026-11-01T00:49:09.078207139Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:09.078252514Z banner exchange: Connection from 192.168.64.99 port 51596: invalid format [preauth] gitea | 2026-11-01T00:49:09.084876306Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:09.084887181Z banner exchange: Connection from 192.168.64.99 port 51614: invalid format [preauth] gitea | 2026-11-01T00:49:09.084960014Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:09.085061848Z banner exchange: Connection from 192.168.64.99 port 51608: invalid format [preauth] gitea | 2026-11-01T00:49:09.090274056Z banner exchange: Connection from 192.168.64.99 port 51628: invalid format [preauth] gitea | 2026-11-01T00:49:10.101314875Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:10.101406667Z banner exchange: Connection from 192.168.64.99 port 51636: invalid format [preauth] gitea | 2026-11-01T00:49:10.108101333Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:10.108123750Z banner exchange: Connection from 192.168.64.99 port 51644: invalid format [preauth] gitea | 2026-11-01T00:49:10.110893667Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:10.110956708Z banner exchange: Connection from 192.168.64.99 port 51650: invalid format [preauth] gitea | 2026-11-01T00:49:10.114517667Z banner exchange: Connection from 192.168.64.99 port 51658: invalid format [preauth] gitea | 2026-11-01T00:49:10.118230333Z banner exchange: Connection from 192.168.64.99 port 51672: invalid format [preauth] gitea | 2026-11-01T00:49:10.121539083Z banner exchange: Connection from 192.168.64.99 port 51682: invalid format [preauth] gitea | 2026-11-01T00:49:11.122155875Z banner exchange: Connection from 192.168.64.99 port 51694: invalid format [preauth] gitea | 2026-11-01T00:49:11.131255209Z banner exchange: Connection from 192.168.64.99 port 51706: invalid format [preauth] gitea | 2026-11-01T00:49:11.131794500Z banner exchange: Connection from 192.168.64.99 port 51704: invalid format [preauth] gitea | 2026-11-01T00:49:11.138666250Z banner exchange: Connection from 192.168.64.99 port 51716: invalid format [preauth] gitea | 2026-11-01T00:49:11.142952875Z banner exchange: Connection from 192.168.64.99 port 51730: invalid format [preauth] gitea | 2026-11-01T00:49:11.146001542Z banner exchange: Connection from 192.168.64.99 port 51746: invalid format [preauth] gitea | 2026-11-01T00:49:11.146146917Z srclimit_penalise: 192.168.64.99/32: activating ipv4 penalty of 15.922 seconds for penalty: connections without attempting authentication gitea | 2026-11-01T00:49:16.882084378Z 2026/11/01 00:49:16 .../src/net/http/server.go:2358:HandlerFunc.ServeHTTP() [I] PING DATABASE postgres gitea | 2026-11-01T00:49:16.882272462Z 2026/11/01 00:49:16 HTTPRequest [I] router: completed GET /api/healthz for [::1]:40174, 200 OK in 0.8ms @ healthcheck/check.go:76(healthcheck.Check) gitea | 2026-11-01T00:49:26.927848800Z 2026/11/01 00:49:26 .../src/net/http/server.go:2358:HandlerFunc.ServeHTTP() [I] PING DATABASE postgres gitea | 2026-11-01T00:49:26.928014633Z 2026/11/01 00:49:26 HTTPRequest [I] router: completed GET /api/healthz for [::1]:34620, 200 OK in 0.8ms @ healthcheck/check.go:76(healthcheck.Check) gitea | 2026-11-01T00:49:27.204471341Z banner exchange: Connection from 192.168.64.99 port 58348: invalid format [preauth] gitea | 2026-11-01T00:49:27.210340008Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:27.210363341Z banner exchange: Connection from 192.168.64.99 port 58346: invalid format [preauth] gitea | 2026-11-01T00:49:27.218333300Z banner exchange: Connection from 192.168.64.99 port 58366: invalid format [preauth] gitea | 2026-11-01T00:49:27.218529675Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:27.218547050Z banner exchange: Connection from 192.168.64.99 port 58356: invalid format [preauth] gitea | 2026-11-01T00:49:27.225040800Z banner exchange: Connection from 192.168.64.99 port 58378: invalid format [preauth] gitea | 2026-11-01T00:49:27.229682800Z banner exchange: Connection from 192.168.64.99 port 58392: invalid format [preauth] gitea | 2026-11-01T00:49:28.238160384Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:28.238182967Z banner exchange: Connection from 192.168.64.99 port 58398: invalid format [preauth] gitea | 2026-11-01T00:49:28.243217967Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:28.243283009Z banner exchange: Connection from 192.168.64.99 port 58406: invalid format [preauth] gitea | 2026-11-01T00:49:28.246588925Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:28.246696967Z banner exchange: Connection from 192.168.64.99 port 58418: invalid format [preauth] gitea | 2026-11-01T00:49:28.251419425Z banner exchange: Connection from 192.168.64.99 port 58422: invalid format [preauth] gitea | 2026-11-01T00:49:28.255014550Z banner exchange: Connection from 192.168.64.99 port 58432: invalid format [preauth] gitea | 2026-11-01T00:49:28.258293467Z banner exchange: Connection from 192.168.64.99 port 58446: invalid format [preauth] gitea | 2026-11-01T00:49:29.267453051Z banner exchange: Connection from 192.168.64.99 port 40874: invalid format [preauth] gitea | 2026-11-01T00:49:29.273148176Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:29.273178551Z banner exchange: Connection from 192.168.64.99 port 40878: invalid format [preauth] gitea | 2026-11-01T00:49:29.276758801Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:29.276852967Z banner exchange: Connection from 192.168.64.99 port 40884: invalid format [preauth] gitea | 2026-11-01T00:49:29.278985301Z banner exchange: Connection from 192.168.64.99 port 40892: invalid format [preauth] gitea | 2026-11-01T00:49:29.282462967Z banner exchange: Connection from 192.168.64.99 port 40894: invalid format [preauth] gitea | 2026-11-01T00:49:29.285397426Z send_error: write: Broken pipe [preauth] gitea | 2026-11-01T00:49:29.285400426Z banner exchange: Connection from 192.168.64.99 port 40902: invalid format [preauth] gitea | 2026-11-01T00:49:29.285551217Z srclimit_penalise: 192.168.64.99/32: activating ipv4 penalty of 15.925 seconds for penalty: connections without attempting authentication gitea | 2026-11-01T00:49:33.294937594Z drop connection #0 from [192.168.64.99]:41026 on [172.18.0.3]:22 penalty: connections without attempting authentication gitea | 2026-11-01T00:49:33.295007969Z PerSourcePenalties logging rate-limited: additional 8405 connections dropped gitea | 2026-11-01T00:49:36.973318554Z 2026/11/01 00:49:36 .../src/net/http/server.go:2358:HandlerFunc.ServeHTTP() [I] PING DATABASE postgres gitea | 2026-11-01T00:49:36.973407471Z 2026/11/01 00:49:36 HTTPRequest [I] router: completed GET /api/healthz for [::1]:36252, 200 OK in 1.0ms @ healthcheck/check.go:76(healthcheck.Check)