naas/README.md

158 lines
3.1 KiB
Markdown
Raw Normal View History

# No as a Service (NaaS)
A lightweight, production-ready HTTP service that always says "no" in various formats.
## Features
- Minimal dependencies (pure Rust, standard library only)
- Multiple response formats (text, JSON, XML, YAML, boolean)
- Mobile-responsive web frontend
- CORS support
- Health check endpoint
- Optimized for small binary size (~1MB)
- Container-ready with health checks
## API Endpoints
- `GET /` - Web frontend
- `GET /api/no` - Returns plain text "no"
- `GET /api/no?format=json` - Returns `{"answer": "no"}`
- `GET /api/no?format=bool` - Returns `false`
- `GET /api/no?format=xml` - Returns XML response
- `GET /api/no?format=yaml` - Returns YAML response
- `GET /health` - Health check endpoint
## Quick Start
### Local Development
```bash
# Build and run locally
cd naas
cargo build --release
PORT=8080 ./target/release/naas
```
Visit http://localhost:8080
### Container Deployment with Podman
```bash
# Build container
cd naas
BUILDAH_FORMAT=docker podman build -t naas:latest -f Containerfile .
# Run container
podman run -d \
--name naas \
-p 8080:8080 \
--restart=always \
naas:latest
# Check health
curl http://localhost:8080/health
```
### Systemd Service Deployment
1. **Setup user and directory:**
```bash
# Create service user
sudo useradd -r -s /bin/false naas
# Copy application files
sudo mkdir -p /opt/naas
sudo cp -r naas/* /opt/naas/
sudo chown -R naas:naas /opt/naas
```
2. **Install systemd service:**
```bash
# Copy service file
sudo cp naas/naas.service /etc/systemd/system/
# Reload systemd and start service
sudo systemctl daemon-reload
sudo systemctl enable naas
sudo systemctl start naas
# Check status
sudo systemctl status naas
```
3. **View logs:**
```bash
sudo journalctl -u naas -f
```
## Production Deployment to no.donothireus.com
### Caddy Reverse Proxy Configuration
```caddyfile
no.donothireus.com {
reverse_proxy localhost:8080 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
```
### Full Production Setup
1. **Deploy application** using systemd service (see above)
2. **Configure Caddy** with the above Caddyfile configuration (SSL certificates are automatic with Caddy)
3. **Restart services:**
```bash
sudo systemctl restart caddy
sudo systemctl restart naas
```
## Performance
- Binary size: ~1MB (release build with optimizations)
- Memory usage: <10MB
- Startup time: <100ms
- Request latency: <1ms
## Development
### Building from Source
```bash
# Debug build
cargo build
# Release build with optimizations
cargo build --release
# Run tests
cargo test
```
### Container Build Options
```bash
# Multi-platform build (if needed)
podman build --platform linux/amd64,linux/arm64 -t naas:latest .
# Build with specific Rust version
podman build --build-arg RUST_VERSION=1.75 -t naas:latest .
```
## Security
- Runs as non-root user (UID 1000)
- Read-only container filesystem
- No new privileges
- All capabilities dropped except NET_BIND_SERVICE
- Memory and CPU limits enforced
- CORS headers properly configured
## License
MIT