diff --git a/clusters/cl01tl/applications/homepage/values.yaml b/clusters/cl01tl/applications/homepage/values.yaml index 877adc015..8aba459cd 100644 --- a/clusters/cl01tl/applications/homepage/values.yaml +++ b/clusters/cl01tl/applications/homepage/values.yaml @@ -210,7 +210,7 @@ homepage: statusStyle: dot - Books: icon: calibre.svg - description: Calibre Content Server + description: Calibre OPDS href: https://books.alexlebens.dev siteMonitor: https://books.alexlebens.dev statusStyle: dot @@ -245,6 +245,12 @@ homepage: href: https://penpot-cl01tl.boreal-beaufort.ts.net siteMonitor: http://penpot-frontend.penpot:80 statusStyle: dot + - Media Tracker: + icon: calibre.png + description: Ryot + href: https://raw.githubusercontent.com/IgnisDa/ryot/main/docs/logo.png + siteMonitor: http://ryot.ryot:80 + statusStyle: dot - Calibre Server: icon: calibre.png description: Calibre Content Server diff --git a/clusters/cl01tl/applications/ryot/Chart.yaml b/clusters/cl01tl/applications/ryot/Chart.yaml new file mode 100644 index 000000000..1d3d2569b --- /dev/null +++ b/clusters/cl01tl/applications/ryot/Chart.yaml @@ -0,0 +1,27 @@ +apiVersion: v2 +name: ryot +version: 1.0.0 +description: Ryot +keywords: + - ryot + - tracker +home: https://wiki.alexlebens.dev/doc/ryot-hIylymbPGj +sources: + - https://github.com/IgnisDa/ryot + - https://github.com/cloudnative-pg/cloudnative-pg + - https://github.com/ignisda/ryot/pkgs/container/ryot + - https://github.com/bjw-s/helm-charts/tree/main/charts/other/app-template + - https://github.com/alexlebens/helm-charts/charts/postgres-cluster +maintainers: + - name: alexlebens +dependencies: + - name: app-template + alias: ryot + repository: https://bjw-s.github.io/helm-charts/ + version: 3.3.2 + - name: postgres-cluster + alias: postgres-16-cluster + version: 3.9.0 + repository: http://alexlebens.github.io/helm-charts +icon: https://raw.githubusercontent.com/IgnisDa/ryot/main/docs/logo.png +appVersion: v6.11.0 diff --git a/clusters/cl01tl/applications/ryot/templates/external-secret.yaml b/clusters/cl01tl/applications/ryot/templates/external-secret.yaml new file mode 100644 index 000000000..f42aba0d1 --- /dev/null +++ b/clusters/cl01tl/applications/ryot/templates/external-secret.yaml @@ -0,0 +1,30 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: ryot-postgresql-16-cluster-backup-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: ryot-postgresql-16-cluster-backup-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: database + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: ACCESS_KEY_ID + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /aws/keys/cl01tl-ryot-postgresql + metadataPolicy: None + property: access_key + - secretKey: ACCESS_SECRET_KEY + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /aws/keys/cl01tl-ryot-postgresql + metadataPolicy: None + property: secret_key diff --git a/clusters/cl01tl/applications/ryot/values.yaml b/clusters/cl01tl/applications/ryot/values.yaml new file mode 100644 index 000000000..19daa4ab9 --- /dev/null +++ b/clusters/cl01tl/applications/ryot/values.yaml @@ -0,0 +1,344 @@ +ryot: + controllers: + main: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + containers: + main: + image: + repository: ghcr.io/ignisda/ryot + tag: v6.11.0 + pullPolicy: IfNotPresent + env: + - name: TZ + value: US/Central + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: ryot-postgresql-16-cluster-app + key: uri + resources: + requests: + cpu: 100m + memory: 256Mi + serviceAccount: + create: true + configMaps: + config: + enabled: true + data: + ryot.yaml: | + # Settings related to anime and manga. + anime_and_manga: + # Settings related to Anilist. + anilist: + # Whether to prefer the english name for media from this source. + # @deprecated + # @envvar ANIME_AND_MANGA_ANILIST_PREFER_ENGLISH + prefer_english: false + + # The preferred language for media from this source. + # @envvar ANIME_AND_MANGA_ANILIST_PREFERRED_LANGUAGE + preferred_language: "native" + + # Settings related to MAL. + mal: + # The client ID to be used for the MAL API. + # @envvar ANIME_AND_MANGA_MAL_CLIENT_ID + client_id: "" + + # Settings related to MangaUpdates. + manga_updates: {} + + # Settings related to audio books. + audio_books: + # Settings related to Audible. + audible: + # Settings related to locale for making requests Audible. + # @envvar AUDIO_BOOKS_AUDIBLE_LOCALE + locale: "us" + + # Settings related to books. + books: + # Settings related to Google Books. + google_books: + # The API key to be used for the Google Books API. + # @envvar BOOKS_GOOGLE_BOOKS_API_KEY + api_key: "" + + # Whether to pass the raw query string to the search API. + # @envvar BOOKS_GOOGLE_BOOKS_PASS_RAW_QUERY + pass_raw_query: false + + # Settings related to Openlibrary. + openlibrary: + # The image sizes to fetch from Openlibrary. + # @envvar BOOKS_OPENLIBRARY_COVER_IMAGE_SIZE + cover_image_size: "M" + + # The database related settings. + database: + # The Postgres database connection string. + # Format described in https://www.sea-ql.org/SeaORM/docs/install-and-config/connection/#postgres. + # @envvar DATABASE_URL + url: "" + + # Whether to disable telemetry. + # @envvar DISABLE_TELEMETRY + disable_telemetry: false + + # Settings related to exercises. + exercise: {} + + # Settings related to file storage. + file_storage: + # The access key ID for the S3 compatible file storage. **Required** to + # enable file storage. + # @envvar FILE_STORAGE_S3_ACCESS_KEY_ID + s3_access_key_id: "" + + # The name of the S3 compatible bucket. **Required** to enable file storage. + # @envvar FILE_STORAGE_S3_BUCKET_NAME + s3_bucket_name: "" + + # The region for the S3 compatible file storage. + # @envvar FILE_STORAGE_S3_REGION + s3_region: "us-east-1" + + # The secret access key for the S3 compatible file storage. **Required** + # to enable file storage. + # @envvar FILE_STORAGE_S3_SECRET_ACCESS_KEY + s3_secret_access_key: "" + + # The URL for the S3 compatible file storage. + # @envvar FILE_STORAGE_S3_URL + s3_url: "" + + # Settings related to frontend storage. + frontend: + # A message to be displayed on the dashboard. + # @envvar FRONTEND_DASHBOARD_MESSAGE + dashboard_message: "" + + # The button label for OIDC authentication. + # @envvar FRONTEND_OIDC_BUTTON_LABEL + oidc_button_label: "Continue with OpenID Connect" + + # The number of items to display in a list view. + # @envvar FRONTEND_PAGE_SIZE + page_size: 20 + + # Settings related to Umami analytics. + umami: + # @envvar FRONTEND_UMAMI_DOMAINS + domains: "" + + # For example: https://umami.is/script.js. + # @envvar FRONTEND_UMAMI_SCRIPT_URL + script_url: "" + + # @envvar FRONTEND_UMAMI_WEBSITE_ID + website_id: "" + + # Used as the base URL when generating item links for the frontend. + # @envvar FRONTEND_URL + url: "https://pro.ryot.io" + + # Settings related to external integrations. + integration: + # Sync data from push and yank based integrations every `n` minutes. + # @envvar INTEGRATION_SYNC_EVERY_MINUTES + sync_every_minutes: 5 + + # Settings related to media. + media: + # Number of days after which a media should be removed from the Monitoring collection. + # @envvar MEDIA_MONITORING_REMOVE_AFTER_DAYS + monitoring_remove_after_days: 30 + + # Settings related to movies and shows. + movies_and_shows: + # Settings related to TMDB. + tmdb: + # The access token for the TMDB API. + # @envvar MOVIES_AND_SHOWS_TMDB_ACCESS_TOKEN + access_token: "" + + # The locale to use for making requests to TMDB API. + # @envvar MOVIES_AND_SHOWS_TMDB_LOCALE + locale: "en" + + # Settings related to podcasts. + podcasts: + # Settings related to iTunes. + itunes: + # The locale to use for making requests to iTunes API. + # @envvar PODCASTS_ITUNES_LOCALE + locale: "en_us" + + # Settings related to Listennotes. + listennotes: + # The access token for the Listennotes API. + # @envvar PODCASTS_LISTENNOTES_API_TOKEN + api_token: "" + + # Settings related to scheduler. + scheduler: + # The number of jobs to process every 5 seconds when updating metadata in + # the background. + # @envvar SCHEDULER_RATE_LIMIT_NUM + rate_limit_num: 5 + + # Settings related to server. + server: + # An access token that can be used for admin operations. + # @envvar SERVER_ADMIN_ACCESS_TOKEN + admin_access_token: "" + + # An array of URLs for CORS. + # @envvar SERVER_CORS_ORIGINS + cors_origins: [] + + # Disable all background jobs. + # @envvar SERVER_DISABLE_BACKGROUND_JOBS + disable_background_jobs: false + + # Whether the graphql playground will be enabled. + # @envvar SERVER_GRAPHQL_PLAYGROUND_ENABLED + graphql_playground_enabled: true + + # The maximum file size in MB for user uploads. + # @envvar SERVER_MAX_FILE_SIZE + max_file_size: 70 + + # The OIDC related settings. + oidc: + # @envvar SERVER_OIDC_CLIENT_ID + client_id: "" + + # @envvar SERVER_OIDC_CLIENT_SECRET + client_secret: "" + + # @envvar SERVER_OIDC_ISSUER_URL + issuer_url: "" + + # The hours in which a media can be marked as seen again for a user. This + # is used so that the same media can not be used marked as started when + # it has been already marked as seen in the last `n` hours. + # @envvar SERVER_PROGRESS_UPDATE_THRESHOLD + progress_update_threshold: 2 + + # Number of seconds to sleep before starting the server. + # @envvar SERVER_SLEEP_BEFORE_STARTUP_SECONDS + sleep_before_startup_seconds: 0 + + # The mailer related settings. + smtp: + # @envvar SERVER_SMTP_MAILBOX + mailbox: "Ryot " + + # @envvar SERVER_SMTP_PASSWORD + password: "" + + # @envvar SERVER_SMTP_SERVER + server: "" + + # @envvar SERVER_SMTP_USER + user: "" + + # Settings related to users. + users: + # Whether new users will be allowed to sign up to this instance. + # @envvar USERS_ALLOW_REGISTRATION + allow_registration: true + + # Whether to disable local user authentication completely. + # @envvar USERS_DISABLE_LOCAL_AUTH + disable_local_auth: false + + # The secret used for generating JWT tokens. + # @envvar USERS_JWT_SECRET + jwt_secret: "" + + # The number of days till login authentication token is valid. + # @envvar USERS_TOKEN_VALID_FOR_DAYS + token_valid_for_days: 90 + + # Settings related to video games. + video_games: + # Settings related to IGDB. + igdb: + # The image sizes to fetch from IGDB. + # @envvar VIDEO_GAMES_IGDB_IMAGE_SIZE + image_size: "t_original" + + # Settings related to Twitch. + twitch: + # The client ID issues by Twitch. **Required** to enable video games + # tracking. [More information](/docs/guides/video-games.md). + # @envvar VIDEO_GAMES_TWITCH_CLIENT_ID + client_id: "" + + # The client secret issued by Twitch. **Required** to enable video games + # tracking. + # @envvar VIDEO_GAMES_TWITCH_CLIENT_SECRET + client_secret: "" + + # Settings related to visual novels. + visual_novels: {} + + service: + main: + controller: main + ports: + http: + port: 80 + targetPort: 8000 + protocol: HTTP + ingress: + tailscale: + enabled: true + className: tailscale + hosts: + - host: ryot-cl01tl + paths: + - path: / + pathType: Prefix + service: + name: ryot + port: 80 + tls: + - hosts: + - ryot-cl01tl + persistence: + config: + enabled: true + type: configMap + name: ryot-config + advancedMounts: + main: + main: + - path: /home/ryot/config/ryot.yaml + readOnly: true + mountPropagation: None + subPath: ryot.yaml +postgres-16-cluster: + mode: standalone + cluster: + walStorage: + storageClass: local-path + storage: + storageClass: local-path + monitoring: + enabled: true + prometheusRule: + enabled: false + backup: + enabled: true + endpointURL: https://s3.us-east-2.amazonaws.com + destinationPath: s3://cl01tl-postgresql-backups/ryot + endpointCredentials: ryot-postgresql-16-cluster-backup-secret + backupIndex: 1 + retentionPolicy: 14d