Files
gorz/README.md
Dev 5440884b85
Some checks failed
CI/CD Pipeline / Run Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Create Release (push) Has been cancelled
LFG
2025-09-11 18:59:15 +03:00

179 lines
5.3 KiB
Markdown

# goRZ - Fast Reverse Proxy Server
[![Go Report Card](https://goreportcard.com/badge/github.com/iwasforcedtobehere/goRZ)](https://goreportcard.com/report/github.com/iwasforcedtobehere/goRZ)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Release](https://img.shields.io/github/v/release/iwasforcedtobehere/goRZ)](https://github.com/iwasforcedtobehere/goRZ/releases)
goRZ is a blazingly fast reverse proxy server designed for local development with NAT/firewall traversal capabilities. It's the perfect tool for developers who enjoy watching their requests bounce around like a confused pinball before reaching their destination.
## Features
-**High Performance**: Built with Go, because who has time to wait for slow proxies?
- 🔄 **Multiple Load Balancing Strategies**: Round Robin, Least Connections, and Random (for when you're feeling adventurous)
- 🩺 **Health Checking**: Monitors your targets like an overprotective parent
- 🔍 **Monitoring**: Built-in metrics endpoint because numbers make us feel smart
- 🌐 **NAT/Firewall Traversal**: Punches through NATs and firewalls like they're made of paper
- 🐳 **Docker Support**: Containerized for your convenience (and our sanity)
- ⚙️ **Flexible Configuration**: YAML configuration that's almost as flexible as a yoga instructor
## Installation
### From Source
```bash
git clone https://github.com/iwasforcedtobehere/goRZ.git
cd goRZ
make build
```
### Using Docker
```bash
docker pull ghcr.io/iwasforcedtobehere/gorz:latest
```
## Quick Start
1. Create a configuration file:
```bash
make config
```
2. Edit the generated `config.yaml` to match your needs (or just use the defaults, we won't judge)
3. Run the server:
```bash
make run
```
4. Marvel at your requests being proxied with the speed of a caffeinated cheetah
## Configuration
goRZ uses a YAML configuration file that's so intuitive, you'll think you've been using it for years (even if it's your first time):
```yaml
server:
port: 8080
read_timeout: 30
write_timeout: 30
idle_timeout: 60
proxy:
targets:
- name: "my-awesome-app"
address: "http://localhost:3000"
protocol: "http"
weight: 1
load_balancer: "roundrobin"
health_check_path: "/health"
health_check_interval: 30
nat:
enabled: false
stun_server: "stun:stun.l.google.com:19302"
logging:
level: "info"
format: "json"
output: "stdout"
monitor:
enabled: true
port: 9090
path: "/metrics"
auth: false
```
## Load Balancing
goRZ supports multiple load balancing strategies because we believe in giving you choices (even if you'll probably just stick with round-robin):
### Round Robin
The classic "take turns" approach. Fair, predictable, and about as exciting as a beige wall.
### Least Connections
For when you want to distribute load based on which server is least busy. It's like being a traffic controller, but with less stress and more coffee.
### Random
For when you're feeling lucky or just enjoy chaos. It's surprisingly effective, which says something about the universe.
## NAT/Firewall Traversal
goRZ can help you traverse NATs and firewalls using STUN and TURN protocols. It's like having a secret tunnel that bypasses all those annoying network restrictions:
```yaml
nat:
enabled: true
stun_server: "stun:stun.l.google.com:19302"
turn_server: "turn:your-turn-server:3478"
turn_username: "your-username"
turn_password: "your-password"
```
## Monitoring
goRZ includes a built-in monitoring endpoint that provides metrics about the proxy's performance. It's like having a fitness tracker for your proxy:
```bash
curl http://localhost:9090/metrics
```
You'll get a beautiful JSON response with all sorts of numbers and statistics that you can pretend to understand while nodding thoughtfully.
## Development
### Prerequisites
- Go 1.19 or later
- Make (for the Makefile targets)
- Docker (optional, for containerized development)
### Building
```bash
make build
```
### Testing
```bash
make test
```
### Linting
```bash
make lint
```
## Contributing
Contributions are welcome! If you'd like to contribute, please:
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
We'll review your contribution with the enthusiasm of someone who just discovered coffee.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. It's so permissive, you could probably use it to power a small country if you wanted to.
## Acknowledgments
- The Go team for creating a language that makes us feel productive
- The authors of all the libraries we're using (you're the real MVPs)
- Coffee, for fueling the development of this project
- Our users, for being brave enough to trust a proxy with a name that sounds like a monster from a 1950s B-movie
## Disclaimer
This software is provided "as is", without warranty of any kind, express or implied. In no event shall the authors be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
Basically, if it breaks, you get to keep both pieces. We're programmers, not lawyers.