Add adv-addr flag for RQLite HTTP and Raft advertisement

Allows setting advertised addresses for RQLite via --adv-addr. Updates
config and startup logic to pass these addresses to RQLite.
This commit is contained in:
anonpenguin 2025-08-12 22:35:56 +03:00
parent 1f6a4cd80b
commit 135711bb97
5 changed files with 33 additions and 15 deletions

View File

@ -31,7 +31,7 @@ test:
# Run bootstrap node (auto-selects identity and data dir) # Run bootstrap node (auto-selects identity and data dir)
run-node: run-node:
@echo "Starting bootstrap node..." @echo "Starting bootstrap node..."
go run ./cmd/node --data ./data/bootstrap --p2p-port $${P2P:-4001} --rqlite-http-port $${HTTP:-5001} --rqlite-raft-port $${RAFT:-7001} --disable-anonrc go run ./cmd/node --data ./data/bootstrap --p2p-port $${P2P:-4001} --rqlite-http-port $${HTTP:-5001} --rqlite-raft-port $${RAFT:-7001} --adv-addr $${ADV_ADDR:-127.0.0.1} --disable-anonrc
# Run second node (regular) - requires join address of bootstrap node # Run second node (regular) - requires join address of bootstrap node
# Usage: make run-node2 JOINADDR=/ip4/127.0.0.1/tcp/5001 HTTP=5002 RAFT=7002 P2P=4002 # Usage: make run-node2 JOINADDR=/ip4/127.0.0.1/tcp/5001 HTTP=5002 RAFT=7002 P2P=4002

View File

