Add spider-net and auto docker stuff
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,2 +1,3 @@
 | 
			
		||||
*.zip
 | 
			
		||||
.vscode
 | 
			
		||||
.idea
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
services:
 | 
			
		||||
  spider-net:
 | 
			
		||||
    build: spider-net
 | 
			
		||||
    network_mode: host
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    environment:
 | 
			
		||||
      SPIDER_HOSTNAME: spider
 | 
			
		||||
 | 
			
		||||
  docker-socat:
 | 
			
		||||
    build: docker-socat
 | 
			
		||||
    restart: unless-stopped
 | 
			
		||||
    ports:
 | 
			
		||||
      - "2345:2375/tcp"
 | 
			
		||||
    volumes:
 | 
			
		||||
      - /var/run/docker.sock:/var/run/docker.sock
 | 
			
		||||
							
								
								
									
										3
									
								
								docker-socat/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docker-socat/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
FROM alpine:3.20
 | 
			
		||||
RUN apk add --no-cache socat
 | 
			
		||||
CMD ["/usr/bin/socat","tcp-listen:2375,reuseaddr,fork","unix:/var/run/docker.sock"]
 | 
			
		||||
							
								
								
									
										3
									
								
								docker.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
export DOCKER_HOST=`lua get-ip.lua spider`:2345
 | 
			
		||||
echo Docker host is $DOCKER_HOST
 | 
			
		||||
docker $@
 | 
			
		||||
							
								
								
									
										42
									
								
								get-ip.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								get-ip.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
package.path = package.path .. ';./controller-host/?/init.lua;./controller-host/?.lua'
 | 
			
		||||
local mqtt = require("mqtt")
 | 
			
		||||
local client
 | 
			
		||||
 | 
			
		||||
local host = ...
 | 
			
		||||
 | 
			
		||||
function printTable(table, indentation)
 | 
			
		||||
	indentation = indentation or ""
 | 
			
		||||
	for name, value in pairs(table) do
 | 
			
		||||
		print(indentation .. tostring(name) .. ": " .. tostring(value))
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function onMessage(data)
 | 
			
		||||
	print(data.payload)
 | 
			
		||||
	os.exit()
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function onConnect(connack)
 | 
			
		||||
	if connack.rc ~= 0 then
 | 
			
		||||
		print("Connection to broker failed:", connack:reason_string())
 | 
			
		||||
		os.exit(1)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	assert(client:subscribe{
 | 
			
		||||
		topic = "host/" .. host
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
client = mqtt.client {
 | 
			
		||||
	uri = "mqtt.seeseepuff.be",
 | 
			
		||||
	username = "tools",
 | 
			
		||||
	clean = true,
 | 
			
		||||
	reconnect = 5,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
client:on {
 | 
			
		||||
	connect = onConnect,
 | 
			
		||||
	message = onMessage,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mqtt.run_ioloop(client)
 | 
			
		||||
							
								
								
									
										1
									
								
								spider-net/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								spider-net/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
spider-net
 | 
			
		||||
							
								
								
									
										13
									
								
								spider-net/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								spider-net/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
FROM golang:1.22.5
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
#COPY go.mod go.sum ./
 | 
			
		||||
#RUN go mod download
 | 
			
		||||
 | 
			
		||||
#COPY *.go ./
 | 
			
		||||
#RUN CGO_ENABLED=0 GOOS=linux go build -o /spider-net
 | 
			
		||||
 | 
			
		||||
COPY spider-net /spider-net
 | 
			
		||||
 | 
			
		||||
CMD ["/spider-net"]
 | 
			
		||||
							
								
								
									
										3
									
								
								spider-net/build_and_upload.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								spider-net/build_and_upload.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o spider-net
 | 
			
		||||
cd ..
 | 
			
		||||
./docker.sh compose up spider-net -d --build
 | 
			
		||||
							
								
								
									
										10
									
								
								spider-net/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								spider-net/go.mod
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
module spider-mqtt
 | 
			
		||||
 | 
			
		||||
go 1.22
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/eclipse/paho.mqtt.golang v1.4.3 // indirect
 | 
			
		||||
	github.com/gorilla/websocket v1.5.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.8.0 // indirect
 | 
			
		||||
	golang.org/x/sync v0.1.0 // indirect
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										8
									
								
								spider-net/go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								spider-net/go.sum
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
github.com/eclipse/paho.mqtt.golang v1.4.3 h1:2kwcUGn8seMUfWndX0hGbvH8r7crgcJguQNCyp70xik=
 | 
			
		||||
github.com/eclipse/paho.mqtt.golang v1.4.3/go.mod h1:CSYvoAlsMkhYOXh/oKyxa8EcBci6dVkLCbo5tTC1RIE=
 | 
			
		||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 | 
			
		||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 | 
			
		||||
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
 | 
			
		||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 | 
			
		||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
 | 
			
		||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
							
								
								
									
										68
									
								
								spider-net/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								spider-net/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	mqtt "github.com/eclipse/paho.mqtt.golang"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net"
 | 
			
		||||
	"os"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func getLocalIP() (string, error) {
 | 
			
		||||
	addrs, err := net.InterfaceAddrs()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	for _, addr := range addrs {
 | 
			
		||||
		if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
 | 
			
		||||
			if ipnet.IP.To4() != nil {
 | 
			
		||||
				return ipnet.IP.String(), nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return "", fmt.Errorf("no IP address found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func publishIp(client mqtt.Client, topic string) {
 | 
			
		||||
	log.Printf("Publishing IP")
 | 
			
		||||
	ip, err := getLocalIP()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Error getting IP address: %v\n", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	token := client.Publish(topic, 0, true, ip)
 | 
			
		||||
	token.Wait()
 | 
			
		||||
	if token.Error() != nil {
 | 
			
		||||
		log.Printf("Error publishing IP address: %v\n", token.Error())
 | 
			
		||||
	} else {
 | 
			
		||||
		log.Printf("Published IP address: %s\n", ip)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	broker := "tcp://mqtt.seeseepuff.be:1883"
 | 
			
		||||
	topic := "host/" + os.Getenv("SPIDER_HOSTNAME")
 | 
			
		||||
 | 
			
		||||
	opts := mqtt.NewClientOptions()
 | 
			
		||||
	opts.AddBroker(broker)
 | 
			
		||||
	opts.SetClientID("spider-host-client")
 | 
			
		||||
	client := mqtt.NewClient(opts)
 | 
			
		||||
 | 
			
		||||
	token := client.Connect()
 | 
			
		||||
	token.Wait()
 | 
			
		||||
	if token.Error() != nil {
 | 
			
		||||
		log.Fatalf("Error connecting to MQTT broker: %v\n", token.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ticker := time.NewTicker(60 * time.Second)
 | 
			
		||||
	defer ticker.Stop()
 | 
			
		||||
 | 
			
		||||
	publishIp(client, topic)
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ticker.C:
 | 
			
		||||
			publishIp(client, topic)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user