[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",
"version": "0.9.0-unstable3",
"version": "0.9.0-unstable4",
"description": "",
"main": "test-server.js",
"bugs": {
@ -67,7 +67,7 @@
"build": "sh build.sh",
"dev": "npm run build && npm run start",
"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",
"dockerdevclient": "npm run client-build && npm run dockerdevbuild && npm run dockerdevrun",
"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...")
OnLog("Starting creation of new service...\n")
needsHTTPRestart := false
config := utils.ReadConfigFromFile()
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))
}
// Create containers
for serviceName, container := range serviceRequest.Services {
utils.Log(fmt.Sprintf("Checking service %s...", serviceName))
@ -583,6 +585,7 @@ func CreateService(serviceRequest DockerServiceCreateRequest, OnLog func(string)
}
}
if !exists {
needsHTTPRestart = true
configRoutes = append([]utils.ProxyRouteConfig{(utils.ProxyRouteConfig)(route)}, configRoutes...)
} else {
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
config.HTTPConfig.ProxyConfig.Routes = configRoutes
utils.SaveConfigTofile(config)
utils.RestartHTTPServer()
if needsHTTPRestart {
utils.RestartHTTPServer()
}
// After all operations
utils.Log("CreateService: Operation succeeded. SERVICE STARTED")

View file

@ -69,17 +69,18 @@ func CheckPorts() error {
// Get the ports
ports := map[string]struct{}{}
finalPorts := []string{}
for containerPort, hostConfig := range inspect.NetworkSettings.Ports {
utils.Debug("Container port: " + containerPort.Port())
for _, hostPort := range hostConfig {
utils.Debug("Host port: " + hostPort.HostPort)
ports[hostPort.HostPort] = struct{}{}
finalPorts = append(finalPorts, hostPort.HostPort + ":" + containerPort.Port())
}
}
finalPorts := []string{}
hasChanged := false
utils.Debug("Expected ports: " + strings.Join(expectedPorts, ", "))
@ -94,21 +95,18 @@ func CheckPorts() error {
finalPorts = append(finalPorts, port + ":" + expectedPort)
hasChanged = true
}
} else {
finalPorts = append(finalPorts, port + ":" + expectedPort)
}
}
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("New ports: " + strings.Join(finalPorts, ", "))
UpdatePorts(finalPorts)
return nil
}
utils.Log("Port mapping not changed.")
return nil
}
@ -121,11 +119,12 @@ func UpdatePorts(finalPorts []string) error {
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
RemoveSelfUpdater()
containerName := os.Getenv("HOSTNAME")
version := "latest"
// if arm
@ -159,6 +158,8 @@ func UpdatePorts(finalPorts []string) error {
},
};
utils.Log("SelUpdatePorts - Creating updater service")
err := CreateService(service, func (msg string) {})
if err != nil {

View file

@ -38,11 +38,11 @@ func startHTTPServer(router *mux.Router) {
Handler: router,
DisableGeneralOptionsHandler: true,
}
utils.Log("Listening to HTTP on : 0.0.0.0:" + serverPortHTTP)
docker.CheckPorts()
utils.Log("Listening to HTTP on : 0.0.0.0:" + serverPortHTTP)
errServ = HTTPServer.ListenAndServe()
if errServ != nil && errServ != http.ErrServerClosed {
@ -201,11 +201,11 @@ func InitServer() *mux.Router {
var tlsCert = HTTPConfig.TLSCert
var tlsKey= HTTPConfig.TLSKey
domains := utils.GetAllHostnames(true, false)
domains := utils.GetAllHostnames(true, true)
oldDomains := baseMainConfig.HTTPConfig.TLSKeyHostsCached
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
CanFallback := tlsCert != "" && tlsKey != "" &&
@ -414,5 +414,5 @@ func RestartServer() {
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 {
mainHostname := GetMainConfig().HTTPConfig.Hostname
if removePorts {
mainHostname = strings.Split(mainHostname, ":")[0]
}
hostnames := []string{
mainHostname,
}
@ -401,6 +406,15 @@ func StringArrayEquals(a []string, b []string) bool {
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 {
for _, value := range a {
if value == b {