@ -28,7 +28,7 @@ func setup_logger(component logging.Component) (logger *logging.ColoredLogger) {
return logger return logger
} }
func parse_and_return_network_flags() (dataDir, nodeID *string, p2pPort, rqlHTTP, rqlRaft *int, disableAnon *bool, rqlJoinAddr *string, help *bool) { func parse_and_return_network_flags() (dataDir, nodeID *string, p2pPort, rqlHTTP, rqlRaft *int, disableAnon *bool, rqlJoinAddr *string, advAddr *string, help *bool) {
logger := setup_logger(logging.ComponentNode) logger := setup_logger(logging.ComponentNode)
dataDir = flag.String("data", "", "Data directory (auto-detected if not provided)") dataDir = flag.String("data", "", "Data directory (auto-detected if not provided)")
@ -38,6 +38,7 @@ func parse_and_return_network_flags() (dataDir, nodeID *string, p2pPort, rqlHTTP
rqlRaft = flag.Int("rqlite-raft-port", 7001, "RQLite Raft port") rqlRaft = flag.Int("rqlite-raft-port", 7001, "RQLite Raft port")
disableAnon = flag.Bool("disable-anonrc", false, "Disable Anyone proxy routing (defaults to enabled on 127.0.0.1:9050)") disableAnon = flag.Bool("disable-anonrc", false, "Disable Anyone proxy routing (defaults to enabled on 127.0.0.1:9050)")
rqlJoinAddr = flag.String("rqlite-join-address", "", "RQLite address to join (e.g., /ip4/)") rqlJoinAddr = flag.String("rqlite-join-address", "", "RQLite address to join (e.g., /ip4/)")
advAddr = flag.String("adv-addr", "127.0.0.1", "Default Addvertise address for rqlite and rafts")
help = flag.Bool("help", false, "Show help") help = flag.Bool("help", false, "Show help")
flag.Parse() flag.Parse()
@ -109,7 +110,7 @@ func startNode(ctx context.Context, cfg *config.Config, port int) error {
} }
// load_args_into_config applies command line argument overrides to the config // load_args_into_config applies command line argument overrides to the config
func load_args_into_config(cfg *config.Config, p2pPort, rqlHTTP, rqlRaft *int, rqlJoinAddr *string) { func load_args_into_config(cfg *config.Config, p2pPort, rqlHTTP, rqlRaft *int, rqlJoinAddr *string, advAddr *string) {
logger := setup_logger(logging.ComponentNode) logger := setup_logger(logging.ComponentNode)
// Apply RQLite HTTP port override // Apply RQLite HTTP port override
@ -137,12 +138,17 @@ func load_args_into_config(cfg *config.Config, p2pPort, rqlHTTP, rqlRaft *int, r
cfg.Database.RQLiteJoinAddress = *rqlJoinAddr cfg.Database.RQLiteJoinAddress = *rqlJoinAddr
logger.ComponentInfo(logging.ComponentNode, "Setting RQLite join address", zap.String("address", *rqlJoinAddr)) logger.ComponentInfo(logging.ComponentNode, "Setting RQLite join address", zap.String("address", *rqlJoinAddr))
} }
if *advAddr != "" {
cfg.Discovery.HttpAdvAddress = fmt.Sprintf("%s:%d", *advAddr, *rqlHTTP)
cfg.Discovery.RaftAdvAddress = fmt.Sprintf("%s:%d", *advAddr, *rqlRaft)
}
} }
func main() { func main() {
logger := setup_logger(logging.ComponentNode) logger := setup_logger(logging.ComponentNode)
dataDir, nodeID, p2pPort, rqlHTTP, rqlRaft, disableAnon, rqlJoinAddr, help := parse_and_return_network_flags() dataDir, nodeID, p2pPort, rqlHTTP, rqlRaft, disableAnon, rqlJoinAddr, advAddr, help := parse_and_return_network_flags()
disable_anon_proxy(disableAnon) disable_anon_proxy(disableAnon)
check_if_should_open_help(help) check_if_should_open_help(help)
@ -154,7 +160,7 @@ func main() {
logger.ComponentInfo(logging.ComponentNode, "Default configuration loaded successfully") logger.ComponentInfo(logging.ComponentNode, "Default configuration loaded successfully")
// Apply command line argument overrides // Apply command line argument overrides
load_args_into_config(cfg, p2pPort, rqlHTTP, rqlRaft, rqlJoinAddr) load_args_into_config(cfg, p2pPort, rqlHTTP, rqlRaft, rqlJoinAddr, advAddr)
logger.ComponentInfo(logging.ComponentNode, "Command line arguments applied to configuration") logger.ComponentInfo(logging.ComponentNode, "Command line arguments applied to configuration")
// LibP2P uses configurable port (default 4001); RQLite uses 5001 (HTTP) and 7001 (Raft) // LibP2P uses configurable port (default 4001); RQLite uses 5001 (HTTP) and 7001 (Raft)

View File

@ -48,6 +48,8 @@ type DiscoveryConfig struct {
DHTPrefix string `yaml:"dht_prefix"` // DHT protocol prefix DHTPrefix string `yaml:"dht_prefix"` // DHT protocol prefix
DiscoveryInterval time.Duration `yaml:"discovery_interval"` // Discovery announcement interval DiscoveryInterval time.Duration `yaml:"discovery_interval"` // Discovery announcement interval
BootstrapPort int `yaml:"bootstrap_port"` // Default port for bootstrap nodes BootstrapPort int `yaml:"bootstrap_port"` // Default port for bootstrap nodes
HttpAdvAddress string `yaml:"http_adv_address"` // HTTP advertisement address
RaftAdvAddress string `yaml:"raft_adv_address"` // Raft advertisement
} }
// SecurityConfig contains security-related configuration // SecurityConfig contains security-related configuration
@ -119,6 +121,8 @@ func DefaultConfig() *Config {
EnableDHT: false, // Disabled - conflicts with Anyone protocol anonymity EnableDHT: false, // Disabled - conflicts with Anyone protocol anonymity
DHTPrefix: "/network/kad/1.0.0", DHTPrefix: "/network/kad/1.0.0",
DiscoveryInterval: time.Second * 15, // Back to 15 seconds for testing DiscoveryInterval: time.Second * 15, // Back to 15 seconds for testing
HttpAdvAddress: "",
RaftAdvAddress: "",
}, },
Security: SecurityConfig{ Security: SecurityConfig{
EnableTLS: false, EnableTLS: false,

View File

@ -21,6 +21,7 @@ import (
// RQLiteManager manages an RQLite node instance // RQLiteManager manages an RQLite node instance
type RQLiteManager struct { type RQLiteManager struct {
config *config.DatabaseConfig config *config.DatabaseConfig
discoverConfig *config.DiscoveryConfig
dataDir string dataDir string
logger *zap.Logger logger *zap.Logger
cmd *exec.Cmd cmd *exec.Cmd
@ -57,9 +58,10 @@ func (r *RQLiteManager) waitForSQLAvailable(ctx context.Context) error {
} }
// NewRQLiteManager creates a new RQLite manager // NewRQLiteManager creates a new RQLite manager
func NewRQLiteManager(cfg *config.DatabaseConfig, dataDir string, logger *zap.Logger) *RQLiteManager { func NewRQLiteManager(cfg *config.DatabaseConfig, discoveryCfg *config.DiscoveryConfig, dataDir string, logger *zap.Logger) *RQLiteManager {
return &RQLiteManager{ return &RQLiteManager{
config: cfg, config: cfg,
discoverConfig: discoveryCfg,
dataDir: dataDir, dataDir: dataDir,
logger: logger, logger: logger,
} }
@ -73,9 +75,15 @@ func (r *RQLiteManager) Start(ctx context.Context) error {
return fmt.Errorf("failed to create RQLite data directory: %w", err) return fmt.Errorf("failed to create RQLite data directory: %w", err)
} }
if r.discoverConfig.HttpAdvAddress == "" {
return fmt.Errorf("discovery config HttpAdvAddress is empty")
}
// Build RQLite command // Build RQLite command
args := []string{ args := []string{
"-http-addr", fmt.Sprintf("0.0.0.0:%d", r.config.RQLitePort), "-http-addr", fmt.Sprintf("0.0.0.0:%d", r.config.RQLitePort),
"-http-adv-addr", r.discoverConfig.HttpAdvAddress,
"-raft-adv-addr", r.discoverConfig.RaftAdvAddress,
"-raft-addr", fmt.Sprintf("0.0.0.0:%d", r.config.RQLiteRaftPort), "-raft-addr", fmt.Sprintf("0.0.0.0:%d", r.config.RQLiteRaftPort),
} }

View File

@ -60,7 +60,7 @@ func (n *Node) startRQLite(ctx context.Context) error {
n.logger.Info("Starting RQLite database") n.logger.Info("Starting RQLite database")
// Create RQLite manager // Create RQLite manager
n.rqliteManager = database.NewRQLiteManager(&n.config.Database, n.config.Node.DataDir, n.logger.Logger) n.rqliteManager = database.NewRQLiteManager(&n.config.Database, &n.config.Discovery, n.config.Node.DataDir, n.logger.Logger)
// Start RQLite // Start RQLite
if err := n.rqliteManager.Start(ctx); err != nil { if err := n.rqliteManager.Start(ctx); err != nil {