Port checking service for VM on Golem - Verify network connectivity for Golem providers
Project description
VM on Golem Port Checker Server
The Port Checker Server provides a critical network verification service for the Golem Network, ensuring providers have proper port accessibility before joining the network. It verifies both local and external port accessibility through a simple REST API.
System Architecture
graph TB
subgraph Port Checker
API[FastAPI Service]
Check[Port Checker]
Rate[Rate Limiter]
end
subgraph Providers
P1[Provider 1]
P2[Provider 2]
end
P1 & P2 -->|Verify Ports| API
API --> Check
Rate -->|Protect| API
How It Works
Port Verification Flow
sequenceDiagram
participant P as Provider
participant PC as Port Checker
P->>PC: Request Port Check
PC->>PC: Verify Local Binding
PC->>PC: Test External Access
PC-->>P: Verification Results
Note over PC: Multiple retries with delay
The port checker service verifies port accessibility through:
- TCP connection attempts to specified ports
- Retry mechanism with configurable attempts
- Detailed error reporting
- Concurrent port checking
Installation
# Clone the repository
git clone https://github.com/golem/vm-on-golem.git
cd vm-on-golem/port-checker-server
# Install dependencies
poetry install
Configuration
The server can be configured through environment variables:
# Server Settings
PORT_CHECKER_HOST="0.0.0.0"
PORT_CHECKER_PORT=9000
PORT_CHECKER_DEBUG=false
# Port Check Settings
PORT_CHECK_RETRIES=3
PORT_CHECK_RETRY_DELAY=1.0
PORT_CHECK_TIMEOUT=5.0
API Reference
Check Ports
POST /check-ports
Request:
{
"provider_ip": "192.168.1.100",
"ports": [7466, 50800, 50801]
}
Response:
{
"success": true,
"results": {
"7466": {
"accessible": true,
"error": null
},
"50800": {
"accessible": true,
"error": null
},
"50801": {
"accessible": false,
"error": "Connection refused"
}
},
"message": "Successfully verified 2 out of 3 ports"
}
Health Check
GET /health
Response:
{
"status": "ok"
}
Technical Details
Port Verification Process
-
Request Validation
- Valid IP address format
- Port numbers within range (1-65535)
- Maximum ports per request
-
Verification Steps
- TCP connection attempt
- Configurable timeout
- Multiple retry attempts
- Delay between retries
-
Response Details
- Per-port accessibility status
- Detailed error messages
- Overall success indicator
- Summary message
Error Handling
The API uses standardized error responses:
{
"detail": {
"code": "ERROR_CODE",
"message": "Human readable message"
}
}
Common error codes:
INVALID_IP: Invalid IP address formatINVALID_PORT: Port number out of rangeCHECK_FAILED: Port check operation failed
Running the Server
Manual Start
# Start the server
poetry run python run.py
# The server will be available at:
# - API: http://localhost:9000
# - Health Check: http://localhost:9000/health
# - OpenAPI Docs: http://localhost:9000/docs
Running as a Systemd Service
The port checker can run as a systemd service for automatic startup and restart:
- Install the service file:
sudo cp golem-port-checker.service /etc/systemd/system/
sudo systemctl daemon-reload
- (Optional) Configure environment variables:
# Create environment file if you need custom settings
sudo mkdir -p /etc/golem
sudo nano /etc/golem/port-checker.env
# Example environment variables:
PORT_CHECKER_HOST=0.0.0.0
PORT_CHECKER_PORT=9000
PORT_CHECKER_DEBUG=false
- Enable and start the service:
sudo systemctl enable golem-port-checker
sudo systemctl start golem-port-checker
- Check service status:
sudo systemctl status golem-port-checker
- View service logs:
# View all logs
sudo journalctl -u golem-port-checker
# Follow new logs
sudo journalctl -u golem-port-checker -f
The service is configured to:
- Start automatically on system boot
- Restart automatically if it crashes
- Log output to systemd journal
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run the tests
- Submit a pull request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file golem_port_checker-0.1.25.tar.gz.
File metadata
- Download URL: golem_port_checker-0.1.25.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.9.23 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54b6d955363aaa87bfbce6be94dbaceb1b01bb9aafec54e9549b93b1fffe2659
|
|
| MD5 |
e99d35405a935111ba65d2d1fd271bc0
|
|
| BLAKE2b-256 |
50b4e89f9bd8a6241558c3af9317562351bd2978bede30ef3e57b82b51f712bf
|
File details
Details for the file golem_port_checker-0.1.25-py3-none-any.whl.
File metadata
- Download URL: golem_port_checker-0.1.25-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.9.23 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00b127fd844fcb73e20db7a242fd3a1bb61643b903e33745ba92549f12ba05d5
|
|
| MD5 |
4218eb67cba7393eec318b41f70d15b5
|
|
| BLAKE2b-256 |
8ac7ac8a07b6e4c123cf50f8db7f4c8d21c173dd456b0991cace54ede2957e8b
|