diff --git a/public/svgs/chaskiq.png b/public/svgs/chaskiq.png new file mode 100644 index 000000000..8f9f142ab Binary files /dev/null and b/public/svgs/chaskiq.png differ diff --git a/templates/compose/chaskiq.yaml b/templates/compose/chaskiq.yaml new file mode 100644 index 000000000..d5a379b64 --- /dev/null +++ b/templates/compose/chaskiq.yaml @@ -0,0 +1,153 @@ +# documentation: https://chaskiq.io +# slogan: Chaskiq is an messaging platform for marketing, support & sales +# tags: chaskiq,messaging,chat,marketing,support,sales,open,source,rails,redis,postgresql,sidekiq +# logo: svgs/chaskiq.png +# port: 3000 + +services: + chaskiq: + image: chaskiq/chaskiq:latest + environment: + - SERVICE_FQDN_CHASKIQ_3000 + - REDIS_URL=redis://redis:6379/ + - DATABASE_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-chaskiq} + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - SERVICE_URL=${SERVICE_URL_CHASKIQ} + - HOST=https://${SERVICE_URL_CHASKIQ} + - ASSET_HOST=https://${SERVICE_URL_CHASKIQ} + - WS=wss://${SERVICE_URL_CHASKIQ}/cable + - SNS_CONFIGURATION_SET=metrics + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - AWS_S3_BUCKET=${AWS_S3_BUCKET:-} + - AWS_S3_REGION=${AWS_S3_REGION:-} + - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example} + - ADMIN_PASSWORD=${ADMIN_PASSWORD:-password} + - DEFAULT_SENDER_EMAIL=${DEFAULT_SENDER_EMAIL:-admin@example} + - LOCAL_STORAGE_PATH=./data/storage + - ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE:-local} + - SMTP_DELIVERY_METHOD=${SMTP_DELIVERY_METHOD:-} + - SMTP_ADDRESS=${SMTP_ADDRESS:-} + - SMTP_USERNAME=${SMTP_USERNAME:-} + - SMTP_PASSWORD=${SMTP_PASSWORD:-} + - CHASKIQ_APPSTORE_TOKEN=${CHASKIQ_APPSTORE_TOKEN:-} + - APP_ENV=production + - RAILS_ENV=production + - RACK_ENV=production + - RAILS_SERVE_STATIC_FILES=true + - SECRET_KEY_BASE=$SERVICE_PASSWORD_64_SECRET + - RAILS_LOG_TO_STDOUT=true + - ENABLED_AUDITS=true + - TZ=Europe/Madrid + entrypoint: ["/entrypoint.sh"] + depends_on: + postgresql: + condition: service_healthy + redis: + condition: service_healthy + volumes: + - chaskiq-storage:/data/storage + - type: bind + source: ./entrypoint.sh + target: /entrypoint.sh + content: | + #!/bin/sh + set -e + rm -f /usr/src/app/tmp/pids/server.pid + exec "$@" + while ! pg_isready -q -h postgresql -p 5432 -U $POSTGRES_USER + do + echo "$(date) - waiting for database to start." + sleep 2 + done + echo "Running database migrations..." + bundle exec rails db:setup + bundle exec rails db:migrate + echo "Finished running database migrations." + echo "Running packages update..." + bundle exec rails packages:update + echo "Finished packages update." + if [ ! -f /usr/src/app/admin_generated ]; then + echo "/usr/src/app/admin_generated not found, executing admin generation.." + bundle exec rake admin_generator + touch /usr/src/app/admin_generated + echo "Admin generation finished !" + fi + bundle exec rails s -b 0.0.0.0 -p 3000 + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] + interval: 15s + timeout: 20s + retries: 15 + sidekiq: + image: chaskiq/chaskiq:latest + environment: + - REDIS_URL=redis://redis:6379/ + - DATABASE_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-chaskiq} + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - HOST=https://${SERVICE_URL_CHASKIQ} + - ASSET_HOST=https://${SERVICE_URL_CHASKIQ} + - WS=wss://${SERVICE_URL_CHASKIQ}/cable + - SNS_CONFIGURATION_SET=metrics + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - AWS_S3_BUCKET=${AWS_S3_BUCKET:-} + - AWS_S3_REGION=${AWS_S3_REGION:-} + - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example} + - ADMIN_PASSWORD=${ADMIN_PASSWORD:-password} + - DEFAULT_SENDER_EMAIL=${DEFAULT_SENDER_EMAIL:-admin@example} + - LOCAL_STORAGE_PATH=./data/storage + - ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE:-local} + - SMTP_DELIVERY_METHOD=${SMTP_DELIVERY_METHOD:-} + - SMTP_ADDRESS=${SMTP_ADDRESS:-} + - SMTP_USERNAME=${SMTP_USERNAME:-} + - SMTP_PASSWORD=${SMTP_PASSWORD:-} + - CHASKIQ_APPSTORE_TOKEN=${CHASKIQ_APPSTORE_TOKEN:-} + - APP_ENV=production + - RAILS_ENV=production + - RACK_ENV=production + - RAILS_SERVE_STATIC_FILES=true + - SECRET_KEY_BASE=$SERVICE_PASSWORD_64_SECRET + - RAILS_LOG_TO_STDOUT=true + - ENABLED_AUDITS=true + - TZ=Europe/Madrid + volumes: + - chaskiq-storage:/data/storage + depends_on: + postgresql: + condition: service_healthy + redis: + condition: service_healthy + chaskiq: + condition: service_healthy + command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml'] + healthcheck: + test: ["CMD-SHELL", "bundle exec rails runner 'puts Sidekiq.redis(&:info)' > /dev/null 2>&1"] + interval: 30s + timeout: 10s + retries: 3 + postgresql: + image: postgres:14-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-chaskiq} + - POSTGRES_INITDB_ARGS= --data-checksums + - PSQL_HISTFILE=/root/log/.psql_history + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 10 + redis: + image: redis:6-alpine + restart: always + volumes: + - redis-data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 10 \ No newline at end of file