From b8132334386ec453584a983bac0285ff05b5b22f Mon Sep 17 00:00:00 2001 From: Miguel Michelson Martinez Date: Thu, 31 Dec 2020 14:36:12 -0300 Subject: [PATCH] Chaskiq oneclick (#337) * add chaskiq one click * version tag * prettier on chaskiq.yml * Update chaskiq.yml update tag version * Update chaskiq.yml documentation details, fix domain --- public/v4/apps/chaskiq.yml | 156 ++++++++++++++++++++++++++++++++++++ public/v4/logos/chaskiq.png | Bin 0 -> 13264 bytes 2 files changed, 156 insertions(+) create mode 100644 public/v4/apps/chaskiq.yml create mode 100644 public/v4/logos/chaskiq.png diff --git a/public/v4/apps/chaskiq.yml b/public/v4/apps/chaskiq.yml new file mode 100644 index 0000000..7813614 --- /dev/null +++ b/public/v4/apps/chaskiq.yml @@ -0,0 +1,156 @@ +captainVersion: 4 +services: + $$cap_appname-postgres: + image: postgres:12 + volumes: + - $$cap_appname-postgres-data:/var/lib/postgresql/data + restart: always + environment: + POSTGRES_USER: chaskiq + POSTGRES_PASSWORD: $$cap_chaskiq_postgres_password + POSTGRES_DB: chaskiq + caproverExtra: + notExposeAsWebApp: 'true' + $$cap_appname-redis: + volumes: + - $$cap_appname-redis-data:/data + restart: always + environment: + REDIS_PASSWORD: $$cap_chaskiq_redis_password + caproverExtra: + dockerfileLines: + - FROM redis:alpine + - CMD exec redis-server --requirepass "$$cap_chaskiq_redis_password" + notExposeAsWebApp: 'true' + $$cap_appname-web: + restart: always + environment: + HOST: https://$$cap_appname-web.$$cap_root_domain + WS: wss://$$cap_appname-web.$$cap_root_domain + RAILS_ENV: production + RAILS_LOG_TO_STDOUT: 'true' + RAILS_SERVE_STATIC_FILES: 'true' + SECRET_KEY_BASE: $$cap_chaskiq_secret_key_base + ADMIN_EMAIL: $$cap_ADMIN_USER_EMAIL + ADMIN_PASSWORD: $$cap_ADMIN_PASSWORD + DATABASE_URL: postgres://chaskiq:$$cap_chaskiq_postgres_password@srv-captain--$$cap_appname-postgres:5432/chaskiq + REDIS_URL: redis://default:$$cap_chaskiq_redis_password@srv-captain--$$cap_appname-redis:6379 + AWS_ACCESS_KEY_ID: $$cap_chaskiq_aws_key_id + AWS_SECRET_ACCESS_KEY: $$cap_chaskiq_aws_access_key + AWS_S3_BUCKET: $$cap_chaskiq_aws_s3_bucket + AWS_S3_REGION: $$cap_chaskiq_aws_s3_region + GEOCODER_API_KEY: $$cap_chaskiq_geocoder_api_key + DEFAULT_GEOCODER_SERVICE: $$cap_chaskiq_geocoder_service + SCOUT_KEY: $$cap_chaskiq_scoutapp_key + DEFAULT_OUTGOING_EMAIL_DOMAIN: $$cap_chaskiq_default_ongoing_domain + DEFAULT_SENDER_EMAIL: $$cap_chaskiq_default_sender_email + + caproverExtra: + containerHttpPort: '3000' + dockerfileLines: + - FROM chaskiq/chaskiq:$$cap_chaskiq_version + - EXPOSE 3000 + - CMD bundle exec rails db:setup; bundle exec rails admin_generator; bundle exec rails s -b 0.0.0.0 -p 3000 + $$cap_appname-worker: + restart: always + environment: + HOST: https://$$cap_appname.$$cap_root_domain + WS: wss://$$cap_appname.$$cap_root_domain + RAILS_ENV: production + RAILS_LOG_TO_STDOUT: 'true' + SECRET_KEY_BASE: $$cap_chaskiq_secret_key_base + ADMIN_EMAIL: $$cap_ADMIN_USER_EMAIL + ADMIN_PASSWORD: $$cap_ADMIN_PASSWORD + DATABASE_URL: postgres://chaskiq:$$cap_chaskiq_postgres_password@srv-captain--$$cap_appname-postgres:5432/chaskiq + REDIS_URL: redis://default:$$cap_chaskiq_redis_password@srv-captain--$$cap_appname-redis:6379 + AWS_ACCESS_KEY_ID: $$cap_chaskiq_aws_key_id + AWS_SECRET_ACCESS_KEY: $$cap_chaskiq_aws_access_key + AWS_S3_BUCKET: $$cap_chaskiq_aws_s3_bucket + AWS_S3_REGION: $$cap_chaskiq_aws_s3_region + GEOCODER_API_KEY: $$cap_chaskiq_geocoder_api_key + DEFAULT_GEOCODER_SERVICE: $$cap_chaskiq_geocoder_service + SCOUT_KEY: $$cap_chaskiq_scoutapp_key + DEFAULT_OUTGOING_EMAIL_DOMAIN: $$cap_chaskiq_default_ongoing_domain + DEFAULT_SENDER_EMAIL: $$cap_chaskiq_default_sender_email + + caproverExtra: + dockerfileLines: + - FROM chaskiq/chaskiq:$$cap_chaskiq_version + - CMD bundle exec sidekiq -C config/sidekiq.yml + notExposeAsWebApp: 'true' +caproverOneClickApp: + variables: + - id: $$cap_chaskiq_version + label: Chaskiq Version Tag + description: You can use latest tag or check version builds on https://hub.docker.com/r/chaskiq/chaskiq/tags + defaultValue: 6aa9208 + - defaultValue: 'admin@example.com' + description: This is the admin email. Please change it. + id: $$cap_ADMIN_USER_EMAIL + label: Admin Email + validRegex: /^([^\s^\/])+$/ + - id: $$cap_ADMIN_PASSWORD + description: This is the admin password. Change it if you will. + defaultValue: $$cap_gen_random_hex(12) + label: Admin Password + validRegex: /^[^\@]{12,}$/ + - id: $$cap_chaskiq_default_sender_email + label: Default sender email + description: 'Default email sender, like: notifications@mail.yourapp.com' + validRegex: /^([^\s^\/])+$/ + - id: $$cap_chaskiq_default_ongoing_domain + label: Default deliver domain + description: For multiple email deliver tasks, like mail.yourdomain.com + - id: $$cap_chaskiq_secret_key_base + defaultValue: $$cap_gen_random_hex(64) + label: Chaskiq Secret Key Base + description: The randomized string which is used to verify the integrity of signed cookies. Please use a string with more than 26 characters + validRegex: /^[^\@]{26,}$/ + - id: $$cap_chaskiq_postgres_password + defaultValue: $$cap_gen_random_hex(12) + label: Postgres Password + description: Password must be at least 12 characters. Please use a random string. + validRegex: /^[^\@]{12,}$/ + - id: $$cap_chaskiq_redis_password + defaultValue: $$cap_gen_random_hex(12) + label: Redis Password + description: Password must be at least 12 characters. Please use a random string. + validRegex: /^[^\@]{12,}$/ + - id: $$cap_chaskiq_aws_key_id + label: AWS access key id + description: Amazon access key id (for file storage and email dispatching S3 / SES / SNS) + - id: $$cap_chaskiq_aws_access_key + label: AWS access key + description: Amazon access key (for file storage and email dispatching S3 / SES / SNS) + - id: $$cap_chaskiq_aws_s3_bucket + label: AWS S3 bucket + description: Amazon S3 bucket name + - id: $$cap_chaskiq_aws_s3_region + label: AWS bucket region + description: 'AWS S3 bucket region like: us-east-1' + - id: $$cap_chaskiq_aws_sns_configuration_set + label: SNS configuration set + description: This is important for chaskiq to receive emails (optional) + - id: $$cap_chaskiq_scoutapp_key + label: Scout app key + description: Scout AMP key, for performance & error monitoring (optional) + - id: $$cap_chaskiq_bugsnag_key + label: Bugsnag API key + description: Bugsnag API key for error reporting (optional) + - id: $$cap_chaskiq_geocoder_service + label: Geocoder service name, like (maxmind, ip_info, baidu, yandex) + description: The complete list of services can be found at https://github.com/alexreisner/geocoder/tree/master/lib/geocoder/lookups + - id: $$cap_chaskiq_geocoder_api_key + label: Geocoder API key + + instructions: + start: A full featured Live Chat, Support & Marketing platform https://chaskiq.io + end: >- + Your Chaskiq instance is now successfully deployed. + The admin account was created, just log in with those credentials. + The app will need to be served over SSL, activate HTTPS on the domain and websocket support. + + displayName: Chaskiq + isOfficial: true + description: A full featured Live Chat, Support & Marketing platform + documentation: 'Read more at: https://dev.chaskiq.io' diff --git a/public/v4/logos/chaskiq.png b/public/v4/logos/chaskiq.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfd02867f4ddb40e734edfac0cea192c57759cc GIT binary patch literal 13264 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 Kv{u+4=zjrC6XJ9L literal 0 HcmV?d00001