helpers and FX
This commit is contained in:
parent
4e11d7f366
commit
91dea6d444
6 changed files with 310 additions and 153 deletions
20
app/go.mod
20
app/go.mod
|
|
@ -1,3 +1,23 @@
|
||||||
module github.com/zeevdiukman/zprox
|
module github.com/zeevdiukman/zprox
|
||||||
|
|
||||||
go 1.23.0
|
go 1.23.0
|
||||||
|
|
||||||
|
require go.uber.org/fx v1.22.2
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gookit/color v1.5.4 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||||
|
golang.org/x/text v0.16.0 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/fatih/color v1.17.0
|
||||||
|
github.com/gookit/goutil v0.6.16
|
||||||
|
go.uber.org/dig v1.18.0 // indirect
|
||||||
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
|
go.uber.org/zap v1.26.0 // indirect
|
||||||
|
golang.org/x/sys v0.23.0 // indirect
|
||||||
|
golang.org/x/term v0.23.0
|
||||||
|
)
|
||||||
|
|
|
||||||
41
app/go.sum
Normal file
41
app/go.sum
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
||||||
|
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
||||||
|
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
||||||
|
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
||||||
|
github.com/gookit/goutil v0.6.16 h1:9fRMCF4X9abdRD5+2HhBS/GwafjBlTUBjRtA5dgkvuw=
|
||||||
|
github.com/gookit/goutil v0.6.16/go.mod h1:op2q8AoPDFSiY2+qkHxcBWQMYxOLQ1GbLXqe7vrwscI=
|
||||||
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
||||||
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
||||||
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
||||||
|
go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw=
|
||||||
|
go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE=
|
||||||
|
go.uber.org/fx v1.22.2 h1:iPW+OPxv0G8w75OemJ1RAnTUrF55zOJlXlo1TbJ0Buw=
|
||||||
|
go.uber.org/fx v1.22.2/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU=
|
||||||
|
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
|
||||||
|
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
|
||||||
|
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
||||||
|
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
|
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
|
||||||
|
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
|
||||||
|
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
|
||||||
|
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
|
||||||
|
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
|
||||||
|
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
|
||||||
|
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
||||||
|
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
22
app/helpers/helpers.go
Normal file
22
app/helpers/helpers.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package helpers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
|
"github.com/gookit/goutil/dump"
|
||||||
|
"golang.org/x/term"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Lines(v ...any) {
|
||||||
|
w, _, _ := term.GetSize(0)
|
||||||
|
line := strings.Repeat(">", w-10)
|
||||||
|
color.HiYellow(line)
|
||||||
|
fmt.Println("")
|
||||||
|
for _, a := range v {
|
||||||
|
dump.Println(a)
|
||||||
|
}
|
||||||
|
fmt.Println("")
|
||||||
|
color.HiYellow(line)
|
||||||
|
}
|
||||||
160
app/main.go
160
app/main.go
|
|
@ -3,12 +3,11 @@ package main
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
|
||||||
"os/signal"
|
"github.com/zeevdiukman/zprox/helpers"
|
||||||
"syscall"
|
"go.uber.org/fx"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -19,117 +18,54 @@ const (
|
||||||
func init() {
|
func init() {
|
||||||
fmt.Println("ZPROX started")
|
fmt.Println("ZPROX started")
|
||||||
}
|
}
|
||||||
|
func StartNewServer(lc fx.Lifecycle) *http.Server {
|
||||||
|
s := &http.Server{
|
||||||
|
Addr: ":8080",
|
||||||
|
}
|
||||||
|
lc.Append(fx.Hook{
|
||||||
|
OnStart: func(ctx context.Context) error {
|
||||||
|
ln, err := net.Listen("tcp", s.Addr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// type Matcher struct {
|
helpers.Lines("Starting HTTP server at", s.Addr)
|
||||||
// r *http.Request
|
go s.ServeTLS(ln, sslCert, sslKey)
|
||||||
// w http.ResponseWriter
|
return nil
|
||||||
// }
|
},
|
||||||
|
OnStop: func(ctx context.Context) error {
|
||||||
// func (m *Matcher) MatchHost(str string, f ...func(w http.ResponseWriter, r *http.Request)) {
|
return s.Shutdown(ctx)
|
||||||
// if m.r.Host == "test.gotest.com" || m.r.Host == "localhost" {
|
},
|
||||||
// m.w.Write([]byte("test"))
|
})
|
||||||
// } else {
|
return s
|
||||||
// m.w.Write([]byte("404 page not found"))
|
|
||||||
// m.w.WriteHeader(http.StatusNotFound)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
type HandlerFunc func(http.ResponseWriter, *http.Request)
|
|
||||||
|
|
||||||
// func (h *HandlerFunc) Handle(f func(w http.ResponseWriter, r *http.Request)) {
|
|
||||||
// h = h.HandlerFunc()
|
|
||||||
|
|
||||||
// // &h.f()
|
|
||||||
// // if r.Host == "test.gotest.com" {
|
|
||||||
// // w.Write([]byte("test"))
|
|
||||||
// // } else {
|
|
||||||
// // w.Write([]byte("404 page not found"))
|
|
||||||
|
|
||||||
// // w.WriteHeader(http.StatusNotFound)
|
|
||||||
// // }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func test(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// if r.Host == "test.gotest.com" {
|
|
||||||
// w.Write([]byte("login"))
|
|
||||||
// } else {
|
|
||||||
// w.Write([]byte("404 page not found"))
|
|
||||||
// w.WriteHeader(http.StatusNotFound)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func handle(f HandlerFunc) HandlerFunc {
|
|
||||||
// HandlerFunc{}.f[0]
|
|
||||||
// return func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// f
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// type Mux struct {
|
|
||||||
// *Handlers
|
|
||||||
// *Router
|
|
||||||
// }
|
|
||||||
// type Handlers []struct{ http.Handler }
|
|
||||||
// type Router struct{ *http.ServeMux }
|
|
||||||
|
|
||||||
// func NewMux() *Mux {
|
|
||||||
// r := new(Router)
|
|
||||||
// h := new(Handlers)
|
|
||||||
// return &Mux{Handlers:h,Router:r}
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func (m *Handlers) Add() {
|
|
||||||
// h := new(Handlers)
|
|
||||||
// m = &Mux{h, r}
|
|
||||||
// &Handlers{f}
|
|
||||||
// }
|
|
||||||
type Router struct{ http.ServeMux }
|
|
||||||
|
|
||||||
func (r Router) Host(string) {
|
|
||||||
|
|
||||||
// router.HandleFunc("")
|
|
||||||
}
|
}
|
||||||
|
func StartNewRouter(lc fx.Lifecycle) *http.ServeMux {
|
||||||
|
r := http.NewServeMux()
|
||||||
|
lc.Append(fx.Hook{
|
||||||
|
OnStart: func(ctx context.Context) error {
|
||||||
|
fmt.Println("HTTP router started.")
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
OnStop: func(ctx context.Context) error {
|
||||||
|
fmt.Println("HTTP router stoped.")
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
// func GetContructors(lc fx.Lifecycle) any {
|
||||||
|
// constructors := make(...interface{}, 0)
|
||||||
|
// constructors = append(constructors, StartNewServer, StartNewRouter)
|
||||||
|
// return constructors
|
||||||
|
// }
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
fx.New(
|
||||||
|
fx.Provide(StartNewServer, StartNewRouter),
|
||||||
|
fx.Invoke(func(*http.Server) {}),
|
||||||
|
).Run()
|
||||||
// var h HandlerFunc
|
// var h HandlerFunc
|
||||||
// h:=func(a HandlerFunc)HandlerFunc{
|
// h:=func(a HandlerFunc)HandlerFunc{
|
||||||
|
|
||||||
router := http.NewServeMux()
|
|
||||||
router.H
|
|
||||||
// h := Handler.Add(func(w http.ResponseWriter, r *http.Request) {})
|
|
||||||
// http.Handler.ServeHTTP()
|
|
||||||
|
|
||||||
router.HandleFunc("test.gotest.com/", h)
|
|
||||||
// router.HandleFunc("login.gotest.com/", login)
|
|
||||||
|
|
||||||
srv := &http.Server{
|
|
||||||
Addr: ":8443",
|
|
||||||
Handler: router,
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
if err := srv.ListenAndServeTLS(sslCert, sslKey); err != nil && err != http.ErrServerClosed {
|
|
||||||
log.Fatalf("Failed to initialize server: %v\n", err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
log.Printf("Listening on port %v\n", srv.Addr)
|
|
||||||
|
|
||||||
// Wait for kill signal of channel
|
|
||||||
quit := make(chan os.Signal, 1)
|
|
||||||
|
|
||||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
||||||
|
|
||||||
// This blocks until a signal is passed into the quit channel
|
|
||||||
<-quit
|
|
||||||
|
|
||||||
// The context is used to inform the server it has 5 seconds to finish
|
|
||||||
// the request it is currently handling
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
// Shutdown server
|
|
||||||
log.Println("\nShutting down server...")
|
|
||||||
if err := srv.Shutdown(ctx); err != nil {
|
|
||||||
log.Fatalf("Server forced to shutdown: %v\n", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
138
app/main.go.bkup1
Normal file
138
app/main.go.bkup1
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"go.uber.org/fx"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
sslCert = "./certs/ssl.crt"
|
||||||
|
sslKey = "./certs/ssl.key"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
fmt.Println("ZPROX started")
|
||||||
|
}
|
||||||
|
|
||||||
|
// type Matcher struct {
|
||||||
|
// r *http.Request
|
||||||
|
// w http.ResponseWriter
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func (m *Matcher) MatchHost(str string, f ...func(w http.ResponseWriter, r *http.Request)) {
|
||||||
|
// if m.r.Host == "test.gotest.com" || m.r.Host == "localhost" {
|
||||||
|
// m.w.Write([]byte("test"))
|
||||||
|
// } else {
|
||||||
|
// m.w.Write([]byte("404 page not found"))
|
||||||
|
// m.w.WriteHeader(http.StatusNotFound)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
type HandlerFunc func(http.ResponseWriter, *http.Request)
|
||||||
|
|
||||||
|
// func (h *HandlerFunc) Handle(f func(w http.ResponseWriter, r *http.Request)) {
|
||||||
|
// h = h.HandlerFunc()
|
||||||
|
|
||||||
|
// // &h.f()
|
||||||
|
// // if r.Host == "test.gotest.com" {
|
||||||
|
// // w.Write([]byte("test"))
|
||||||
|
// // } else {
|
||||||
|
// // w.Write([]byte("404 page not found"))
|
||||||
|
|
||||||
|
// // w.WriteHeader(http.StatusNotFound)
|
||||||
|
// // }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func test(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// if r.Host == "test.gotest.com" {
|
||||||
|
// w.Write([]byte("login"))
|
||||||
|
// } else {
|
||||||
|
// w.Write([]byte("404 page not found"))
|
||||||
|
// w.WriteHeader(http.StatusNotFound)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func handle(f HandlerFunc) HandlerFunc {
|
||||||
|
// HandlerFunc{}.f[0]
|
||||||
|
// return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// f
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// type Mux struct {
|
||||||
|
// *Handlers
|
||||||
|
// *Router
|
||||||
|
// }
|
||||||
|
// type Handlers []struct{ http.Handler }
|
||||||
|
// type Router struct{ *http.ServeMux }
|
||||||
|
|
||||||
|
// func NewMux() *Mux {
|
||||||
|
// r := new(Router)
|
||||||
|
// h := new(Handlers)
|
||||||
|
// return &Mux{Handlers:h,Router:r}
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func (m *Handlers) Add() {
|
||||||
|
// h := new(Handlers)
|
||||||
|
// m = &Mux{h, r}
|
||||||
|
// &Handlers{f}
|
||||||
|
// }
|
||||||
|
type Router struct{ http.ServeMux }
|
||||||
|
|
||||||
|
func (r Router) Host(string) {
|
||||||
|
|
||||||
|
// router.HandleFunc("")
|
||||||
|
}
|
||||||
|
func main() {
|
||||||
|
app := fx.New()
|
||||||
|
app.Run()
|
||||||
|
// var h HandlerFunc
|
||||||
|
// h:=func(a HandlerFunc)HandlerFunc{
|
||||||
|
|
||||||
|
router := http.NewServeMux()
|
||||||
|
// h := Handler.Add(func(w http.ResponseWriter, r *http.Request) {})
|
||||||
|
// http.Handler.ServeHTTP()
|
||||||
|
|
||||||
|
router.HandleFunc("test.gotest.com/", h)
|
||||||
|
// router.HandleFunc("login.gotest.com/", login)
|
||||||
|
|
||||||
|
srv := &http.Server{
|
||||||
|
Addr: ":8443",
|
||||||
|
Handler: router,
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
if err := srv.ListenAndServeTLS(sslCert, sslKey); err != nil && err != http.ErrServerClosed {
|
||||||
|
log.Fatalf("Failed to initialize server: %v\n", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
log.Printf("Listening on port %v\n", srv.Addr)
|
||||||
|
|
||||||
|
// Wait for kill signal of channel
|
||||||
|
quit := make(chan os.Signal, 1)
|
||||||
|
|
||||||
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
|
||||||
|
// This blocks until a signal is passed into the quit channel
|
||||||
|
<-quit
|
||||||
|
|
||||||
|
// The context is used to inform the server it has 5 seconds to finish
|
||||||
|
// the request it is currently handling
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
// Shutdown server
|
||||||
|
log.Println("\nShutting down server...")
|
||||||
|
if err := srv.Shutdown(ctx); err != nil {
|
||||||
|
log.Fatalf("Server forced to shutdown: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,47 +14,47 @@ services:
|
||||||
# have to use $$ (double-dollar) so docker doesn't try to substitute a variable
|
# have to use $$ (double-dollar) so docker doesn't try to substitute a variable
|
||||||
command: reflex -r "\.go$$" -s -- sh -c "go run ./"
|
command: reflex -r "\.go$$" -s -- sh -c "go run ./"
|
||||||
|
|
||||||
postgres:
|
# postgres:
|
||||||
image: postgres:latest
|
# image: postgres:latest
|
||||||
restart: always
|
# restart: always
|
||||||
environment:
|
# environment:
|
||||||
- POSTGRES_USER=keycloak
|
# - POSTGRES_USER=keycloak
|
||||||
- POSTGRES_DB=keycloak
|
# - POSTGRES_DB=keycloak
|
||||||
- POSTGRES_PASSWORD=keycloak
|
# - POSTGRES_PASSWORD=keycloak
|
||||||
volumes:
|
# volumes:
|
||||||
- './docker/keycloak/postgres:/var/lib/postgresql/data'
|
# - './docker/keycloak/postgres:/var/lib/postgresql/data'
|
||||||
networks:
|
# networks:
|
||||||
postgres:
|
# postgres:
|
||||||
keycloak:
|
# keycloak:
|
||||||
depends_on:
|
# depends_on:
|
||||||
- postgres
|
# - postgres
|
||||||
image: quay.io/keycloak/keycloak:latest
|
# image: quay.io/keycloak/keycloak:latest
|
||||||
restart: unless-stopped
|
# restart: unless-stopped
|
||||||
command: start
|
# command: start
|
||||||
ports:
|
# ports:
|
||||||
- 4000:8080
|
# - 4000:8080
|
||||||
networks:
|
# networks:
|
||||||
postgres:
|
# postgres:
|
||||||
environment:
|
# environment:
|
||||||
- KC_PROXY_ADDRESS_FORWARDING=true
|
# - KC_PROXY_ADDRESS_FORWARDING=true
|
||||||
- KC_HOSTNAME_STRICT=false
|
# - KC_HOSTNAME_STRICT=false
|
||||||
- KC_HOSTNAME=keycloak.test.com
|
# - KC_HOSTNAME=keycloak.test.com
|
||||||
# - KC_HOSTNAME_URL=10.0.0.2:4000
|
# # - KC_HOSTNAME_URL=10.0.0.2:4000
|
||||||
# - KC_HOSTNAME_ADMIN_URL=keycloak.diukman.com
|
# # - KC_HOSTNAME_ADMIN_URL=keycloak.diukman.com
|
||||||
# - KC_PROXY=edge
|
# # - KC_PROXY=edge
|
||||||
- KC_HTTP_ENABLED=true
|
# - KC_HTTP_ENABLED=true
|
||||||
- KC_DB=postgres
|
# - KC_DB=postgres
|
||||||
- KC_DB_USERNAME=keycloak
|
# - KC_DB_USERNAME=keycloak
|
||||||
- KC_DB_PASSWORD=keycloak
|
# - KC_DB_PASSWORD=keycloak
|
||||||
- KC_DB_URL_HOST=postgres
|
# - KC_DB_URL_HOST=postgres
|
||||||
- KC_DB_URL_PORT=5432
|
# - KC_DB_URL_PORT=5432
|
||||||
- KC_DB_URL_DATABASE=keycloak
|
# - KC_DB_URL_DATABASE=keycloak
|
||||||
- KEYCLOAK_ADMIN=admin
|
# - KEYCLOAK_ADMIN=admin
|
||||||
- KEYCLOAK_ADMIN_PASSWORD=admin
|
# - KEYCLOAK_ADMIN_PASSWORD=admin
|
||||||
labels:
|
# labels:
|
||||||
- "quarkus.transaction-manager.enable-recovery=true"
|
# - "quarkus.transaction-manager.enable-recovery=true"
|
||||||
networks:
|
# networks:
|
||||||
postgres:
|
# postgres:
|
||||||
|
|
||||||
# networks:
|
# networks:
|
||||||
# - host
|
# - host
|
||||||
Loading…
Reference in a new issue