[release] v0.9.0-unstable4

This commit is contained in:
Yann Stepienik 2023-07-02 13:00:29 +01:00
parent 2185d2be7c
commit f2c495baa5
5 changed files with 40 additions and 19 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "cosmos-server", "name": "cosmos-server",
"version": "0.9.0-unstable3", "version": "0.9.0-unstable4",
"description": "", "description": "",
"main": "test-server.js", "main": "test-server.js",
"bugs": { "bugs": {
@ -67,7 +67,7 @@
"build": "sh build.sh", "build": "sh build.sh",
"dev": "npm run build && npm run start", "dev": "npm run build && npm run start",
"dockerdevbuild": "sh build.sh && docker build -f dockerfile.local --tag cosmos-dev .", "dockerdevbuild": "sh build.sh && docker build -f dockerfile.local --tag cosmos-dev .",
"dockerdevrun": "docker stop cosmos-dev; docker rm cosmos-dev; docker run -d -p 80:80 -p 443:443 -e DOCKER_HOST=tcp://host.docker.internal:2375 -e COSMOS_MONGODB=$MONGODB -e COSMOS_LOG_LEVEL=DEBUG -v /:/mnt/host --restart=unless-stopped -h cosmos-dev --name cosmos-dev cosmos-dev", "dockerdevrun": "docker stop cosmos-dev; docker rm cosmos-dev; docker run -d -p 7200:443 -p 80:80 -p 443:443 -e DOCKER_HOST=tcp://host.docker.internal:2375 -e COSMOS_MONGODB=$MONGODB -e COSMOS_LOG_LEVEL=DEBUG -v /:/mnt/host --restart=unless-stopped -h cosmos-dev --name cosmos-dev cosmos-dev",
"dockerdev": "npm run dockerdevbuild && npm run dockerdevrun", "dockerdev": "npm run dockerdevbuild && npm run dockerdevrun",
"dockerdevclient": "npm run client-build && npm run dockerdevbuild && npm run dockerdevrun", "dockerdevclient": "npm run client-build && npm run dockerdevbuild && npm run dockerdevrun",
"demo": "vite build --base=/cosmos-ui/ --mode demo", "demo": "vite build --base=/cosmos-ui/ --mode demo",

View file

@ -214,6 +214,7 @@ func CreateService(serviceRequest DockerServiceCreateRequest, OnLog func(string)
utils.Log("Starting creation of new service...") utils.Log("Starting creation of new service...")
OnLog("Starting creation of new service...\n") OnLog("Starting creation of new service...\n")
needsHTTPRestart := false
config := utils.ReadConfigFromFile() config := utils.ReadConfigFromFile()
configRoutes := config.HTTPConfig.ProxyConfig.Routes configRoutes := config.HTTPConfig.ProxyConfig.Routes
@ -326,6 +327,7 @@ func CreateService(serviceRequest DockerServiceCreateRequest, OnLog func(string)
OnLog(fmt.Sprintf("Image %s pulled\n", container.Image)) OnLog(fmt.Sprintf("Image %s pulled\n", container.Image))
} }
// Create containers // Create containers
for serviceName, container := range serviceRequest.Services { for serviceName, container := range serviceRequest.Services {
utils.Log(fmt.Sprintf("Checking service %s...", serviceName)) utils.Log(fmt.Sprintf("Checking service %s...", serviceName))
@ -583,6 +585,7 @@ func CreateService(serviceRequest DockerServiceCreateRequest, OnLog func(string)
} }
} }
if !exists { if !exists {
needsHTTPRestart = true
configRoutes = append([]utils.ProxyRouteConfig{(utils.ProxyRouteConfig)(route)}, configRoutes...) configRoutes = append([]utils.ProxyRouteConfig{(utils.ProxyRouteConfig)(route)}, configRoutes...)
} else { } else {
utils.Error("CreateService: Rolling back changes because of -- Route already exist", nil) utils.Error("CreateService: Rolling back changes because of -- Route already exist", nil)
@ -707,7 +710,10 @@ func CreateService(serviceRequest DockerServiceCreateRequest, OnLog func(string)
// Save the route configs // Save the route configs
config.HTTPConfig.ProxyConfig.Routes = configRoutes config.HTTPConfig.ProxyConfig.Routes = configRoutes
utils.SaveConfigTofile(config) utils.SaveConfigTofile(config)
utils.RestartHTTPServer()
if needsHTTPRestart {
utils.RestartHTTPServer()
}
// After all operations // After all operations
utils.Log("CreateService: Operation succeeded. SERVICE STARTED") utils.Log("CreateService: Operation succeeded. SERVICE STARTED")

View file

@ -69,17 +69,18 @@ func CheckPorts() error {
// Get the ports // Get the ports
ports := map[string]struct{}{} ports := map[string]struct{}{}
finalPorts := []string{}
for containerPort, hostConfig := range inspect.NetworkSettings.Ports { for containerPort, hostConfig := range inspect.NetworkSettings.Ports {
utils.Debug("Container port: " + containerPort.Port()) utils.Debug("Container port: " + containerPort.Port())
for _, hostPort := range hostConfig { for _, hostPort := range hostConfig {
utils.Debug("Host port: " + hostPort.HostPort) utils.Debug("Host port: " + hostPort.HostPort)
ports[hostPort.HostPort] = struct{}{} ports[hostPort.HostPort] = struct{}{}
finalPorts = append(finalPorts, hostPort.HostPort + ":" + containerPort.Port())
} }
} }
finalPorts := []string{}
hasChanged := false hasChanged := false
utils.Debug("Expected ports: " + strings.Join(expectedPorts, ", ")) utils.Debug("Expected ports: " + strings.Join(expectedPorts, ", "))
@ -94,21 +95,18 @@ func CheckPorts() error {
finalPorts = append(finalPorts, port + ":" + expectedPort) finalPorts = append(finalPorts, port + ":" + expectedPort)
hasChanged = true hasChanged = true
} }
} else {
finalPorts = append(finalPorts, port + ":" + expectedPort)
} }
} }
if hasChanged { if hasChanged {
finalPorts = append(finalPorts, config.HTTPConfig.HTTPPort + ":" + config.HTTPConfig.HTTPPort)
finalPorts = append(finalPorts, config.HTTPConfig.HTTPSPort + ":" + config.HTTPConfig.HTTPSPort)
utils.Log("Port mapping changed. Needs update.") utils.Log("Port mapping changed. Needs update.")
utils.Log("New ports: " + strings.Join(finalPorts, ", ")) utils.Log("New ports: " + strings.Join(finalPorts, ", "))
UpdatePorts(finalPorts) UpdatePorts(finalPorts)
return nil
} }
utils.Log("Port mapping not changed.")
return nil return nil
} }
@ -121,11 +119,12 @@ func UpdatePorts(finalPorts []string) error {
return errors.New("SelUpdatePorts - not using Docker") return errors.New("SelUpdatePorts - not using Docker")
} }
containerName := os.Getenv("HOSTNAME")
utils.Log("SelUpdatePorts - Container name: " + containerName)
// make sure to remove resiude of old self updater // make sure to remove resiude of old self updater
RemoveSelfUpdater() RemoveSelfUpdater()
containerName := os.Getenv("HOSTNAME")
version := "latest" version := "latest"
// if arm // if arm
@ -159,6 +158,8 @@ func UpdatePorts(finalPorts []string) error {
}, },
}; };
utils.Log("SelUpdatePorts - Creating updater service")
err := CreateService(service, func (msg string) {}) err := CreateService(service, func (msg string) {})
if err != nil { if err != nil {

View file

@ -38,11 +38,11 @@ func startHTTPServer(router *mux.Router) {
Handler: router, Handler: router,
DisableGeneralOptionsHandler: true, DisableGeneralOptionsHandler: true,
} }
utils.Log("Listening to HTTP on : 0.0.0.0:" + serverPortHTTP)
docker.CheckPorts() docker.CheckPorts()
utils.Log("Listening to HTTP on : 0.0.0.0:" + serverPortHTTP)
errServ = HTTPServer.ListenAndServe() errServ = HTTPServer.ListenAndServe()
if errServ != nil && errServ != http.ErrServerClosed { if errServ != nil && errServ != http.ErrServerClosed {
@ -201,11 +201,11 @@ func InitServer() *mux.Router {
var tlsCert = HTTPConfig.TLSCert var tlsCert = HTTPConfig.TLSCert
var tlsKey= HTTPConfig.TLSKey var tlsKey= HTTPConfig.TLSKey
domains := utils.GetAllHostnames(true, false) domains := utils.GetAllHostnames(true, true)
oldDomains := baseMainConfig.HTTPConfig.TLSKeyHostsCached oldDomains := baseMainConfig.HTTPConfig.TLSKeyHostsCached
falledBack := false falledBack := false
NeedsRefresh := baseMainConfig.HTTPConfig.ForceHTTPSCertificateRenewal || (tlsCert == "" || tlsKey == "") || !utils.StringArrayEquals(domains, oldDomains) || !CertificateIsValid(baseMainConfig.HTTPConfig.TLSValidUntil) NeedsRefresh := baseMainConfig.HTTPConfig.ForceHTTPSCertificateRenewal || (tlsCert == "" || tlsKey == "") || !utils.HasAnyNewItem(domains, oldDomains) || !CertificateIsValid(baseMainConfig.HTTPConfig.TLSValidUntil)
// If we have a certificate, we can fallback to it if necessary // If we have a certificate, we can fallback to it if necessary
CanFallback := tlsCert != "" && tlsKey != "" && CanFallback := tlsCert != "" && tlsKey != "" &&
@ -414,5 +414,5 @@ func RestartServer() {
HTTPServer.Shutdown(context.Background()) HTTPServer.Shutdown(context.Background())
}() }()
utils.Log("HTTP Server stopped. Restarting...") utils.Log("HTTPServer shutdown.")
} }

View file

@ -327,6 +327,11 @@ func LetsEncryptValidOnly(hostnames []string, acceptWildcard bool) []string {
func GetAllHostnames(applyWildCard bool, removePorts bool) []string { func GetAllHostnames(applyWildCard bool, removePorts bool) []string {
mainHostname := GetMainConfig().HTTPConfig.Hostname mainHostname := GetMainConfig().HTTPConfig.Hostname
if removePorts {
mainHostname = strings.Split(mainHostname, ":")[0]
}
hostnames := []string{ hostnames := []string{
mainHostname, mainHostname,
} }
@ -401,6 +406,15 @@ func StringArrayEquals(a []string, b []string) bool {
return true return true
} }
func HasAnyNewItem(after []string, before []string) bool {
for _, value := range after {
if !StringArrayContains(before, value) {
return true
}
}
return false
}
func StringArrayContains(a []string, b string) bool { func StringArrayContains(a []string, b string) bool {
for _, value := range a { for _, value := range a {
if value == b { if value == b {