mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-04 23:38:08 -06:00
allow custom ports for webserver and le (#111)
This commit is contained in:
parent
05e9af089c
commit
bc1d8a9265
8 changed files with 79 additions and 26 deletions
|
|
@ -50,6 +50,7 @@ type Config struct {
|
|||
Host string `yaml:"host"`
|
||||
AccountDomain string `yaml:"accountDomain"`
|
||||
Protocol string `yaml:"protocol"`
|
||||
Port int `yaml:"port"`
|
||||
DBConfig *DBConfig `yaml:"db"`
|
||||
TemplateConfig *TemplateConfig `yaml:"template"`
|
||||
AccountsConfig *AccountsConfig `yaml:"accounts"`
|
||||
|
|
@ -150,6 +151,10 @@ func (c *Config) ParseCLIFlags(f KeyedFlags, version string) error {
|
|||
return errors.New("protocol was not set")
|
||||
}
|
||||
|
||||
if c.Port == 0 || f.IsSet(fn.Port) {
|
||||
c.Port = f.Int(fn.Port)
|
||||
}
|
||||
|
||||
// db flags
|
||||
if c.DBConfig.Type == "" || f.IsSet(fn.DbType) {
|
||||
c.DBConfig.Type = f.String(fn.DbType)
|
||||
|
|
@ -262,6 +267,10 @@ func (c *Config) ParseCLIFlags(f KeyedFlags, version string) error {
|
|||
c.LetsEncryptConfig.Enabled = f.Bool(fn.LetsEncryptEnabled)
|
||||
}
|
||||
|
||||
if c.LetsEncryptConfig.Port == 0 || f.IsSet(fn.LetsEncryptPort) {
|
||||
c.LetsEncryptConfig.Port = f.Int(fn.LetsEncryptPort)
|
||||
}
|
||||
|
||||
if c.LetsEncryptConfig.CertDir == "" || f.IsSet(fn.LetsEncryptCertDir) {
|
||||
c.LetsEncryptConfig.CertDir = f.String(fn.LetsEncryptCertDir)
|
||||
}
|
||||
|
|
@ -329,6 +338,7 @@ type Flags struct {
|
|||
Host string
|
||||
AccountDomain string
|
||||
Protocol string
|
||||
Port string
|
||||
|
||||
DbType string
|
||||
DbAddress string
|
||||
|
|
@ -366,6 +376,7 @@ type Flags struct {
|
|||
LetsEncryptEnabled string
|
||||
LetsEncryptCertDir string
|
||||
LetsEncryptEmailAddress string
|
||||
LetsEncryptPort string
|
||||
|
||||
OIDCEnabled string
|
||||
OIDCIdpName string
|
||||
|
|
@ -384,6 +395,7 @@ type Defaults struct {
|
|||
Host string
|
||||
AccountDomain string
|
||||
Protocol string
|
||||
Port int
|
||||
SoftwareVersion string
|
||||
|
||||
DbType string
|
||||
|
|
@ -422,6 +434,7 @@ type Defaults struct {
|
|||
LetsEncryptEnabled bool
|
||||
LetsEncryptCertDir string
|
||||
LetsEncryptEmailAddress string
|
||||
LetsEncryptPort int
|
||||
|
||||
OIDCEnabled bool
|
||||
OIDCIdpName string
|
||||
|
|
@ -442,6 +455,7 @@ func GetFlagNames() Flags {
|
|||
Host: "host",
|
||||
AccountDomain: "account-domain",
|
||||
Protocol: "protocol",
|
||||
Port: "port",
|
||||
|
||||
DbType: "db-type",
|
||||
DbAddress: "db-address",
|
||||
|
|
@ -477,6 +491,7 @@ func GetFlagNames() Flags {
|
|||
StatusesMaxMediaFiles: "statuses-max-media-files",
|
||||
|
||||
LetsEncryptEnabled: "letsencrypt-enabled",
|
||||
LetsEncryptPort: "letsencrypt-port",
|
||||
LetsEncryptCertDir: "letsencrypt-cert-dir",
|
||||
LetsEncryptEmailAddress: "letsencrypt-email",
|
||||
|
||||
|
|
@ -500,6 +515,7 @@ func GetEnvNames() Flags {
|
|||
Host: "GTS_HOST",
|
||||
AccountDomain: "GTS_ACCOUNT_DOMAIN",
|
||||
Protocol: "GTS_PROTOCOL",
|
||||
Port: "GTS_PORT",
|
||||
|
||||
DbType: "GTS_DB_TYPE",
|
||||
DbAddress: "GTS_DB_ADDRESS",
|
||||
|
|
@ -535,6 +551,7 @@ func GetEnvNames() Flags {
|
|||
StatusesMaxMediaFiles: "GTS_STATUSES_MAX_MEDIA_FILES",
|
||||
|
||||
LetsEncryptEnabled: "GTS_LETSENCRYPT_ENABLED",
|
||||
LetsEncryptPort: "GTS_LETSENCRYPT_PORT",
|
||||
LetsEncryptCertDir: "GTS_LETSENCRYPT_CERT_DIR",
|
||||
LetsEncryptEmailAddress: "GTS_LETSENCRYPT_EMAIL",
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ func TestDefault() *Config {
|
|||
ApplicationName: defaults.ApplicationName,
|
||||
Host: defaults.Host,
|
||||
Protocol: defaults.Protocol,
|
||||
Port: defaults.Port,
|
||||
SoftwareVersion: defaults.SoftwareVersion,
|
||||
DBConfig: &DBConfig{
|
||||
Type: defaults.DbType,
|
||||
|
|
@ -51,6 +52,7 @@ func TestDefault() *Config {
|
|||
},
|
||||
LetsEncryptConfig: &LetsEncryptConfig{
|
||||
Enabled: defaults.LetsEncryptEnabled,
|
||||
Port: defaults.LetsEncryptPort,
|
||||
CertDir: defaults.LetsEncryptCertDir,
|
||||
EmailAddress: defaults.LetsEncryptEmailAddress,
|
||||
},
|
||||
|
|
@ -115,6 +117,7 @@ func Default() *Config {
|
|||
},
|
||||
LetsEncryptConfig: &LetsEncryptConfig{
|
||||
Enabled: defaults.LetsEncryptEnabled,
|
||||
Port: defaults.LetsEncryptPort,
|
||||
CertDir: defaults.LetsEncryptCertDir,
|
||||
EmailAddress: defaults.LetsEncryptEmailAddress,
|
||||
},
|
||||
|
|
@ -140,6 +143,7 @@ func GetDefaults() Defaults {
|
|||
Host: "",
|
||||
AccountDomain: "",
|
||||
Protocol: "https",
|
||||
Port: 8080,
|
||||
|
||||
DbType: "postgres",
|
||||
DbAddress: "localhost",
|
||||
|
|
@ -175,6 +179,7 @@ func GetDefaults() Defaults {
|
|||
StatusesMaxMediaFiles: 6,
|
||||
|
||||
LetsEncryptEnabled: true,
|
||||
LetsEncryptPort: 80,
|
||||
LetsEncryptCertDir: "/gotosocial/storage/certs",
|
||||
LetsEncryptEmailAddress: "",
|
||||
|
||||
|
|
@ -197,6 +202,7 @@ func GetTestDefaults() Defaults {
|
|||
Host: "localhost:8080",
|
||||
AccountDomain: "",
|
||||
Protocol: "http",
|
||||
Port: 8080,
|
||||
|
||||
DbType: "postgres",
|
||||
DbAddress: "localhost",
|
||||
|
|
@ -230,6 +236,7 @@ func GetTestDefaults() Defaults {
|
|||
StatusesMaxMediaFiles: 6,
|
||||
|
||||
LetsEncryptEnabled: false,
|
||||
LetsEncryptPort: 0,
|
||||
LetsEncryptCertDir: "",
|
||||
LetsEncryptEmailAddress: "",
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@ package config
|
|||
// LetsEncryptConfig wraps everything needed to manage letsencrypt certificates from within gotosocial.
|
||||
type LetsEncryptConfig struct {
|
||||
// Should letsencrypt certificate fetching be enabled?
|
||||
Enabled bool
|
||||
Enabled bool `yaml:"enabled"`
|
||||
// What port should the server listen for letsencrypt challenges on?
|
||||
Port int `yaml:"port"`
|
||||
// Where should certificates be stored?
|
||||
CertDir string
|
||||
CertDir string `yaml:"certDir"`
|
||||
// Email address to pass to letsencrypt for notifications about certificate expiry etc.
|
||||
EmailAddress string
|
||||
EmailAddress string `yaml:"emailAddress"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,30 +68,24 @@ func (r *router) AttachStaticFS(relativePath string, fs http.FileSystem) {
|
|||
r.engine.StaticFS(relativePath, fs)
|
||||
}
|
||||
|
||||
// Start starts the router nicely.
|
||||
//
|
||||
// Different ports and handlers will be served depending on whether letsencrypt is enabled or not.
|
||||
// If it is enabled, then port 80 will be used for handling LE requests, and port 443 will be used
|
||||
// for serving actual requests.
|
||||
//
|
||||
// If letsencrypt is not being used, then port 8080 only will be used for serving requests.
|
||||
// Start starts the router nicely. It will serve two handlers if letsencrypt is enabled, and only the web/API handler if letsencrypt is not enabled.
|
||||
func (r *router) Start() {
|
||||
if r.config.LetsEncryptConfig.Enabled {
|
||||
// serve the http handler on port 80 for receiving letsencrypt requests and solving their devious riddles
|
||||
// serve the http handler on the selected letsencrypt port, for receiving letsencrypt requests and solving their devious riddles
|
||||
go func() {
|
||||
if err := http.ListenAndServe(":http", r.certManager.HTTPHandler(http.HandlerFunc(httpsRedirect))); err != nil && err != http.ErrServerClosed {
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":%d", r.config.LetsEncryptConfig.Port), r.certManager.HTTPHandler(http.HandlerFunc(httpsRedirect))); err != nil && err != http.ErrServerClosed {
|
||||
r.logger.Fatalf("listen: %s", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// and serve the actual TLS handler on port 443
|
||||
// and serve the actual TLS handler
|
||||
go func() {
|
||||
if err := r.srv.ListenAndServeTLS("", ""); err != nil && err != http.ErrServerClosed {
|
||||
r.logger.Fatalf("listen: %s", err)
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
// no tls required so just serve on port 8080
|
||||
// no tls required
|
||||
go func() {
|
||||
if err := r.srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
r.logger.Fatalf("listen: %s", err)
|
||||
|
|
@ -148,6 +142,7 @@ func New(cfg *config.Config, db db.DB, logger *logrus.Logger) (Router, error) {
|
|||
|
||||
// create the http server here, passing the gin engine as handler
|
||||
s := &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", cfg.Port),
|
||||
Handler: engine,
|
||||
ReadTimeout: readTimeout,
|
||||
WriteTimeout: writeTimeout,
|
||||
|
|
@ -167,12 +162,7 @@ func New(cfg *config.Config, db db.DB, logger *logrus.Logger) (Router, error) {
|
|||
Cache: autocert.DirCache(cfg.LetsEncryptConfig.CertDir),
|
||||
Email: cfg.LetsEncryptConfig.EmailAddress,
|
||||
}
|
||||
// and create an HTTPS server
|
||||
s.Addr = ":https"
|
||||
s.TLSConfig = m.TLSConfig()
|
||||
} else {
|
||||
// le is NOT enabled, so just serve bare requests on port 8080
|
||||
s.Addr = ":8080"
|
||||
}
|
||||
|
||||
return &router{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue