change html/css to match standard; update docs
This commit is contained in:
@@ -8,14 +8,83 @@ sidebar_position: 5
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Build Gurty from the protocol CLI directory:
|
To begin, [install Gurty here](https://gurted.com/download).
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Gurty supports configuration through TOML files. Use the provided template to get started:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd protocol/cli
|
cd protocol/cli
|
||||||
cargo build --release
|
cp gurty.template.toml gurty.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
The binary will be available at `target/release/gurty` (or `gurty.exe` on Windows).
|
### Configuration File Structure
|
||||||
|
|
||||||
|
The configuration file includes the following sections:
|
||||||
|
|
||||||
|
#### Server Settings
|
||||||
|
```toml
|
||||||
|
[server]
|
||||||
|
host = "127.0.0.1"
|
||||||
|
port = 4878
|
||||||
|
protocol_version = "1.0.0"
|
||||||
|
alpn_identifier = "GURT/1.0"
|
||||||
|
max_connections = 10
|
||||||
|
max_message_size = "10MB"
|
||||||
|
|
||||||
|
[server.timeouts]
|
||||||
|
handshake = 5
|
||||||
|
request = 30
|
||||||
|
connection = 10
|
||||||
|
pool_idle = 300
|
||||||
|
```
|
||||||
|
|
||||||
|
#### TLS Configuration
|
||||||
|
```toml
|
||||||
|
[tls]
|
||||||
|
certificate = "localhost+2.pem"
|
||||||
|
private_key = "localhost+2-key.pem"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Logging Options
|
||||||
|
```toml
|
||||||
|
[logging]
|
||||||
|
level = "info"
|
||||||
|
log_requests = true
|
||||||
|
log_responses = false
|
||||||
|
access_log = "/var/log/gurty/access.log"
|
||||||
|
error_log = "/var/log/gurty/error.log"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Security Settings
|
||||||
|
```toml
|
||||||
|
[security]
|
||||||
|
deny_files = ["*.env", "*.config", ".git/*", "*.key", "*.pem"]
|
||||||
|
allowed_methods = ["GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "PATCH"]
|
||||||
|
rate_limit_requests = 100
|
||||||
|
rate_limit_connections = 1000
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Error Pages and Headers
|
||||||
|
```toml
|
||||||
|
# Custom error page files
|
||||||
|
[error_pages]
|
||||||
|
"404" = "/errors/404.html"
|
||||||
|
"500" = "/errors/500.html"
|
||||||
|
|
||||||
|
# Default inline error pages
|
||||||
|
[error_pages.default]
|
||||||
|
"400" = '''<!DOCTYPE html>
|
||||||
|
<html><head><title>400 Bad Request</title></head>
|
||||||
|
<body><h1>400 - Bad Request</h1><p>The request could not be understood by the server.</p></body></html>'''
|
||||||
|
|
||||||
|
# Custom HTTP headers
|
||||||
|
[headers]
|
||||||
|
server = "GURT/1.0.0"
|
||||||
|
"x-frame-options" = "SAMEORIGIN"
|
||||||
|
"x-content-type-options" = "nosniff"
|
||||||
|
```
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
@@ -46,7 +115,18 @@ The binary will be available at `target/release/gurty` (or `gurty.exe` on Window
|
|||||||
- `localhost+2.pem` (certificate)
|
- `localhost+2.pem` (certificate)
|
||||||
- `localhost+2-key.pem` (private key)
|
- `localhost+2-key.pem` (private key)
|
||||||
|
|
||||||
4. **Start GURT server**:
|
4. **Set up configuration** (optional but recommended):
|
||||||
|
```bash
|
||||||
|
cd protocol/cli
|
||||||
|
cp gurty.template.toml gurty.toml
|
||||||
|
```
|
||||||
|
Edit `gurty.toml` to customize settings for development.
|
||||||
|
|
||||||
|
5. **Start GURT server**:
|
||||||
|
```bash
|
||||||
|
cargo run --release serve --config gurty.toml
|
||||||
|
```
|
||||||
|
Or specify certificates explicitly:
|
||||||
```bash
|
```bash
|
||||||
cargo run --release serve --cert localhost+2.pem --key localhost+2-key.pem
|
cargo run --release serve --cert localhost+2.pem --key localhost+2-key.pem
|
||||||
```
|
```
|
||||||
@@ -68,9 +148,22 @@ The binary will be available at `target/release/gurty` (or `gurty.exe` on Window
|
|||||||
openssl req -x509 -newkey rsa:4096 -keyout gurt-server.key -out gurt-server.crt -days 365 -nodes
|
openssl req -x509 -newkey rsa:4096 -keyout gurt-server.key -out gurt-server.crt -days 365 -nodes
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Deploy with production certificates**:
|
2. **Set up configuration**:
|
||||||
```bash
|
```bash
|
||||||
cargo run --release serve --cert gurt-server.crt --key gurt-server.key --host 0.0.0.0 --port 4878
|
cp gurty.template.toml gurty.toml
|
||||||
|
# Edit gurty.toml for production:
|
||||||
|
# - Update certificate paths
|
||||||
|
# - Set host to "0.0.0.0" for external access
|
||||||
|
# - Configure logging and security settings
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Deploy with production certificates**:
|
||||||
|
```bash
|
||||||
|
cargo run --release serve --config gurty.toml
|
||||||
|
```
|
||||||
|
Or specify certificates explicitly:
|
||||||
|
```bash
|
||||||
|
cargo run --release serve --cert gurt-server.crt --key gurt-server.key --config gurty.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
@@ -87,19 +180,34 @@ gurty serve [OPTIONS]
|
|||||||
|
|
||||||
| Option | Description | Default |
|
| Option | Description | Default |
|
||||||
|--------|-------------|---------|
|
|--------|-------------|---------|
|
||||||
| `--cert <FILE>` | Path to TLS certificate file | Required |
|
| `--cert <FILE>` | Path to TLS certificate file | Required* |
|
||||||
| `--key <FILE>` | Path to TLS private key file | Required |
|
| `--key <FILE>` | Path to TLS private key file | Required* |
|
||||||
|
| `--config <FILE>` | Path to configuration file | None |
|
||||||
| `--host <HOST>` | Host address to bind to | `127.0.0.1` |
|
| `--host <HOST>` | Host address to bind to | `127.0.0.1` |
|
||||||
| `--port <PORT>` | Port number to listen on | `4878` |
|
| `--port <PORT>` | Port number to listen on | `4878` |
|
||||||
| `--dir <DIR>` | Directory to serve files from | None |
|
| `--dir <DIR>` | Directory to serve files from | None |
|
||||||
| `--log-level <LEVEL>` | Logging level (error, warn, info, debug, trace) | `info` |
|
| `--log-level <LEVEL>` | Logging level (error, warn, info, debug, trace) | `info` |
|
||||||
|
|
||||||
|
*Required unless specified in configuration file
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
|
||||||
|
**Using configuration file:**
|
||||||
|
```bash
|
||||||
|
gurty serve --config gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
**Explicit certificates with configuration:**
|
||||||
|
```bash
|
||||||
|
gurty serve --cert localhost+2.pem --key localhost+2-key.pem --config gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
**Manual setup without configuration file:**
|
||||||
```bash
|
```bash
|
||||||
gurty serve --cert localhost+2.pem --key localhost+2-key.pem --dir ./public
|
gurty serve --cert localhost+2.pem --key localhost+2-key.pem --dir ./public
|
||||||
```
|
```
|
||||||
Debug:
|
|
||||||
|
**Debug mode with configuration:**
|
||||||
```bash
|
```bash
|
||||||
gurty serve --cert dev.pem --key dev-key.pem --log-level debug
|
gurty serve --config gurty.toml --log-level debug
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,34 @@
|
|||||||
# Gurty - a CLI tool to setup your GURT Protocol server
|
# Gurty - a CLI tool to setup your GURT Protocol server
|
||||||
|
|
||||||
|
Gurty is a command-line interface tool for setting up and managing GURT protocol servers.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Gurty uses a TOML configuration file to manage server settings. The `gurty.template.toml` file provides a complete configuration template with all available options:
|
||||||
|
|
||||||
|
### Sections
|
||||||
|
|
||||||
|
- **Server**: Basic server settings (host, port, protocol version, connection limits)
|
||||||
|
- **TLS**: Certificate and private key configuration for secure connections
|
||||||
|
- **Logging**: Logging levels, request/response logging, and log file paths
|
||||||
|
- **Security**: File access restrictions, allowed HTTP methods, and rate limiting
|
||||||
|
- **Error Pages**: Custom error page templates and default error responses
|
||||||
|
- **Headers**: Custom HTTP headers for security and server identification
|
||||||
|
|
||||||
|
### Using Configuration Files
|
||||||
|
|
||||||
|
1. **Copy the configuration template:**
|
||||||
|
```bash
|
||||||
|
cp gurty.template.toml gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Edit the configuration** to match your environment. (optional)
|
||||||
|
|
||||||
|
3. **Use the configuration file:**
|
||||||
|
```bash
|
||||||
|
gurty serve --config gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
## Setup for Production
|
## Setup for Production
|
||||||
|
|
||||||
For production deployments, you'll need to generate your own certificates since traditional Certificate Authorities don't support custom protocols:
|
For production deployments, you'll need to generate your own certificates since traditional Certificate Authorities don't support custom protocols:
|
||||||
@@ -19,14 +48,24 @@ For production deployments, you'll need to generate your own certificates since
|
|||||||
openssl req -x509 -newkey rsa:4096 -keyout gurt-server.key -out gurt-server.crt -days 365 -nodes
|
openssl req -x509 -newkey rsa:4096 -keyout gurt-server.key -out gurt-server.crt -days 365 -nodes
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Deploy with production certificates:**
|
2. **Copy the configuration template and customize:**
|
||||||
```bash
|
```bash
|
||||||
cargo run --release serve --cert gurt-server.crt --key gurt-server.key --host 0.0.0.0 --port 4878
|
cp gurty.template.toml gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Deploy with production certificates and configuration:**
|
||||||
|
```bash
|
||||||
|
gurty serve --config gurty.toml
|
||||||
|
```
|
||||||
|
Or specify certificates explicitly:
|
||||||
|
```bash
|
||||||
|
gurty serve --cert gurt-server.crt --key gurt-server.key --config gurty.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development Environment Setup
|
## Development Environment Setup
|
||||||
|
|
||||||
To set up a development environment for GURT, follow these steps:
|
To set up a development environment for GURT, follow these steps:
|
||||||
|
|
||||||
1. **Install mkcert:**
|
1. **Install mkcert:**
|
||||||
```bash
|
```bash
|
||||||
# Windows (with Chocolatey)
|
# Windows (with Chocolatey)
|
||||||
@@ -50,7 +89,16 @@ To set up a development environment for GURT, follow these steps:
|
|||||||
- `localhost+2.pem` (certificate)
|
- `localhost+2.pem` (certificate)
|
||||||
- `localhost+2-key.pem` (private key)
|
- `localhost+2-key.pem` (private key)
|
||||||
|
|
||||||
4. **Start GURT server with certificates:**
|
4. **Copy the configuration template and customize:**
|
||||||
```bash
|
```bash
|
||||||
cargo run --release serve --cert localhost+2.pem --key localhost+2-key.pem
|
cp gurty.template.toml gurty.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Start GURT server with certificates and configuration:**
|
||||||
|
```bash
|
||||||
|
gurty serve --config gurty.toml
|
||||||
|
```
|
||||||
|
Or specify certificates explicitly:
|
||||||
|
```bash
|
||||||
|
gurty serve --cert localhost+2.pem --key localhost+2-key.pem --config gurty.toml
|
||||||
```
|
```
|
||||||
@@ -13,8 +13,8 @@ connection = 10
|
|||||||
pool_idle = 300
|
pool_idle = 300
|
||||||
|
|
||||||
[tls]
|
[tls]
|
||||||
certificate = "/path/to/certificate.pem"
|
certificate = "localhost+2.pem"
|
||||||
private_key = "/path/to/private_key.pem"
|
private_key = "localhost+2-key.pem"
|
||||||
|
|
||||||
[logging]
|
[logging]
|
||||||
level = "info"
|
level = "info"
|
||||||
@@ -66,7 +66,7 @@ impl DirectoryHandler for DefaultDirectoryHandler {
|
|||||||
let class = if is_dir { "dir" } else { "file" };
|
let class = if is_dir { "dir" } else { "file" };
|
||||||
|
|
||||||
listing.push_str(&format!(
|
listing.push_str(&format!(
|
||||||
r#" <a href="{}" class="{}">{}</a>"#,
|
r#" <a href="{}" style="{}">{}</a>"#,
|
||||||
name, class, display_name
|
name, class, display_name
|
||||||
));
|
));
|
||||||
listing.push('\n');
|
listing.push('\n');
|
||||||
|
|||||||
@@ -3,22 +3,15 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>404 Not Found</title>
|
<title>404 Not Found</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {{
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
font-sans m-[40px] text-center
|
||||||
margin: 40px;
|
}}
|
||||||
text-align: center;
|
.container {{
|
||||||
background: #f5f5f5;
|
bg-white p-12 px-10 rounded-[8px] max-w-[500px]
|
||||||
}
|
}}
|
||||||
.container {
|
h1 {{ mb-[20px] }}
|
||||||
background: white;
|
p {{ text-[#555555] mb-[30px] }}
|
||||||
padding: 60px 40px;
|
a {{ text-[#0066cc] }}
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
h1 { color: #d32f2f; }
|
|
||||||
a { color: #0066cc; text-decoration: none; }
|
|
||||||
a:hover { text-decoration: underline; }
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<div>
|
<div style="flex flex-col gap-2">
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,43 +1,9 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
<head>
|
||||||
<title>Directory Listing</title>
|
<title>Directory Listing</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body { font-sans m-[40px] }
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
.dir { font-bold text-[#0066cc] }
|
||||||
margin: 40px;
|
|
||||||
background: #f5f5f5;
|
|
||||||
}
|
|
||||||
.container {
|
|
||||||
background: white;
|
|
||||||
padding: 30px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
||||||
}
|
|
||||||
.dir {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #0066cc;
|
|
||||||
}
|
|
||||||
.file {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
display: block;
|
|
||||||
padding: 8px 12px;
|
|
||||||
margin: 2px 0;
|
|
||||||
border-radius: 4px;
|
|
||||||
transition: background-color 0.2s;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
}
|
|
||||||
.parent {
|
|
||||||
color: #666;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<h1>Directory Listing</h1>
|
||||||
<h1>Directory Listing</h1>
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
<a href="../" class="parent">← Parent Directory</a>
|
<p><a href="../">← Parent Directory</a></p>
|
||||||
|
|||||||
@@ -1,26 +1,15 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
<head>
|
||||||
<title>{} {}</title>
|
<title>{} {}</title>
|
||||||
<style>
|
<style>
|
||||||
body {{
|
body {{
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
font-sans m-[40px] text-center
|
||||||
margin: 40px;
|
|
||||||
text-align: center;
|
|
||||||
background: #f5f5f5;
|
|
||||||
}}
|
}}
|
||||||
.container {{
|
.container {{
|
||||||
background: white;
|
bg-white p-12 px-10 rounded-[8px] max-w-[500px]
|
||||||
padding: 60px 40px;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
||||||
display: inline-block;
|
|
||||||
max-width: 500px;
|
|
||||||
}}
|
}}
|
||||||
h1 {{ color: #d32f2f; margin-bottom: 20px; }}
|
h1 {{ text-[#d32f2f] mb-[20px] }}
|
||||||
p {{ color: #555; margin-bottom: 30px; }}
|
p {{ text-[#555555] mb-[30px] }}
|
||||||
a {{ color: #0066cc; text-decoration: none; }}
|
a {{ text-[#0066cc] }}
|
||||||
a:hover {{ text-decoration: underline; }}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -29,5 +18,4 @@
|
|||||||
<p>{}</p>
|
<p>{}</p>
|
||||||
<p><a href="/">Back to home</a></p>
|
<p><a href="/">Back to home</a></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user