tyler
3e7782e5ec
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #1 |
||
---|---|---|
assets | ||
.drone.yml | ||
.gitignore | ||
armbianmirror_suite_test.go | ||
check_test.go | ||
check.go | ||
config.go | ||
dlrouter.yaml | ||
Dockerfile | ||
go.mod | ||
go.sum | ||
http.go | ||
LICENSE | ||
main.go | ||
map_test.go | ||
map.go | ||
middleware.go | ||
mirrors.go | ||
README.md | ||
servers.go | ||
util.go |
Armbian Redirector
This repository contains a redirect service for Armbian downloads, apt, etc.
It uses multiple current technologies and best practices, including:
- Go 1.17/1.18
- GeoIP + Distance routing
- Server weighting, pooling (top x servers are served instead of a single one)
- Health checks (HTTP, TLS)
Code Quality
The code quality isn't the greatest/top tier. All code lives in the "main" package and should be moved at some point.
Regardless, it is meant to be simple and easy to understand.
Configuration
Modes
Redirect
Standard redirect functionality
Download Mapping
Uses the dl_map
configuration variable to enable mapping of paths to new paths.
Think symlinks, but in a generated file.
Mirrors
Mirror targets with trailing slash are placed in the yaml configuration file.
Example YAML
# GeoIP Database Path
geodb: GeoLite2-City.mmdb
# Comment out to disable
dl_map: userdata.csv
# LRU Cache Size (in items)
cacheSize: 1024
# Server definition
# Weights are just like nginx, where if it's > 1 it'll be chosen x out of x + total times
# By default, the top 3 servers are used for choosing the best.
# server = full url or host+path
# weight = int
# optional: latitude, longitude (float)
servers:
- server: armbian.12z.eu/apt/
- server: armbian.chi.auroradev.org/apt/
weight: 15
latitude: 41.8879
longitude: -88.1995
API
/status
Meant for a simple health check (nginx/etc can 502 or similar if down)
/reload
Flushes cache and reloads configuration and mapping. Requires reloadToken to be set in the configuration, and a matching token provided in Authorization: Bearer TOKEN
/mirrors
Shows all mirrors in the legacy (by region) format
/mirrors.json
Shows all mirrors in the new JSON format. Example:
[
{
"available":true,
"host":"imola.armbian.com",
"path":"/apt/",
"latitude":46.0503,
"longitude":14.5046,
"weight":10,
"continent":"EU",
"lastChange":"2022-08-12T06:52:35.029565986Z"
}
]
/mirrors/{server}.svg
Magic SVG path to show badges based on server status, for use in dynamic mirror lists.
/dl_map
Shows json-encoded download mappings
/geoip
Shows GeoIP information for the requester
/region/REGIONCODE/PATH
Using this magic path will redirect to the desired region:
- NA - North America
- EU - Europe
- AS - Asia
/metrics
Prometheus metrics endpoint. Metrics aren't considered private, thus are exposed to the public.