summaryrefslogtreecommitdiffci
path: root/config
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config.go102
-rw-r--r--config/config.local.yaml55
-rw-r--r--config/config.prod.yaml63
-rw-r--r--config/config.stage.yaml56
4 files changed, 71 insertions, 205 deletions
diff --git a/config/config.go b/config/config.go
index 9185e6a..536a333 100644
--- a/config/config.go
+++ b/config/config.go
@@ -12,7 +12,6 @@ import (
type Config struct {
LogLevel slog.Level `json:"LogLevel" yaml:"logLevel" validate:"required"`
- Endpoint EndpointConfig `json:"Endpoint" yaml:"endpoint" validate:"required"`
BlogPages BlogPagesConfig `json:"BlogPages" yaml:"blogPages" validate:"required"`
FactGiver FactGiverConfig `json:"FactGiver" yaml:"factGiver" validate:"required"`
LocalePath string `json:"LocalePath" yaml:"localePath" validate:"required,filepath"`
@@ -20,96 +19,18 @@ type Config struct {
Auth AuthConfig `json:"Auth" yaml:"auth" validate:"required"`
Mail MailConfig `json:"Mail" yaml:"mail" validate:"required"`
CanonicalEndpoint string `json:"CanonicalEndpoint" yaml:"canonicalEndpoint" validate:"required"`
- Meta []MetaConfig `json:"Meta" yaml:"meta"`
+ Meta MetaConfig `json:"Meta" yaml:"meta"`
PhotoStorage PhotoStorageConfig `json:"PhotoStorage" yaml:"photoStorage"`
- StaticStorage StaticStorageConfig `json:"StaticStorage" yaml:"staticStorage" validate:"required"`
+ StaticStorage PhotoTypeConfig `json:"StaticStorage" yaml:"staticStorage"`
AllowOrigins []string `json:"AllowOrigins" yaml:"allowOrigins"`
}
-type EndpointConfig struct {
- Type string `json:"Type" yaml:"type" validate:"required,oneof=http unix"`
- Config any `json:"Config" yaml:"config" validate:"required"`
-}
-
-func (ec *EndpointConfig) UnmarshalJSON(data []byte) error {
- var tmp struct {
- Type string `json:"Type"`
- Config json.RawMessage `json:"Config"`
- }
-
- if err := json.Unmarshal(data, &tmp); err != nil {
- return err
- }
-
- ec.Type = tmp.Type
-
- switch tmp.Type {
- case "http":
- var httpConfig HttpConfig
- if err := json.Unmarshal(tmp.Config, &httpConfig); err != nil {
- return fmt.Errorf("unmarshal HttpConfig: %w", err)
- }
- ec.Config = &httpConfig
- case "unix":
- var unixConfig UnixConfig
- if err := json.Unmarshal(tmp.Config, &unixConfig); err != nil {
- return fmt.Errorf("unmarshal UnixConfig: %w", err)
- }
- ec.Config = &unixConfig
- default:
- return fmt.Errorf("unsupported storage type: %s", tmp.Type)
- }
-
- return nil
-}
-
-func (ec *EndpointConfig) UnmarshalYAML(value *yaml.Node) error {
- var tmp struct {
- Type string `yaml:"type"`
- Config yaml.Node `yaml:"config"`
- }
-
- if err := value.Decode(&tmp); err != nil {
- return err
- }
-
- ec.Type = tmp.Type
-
- switch tmp.Type {
- case "http":
- var httpConfig HttpConfig
- if err := tmp.Config.Decode(&httpConfig); err != nil {
- return fmt.Errorf("unmarshal HttpConfig: %w", err)
- }
- ec.Config = &httpConfig
- case "unix":
- var unixConfig UnixConfig
- if err := tmp.Config.Decode(&unixConfig); err != nil {
- return fmt.Errorf("unmarshal UnixConfig: %w", err)
- }
- ec.Config = &unixConfig
- default:
- return fmt.Errorf("unsupported storage type: %s", tmp.Type)
- }
-
- return nil
-}
-
-type HttpConfig struct {
- ListenOn string `json:"ListenOn" yaml:"listenOn" validate:"required"`
-}
-
-type UnixConfig struct {
- Path string `json:"Path" yaml:"path" validate:"required"`
- Chmod string `json:"Chmod" yaml:"chmod" validate:"oneof=0600 0660 0666"`
-}
-
type BlogPagesConfig struct {
Storage StorageConfig `json:"Storage" yaml:"storage" validate:"required"`
}
type StorageConfig struct {
- Type string `json:"Type" yaml:"type" validate:"required,oneof=b2 s3"`
+ Type string `json:"type" yaml:"type,oneof=b2 s3"`
Config any `json:"Config" yaml:"config" validate:"required"`
}
@@ -237,8 +158,7 @@ type TriggerConfig struct {
}
type MetaConfig struct {
- Name string `json:"Name" yaml:"name"`
- Value string `json:"Value" yaml:"value"`
+ GoogleSiteVerification string `json:"GoogleSiteVerification" yaml:"googleSiteVerification"`
}
type PhotoStorageConfig struct {
@@ -261,16 +181,6 @@ type HomePageGifsConfig struct {
Indexes []string `json:"Indexes" yaml:"indexes"`
}
-type StaticStorageConfig struct {
- BaseUrl string `json:"BaseUrl" yaml:"baseUrl" validate:"url,required"`
- Map MapStorageConfig `json:"Map" yaml:"map" validate:"required"`
-}
-
-type MapStorageConfig struct {
- BaseUrl string `json:"BaseUrl" yaml:"baseUrl" validate:"url,required"`
- PMTiles string `json:"PMTiles" yaml:"pmTiles" validate:"required"`
-}
-
func LoadConfig(path string, config *Config) error {
fileBytes, err := os.ReadFile(path)
if err != nil {
@@ -292,10 +202,6 @@ func InitConfig(path string) (*Config, error) {
return nil, err
}
- if config.Endpoint.Type == "unix" && config.Endpoint.Config.(*UnixConfig).Chmod == "" {
- config.Endpoint.Config.(*UnixConfig).Chmod = "0660"
- }
-
validate := validator.New(validator.WithRequiredStructEnabled())
if err := validate.Struct(config); err != nil {
return nil, err
diff --git a/config/config.local.yaml b/config/config.local.yaml
index fefe2e7..7769438 100644
--- a/config/config.local.yaml
+++ b/config/config.local.yaml
@@ -1,40 +1,32 @@
logLevel: debug
-endpoint:
- type: http
- config:
- listenOn: ":3000"
blogPages:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: "stage-"
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factGiver:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: ""
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factsFileName: "facts-*.txt"
localePath: ./locale/
availableLanguages:
- name: ru
alt: Русский
- flag: https://cdn.saya.uz/stats/flags/ru.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/ru.svg
locFile: localization.ru.yaml
- name: en
alt: English
- flag: https://cdn.saya.uz/stats/flags/gb.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/gb.svg
locFile: localization.en.yaml
auth:
db:
@@ -56,26 +48,23 @@ mail:
canonicalEndpoint: "http://127.0.0.1:3000"
photoStorage:
full:
- baseUrl: https://cdn.saya.uz/photos/jpeg-full/%s
+ baseUrl: https://storage.yandexcloud.kz/sayauz-photos/%s
webp:
- baseUrl: https://cdn.saya.uz/photos/webp-full/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp/%s.webp
thumbnail1600p:
- baseUrl: https://cdn.saya.uz/photos/webp-1600p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1600/%s.webp
thumbnail1200p:
- baseUrl: https://cdn.saya.uz/photos/webp-1200p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1200/%s.webp
thumbnail800p:
- baseUrl: https://cdn.saya.uz/photos/webp-800p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp800/%s.webp
thumbnail560p:
- baseUrl: https://cdn.saya.uz/photos/webp-560p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp560/%s.webp
thumbnail320p:
- baseUrl: https://cdn.saya.uz/photos/webp-320p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp320/%s.webp
homePageGifs:
- baseUrl: https://cdn.saya.uz/stats/home-page-gifs/otter-%s.gif
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static/home-page-gifs/otter-%s.gif
indexes: ["1", "2", "3"]
staticStorage:
- baseUrl: https://cdn.saya.uz/stats
- map:
- baseUrl: https://cdn.saya.uz/map
- pmTiles: global.pmtiles
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static
allowOrigins:
- - https://cdn.saya.uz
+ - https://storage.yandexcloud.kz
diff --git a/config/config.prod.yaml b/config/config.prod.yaml
index 6ec00d8..91f606f 100644
--- a/config/config.prod.yaml
+++ b/config/config.prod.yaml
@@ -1,41 +1,32 @@
logLevel: info
-endpoint:
- type: unix
- config:
- path: "/etc/sayauz/prod.socket"
- chmod: '0666'
blogPages:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: "prod-"
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factGiver:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: ""
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factsFileName: "facts-*.txt"
localePath: ./locale/
availableLanguages:
- name: ru
alt: Русский
- flag: https://cdn.saya.uz/stats/flags/ru.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/ru.svg
locFile: localization.ru.yaml
- name: en
alt: English
- flag: https://cdn.saya.uz/stats/flags/gb.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/gb.svg
locFile: localization.en.yaml
auth:
db:
@@ -55,34 +46,26 @@ mail:
onNewPost: "0/5 * * * *"
canonicalEndpoint: "https://${FQDN}"
meta:
- - name: google-site-verification
- value: "${GOOGLE_SITE_VERIFICATION}"
- - name: yandex-verification
- value: "${YANDEX_VERIFICATION}"
- - name: msvalidate.01
- value: "${BING_VERIFICATION}"
+ googleSiteVerification: "${GOOGLE_SITE_VERIFICATION}"
photoStorage:
full:
- baseUrl: https://cdn.saya.uz/photos/jpeg-full/%s
+ baseUrl: https://storage.yandexcloud.kz/sayauz-photos/%s
webp:
- baseUrl: https://cdn.saya.uz/photos/webp-full/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp/%s.webp
thumbnail1600p:
- baseUrl: https://cdn.saya.uz/photos/webp-1600p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1600/%s.webp
thumbnail1200p:
- baseUrl: https://cdn.saya.uz/photos/webp-1200p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1200/%s.webp
thumbnail800p:
- baseUrl: https://cdn.saya.uz/photos/webp-800p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp800/%s.webp
thumbnail560p:
- baseUrl: https://cdn.saya.uz/photos/webp-560p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp560/%s.webp
thumbnail320p:
- baseUrl: https://cdn.saya.uz/photos/webp-320p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp320/%s.webp
homePageGifs:
- baseUrl: https://cdn.saya.uz/stats/home-page-gifs/otter-%s.gif
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static/home-page-gifs/otter-%s.gif
indexes: ["1", "2", "3"]
staticStorage:
- baseUrl: https://cdn.saya.uz/stats
- map:
- baseUrl: https://cdn.saya.uz/map
- pmTiles: global.pmtiles
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static
allowOrigins:
- - https://cdn.saya.uz
+ - https://storage.yandexcloud.kz
diff --git a/config/config.stage.yaml b/config/config.stage.yaml
index d8819ca..3f1381b 100644
--- a/config/config.stage.yaml
+++ b/config/config.stage.yaml
@@ -1,41 +1,32 @@
logLevel: debug
-endpoint:
- type: unix
- config:
- path: "/etc/sayauz/stage.socket"
- chmod: '0666'
blogPages:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: "stage-"
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factGiver:
storage:
- type: s3
+ type: b2
config:
- bucketName: sayauz-pages
- region: kz1
+ bucketName: sayana-pages
+ region: eu-central-003
prefix: ""
- endpoint: "https://storage.yandexcloud.kz"
- usePathStyle: true
- accessKeyID: "${S3_ACCESS_KEY_ID}"
- secretAccessKey: "${S3_SECRET_ACCESS_KEY}"
+ keyID: "${B2_KEY_ID}"
+ applicationKey: "${B2_APPLICATION_KEY}"
factsFileName: "facts-*.txt"
localePath: ./locale/
availableLanguages:
- name: ru
alt: Русский
- flag: https://cdn.saya.uz/stats/flags/ru.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/ru.svg
locFile: localization.ru.yaml
- name: en
alt: English
- flag: https://cdn.saya.uz/stats/flags/gb.svg
+ flag: https://storage.yandexcloud.kz/sayauz-static/flags/gb.svg
locFile: localization.en.yaml
auth:
db:
@@ -56,26 +47,23 @@ mail:
canonicalEndpoint: "https://${FQDN}"
photoStorage:
full:
- baseUrl: https://cdn.saya.uz/photos/jpeg-full/%s
+ baseUrl: https://storage.yandexcloud.kz/sayauz-photos/%s
webp:
- baseUrl: https://cdn.saya.uz/photos/webp-full/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp/%s.webp
thumbnail1600p:
- baseUrl: https://cdn.saya.uz/photos/webp-1600p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1600/%s.webp
thumbnail1200p:
- baseUrl: https://cdn.saya.uz/photos/webp-1200p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp1200/%s.webp
thumbnail800p:
- baseUrl: https://cdn.saya.uz/photos/webp-800p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp800/%s.webp
thumbnail560p:
- baseUrl: https://cdn.saya.uz/photos/webp-560p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp560/%s.webp
thumbnail320p:
- baseUrl: https://cdn.saya.uz/photos/webp-320p/%s.webp
+ baseUrl: https://storage.yandexcloud.kz/sayauz-thumbnails-webp320/%s.webp
homePageGifs:
- baseUrl: https://cdn.saya.uz/stats/home-page-gifs/otter-%s.gif
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static/home-page-gifs/otter-%s.gif
indexes: ["1", "2", "3"]
staticStorage:
- baseUrl: https://cdn.saya.uz/stats
- map:
- baseUrl: https://cdn.saya.uz/map
- pmTiles: global.pmtiles
+ baseUrl: https://storage.yandexcloud.kz/sayauz-static
allowOrigins:
- - https://cdn.saya.uz
+ - https://storage.yandexcloud.kz