mirror of
https://github.com/thomiceli/opengist.git
synced 2025-07-07 16:44:49 +02:00
Add listen to Unix websocket
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
# https://github.com/thomiceli/opengist/blob/master/docs/configuration/cheat-sheet.md
|
# https://github.com/thomiceli/opengist/blob/master/docs/configuration/cheat-sheet.md
|
||||||
|
|
||||||
# Set the log level to one of the following: debug, info, warn, error, fatal. Default: warn
|
# Set the log level to one of the following: debug, info, warn, error, fatal. Default: warn
|
||||||
log-level: warn
|
log-level: debug
|
||||||
|
|
||||||
# Set the log output to one or more of the following: `stdout`, `file`. Default: stdout,file
|
# Set the log output to one or more of the following: `stdout`, `file`. Default: stdout,file
|
||||||
log-output: stdout,file
|
log-output: stdout,file
|
||||||
@ -43,6 +43,7 @@ sqlite.journal-mode: WAL
|
|||||||
|
|
||||||
# HTTP server configuration
|
# HTTP server configuration
|
||||||
# Host to bind to. Default: 0.0.0.0
|
# Host to bind to. Default: 0.0.0.0
|
||||||
|
# Use an IP address for network binding. Use a path for Unix socket binding (e.g. /run/opengist.sock)
|
||||||
http.host: 0.0.0.0
|
http.host: 0.0.0.0
|
||||||
|
|
||||||
# Port to bind to. Default: 6157
|
# Port to bind to. Default: 6157
|
||||||
|
@ -36,11 +36,12 @@ var CmdStart = cli.Command{
|
|||||||
|
|
||||||
Initialize(ctx)
|
Initialize(ctx)
|
||||||
|
|
||||||
go server.NewServer(os.Getenv("OG_DEV") == "1", path.Join(config.GetHomeDir(), "sessions"), false).Start()
|
server := server.NewServer(os.Getenv("OG_DEV") == "1", path.Join(config.GetHomeDir(), "sessions"), false)
|
||||||
|
go server.StartUnixSocket()
|
||||||
go ssh.Start()
|
go ssh.Start()
|
||||||
|
|
||||||
<-stopCtx.Done()
|
<-stopCtx.Done()
|
||||||
shutdown()
|
shutdown(server)
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -130,7 +131,7 @@ func Initialize(ctx *cli.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func shutdown() {
|
func shutdown(server *server.Server) {
|
||||||
log.Info().Msg("Shutting down database...")
|
log.Info().Msg("Shutting down database...")
|
||||||
if err := db.Close(); err != nil {
|
if err := db.Close(); err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to close database")
|
log.Error().Err(err).Msg("Failed to close database")
|
||||||
@ -141,6 +142,8 @@ func shutdown() {
|
|||||||
index.Close()
|
index.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
server.StopUnixSocket()
|
||||||
|
|
||||||
log.Info().Msg("Shutdown complete")
|
log.Info().Msg("Shutdown complete")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,9 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/thomiceli/opengist/internal/validator"
|
"github.com/thomiceli/opengist/internal/validator"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@ -54,12 +56,54 @@ func (s *Server) Start() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) StartUnixSocket() {
|
||||||
|
socketPath := "/tmp/opengist.sock"
|
||||||
|
if err := os.Remove(socketPath); err != nil && !os.IsNotExist(err) {
|
||||||
|
log.Warn().Err(err).Str("socket", socketPath).Msg("Failed to remove existing socket file")
|
||||||
|
}
|
||||||
|
|
||||||
|
listener, err := net.Listen("unix", socketPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("Failed to start Unix socket server")
|
||||||
|
}
|
||||||
|
s.echo.Listener = listener
|
||||||
|
|
||||||
|
log.Info().Msgf("Starting Unix socket server on " + socketPath)
|
||||||
|
server := new(http.Server)
|
||||||
|
if err := s.echo.StartServer(server); err != nil && err != http.ErrServerClosed {
|
||||||
|
log.Fatal().Err(err).Msg("Failed to start Unix socket server")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) Stop() {
|
func (s *Server) Stop() {
|
||||||
if err := s.echo.Close(); err != nil {
|
if err := s.echo.Close(); err != nil {
|
||||||
log.Fatal().Err(err).Msg("Failed to stop HTTP server")
|
log.Fatal().Err(err).Msg("Failed to stop HTTP server")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) StopUnixSocket() {
|
||||||
|
log.Info().Msg("Stopping Unix socket server...")
|
||||||
|
|
||||||
|
var socketPath string
|
||||||
|
if s.echo.Listener != nil {
|
||||||
|
if unixListener, ok := s.echo.Listener.(*net.UnixListener); ok {
|
||||||
|
socketPath = unixListener.Addr().String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := s.echo.Close(); err != nil {
|
||||||
|
log.Error().Err(err).Msg("Failed to stop Unix socket server")
|
||||||
|
}
|
||||||
|
|
||||||
|
if socketPath != "" {
|
||||||
|
if err := os.Remove(socketPath); err != nil && !os.IsNotExist(err) {
|
||||||
|
log.Error().Err(err).Str("socket", socketPath).Msg("Failed to remove socket file")
|
||||||
|
} else {
|
||||||
|
log.Info().Str("socket", socketPath).Msg("Socket file removed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
s.echo.ServeHTTP(w, r)
|
s.echo.ServeHTTP(w, r)
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,23 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Start background processes
|
||||||
make watch_frontend &
|
make watch_frontend &
|
||||||
make watch_backend &
|
FRONTEND_PID=$!
|
||||||
|
|
||||||
trap 'kill $(jobs -p)' EXIT
|
make watch_backend &
|
||||||
|
BACKEND_PID=$!
|
||||||
|
|
||||||
|
# Function for graceful shutdown
|
||||||
|
cleanup() {
|
||||||
|
echo "Shutting down gracefully..."
|
||||||
|
kill -TERM $FRONTEND_PID $BACKEND_PID 2>/dev/null || true
|
||||||
|
wait $FRONTEND_PID $BACKEND_PID 2>/dev/null || true
|
||||||
|
echo "Shutdown complete"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set up trap for graceful shutdown
|
||||||
|
trap cleanup EXIT INT TERM
|
||||||
|
|
||||||
|
# Wait for background processes
|
||||||
wait
|
wait
|
Reference in New Issue
Block a user