From d20f1e6a3a1a082687041ad27ac2fe2d0ce9d14e Mon Sep 17 00:00:00 2001 From: Amjed Ali <86785660+amjed-ali-k@users.noreply.github.com> Date: Sun, 23 Jan 2022 20:24:06 +0530 Subject: [PATCH 1/7] Add Healthchecks (#611) * Add Apprise * :lipstick: Formatted * :sparkles: Add health checks * :white_check_mark: * :bug: Added Default value --- public/v4/apps/healthchecks.yml | 56 +++++++++++++++++++++++++++++++ public/v4/logos/healthchecks.png | Bin 0 -> 3335 bytes 2 files changed, 56 insertions(+) create mode 100644 public/v4/apps/healthchecks.yml create mode 100644 public/v4/logos/healthchecks.png diff --git a/public/v4/apps/healthchecks.yml b/public/v4/apps/healthchecks.yml new file mode 100644 index 0000000..3b8187a --- /dev/null +++ b/public/v4/apps/healthchecks.yml @@ -0,0 +1,56 @@ +captainVersion: 4 +services: + # HealthChecks + $$cap_appname: + image: healthchecks/healthchecks:$$cap_hc_version + restart: always + environment: + DB: postgres + DB_HOST: srv-captain--$$cap_appname-db + DB_NAME: hc + DB_PASSWORD: $$cap_postgres_password + DB_PORT: 5432 + DB_SSLMODE: prefer + DB_TARGET_SESSION_ATTRS: read-write + DB_USER: postgres + DEBUG: False + SECRET_KEY: $$cap_gen_random_hex(64) + SITE_ROOT: http://0.0.0.0:8000 + caproverExtra: + containerHttpPort: '8000' + # Postgres + $$cap_appname-db: + image: postgres:12 + volumes: + - $$cap_appname-db-data:/var/lib/postgresql/data + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: $$cap_postgres_password + POSTGRES_DB: hc + caproverExtra: + notExposeAsWebApp: 'true' +caproverOneClickApp: + variables: + - id: $$cap_hc_version + label: hc Manifest digest + defaultValue: 'v1.25.0' + description: Find on https://hub.docker.com/r/healthchecks/healthchecks/tags + - id: $$cap__postgres_password + label: Postgres Password + description: Password must be at least 12 characters. Please use a random string. + defaultValue: $$cap_gen_random_hex(16) + validRegex: /^[^\@]{12,}$/ + instructions: + start: |- + Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages ("pings") from your cron jobs and scheduled tasks ("checks"). When a ping does not arrive on time, Healthchecks sends out alerts. + Github: https://github.com/healthchecks/healthchecks + + end: |- + Aaaand you're done! 😄 + Your service is available at http://$$cap_appname.$$cap_root_domain + More environment variables can be found at https://github.com/healthchecks/healthchecks/blob/master/docker/.env + displayName: 'HealthChecks' + isOfficial: true + description: Healthchecks is a cron job monitoring service. + documentation: https://github.com/healthchecks/healthchecks diff --git a/public/v4/logos/healthchecks.png b/public/v4/logos/healthchecks.png new file mode 100644 index 0000000000000000000000000000000000000000..0441eff4b710a1d5cca7a2ea34642db433a776f6 GIT binary patch literal 3335 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 Date: Sun, 23 Jan 2022 20:25:14 +0530 Subject: [PATCH 2/7] Add Corteza #583 (#603) * :sparkles: Add Corteza * :bookmark: Formated * :rocket: Fixed --- public/v4/apps/corteza.yml | 65 ++++++++++++++++++++++++++++++++++++ public/v4/logos/corteza.png | Bin 0 -> 13686 bytes 2 files changed, 65 insertions(+) create mode 100644 public/v4/apps/corteza.yml create mode 100644 public/v4/logos/corteza.png diff --git a/public/v4/apps/corteza.yml b/public/v4/apps/corteza.yml new file mode 100644 index 0000000..8f8e3ae --- /dev/null +++ b/public/v4/apps/corteza.yml @@ -0,0 +1,65 @@ +captainVersion: 4 + +services: + $$cap_appname: + image: cortezaproject/corteza:$$corteza_version + restart: always + depends_on: + - $$cap_appname-db + volumes: + - $$cap_appname-data:/data + environment: + VIRTUAL_HOST: $$cap_appname.$$cap_root_domain + DB_DSN: postgres://$$cap_postgre_username:$$cap_postgre_password@srv-captain--$$cap_appname-db:5432/$$cap_postgre_db_name?sslmode=disable + HTTP_WEBAPP_ENABLED: true + DOMAIN: $$cap_appname.$$cap_root_domain + VERSION: $$corteza_version + $$cap_appname-db: + image: postgres:13 + restart: always + volumes: + - $$cap_appname-postgres-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: $$cap_postgre_username + POSTGRES_PASSWORD: $$cap_postgre_password + POSTGRES_DB: $$cap_postgre_db_name + +caproverOneClickApp: + variables: + - id: '$$corteza_version' + label: Corteza Version + defaultValue: '2021.9.5' + description: Check out their Docker page for the valid tags https://hub.docker.com/r/cortezaproject/corteza/tags + validRegex: /^([^\s^\/])+$/ + - id: $$cap_postgre_db_name + label: PostgreSQL Database name + description: '' + defaultValue: 'corteza' + validRegex: /.{1,}/ + - id: $$cap_postgre_username + label: PostgreSQL username + defaultValue: 'cortezaUser' + description: '' + validRegex: /.{1,}/ + - id: $$cap_postgre_password + label: PostgreSQL Password + description: '' + defaultValue: $$cap_gen_random_hex(16) + validRegex: /.{1,}/ + + instructions: + start: |- + Corteza is an open-source, self-hosted cloud-based platform for your work. It provides a wide ecosystem of a Unified Workspace (like Google G Suite), Enterprise Messaging (like Slack), a Low-Code environment for rapidly and securely delivering records-based management solutions, and CRM and Service Solution (like Salesforce). + For more info visit https://cortezaproject.org/ + + end: |- + Corteza has been successfully deployed! + -------------------------------------------- + Before you proceed, please enable Websocket Support + https://captain.$$cap_root_domain/#/apps/details/$$cap_appname + -------------------------------------------- + App is available as http://$$cap_appname.$$cap_root_domain + displayName: Corteza + isOfficial: true ## Only if all images used here are official or from a trusted source. + description: Corteza is a free, open-source, Low Code platform for building your organisation key applications, growing its productivity and protecting its data and the privacy of all those concerned. + documentation: This docker-compose is taken https://github.com/cortezaproject diff --git a/public/v4/logos/corteza.png b/public/v4/logos/corteza.png new file mode 100644 index 0000000000000000000000000000000000000000..3a08296e194bf41b93daf8de6c4c444f3c6175b4 GIT binary patch literal 13686 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 tWP~@RWiv*q&glQGFN8;7fRY!2U-Rv(#mg4Dh(; Date: Thu, 27 Jan 2022 15:13:28 -0800 Subject: [PATCH 3/7] Update mautic-only.yml --- public/v4/apps/mautic-only.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/public/v4/apps/mautic-only.yml b/public/v4/apps/mautic-only.yml index 18d207e..742ee5b 100644 --- a/public/v4/apps/mautic-only.yml +++ b/public/v4/apps/mautic-only.yml @@ -16,7 +16,6 @@ caproverOneClickApp: - id: $$cap_db_host label: Database Host description: 'Database host ex. srv-captain--mydbsrv:3306' - validRegex: /^([a-zA-Z0-9])+$/ - id: $$cap_db_user label: Database user description: 'Inform the database user' From 3f4774e6880efd79bd2f02bba26fe62c8d1587a7 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 27 Jan 2022 21:48:37 -0500 Subject: [PATCH 4/7] update postgres default (#614) --- public/v4/apps/postgres.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/v4/apps/postgres.yml b/public/v4/apps/postgres.yml index 8ec46ee..c7fa869 100644 --- a/public/v4/apps/postgres.yml +++ b/public/v4/apps/postgres.yml @@ -16,7 +16,7 @@ caproverOneClickApp: variables: - id: $$cap_postgres_version label: Postgres Version - defaultValue: '9.6' + defaultValue: '14.1' description: Check out their Docker page for the valid tags https://hub.docker.com/r/library/postgres/tags/ validRegex: /^([^\s^\/])+$/ - id: $$cap_pg_user From 7dc5a212b7ad88f18bae6225d96977d24147f927 Mon Sep 17 00:00:00 2001 From: Dmitry Verkhoturov Date: Tue, 8 Feb 2022 01:31:49 +0100 Subject: [PATCH 5/7] add Remark42 application (#621) --- public/v4/apps/remark42.yml | 571 +++++++++++++++++++++++++++++++++++ public/v4/logos/remark42.png | Bin 0 -> 55906 bytes 2 files changed, 571 insertions(+) create mode 100644 public/v4/apps/remark42.yml create mode 100644 public/v4/logos/remark42.png diff --git a/public/v4/apps/remark42.yml b/public/v4/apps/remark42.yml new file mode 100644 index 0000000..cfc25d8 --- /dev/null +++ b/public/v4/apps/remark42.yml @@ -0,0 +1,571 @@ +captainVersion: 4 +services: + $$cap_appname: + image: umputun/remark42:$$cap_tag_version + hostname: $$cap_appname.$$cap_root_domain + restart: always + environment: + REMARK_URL: 'https://$$cap_appname.$$cap_root_domain' + SECRET: '$$cap_secret' + SITE: '$$cap_site' + STORE_TYPE: '$$cap_store_type' + STORE_BOLT_PATH: '$$cap_store_bolt_path' + STORE_BOLT_TIMEOUT: '$$cap_store_bolt_timeout' + ADMIN_SHARED_ID: '$$cap_admin_shared_id' + ADMIN_SHARED_EMAIL: '$$cap_admin_shared_email' + BACKUP_PATH: '$$cap_backup' + MAX_BACKUP_FILES: '$$cap_max_back' + CACHE_TYPE: '$$cap_cache_type' + CACHE_REDIS_ADDR: '$$cap_cache_redis_addr' + CACHE_MAX_ITEMS: '$$cap_cache_max_items' + CACHE_MAX_VALUE: '$$cap_cache_max_value' + CACHE_MAX_SIZE: '$$cap_cache_max_size' + AVATAR_TYPE: '$$cap_avatar_type' + AVATAR_FS_PATH: '$$cap_avatar_fs_path' + AVATAR_BOLT_FILE: '$$cap_avatar_bolt_file' + AVATAR_URI: '$$cap_avatar_uri' + AVATAR_RSZ_LMT: '$$cap_avatar_rsz_lmt' + IMAGE_TYPE: '$$cap_image_type' + IMAGE_MAX_SIZE: '$$cap_image_max_size' + IMAGE_FS_PATH: '$$cap_image_fs_path' + IMAGE_FS_STAGING: '$$cap_image_fs_staging' + IMAGE_FS_PARTITIONS: '$$cap_image_fs_partitions' + IMAGE_BOLT_FILE: '$$cap_image_bolt_file' + IMAGE_RESIZE_WIDTH: '$$cap_image_resize_width' + IMAGE_RESIZE_HEIGHT: '$$cap_image_resize_height' + AUTH_TTL_JWT: '$$cap_auth_ttl_jwt' + AUTH_TTL_COOKIE: '$$cap_auth_ttl_cookie' + AUTH_SEND_JWT_HEADER: '$$cap_auth_send-jwt_header' + AUTH_SAME_SITE: '$$cap_auth_same_site' + AUTH_GOOGLE_CID: '$$cap_auth_google_cid' + AUTH_GOOGLE_CSEC: '$$cap_auth_google_csec' + AUTH_FACEBOOK_CID: '$$cap_auth_facebook_cid' + AUTH_FACEBOOK_CSEC: '$$cap_auth_facebook_csec' + AUTH_MICROSOFT_CID: '$$cap_auth_microsoft_cid' + AUTH_MICROSOFT_CSEC: '$$cap_auth_microsoft_csec' + AUTH_GITHUB_CID: '$$cap_auth_github_cid' + AUTH_GITHUB_CSEC: '$$cap_auth_github_csec' + AUTH_TWITTER_CID: '$$cap_auth_twitter_cid' + AUTH_TWITTER_CSEC: '$$cap_auth_twitter_csec' + AUTH_PATREON_CID: '$$cap_auth_patreon_cid' + AUTH_PATREON_CSEC: '$$cap_auth_patreon_csec' + AUTH_TELEGRAM: '$$cap_auth_telegram' + AUTH_YANDEX_CID: '$$cap_auth_yandex_cid' + AUTH_YANDEX_CSEC: '$$cap_auth_yandex_csec' + AUTH_DEV: '$$cap_auth_dev' + AUTH_ANON: '$$cap_auth_anon' + AUTH_EMAIL_ENABLE: '$$cap_auth_email_enable' + AUTH_EMAIL_FROM: '$$cap_auth_email_from' + AUTH_EMAIL_SUBJ: '$$cap_auth_email_subj' + AUTH_EMAIL_CONTENT_TYPE: '$$cap_auth_email_content_type' + NOTIFY_USERS: '$$cap_notify_users' + NOTIFY_ADMINS: '$$cap_notify_admins' + NOTIFY_QUEUE: '$$cap_notify_queue' + NOTIFY_TELEGRAM_CHAN: '$$cap_notify_telegram_chan' + NOTIFY_SLACK_TOKEN: '$$cap_notify_slack_token' + NOTIFY_SLACK_CHAN: '$$cap_notify_slack_chan' + NOTIFY_WEBHOOK_URL: '$$cap_notify_webhook_url' + NOTIFY_WEBHOOK_HEADERS: '$$cap_notify_webhook_headers' + NOTIFY_WEBHOOK_TIMEOUT: '$$cap_notify_webhook_timeout' + NOTIFY_EMAIL_FROM: '$$cap_notify_email_fromAddress' + NOTIFY_EMAIL_VERIFICATION_SUBJ: '$$cap_notify_email_verification_subj' + TELEGRAM_TOKEN: '$$cap_telegram_token' + TELEGRAM_TIMEOUT: '$$cap_telegram_timeout' + SMTP_HOST: '$$cap_smtp_host' + SMTP_PORT: '$$cap_smtp_port' + SMTP_USERNAME: '$$cap_smtp_username' + SMTP_PASSWORD: '$$cap_smtp_password' + SMTP_TLS: '$$cap_smtp_tls' + SMTP_TIMEOUT: '$$cap_smtp_timeout' + SSL_TYPE: '$$cap_ssl_type' + SSL_PORT: '$$cap_ssl_port' + SSL_CERT: '$$cap_ssl_cert' + SSL_KEY: '$$cap_ssl_key' + SSL_ACME_LOCATION: '$$cap_ssl_acme_location' + SSL_ACME_EMAIL: '$$cap_ssl_acme_email' + MAX_COMMENT_SIZE: '$$cap_max_comment' + MAX_VOTES: '$$cap_max_votes' + VOTES_IP: '$$cap_votes_ip' + ANON_VOTE: '$$cap_anon_vote' + VOTES_IP_TIME: '$$cap_votes-ip_time' + LOW_SCORE: '$$cap_low_score' + CRITICAL_SCORE: '$$cap_critical_score' + POSITIVE_SCORE: '$$cap_positive_score' + RESTRICTED_WORDS: '$$cap_restricted_words' + RESTRICTED_NAMES: '$$cap_restricted_names' + EDIT_TIME: '$$cap_edit_time' + ADMIN_EDIT: '$$cap_admin_edit' + READONLY_AGE: '$$cap_read_age' + IMAGE_PROXY_HTTP2HTTPS: '$$cap_image_proxy_http2https' + IMAGE_PROXY_CACHE_EXTERNAL: '$$cap_image-proxy_cache_external' + EMOJI: '$$cap_emoji' + SIMPLE_VIEW: '$$cap_simple_view' + PROXY_CORS: '$$cap_proxy_cors' + ALLOWED_HOSTS: '$$cap_appname.$$cap_root_domain,$$cap_allowed_hosts' + REMARK_ADDRESS: '$$cap_address' + REMARK_PORT: '$$cap_port' + REMARK_WEB_ROOT: '$$cap_web_root' + UPDATE_LIMIT: '$$cap_update_limit' + SUBSCRIBERS_ONLY: '$$cap_subscribers_only' + ADMIN_PASSWD: '$$cap_admin_passwd' + DEBUG: '$$cap_dbg' + volumes: + - $$cap_appname-data:/srv/var + caproverExtra: + containerHttpPort: '8080' +caproverOneClickApp: + variables: + - id: $$cap_tag_version + label: Remark42 docker image tag + defaultValue: 'v1.9.0' + description: Valid tag from https://hub.docker.com/r/umputun/remark42/tags + validRegex: /.+/ + - id: $$cap_secret + label: SECRET + defaultValue: '$$cap_gen_random_hex(10)' + description: the shared secret key used to sign JWT, should be a random, long, hard-to-guess string + validRegex: /.+/ + - id: $$cap_site + label: SITE + defaultValue: 'remark' + description: site name(s), _multi_ + - id: $$cap_store_type + label: STORE_TYPE + defaultValue: 'bolt' + description: type of storage, `bolt` or `rpc` + - id: $$cap_store_bolt_path + label: STORE_BOLT_PATH + defaultValue: './var' + description: parent directory for the bolt files + - id: $$cap_store_bolt_timeout + label: STORE_BOLT_TIMEOUT + defaultValue: '30s' + description: boltdb access timeout + - id: $$cap_admin_shared_id + label: ADMIN_SHARED_ID + defaultValue: '' + description: admin IDs (list of user IDs), _multi_ + - id: $$cap_admin_shared_email + label: ADMIN_SHARED_EMAIL + defaultValue: '' + description: admin emails, _multi_ + - id: $$cap_backup + label: BACKUP_PATH + defaultValue: './var/backup' + description: backups location + - id: $$cap_max_back + label: MAX_BACKUP_FILES + defaultValue: '10' + description: max backup files to keep + - id: $$cap_cache_type + label: CACHE_TYPE + defaultValue: 'mem' + description: type of cache, `redis_pub_sub` or `mem` or `none` + - id: $$cap_cache_redis_addr + label: CACHE_REDIS_ADDR + defaultValue: '127.0.0.1:6379' + description: address of Redis PubSub instance, turn `redis_pub_sub` cache on for distributed cache + - id: $$cap_cache_max_items + label: CACHE_MAX_ITEMS + defaultValue: '1000' + description: max number of cached items, `0` - unlimited + - id: $$cap_cache_max_value + label: CACHE_MAX_VALUE + defaultValue: '65536' + description: max size of the cached value, `0` - unlimited + - id: $$cap_cache_max_size + label: CACHE_MAX_SIZE + defaultValue: '50000000' + description: max size of all cached values, `0` - unlimited + - id: $$cap_avatar_type + label: AVATAR_TYPE + defaultValue: 'fs' + description: type of avatar storage, `fs`, `bolt`, or `uri` + - id: $$cap_avatar_fs_path + label: AVATAR_FS_PATH + defaultValue: './var/avatars' + description: avatars location for `fs` store + - id: $$cap_avatar_bolt_file + label: AVATAR_BOLT_FILE + defaultValue: './var/avatars.db' + description: avatars bolt file location + - id: $$cap_avatar_uri + label: AVATAR_URI + defaultValue: './var/avatars' + description: avatars store URI + - id: $$cap_avatar_rsz_lmt + label: AVATAR_RSZ_LMT + defaultValue: '0 (disabled)' + description: max image size for resizing avatars on save + - id: $$cap_image_type + label: IMAGE_TYPE + defaultValue: 'fs' + description: type of image storage, `fs`, `bolt` + - id: $$cap_image_max_size + label: IMAGE_MAX_SIZE + defaultValue: '5000000' + description: max size of image file + - id: $$cap_image_fs_path + label: IMAGE_FS_PATH + defaultValue: './var/pictures' + description: permanent location of images + - id: $$cap_image_fs_staging + label: IMAGE_FS_STAGING + defaultValue: './var/pictures.staging' + description: staging location of images + - id: $$cap_image_fs_partitions + label: IMAGE_FS_PARTITIONS + defaultValue: '100' + description: number of image partitions + - id: $$cap_image_bolt_file + label: IMAGE_BOLT_FILE + defaultValue: '/var/pictures.db' + description: images bolt file location + - id: $$cap_image_resize_width + label: IMAGE_RESIZE_WIDTH + defaultValue: '2400' + description: width of a resized image + - id: $$cap_image_resize_height + label: IMAGE_RESIZE_HEIGHT + defaultValue: '900' + description: height of a resized image + - id: $$cap_auth_ttl_jwt + label: AUTH_TTL_JWT + defaultValue: '5m' + description: JWT TTL + - id: $$cap_auth_ttl_cookie + label: AUTH_TTL_COOKIE + defaultValue: '200h' + description: cookie TTL + - id: $$cap_auth_send_jwt_header + label: AUTH_SEND_JWT_HEADER + defaultValue: 'false' + description: send JWT as a header instead of a cookie + validRegex: /^(false|true)$/ + - id: $$cap_auth_same_site + label: AUTH_SAME_SITE + defaultValue: 'default' + description: set same site policy for cookies (`default`, `none`, `lax` or `strict`) + - id: $$cap_auth_google_cid + label: AUTH_GOOGLE_CID + defaultValue: '' + description: Google OAuth client ID + - id: $$cap_auth_google_csec + label: AUTH_GOOGLE_CSEC + defaultValue: '' + description: Google OAuth client secret + - id: $$cap_auth_facebook_cid + label: AUTH_FACEBOOK_CID + defaultValue: '' + description: Facebook OAuth client ID + - id: $$cap_auth_facebook_csec + label: AUTH_FACEBOOK_CSEC + defaultValue: '' + description: Facebook OAuth client secret + - id: $$cap_auth_microsoft_cid + label: AUTH_MICROSOFT_CID + defaultValue: '' + description: Microsoft OAuth client ID + - id: $$cap_auth_microsoft_csec + label: AUTH_MICROSOFT_CSEC + defaultValue: '' + description: Microsoft OAuth client secret + - id: $$cap_auth_github_cid + label: AUTH_GITHUB_CID + defaultValue: '' + description: GitHub OAuth client ID + - id: $$cap_auth_github_csec + label: AUTH_GITHUB_CSEC + defaultValue: '' + description: GitHub OAuth client secret + - id: $$cap_auth_twitter_cid + label: AUTH_TWITTER_CID + defaultValue: '' + description: Twitter Consumer API Key + - id: $$cap_auth_twitter_csec + label: AUTH_TWITTER_CSEC + defaultValue: '' + description: Twitter Consumer API Secret key + - id: $$cap_auth_patreon_cid + label: AUTH_PATREON_CID + defaultValue: '' + description: Patreon OAuth Client ID + - id: $$cap_auth_patreon_csec + label: AUTH_PATREON_CSEC + defaultValue: '' + description: Patreon OAuth Client Secret + - id: $$cap_auth_telegram + label: AUTH_TELEGRAM + defaultValue: 'false' + description: Enable Telegram auth (telegram.token must be present) + validRegex: /^(false|true)$/ + - id: $$cap_auth_yandex_cid + label: AUTH_YANDEX_CID + defaultValue: '' + description: Yandex OAuth client ID + - id: $$cap_auth_yandex_csec + label: AUTH_YANDEX_CSEC + defaultValue: '' + description: Yandex OAuth client secret + - id: $$cap_auth_dev + label: AUTH_DEV + defaultValue: 'false' + description: local OAuth2 server, development mode only + validRegex: /^(false|true)$/ + - id: $$cap_auth_anon + label: AUTH_ANON + defaultValue: 'false' + description: enable anonymous login + validRegex: /^(false|true)$/ + - id: $$cap_auth_email_enable + label: AUTH_EMAIL_ENABLE + defaultValue: 'false' + description: enable auth via email + validRegex: /^(false|true)$/ + - id: $$cap_auth_email_from + label: AUTH_EMAIL_FROM + defaultValue: '' + description: email from + - id: $$cap_auth_email_subj + label: AUTH_EMAIL_SUBJ + defaultValue: 'remark42 confirmation' + description: email subject + - id: $$cap_auth_email_content_type + label: AUTH_EMAIL_CONTENT_TYPE + defaultValue: 'text/html' + description: email content type + - id: $$cap_notify_users + label: NOTIFY_USERS + defaultValue: 'none' + description: type of user notifications (Telegram, email) + - id: $$cap_notify_admins + label: NOTIFY_ADMINS + defaultValue: 'none' + description: type of admin notifications (Telegram, Slack, webhook and/or email) + - id: $$cap_notify_queue + label: NOTIFY_QUEUE + defaultValue: '100' + description: size of notification queue + - id: $$cap_notify_telegram_chan + label: NOTIFY_TELEGRAM_CHAN + defaultValue: '' + description: the ID of telegram channel for admin notifications + - id: $$cap_notify_slack_token + label: NOTIFY_SLACK_TOKEN + defaultValue: '' + description: Slack token + - id: $$cap_notify_slack_chan + label: NOTIFY_SLACK_CHAN + defaultValue: 'general' + description: Slack channel for admin notifications + - id: $$cap_notify_webhook_url + label: NOTIFY_WEBHOOK_URL + defaultValue: '' + description: Webhook notification URL for admin notifications + - id: $$cap_notify_webhook_template + label: NOTIFY_WEBHOOK_TEMPLATE + defaultValue: '{\"text\": \"{{.Text}}\"}' + description: Webhook payload template + - id: $$cap_notify_webhook_headers + label: NOTIFY_WEBHOOK_HEADERS + defaultValue: '' + description: HTTP header in format Header1:Value1,Header2:Value2,... + - id: $$cap_notify_webhook_timeout + label: NOTIFY_WEBHOOK_TIMEOUT + defaultValue: '5s' + description: Webhook connection timeout + - id: $$cap_notify_email_fromAddress + label: NOTIFY_EMAIL_FROM + defaultValue: '' + description: from email address + - id: $$cap_notify_email_verification_subj + label: NOTIFY_EMAIL_VERIFICATION_SUBJ + defaultValue: 'Email verification' + description: verification message subject + - id: $$cap_telegram_token + label: TELEGRAM_TOKEN + defaultValue: '' + description: Telegram token (used for auth and Telegram notifications) + - id: $$cap_telegram_timeout + label: TELEGRAM_TIMEOUT + defaultValue: '5s' + description: Telegram connection timeout + - id: $$cap_smtp_host + label: SMTP_HOST + defaultValue: '' + description: SMTP host + - id: $$cap_smtp_port + label: SMTP_PORT + defaultValue: '' + description: SMTP port + - id: $$cap_smtp_username + label: SMTP_USERNAME + defaultValue: '' + description: SMTP user name + - id: $$cap_smtp_password + label: SMTP_PASSWORD + defaultValue: '' + description: SMTP password + - id: $$cap_smtp_tls + label: SMTP_TLS + defaultValue: 'false' + description: enable TLS for SMTP + validRegex: /^(false|true)$/ + - id: $$cap_smtp_timeout + label: SMTP_TIMEOUT + defaultValue: '10s' + description: SMTP TCP connection timeout + - id: $$cap_ssl_type + label: SSL_TYPE + defaultValue: 'none' + description: '`none`-HTTP, `static`-HTTPS, `auto`-HTTPS + le' + - id: $$cap_ssl_port + label: SSL_PORT + defaultValue: '8443' + description: port for HTTPS server + - id: $$cap_ssl_cert + label: SSL_CERT + defaultValue: '' + description: path to the cert.pem file + - id: $$cap_ssl_key + label: SSL_KEY + defaultValue: '' + description: path to the key.pem file + - id: $$cap_ssl_acme_location + label: SSL_ACME_LOCATION + defaultValue: './var/acme' + description: dir where obtained le-certs will be stored + - id: $$cap_ssl_acme_email + label: SSL_ACME_EMAIL + defaultValue: '' + description: admin email for receiving notifications from LE + - id: $$cap_max_comment + label: MAX_COMMENT_SIZE + defaultValue: '2048' + description: comment's size limit + - id: $$cap_max_votes + label: MAX_VOTES + defaultValue: '-1' + description: votes limit per comment, `-1` - unlimited + - id: $$cap_votes_ip + label: VOTES_IP + defaultValue: 'false' + description: restrict votes from the same IP + validRegex: /^(false|true)$/ + - id: $$cap_anon_vote + label: ANON_VOTE + defaultValue: 'false' + description: allow voting for anonymous users, require VOTES_IP to be enabled as well + validRegex: /^(false|true)$/ + - id: $$cap_votes_ip_time + label: VOTES_IP_TIME + defaultValue: '5m' + description: same IP vote restriction time, `0s` - unlimited + - id: $$cap_low_score + label: LOW_SCORE + defaultValue: '-5' + description: low score threshold + - id: $$cap_critical_score + label: CRITICAL_SCORE + defaultValue: '-10' + description: critical score threshold + - id: $$cap_positive_score + label: POSITIVE_SCORE + defaultValue: 'false' + description: restricts comment's score to be only positive + validRegex: /^(false|true)$/ + - id: $$cap_restricted_words + label: RESTRICTED_WORDS + defaultValue: '' + description: words banned in comments (can use `*`), _multi_ + - id: $$cap_restricted_names + label: RESTRICTED_NAMES + defaultValue: '' + description: names prohibited to use by the user, _multi_ + - id: $$cap_edit_time + label: EDIT_TIME + defaultValue: '5m' + description: edit window + - id: $$cap_admin_edit + label: ADMIN_EDIT + defaultValue: 'false' + description: unlimited edit for admins + validRegex: /^(false|true)$/ + - id: $$cap_read_age + label: READONLY_AGE + defaultValue: '' + description: read-only age of comments, days + - id: $$cap_image_proxy_http2https + label: IMAGE_PROXY_HTTP2HTTPS + defaultValue: 'false' + description: enable HTTP->HTTPS proxy for images + validRegex: /^(false|true)$/ + - id: $$cap_image_proxy_cache_external + label: IMAGE_PROXY_CACHE_EXTERNAL + defaultValue: 'false' + description: enable caching external images to current image storage + validRegex: /^(false|true)$/ + - id: $$cap_emoji + label: EMOJI + defaultValue: 'false' + description: enable emoji support + validRegex: /^(false|true)$/ + - id: $$cap_simple_view + label: SIMPLE_VIEW + defaultValue: 'false' + description: minimized UI with basic info only + validRegex: /^(false|true)$/ + - id: $$cap_proxy_cors + label: PROXY_CORS + defaultValue: 'false' + description: disable internal CORS and delegate it to proxy + validRegex: /^(false|true)$/ + - id: $$cap_allowed_hosts + label: ALLOWED_HOSTS + defaultValue: '' + description: limit hosts/sources allowed to embed comments, enable all by default + - id: $$cap_address + label: REMARK_ADDRESS + defaultValue: '' + description: web server listening address, all interfaces by default + - id: $$cap_port + label: REMARK_PORT + defaultValue: '8080' + description: web server port + - id: $$cap_web_root + label: REMARK_WEB_ROOT + defaultValue: './web' + description: web server root directory + - id: $$cap_update_limit + label: UPDATE_LIMIT + defaultValue: '0.5' + description: updates/sec limit + - id: $$cap_subscribers_only + label: SUBSCRIBERS_ONLY + defaultValue: 'false' + description: enable commenting only for Patreon subscribers + validRegex: /^(false|true)$/ + - id: $$cap_admin_passwd + label: ADMIN_PASSWD + defaultValue: '' + description: password for `admin` basic auth + - id: $$cap_dbg + label: DEBUG + defaultValue: 'false' + description: debug mode + validRegex: /^(false|true)$/ + instructions: + start: |- + See description of the parameters below [in the documentation](https://remark42.com/docs/configuration/parameters/). + + _multi_ parameters separated by `,` in the environment, like `ADMIN_SHARED_EMAIL=admin@example.org,admin2@example.org` + end: |- + Done, Remark42 will be accessible at in a minute. + + You must **enable HTTPS** for this application as otherwise, it won't work. Then verify that it works by the URL above and then follow [documentation on installation](https://remark42.com/docs/getting-started/installation/) to add comments to your site. + + While following the installation guide, set `YOUR_SITE_ID` to `$$cap_site` and `REMARK_URL` to `https://$$cap_appname.$$cap_root_domain`, and then add your site domain name to `ALLOWED_HOSTS`. + displayName: Remark42 + isOfficial: true + description: Self-hosted, lightweight, and simple (yet functional) comment engine, which doesn't spy on users. It can be embedded into blogs, articles or any other place where readers add comments. + documentation: Taken from https://github.com/umputun/remark42 diff --git a/public/v4/logos/remark42.png b/public/v4/logos/remark42.png new file mode 100644 index 0000000000000000000000000000000000000000..2824d5db4bf8c2796088877134cd5fa0fef09b26 GIT binary patch literal 55906 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%0D~2?)2g3u<~r$*i%03lG;hSFD`d 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 E0_tZ|*#H0l literal 0 HcmV?d00001 From c141c79858d6923c31447ce142acbb29e7cafd79 Mon Sep 17 00:00:00 2001 From: Martin Mariano Date: Mon, 7 Feb 2022 21:33:34 -0300 Subject: [PATCH 6/7] Added Steam OpenID Connect Provider (#616) Signed-off-by: Martin --- public/v4/apps/steam-openid-provider.yml | 56 ++++++++++++++++++++++ public/v4/logos/steam-openid-provider.png | Bin 0 -> 4066 bytes 2 files changed, 56 insertions(+) create mode 100644 public/v4/apps/steam-openid-provider.yml create mode 100644 public/v4/logos/steam-openid-provider.png diff --git a/public/v4/apps/steam-openid-provider.yml b/public/v4/apps/steam-openid-provider.yml new file mode 100644 index 0000000..5cb3568 --- /dev/null +++ b/public/v4/apps/steam-openid-provider.yml @@ -0,0 +1,56 @@ +captainVersion: 4 +services: + $$cap_appname: + image: ghcr.io/byo-software/steam-openid-connect-provider:sha-c8305ce + restart: always + environment: + OpenID__RedirectUri: $$cap_redirect_uri + OpenID__ClientID: $$cap_client_id + OpenID__ClientSecret: $$cap_client_secret + Hosting__PublicOrigin: $$cap_origin + Authentication__Steam__ApplicationKey: $$cap_api_key + caproverExtra: + containerHttpPort: '80' +caproverOneClickApp: + variables: + - id: $$cap_client_id + label: OAuth Client ID + defaultValue: 'steamidp' + validRegex: /^[a-zA-Z]{1,20}$/ + description: OpenID ClientID used to initiate authorization. + + - id: $$cap_client_secret + label: OpenID Client Secret + defaultValue: $$cap_gen_random_hex(16) + description: OpenID Client Secret used to initiate authorization. + + - id: $$cap_origin + label: OpenID Origin URL + defaultValue: 'http://openid.example.com' + description: 'The base URL of where this app is hosted. Eg: https://openid.example.com or https://example.org. If left blank, it will be inferred.' + + - id: $$cap_api_key + label: Steam API Key + description: A working Steam API Key for this app. (https://steamcommunity.com/dev/apikey) + + - id: $$cap_redirect_uri + label: Post login redirect URL + description: URL the user will be redirected after login is authorized through Steam. + defaultValue: 'http://example.com/callback' + + instructions: + start: >- + Steam OpenID 2.0 -> OpenID Connect Provider Proxy + This server allows you to use Steam as an OpenID Connect Identity + provider (OIDC IDP). This way you can use Steam logins in KeyCloak or + any other OpenID Connect based authentication client. + end: >- + Your service is available at http://$$cap_appname.$$cap_root_domain + + Check its health with: + + curl -X GET 'http://$$cap_appname.$$cap_root_domain/health' + displayName: 'Steam OpenID Connect Provider' + isOfficial: true + description: This server allows you to use Steam as an OpenID Connect Identity provider (OIDC IDP). This way you can use Steam logins in KeyCloak or any other OpenID Connect based authentication client. + documentation: https://github.com/byo-software/steam-openid-connect-provider diff --git a/public/v4/logos/steam-openid-provider.png b/public/v4/logos/steam-openid-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..df788b05a686c861ef717748e9e24313e4141e02 GIT binary patch literal 4066 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 Date: Tue, 8 Feb 2022 06:04:34 +0530 Subject: [PATCH 7/7] Fix Corteza (#615) * Fix Corteza * Fix typo * :art: Formatted --- public/v4/apps/corteza.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/public/v4/apps/corteza.yml b/public/v4/apps/corteza.yml index 8f8e3ae..1d20a3a 100644 --- a/public/v4/apps/corteza.yml +++ b/public/v4/apps/corteza.yml @@ -14,9 +14,12 @@ services: HTTP_WEBAPP_ENABLED: true DOMAIN: $$cap_appname.$$cap_root_domain VERSION: $$corteza_version + LETSENCRYPT_HOST: $$cap_lets_encrypt $$cap_appname-db: image: postgres:13 restart: always + caproverExtra: + notExposeAsWebApp: 'true' volumes: - $$cap_appname-postgres-data:/var/lib/postgresql/data environment: @@ -46,6 +49,10 @@ caproverOneClickApp: description: '' defaultValue: $$cap_gen_random_hex(16) validRegex: /.{1,}/ + - id: $$cap_lets_encrypt + defaultValue: $$cap_appname.$$cap_root_domain + label: Lets Encrypt Host for SSL. + description: 'Set your root domain if you are going to use SSL (https://). Leave empty otherwise.' instructions: start: |- @@ -60,6 +67,6 @@ caproverOneClickApp: -------------------------------------------- App is available as http://$$cap_appname.$$cap_root_domain displayName: Corteza - isOfficial: true ## Only if all images used here are official or from a trusted source. + isOfficial: true description: Corteza is a free, open-source, Low Code platform for building your organisation key applications, growing its productivity and protecting its data and the privacy of all those concerned. documentation: This docker-compose is taken https://github.com/cortezaproject