diff --git a/README.md b/README.md index 0261b6e..13f8154 100644 --- a/README.md +++ b/README.md @@ -127,43 +127,44 @@ Optionally, you can set up a [client-side proxy](https://github.com/muety/wakapi ## 🔧 Configuration Options You can specify configuration options either via a config file (default: `config.yml`, customizable through the `-c` argument) or via environment variables. Here is an overview of all options. -| YAML Key / Env. Variable | Default | Description | -|-----------------------------|--------------|---------------------------------------------------------------------| -| `env` /
`ENVIRONMENT` | `dev` | Whether to use development- or production settings | -| `app.custom_languages` | - | Map from file endings to language names | -| `app.avatar_url_template` | (see [`config.default.yml`](config.default.yml)) | URL template for external user avatar images (e.g. from [Dicebear](https://dicebear.com) or [Gravatar](https://gravatar.com)) | -| `server.port` /
`WAKAPI_PORT` | `3000` | Port to listen on | -| `server.listen_ipv4` /
`WAKAPI_LISTEN_IPV4` | `127.0.0.1` | IPv4 network address to listen on (leave blank to disable IPv4) | -| `server.listen_ipv6` /
`WAKAPI_LISTEN_IPV6` | `::1` | IPv6 network address to listen on (leave blank to disable IPv6) | -| `server.listen_socket` /
`WAKAPI_LISTEN_SOCKET` | - | UNIX socket to listen on (leave blank to disable UNIX socket) | -| `server.timeout_sec` /
`WAKAPI_TIMEOUT_SEC` | `30` | Request timeout in seconds | -| `server.tls_cert_path` /
`WAKAPI_TLS_CERT_PATH` | - | Path of SSL server certificate (leave blank to not use HTTPS) | -| `server.tls_key_path` /
`WAKAPI_TLS_KEY_PATH` | - | Path of SSL server private key (leave blank to not use HTTPS) | -| `server.base_path` /
`WAKAPI_BASE_PATH` | `/` | Web base path (change when running behind a proxy under a sub-path) | -| `security.password_salt` /
`WAKAPI_PASSWORD_SALT` | - | Pepper to use for password hashing | -| `security.insecure_cookies` /
`WAKAPI_INSECURE_COOKIES` | `false` | Whether or not to allow cookies over HTTP | -| `security.cookie_max_age` /
`WAKAPI_COOKIE_MAX_AGE` | `172800` | Lifetime of authentication cookies in seconds or `0` to use [Session](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Define_the_lifetime_of_a_cookie) cookies | -| `security.allow_signup` /
`WAKAPI_ALLOW_SIGNUP` | `true` | Whether to enable user registration | -| `security.expose_metrics` /
`WAKAPI_EXPOSE_METRICS` | `false` | Whether to expose Prometheus metrics under `/api/metrics` | -| `db.host` /
`WAKAPI_DB_HOST` | - | Database host | -| `db.port` /
`WAKAPI_DB_PORT` | - | Database port | -| `db.user` /
`WAKAPI_DB_USER` | - | Database user | -| `db.password` /
`WAKAPI_DB_PASSWORD` | - | Database password | -| `db.name` /
`WAKAPI_DB_NAME` | `wakapi_db.db` | Database name | -| `db.dialect` /
`WAKAPI_DB_TYPE` | `sqlite3` | Database type (one of `sqlite3`, `mysql`, `postgres`, `cockroach`) | -| `db.charset` /
`WAKAPI_DB_CHARSET` | `utf8mb4` | Database connection charset (for MySQL only) | -| `db.max_conn` /
`WAKAPI_DB_MAX_CONNECTIONS` | `2` | Maximum number of database connections | -| `db.ssl` /
`WAKAPI_DB_SSL` | `false` | Whether to use TLS encryption for database connection (Postgres and CockroachDB only) | -| `db.automgirate_fail_silently` /
`WAKAPI_DB_AUTOMIGRATE_FAIL_SILENTLY` | `false` | Whether to ignore schema auto-migration failures when starting up | -| `mail.enabled` /
`WAKAPI_MAIL_ENABLED` | `true` | Whether to allow Wakapi to send e-mail (e.g. for password resets) | -| `mail.sender` /
`WAKAPI_MAIL_SENDER` | `noreply@wakapi.dev` | Default sender address for outgoing mails (ignored for MailWhale) | -| `mail.provider` /
`WAKAPI_MAIL_PROVIDER` | `smtp` | Implementation to use for sending mails (one of [`smtp`, `mailwhale`]) | -| `mail.smtp.*` /
`WAKAPI_MAIL_SMTP_*` | `-` | Various options to configure SMTP. See [default config](config.default.yml) for details | -| `mail.mailwhale.*` /
`WAKAPI_MAIL_MAILWHALE_*` | `-` | Various options to configure [MailWhale](https://mailwhale.dev) sending service. See [default config](config.default.yml) for details | -| `sentry.dsn` /
`WAKAPI_SENTRY_DSN` | – | DSN for to integrate [Sentry](https://sentry.io) for error logging and tracing (leave empty to disable) | -| `sentry.enable_tracing` /
`WAKAPI_SENTRY_TRACING` | `false` | Whether to enable Sentry request tracing | -| `sentry.sample_rate` /
`WAKAPI_SENTRY_SAMPLE_RATE` | `0.75` | Probability of tracing a request in Sentry | -| `sentry.sample_rate_heartbeats` /
`WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS`| `0.1` | Probability of tracing a heartbeats request in Sentry | +| YAML Key / Env. Variable | Default | Description | +|------------------------------------------------------------------------------|--------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `env` /
`ENVIRONMENT` | `dev` | Whether to use development- or production settings | +| `app.custom_languages` | - | Map from file endings to language names | +| `app.avatar_url_template` | (see [`config.default.yml`](config.default.yml)) | URL template for external user avatar images (e.g. from [Dicebear](https://dicebear.com) or [Gravatar](https://gravatar.com)) | +| `server.port` /
`WAKAPI_PORT` | `3000` | Port to listen on | +| `server.listen_ipv4` /
`WAKAPI_LISTEN_IPV4` | `127.0.0.1` | IPv4 network address to listen on (leave blank to disable IPv4) | +| `server.listen_ipv6` /
`WAKAPI_LISTEN_IPV6` | `::1` | IPv6 network address to listen on (leave blank to disable IPv6) | +| `server.listen_socket` /
`WAKAPI_LISTEN_SOCKET` | - | UNIX socket to listen on (leave blank to disable UNIX socket) | +| `server.timeout_sec` /
`WAKAPI_TIMEOUT_SEC` | `30` | Request timeout in seconds | +| `server.tls_cert_path` /
`WAKAPI_TLS_CERT_PATH` | - | Path of SSL server certificate (leave blank to not use HTTPS) | +| `server.tls_key_path` /
`WAKAPI_TLS_KEY_PATH` | - | Path of SSL server private key (leave blank to not use HTTPS) | +| `server.base_path` /
`WAKAPI_BASE_PATH` | `/` | Web base path (change when running behind a proxy under a sub-path) | +| `security.password_salt` /
`WAKAPI_PASSWORD_SALT` | - | Pepper to use for password hashing | +| `security.insecure_cookies` /
`WAKAPI_INSECURE_COOKIES` | `false` | Whether or not to allow cookies over HTTP | +| `security.cookie_max_age` /
`WAKAPI_COOKIE_MAX_AGE` | `172800` | Lifetime of authentication cookies in seconds or `0` to use [Session](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Define_the_lifetime_of_a_cookie) cookies | +| `security.allow_signup` /
`WAKAPI_ALLOW_SIGNUP` | `true` | Whether to enable user registration | +| `security.expose_metrics` /
`WAKAPI_EXPOSE_METRICS` | `false` | Whether to expose Prometheus metrics under `/api/metrics` | +| `db.host` /
`WAKAPI_DB_HOST` | - | Database host | +| `db.port` /
`WAKAPI_DB_PORT` | - | Database port | +| `db.user` /
`WAKAPI_DB_USER` | - | Database user | +| `db.password` /
`WAKAPI_DB_PASSWORD` | - | Database password | +| `db.name` /
`WAKAPI_DB_NAME` | `wakapi_db.db` | Database name | +| `db.dialect` /
`WAKAPI_DB_TYPE` | `sqlite3` | Database type (one of `sqlite3`, `mysql`, `postgres`, `cockroach`) | +| `db.charset` /
`WAKAPI_DB_CHARSET` | `utf8mb4` | Database connection charset (for MySQL only) | +| `db.max_conn` /
`WAKAPI_DB_MAX_CONNECTIONS` | `2` | Maximum number of database connections | +| `db.ssl` /
`WAKAPI_DB_SSL` | `false` | Whether to use TLS encryption for database connection (Postgres and CockroachDB only) | +| `db.automgirate_fail_silently` /
`WAKAPI_DB_AUTOMIGRATE_FAIL_SILENTLY` | `false` | Whether to ignore schema auto-migration failures when starting up | +| `mail.enabled` /
`WAKAPI_MAIL_ENABLED` | `true` | Whether to allow Wakapi to send e-mail (e.g. for password resets) | +| `mail.sender` /
`WAKAPI_MAIL_SENDER` | `noreply@wakapi.dev` | Default sender address for outgoing mails (ignored for MailWhale) | +| `mail.provider` /
`WAKAPI_MAIL_PROVIDER` | `smtp` | Implementation to use for sending mails (one of [`smtp`, `mailwhale`]) | +| `mail.smtp.*` /
`WAKAPI_MAIL_SMTP_*` | `-` | Various options to configure SMTP. See [default config](config.default.yml) for details | +| `mail.mailwhale.*` /
`WAKAPI_MAIL_MAILWHALE_*` | `-` | Various options to configure [MailWhale](https://mailwhale.dev) sending service. See [default config](config.default.yml) for details | +| `sentry.dsn` /
`WAKAPI_SENTRY_DSN` | – | DSN for to integrate [Sentry](https://sentry.io) for error logging and tracing (leave empty to disable) | +| `sentry.enable_tracing` /
`WAKAPI_SENTRY_TRACING` | `false` | Whether to enable Sentry request tracing | +| `sentry.sample_rate` /
`WAKAPI_SENTRY_SAMPLE_RATE` | `0.75` | Probability of tracing a request in Sentry | +| `sentry.sample_rate_heartbeats` /
`WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS` | `0.1` | Probability of tracing a heartbeats request in Sentry | +| `quick_start` /
`WAKAPI_QUICK_START` | `false` | Whether to skip initial boot tasks. Use only for development purposes! | ### Supported databases Wakapi uses [GORM](https://gorm.io) as an ORM. As a consequence, a set of different relational databases is supported. diff --git a/config.default.yml b/config.default.yml index 2a45485..4b60091 100644 --- a/config.default.yml +++ b/config.default.yml @@ -69,3 +69,5 @@ mail: url: client_id: client_secret: + +quick_start: false # whether to skip initial tasks on application startup, like summary generation \ No newline at end of file diff --git a/config/config.go b/config/config.go index e0abe41..a327ce3 100644 --- a/config/config.go +++ b/config/config.go @@ -140,14 +140,15 @@ type SMTPMailConfig struct { } type Config struct { - Env string `default:"dev" env:"ENVIRONMENT"` - Version string `yaml:"-"` - App appConfig - Security securityConfig - Db dbConfig - Server serverConfig - Sentry sentryConfig - Mail mailConfig + Env string `default:"dev" env:"ENVIRONMENT"` + Version string `yaml:"-"` + QuickStart bool `yaml:"quick_start" env:"WAKAPI_QUICK_START"` + App appConfig + Security securityConfig + Db dbConfig + Server serverConfig + Sentry sentryConfig + Mail mailConfig } func (c *Config) CreateCookie(name, value, path string) *http.Cookie { diff --git a/main.go b/main.go index d2e5a9e..29f6a95 100644 --- a/main.go +++ b/main.go @@ -164,9 +164,11 @@ func main() { miscService = services.NewMiscService(userService, summaryService, keyValueService) // Schedule background tasks - go aggregationService.Schedule() - go miscService.ScheduleCountTotalTime() - go reportService.Schedule() + if !config.QuickStart { + go aggregationService.Schedule() + go miscService.ScheduleCountTotalTime() + go reportService.Schedule() + } routes.Init()