diff --git a/build/dockerfiles/production/Dockerfile b/build/dockerfiles/production/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..4e90a5a77bc40d69b7d43366173e76c3d6a251ef
--- /dev/null
+++ b/build/dockerfiles/production/Dockerfile
@@ -0,0 +1,18 @@
+FROM golang:1.15-alpine AS builder
+ARG GITLAB_USER
+ARG GITLAB_TOKEN
+WORKDIR /src/gosdn
+COPY . .
+RUN apk add git
+RUN git config --global url."https://$GITLAB_USER:$GITLAB_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
+RUN go mod download
+RUN CGO_ENABLED=0 GOOS=linux go build ./cmd/gosdn
+
+FROM alpine:latest
+EXPOSE 8443
+EXPOSE 55055
+COPY --from=builder /src/gosdn/gosdn .
+COPY --from=builder /src/gosdn/configs ./configs
+
+ENTRYPOINT [ "./gosdn" ]
+CMD [""]
diff --git a/build/dockerfiles/staging/Dockerfile b/build/dockerfiles/staging/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..bb1503026edf39ef061288b7e60b2b5c68f5acea
--- /dev/null
+++ b/build/dockerfiles/staging/Dockerfile
@@ -0,0 +1,18 @@
+FROM golang:1.15-alpine AS builder
+ARG GITLAB_USER
+ARG GITLAB_TOKEN
+WORKDIR /src/gosdn
+COPY . .
+RUN apk add git
+RUN git config --global url."https://$GITLAB_USER:$GITLAB_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
+RUN go mod download
+RUN CGO_ENABLED=0 GOOS=linux go build -race ./cmd/gosdn
+
+FROM alpine:latest
+EXPOSE 8443
+EXPOSE 55055
+COPY --from=builder /src/gosdn/gosdn .
+COPY --from=builder /src/gosdn/configs ./configs
+
+ENTRYPOINT [ "./gosdn" ]
+CMD [""]
diff --git a/nucleus/controller.go b/nucleus/controller.go
index fc832735f546d22f7430fce94464003373e8f29c..a633e4168090a3d87752c4461512097a726e3cec 100644
--- a/nucleus/controller.go
+++ b/nucleus/controller.go
@@ -47,7 +47,6 @@ func initialize() error {
 	}
 
 	// TODO: Start grpc listener here
-
 	return httpAPI()
 }
 
@@ -76,9 +75,11 @@ func createPrincipalNetworkDomain(sbi SouthboundInterface) error {
 // Run calls initialize to start the controller
 func Run(ctx context.Context) error {
 	var initError error
+	coreLock.Lock()
 	coreOnce.Do(func() {
 		initError = initialize()
 	})
+	coreLock.Unlock()
 	if initError != nil {
 		log.WithFields(log.Fields{}).Error(initError)
 		return initError
diff --git a/nucleus/http.go b/nucleus/http.go
index 1869f27e7124151ac1803318f33f6581ac426ab9..c4419fb7906b1b0d094725cc122db3c47ee12c68 100644
--- a/nucleus/http.go
+++ b/nucleus/http.go
@@ -31,7 +31,7 @@ func registerHttpHandler() {
 }
 
 // deprecated
-func httpAPI() (err error) {
+func httpAPI() error {
 	registerHttpHandler()
 	c.httpServer = &http.Server{Addr: ":8080"}
 	go func() {
diff --git a/nucleus/http_test.go b/nucleus/http_test.go
index 35ce78254d7ddd76f322f136988c460c913d9128..00195b43e021b487932a85c6ec31db90ae26a3c4 100644
--- a/nucleus/http_test.go
+++ b/nucleus/http_test.go
@@ -36,6 +36,10 @@ func testSetupHTTP() {
 	if err := c.pndc.add(pnd); err != nil {
 		log.Fatal(err)
 	}
+	if err := httpAPI(); err != nil {
+		log.Fatal(err)
+		return
+	}
 }
 
 func Test_httpApi(t *testing.T) {
@@ -137,10 +141,6 @@ func Test_httpApi(t *testing.T) {
 			wantErr: false,
 		},
 	}
-	if err := httpAPI(); err != nil {
-		t.Errorf("httpApi() error = %v", err)
-		return
-	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			got, err := http.Get(tt.request)
diff --git a/nucleus/inizalize_test.go b/nucleus/initialise_test.go
similarity index 98%
rename from nucleus/inizalize_test.go
rename to nucleus/initialise_test.go
index e551b4472352413e8af3cadb6dcabcef7ba9a3e5..16e0f2f02df749093da38d2278e787615ab1fcd8 100644
--- a/nucleus/inizalize_test.go
+++ b/nucleus/initialise_test.go
@@ -45,6 +45,12 @@ var gnmiAddress = "141.100.70.171:6030"
 // TODO: Move somewhere more sensible
 func TestMain(m *testing.M) {
 	log.SetReportCaller(true)
+
+
+	if os.Getenv("GOSDN_LOG") == "nolog" {
+		log.SetLevel(log.PanicLevel)
+	}
+
 	gnmiMessages = map[string]pb.Message{
 		"../test/proto/cap-resp-arista-ceos":                  &gpb.CapabilityResponse{},
 		"../test/proto/req-full-node":                         &gpb.GetRequest{},