diff --git a/templates/BInd9/0/docker-compose.yml b/templates/BInd9/0/docker-compose.yml new file mode 100644 index 0000000..8654d87 --- /dev/null +++ b/templates/BInd9/0/docker-compose.yml @@ -0,0 +1,11 @@ +bind9: + image: digitallumberjack/docker-bind9:v1.2.0 + ports: + - ${BIND9_PORT}:53/tcp + - ${BIND9_PORT}:53/udp + environment: + BIND9_ROOTDOMAIN: ${BIND9_ROOTDOMAIN} + BIND9_KEYNAME: ${BIND9_KEYNAME} + BIND9_KEY: ${BIND9_KEY} + BIND9_FORWARDERS: ${BIND9_FORWARDERS} + RANCHER_ENV: "true" \ No newline at end of file diff --git a/templates/BInd9/0/rancher-compose.yml b/templates/BInd9/0/rancher-compose.yml new file mode 100644 index 0000000..f1d0326 --- /dev/null +++ b/templates/BInd9/0/rancher-compose.yml @@ -0,0 +1,48 @@ +.catalog: + name: "Bind9 DNS" + version: "v1.0.0-rancher1" + description: "Domain Name Server powered by Bind9" + questions: + + - variable: "BIND9_ROOTDOMAIN" + label: "The root domain to manage in bind9" + description: "This root domain will be managed by the Bind9 server. Updates and axfr requests will be made on this domain" + type: "string" + required: true + + - variable: "BIND9_KEYNAME" + label: "Bind9 TSIG Keyname" + description: "The TSIG keyname" + type: "string" + required: true + + - variable: "BIND9_KEY" + label: "Bind9 TSIG Key (base64 encoded)" + description: "The TSIG key. Must be base64 encoded" + type: "string" + required: true + + - variable: "BIND9_PORT" + label: "Bind9 port" + description: "Bind9 port to expose on host. Will be used to bind both TCP and UDP" + type: "string" + default: 53 + required: true + + - variable: "BIND9_FORWARDERS" + label: "Bind9 dns forwarders" + description: "The DNS forwarders" + type: "string" + default: 8.8.8.8;8.8.4.4; + required: true + +bind9: + scale: 1 + health_check: + port: ${BIND9_PORT} + interval: 2000 + initializing_timeout: 20000 + unhealthy_threshold: 3 + strategy: recreate + healthy_threshold: 2 + response_timeout: 2000 \ No newline at end of file diff --git a/templates/Ghost/0/docker-compose.yml b/templates/Ghost/0/docker-compose.yml new file mode 100644 index 0000000..07eebb1 --- /dev/null +++ b/templates/Ghost/0/docker-compose.yml @@ -0,0 +1,4 @@ +ghost: + image: ghost + ports: + - ${public_port}:2368 \ No newline at end of file diff --git a/templates/Ghost/0/rancher-compose.yml b/templates/Ghost/0/rancher-compose.yml new file mode 100644 index 0000000..0a4ef55 --- /dev/null +++ b/templates/Ghost/0/rancher-compose.yml @@ -0,0 +1,15 @@ +.catalog: + name: "Ghost" + version: "v0.1-educaas" + description: "Blog powered by Ghost. Requires no database" + uuid: ghost-0 + questions: + + - variable: public_port + description: "public port to access the blog" + label: "Public Port" + required: true + default: "80" + type: "int" + +ghost: \ No newline at end of file diff --git a/templates/Grafana/0/docker-compose.yml b/templates/Grafana/0/docker-compose.yml new file mode 100644 index 0000000..8c291d2 --- /dev/null +++ b/templates/Grafana/0/docker-compose.yml @@ -0,0 +1,9 @@ +grafana: + image: grafana/grafana:4.2.0 + ports: + - ${http_port}:3000 + environment: + GF_SECURITY_ADMIN_USER: ${admin_username} + GF_SECURITY_ADMIN_PASSWORD: ${admin_password} + GF_SECURITY_SECRET_KEY: ${secret_key} + GF_INSTALL_PLUGINS: ${install_plugins} \ No newline at end of file diff --git a/templates/Grafana/0/rancher-compose.yml b/templates/Grafana/0/rancher-compose.yml new file mode 100644 index 0000000..0bd91a8 --- /dev/null +++ b/templates/Grafana/0/rancher-compose.yml @@ -0,0 +1,41 @@ +.catalog: + name: "Grafana" + version: "4.2.0-rancher2" + questions: + + - variable: http_port + description: "http port to access Grafana" + label: "Http Port" + required: true + default: "3000" + type: "int" + + - variable: admin_username + description: "Grafana admin username" + label: "Admin Username" + required: true + default: "admin" + type: "string" + + - variable: admin_password + description: "Grafana admin password" + label: "Admin Password" + required: true + default: "password" + type: "string" + + - variable: secret_key + description: "Signing secret key" + label: "Secret Key" + required: true + default: "su2Tong2zoocie" + type: "string" + + - variable: install_plugins + description: "Include/Install Grafana Plugins (comma-separated plugin-ids)" + label: "Install Plugins" + required: false + default: "grafana-clock-panel" + type: "string" + +grafana: \ No newline at end of file diff --git a/templates/Guacamole/0/docker-compose.yml b/templates/Guacamole/0/docker-compose.yml new file mode 100644 index 0000000..8dd69b7 --- /dev/null +++ b/templates/Guacamole/0/docker-compose.yml @@ -0,0 +1,49 @@ +database-data: + image: busybox + labels: + io.rancher.container.start_once: 'true' + net: none + entrypoint: /bin/true + volumes: + - /var/lib/mysql + - /docker-entrypoint-initdb.d +database: + image: mariadb + environment: + MYSQL_DATABASE: ${guacamole_db} + MYSQL_ONETIME_PASSWORD: 'true' + MYSQL_PASSWORD: ${guacamole_password} + MYSQL_RANDOM_ROOT_PASSWORD: 'true' + MYSQL_USER: ${guacamole_user} + volumes_from: + - database-data + labels: + io.rancher.sidekicks: setup-get-db-script, database-data +setup-get-db-script: + image: glyptodon/guacamole:0.9.10-incubating + net: none + volumes_from: + - database-data + command: + - bash + - -c + - /opt/guacamole/bin/initdb.sh --mysql > /docker-entrypoint-initdb.d/initdb.sql + labels: + io.rancher.container.start_once: 'true' +guacd: + image: glyptodon/guacd:0.9.10-incubating +guacamole: + image: glyptodon/guacamole:0.9.10-incubating + environment: + MYSQL_DATABASE: ${guacamole_db} + MYSQL_HOSTNAME: database + MYSQL_PASSWORD: ${guacamole_password} + MYSQL_USER: ${guacamole_user} + links: + - guacd:guacd + ports: + - ${public_port}:8080/tcp + command: + - /bin/bash + - -c + - cd /usr/local/tomcat/webapps;rm -rf ROOT/; ln -s guacamole.war ROOT.war; /opt/guacamole/bin/start.sh; \ No newline at end of file diff --git a/templates/Guacamole/0/rancher-compose.yml b/templates/Guacamole/0/rancher-compose.yml new file mode 100644 index 0000000..3f662bb --- /dev/null +++ b/templates/Guacamole/0/rancher-compose.yml @@ -0,0 +1,73 @@ +version: '2' +.catalog: + name: "apache-guacamole" + version: "0.1-rancher1" + description: " Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH." + minimum_rancher_version: v0.46.0 + questions: + + - variable: "guacamole_db" + label: "MySQL Database Name" + description: "Your MYSQL guacamole database name" + default: "guacamole_db" + required: true + type: "string" + + - variable: "guacamole_user" + label: "MySQL Database User" + description: "Your MYSQL guacamole user name" + required: true + default: "guacamole_user" + type: "string" + + - variable: "guacamole_password" + label: "MySQL Database Password" + description: "Your MYSQL guacamole user password. Defaults to \"guacamole_password\"" + required: true + default: "guacamole_password" + type: "password" + + - variable: "public_port" + label: "Public Port" + description: "The public port that Guacamole listens on, defaults to 8080" + required: true + default: 8080 + type: "int" + +services: + guacamole: + scale: 1 + health_check: + healthy_threshold: 2 + response_timeout: 2000 + port: 8080 + unhealthy_threshold: 3 + initializing_timeout: 60000 + interval: 2000 + strategy: recreate + request_line: GET "/guacamole" "HTTP/1.0" + reinitializing_timeout: 60000 + guacd: + scale: 1 + health_check: + healthy_threshold: 2 + response_timeout: 2000 + port: 4822 + unhealthy_threshold: 3 + initializing_timeout: 60000 + interval: 2000 + strategy: recreate + reinitializing_timeout: 60000 + setup-get-db-script: + scale: 1 + database: + scale: 1 + health_check: + healthy_threshold: 2 + response_timeout: 2000 + port: 3306 + unhealthy_threshold: 3 + initializing_timeout: 60000 + interval: 2000 + strategy: recreate + reinitializing_timeout: 60000 \ No newline at end of file diff --git a/templates/Jenkins-CI/0/docker-compose.yml b/templates/Jenkins-CI/0/docker-compose.yml new file mode 100644 index 0000000..b870a8d --- /dev/null +++ b/templates/Jenkins-CI/0/docker-compose.yml @@ -0,0 +1,20 @@ +jenkins-primary: + image: "jenkins/jenkins:2.92" + ports: + - "${PORT}:8080" + labels: + io.rancher.sidekicks: jenkins-plugins,jenkins-datavolume + io.rancher.container.hostname_override: container_name + volumes_from: + - jenkins-plugins + - jenkins-datavolume + entrypoint: /usr/share/jenkins/rancher/jenkins.sh +jenkins-plugins: + image: rancher/jenkins-plugins:v0.1.1 +jenkins-datavolume: + image: "busybox" + volumes: + - ${volume_work}:/var/jenkins_home + labels: + io.rancher.container.start_once: true + entrypoint: ["chown", "-R", "1000:1000", "/var/jenkins_home"] \ No newline at end of file diff --git a/templates/Jenkins-CI/0/rancher-compose.yml b/templates/Jenkins-CI/0/rancher-compose.yml new file mode 100644 index 0000000..be63407 --- /dev/null +++ b/templates/Jenkins-CI/0/rancher-compose.yml @@ -0,0 +1,44 @@ +.catalog: + name: Jenkins + version: 2.92-rancher1 + questions: + + - variable: "PORT" + type: "int" + label: "Port Number" + description: "Which port should Jenkins listen on?" + default: 8080 + required: true + + - variable: "volume_work" + description: "Work volume to save jenkins data" + label: "Work volume:" + required: true + default: "/var/lib/docker/jenkins-ci" + type: "string" + + - variable: "plugins" + type: "multiline" + label: "List of Plugins" + description: | + List of plugins in the format [:] + one entry per line. + default: | + credentials + git + git-client + github + github-api + github-oauth + greenballs + junit + plain-credentials + scm-api + ssh-credentials + ssh-slaves + swarm + +jenkins-primary: + metadata: + plugins: | + ${plugins} \ No newline at end of file diff --git a/templates/LetsEncrypt/0/docker-compose.yml b/templates/LetsEncrypt/0/docker-compose.yml new file mode 100644 index 0000000..64df638 --- /dev/null +++ b/templates/LetsEncrypt/0/docker-compose.yml @@ -0,0 +1,62 @@ +version: '2' +services: + letsencrypt: + image: janeczku/rancher-letsencrypt:v0.5.0 + environment: + EULA: "${EULA}" + API_VERSION: "${API_VERSION}" + CERT_NAME: "${CERT_NAME}" + EMAIL: "${EMAIL}" + DOMAINS: "${DOMAINS}" + PUBLIC_KEY_TYPE: "${PUBLIC_KEY_TYPE}" + RENEWAL_TIME: "${RENEWAL_TIME}" + PROVIDER: "${PROVIDER}" + DNS_RESOLVERS: "${DNS_RESOLVERS}" + RENEWAL_PERIOD_DAYS: "${RENEWAL_PERIOD_DAYS}" + RUN_ONCE: "${RUN_ONCE}" + CLOUDFLARE_EMAIL: "${CLOUDFLARE_EMAIL}" + CLOUDFLARE_KEY: "${CLOUDFLARE_KEY}" + DO_ACCESS_TOKEN: "${DO_ACCESS_TOKEN}" + AWS_ACCESS_KEY: "${AWS_ACCESS_KEY}" + AWS_SECRET_KEY: "${AWS_SECRET_KEY}" + DNSIMPLE_EMAIL: "${DNSIMPLE_EMAIL}" + DNSIMPLE_KEY: "${DNSIMPLE_KEY}" + DYN_CUSTOMER_NAME: "${DYN_CUSTOMER_NAME}" + DYN_USER_NAME: "${DYN_USER_NAME}" + DYN_PASSWORD: "${DYN_PASSWORD}" + VULTR_API_KEY: "${VULTR_API_KEY}" + OVH_APPLICATION_KEY: "${OVH_APPLICATION_KEY}" + OVH_APPLICATION_SECRET: "${OVH_APPLICATION_SECRET}" + OVH_CONSUMER_KEY: "${OVH_CONSUMER_KEY}" + GANDI_API_KEY: "${GANDI_API_KEY}" + AZURE_CLIENT_ID: "${AZURE_CLIENT_ID}" + AZURE_CLIENT_SECRET: "${AZURE_CLIENT_SECRET}" + AZURE_SUBSCRIPTION_ID: "${AZURE_SUBSCRIPTION_ID}" + AZURE_TENANT_ID: "${AZURE_TENANT_ID}" + AZURE_RESOURCE_GROUP: "${AZURE_RESOURCE_GROUP}" + AURORA_USER_ID: "${AURORA_USER_ID}" + AURORA_KEY: "${AURORA_KEY}" + AURORA_ENDPOINT: "${AURORA_ENDPOINT}" + NS1_API_KEY: "${NS1_API_KEY}" + volumes: + - /var/lib/rancher:/var/lib/rancher + {{- if .Values.VOLUME_NAME}} + - {{.Values.VOLUME_NAME}}:/etc/letsencrypt + {{- end }} + labels: + io.rancher.container.create_agent: "true" + io.rancher.container.agent.role: "environment" + {{- if eq .Values.RUN_ONCE "true" }} + io.rancher.container.start_once: "true" + {{- end }} +{{- if .Values.VOLUME_NAME}} +volumes: + {{.Values.VOLUME_NAME}}: + {{- if .Values.STORAGE_DRIVER}} + driver: {{.Values.STORAGE_DRIVER}} + {{- if .Values.STORAGE_DRIVER_OPT}} + driver_opts: + {{.Values.STORAGE_DRIVER_OPT}} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/templates/LetsEncrypt/0/rancher-compose.yml b/templates/LetsEncrypt/0/rancher-compose.yml new file mode 100644 index 0000000..6eae99a --- /dev/null +++ b/templates/LetsEncrypt/0/rancher-compose.yml @@ -0,0 +1,281 @@ +.catalog: + name: Let's Encrypt + version: 0.5.0 + description: Trusted SSL certificates at zero cost + minimum_rancher_version: v1.5.0 + questions: + + - variable: EULA + label: I Agree to the Let's Encrypt TOS + description: | + Read https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf + required: true + type: enum + options: + - "Yes" + - "No" + + - variable: API_VERSION + label: Let's Encrypt API Version + description: | + Select the Let's Encrypt API endpoint used for issuing the certificate. + Use `Sandbox` for testing your configuration. + required: true + type: enum + default: Production + options: + - Production + - Sandbox + + - variable: EMAIL + label: Your Email Address + description: | + Enter the email address to use for creating the Let's Encrypt account. + required: true + type: string + + - variable: CERT_NAME + label: Certificate Name + description: | + Name for storing the certificate in the Rancher API and in volumes. + Any existing certificate by that name will be updated. + required: true + type: string + + - variable: DOMAINS + label: Domain Names + description: | + Comma delimited list of the certificate domains starting with the Common Name. + E.g: `example.com, dev.example.com`. + required: true + type: string + + - variable: PUBLIC_KEY_TYPE + label: Public Key Algorithm + description: | + Select one of the available key types. + required: true + type: enum + default: RSA-2048 + options: + - RSA-2048 + - RSA-4096 + - RSA-8192 + - ECDSA-256 + - ECDSA-384 + + - variable: RENEWAL_TIME + label: Renewal Time of Day (00-23) + description: | + Set the time of day (UTC in hours) at which certificate renewals should be run. + default: 12 + required: true + type: int + + - variable: RENEWAL_PERIOD_DAYS + label: Renewal Grace Period + description: | + Number of days before expiration the certificate should be renewed / become eligible for renewal. + default: 20 + required: true + type: int + + - variable: RUN_ONCE + label: Run Once + description: | + Stop the service after creating or renewing the certificate instead of continously running and managing renewal. + required: true + type: boolean + default: false + + - variable: DNS_RESOLVERS + label: DNS Resolvers + description: | + Comma delimited list of DNS resolvers used to check propagation of ACME TXT record. + If empty the DNS resolvers configured in your hosts /etc/resolv.conf are used. + required: false + default: "8.8.8.8:53,8.8.4.4:53" + type: string + + - variable: VOLUME_NAME + label: Volume Name (Optional) + description: | + To store the account data, certificates and private keys in a volume, enter the volume name that should be used. + By default this will be a (host scoped) named Docker volume. See "Persistent Storage Driver" for other options. + required: false + type: string + + - variable: STORAGE_DRIVER + label: Volume Storage Driver (Optional) + description: | + To use a stack scoped volume backed by a persistent storage service, enter the name + of an existing storage driver (see `Infrastructure -> Storage`). This also requires "Volume Name" to be set. + required: false + type: string + + - variable: STORAGE_DRIVER_OPT + label: Storage Driver Option (Optional) + description: | + Specify a single "driver_opts" key/value pair in the format "optionName: optionValue". + E.g. for the `rancher-ebs` driver you should specify the required 'size' option like this: "size: 1". + required: false + type: string + + - variable: PROVIDER + label: Domain Validation Method + description: Select a DNS provider to use for domain validation. Use 'HTTP' if your domain is hosted elsewhere. + required: true + type: enum + options: + - Aurora + - Azure + - CloudFlare + - DigitalOcean + - DNSimple + - Dyn + - Gandi + - NS1 + - Ovh + - Route53 + - Vultr + - HTTP + + - variable: AURORA_USER_ID + label: Aurora User ID + type: string + required: false + + - variable: AURORA_KEY + label: Aurora Key + type: string + required: false + + - variable: AURORA_ENDPOINT + label: Aurora Endpoint URL (Optional) + type: string + required: false + + - variable: AWS_ACCESS_KEY + label: AWS Route53 Access Key Id + description: Enter the Access Key Id for your AWS account. + type: string + required: false + + - variable: AWS_SECRET_KEY + label: AWS Route53 Secret Access Key + description: Enter the Secret Access Key for your AWS account. + type: password + required: false + + - variable: AZURE_CLIENT_ID + label: Azure Client ID + description: Enter the Client Id for your Azure account. + type: string + required: false + + - variable: AZURE_CLIENT_SECRET + label: Azure Client Secret + description: Enter the Access Key Id for your Azure account. + type: password + required: false + + - variable: AZURE_SUBSCRIPTION_ID + label: Azure Subscription Id + description: Enter the Azure Subscription Id for your Azure account. + type: string + required: false + + - variable: AZURE_TENANT_ID + label: Azure Tenant Id + description: Enter the Azure Tenant Id for your Azure account. + type: string + required: false + + - variable: AZURE_RESOURCE_GROUP + label: Azure Resource Group + description: Enter the Azure Resource Group for your Azure account. + type: string + required: false + + - variable: CLOUDFLARE_EMAIL + label: CloudFlare Email Address + description: Enter the email address associated with your CloudFlare account. + type: string + required: false + + - variable: CLOUDFLARE_KEY + label: CloudFlare API Key + description: Enter the Global API Key for your CloudFlare account. + type: password + required: false + + - variable: DO_ACCESS_TOKEN + label: DigitalOcean API Access Token + description: Enter the Personal Access Token for your DigitalOcean account. + type: password + required: false + + - variable: DNSIMPLE_EMAIL + label: DNSimple Email Address + description: Enter the email address associated with your DNSimple account. + type: string + required: false + + - variable: DNSIMPLE_KEY + label: DNSimple API Key + description: Enter your DNSimple API key. + type: password + required: false + + - variable: DYN_CUSTOMER_NAME + label: Dyn Customer Name + description: Enter your Dyn customer name. + type: string + required: false + + - variable: DYN_USER_NAME + label: Dyn User Name + description: Enter your Dyn user name. + type: string + required: false + + - variable: DYN_PASSWORD + label: Dyn Password + description: Enter your Dyn password. + type: password + required: false + + - variable: GANDI_API_KEY + label: Gandi API Key + description: Enter the API key for your Gandi account. + type: password + required: false + + - variable: NS1_API_KEY + label: NS1 API Key + type: string + required: false + + - variable: OVH_APPLICATION_KEY + label: OVH Application Key + description: Enter your OVH application key. + type: string + required: false + + - variable: OVH_APPLICATION_SECRET + label: OVH Application Secret + description: Enter your OVH application secret. + type: password + required: false + + - variable: OVH_CONSUMER_KEY + label: OVH Consumer Key + description: Enter your OVH consumer key. + type: password + required: false + + - variable: VULTR_API_KEY + label: Vultr API Key + description: Enter the API key for your Vultr account. + type: password + required: false \ No newline at end of file diff --git a/templates/Mumble/0/docker-compose.yml b/templates/Mumble/0/docker-compose.yml new file mode 100644 index 0000000..2a99389 --- /dev/null +++ b/templates/Mumble/0/docker-compose.yml @@ -0,0 +1,5 @@ +mumble: + image: ranchercb/murmur:latest + ports: + - 64738:64738 + - 64738:64738/udp \ No newline at end of file diff --git a/templates/Mumble/0/rancher-compose.yml b/templates/Mumble/0/rancher-compose.yml new file mode 100644 index 0000000..9baeba4 --- /dev/null +++ b/templates/Mumble/0/rancher-compose.yml @@ -0,0 +1,7 @@ +.catalog: + name: mumble + version: v1.2.17 + uuid: mumble-0 + +mumble: + scale: 1 \ No newline at end of file diff --git a/templates/Netdata/0/docker-compose.yml b/templates/Netdata/0/docker-compose.yml new file mode 100644 index 0000000..b54259e --- /dev/null +++ b/templates/Netdata/0/docker-compose.yml @@ -0,0 +1,13 @@ +netdata: + image: titpetric/netdata:latest + labels: + io.rancher.scheduler.global: 'true' + uts: host + cap_add: + - SYS_PTRACE + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + NETDATA_PORT: "${NETDATA_PORT}" \ No newline at end of file diff --git a/templates/Netdata/0/rancher-compose.yml b/templates/Netdata/0/rancher-compose.yml new file mode 100644 index 0000000..fdd0a91 --- /dev/null +++ b/templates/Netdata/0/rancher-compose.yml @@ -0,0 +1,14 @@ +.catalog: + name: netdata + version: v1.8.0 + questions: + + - variable: NETDATA_PORT + label: Port + description: Container port to access netdata + required: true + type: int + default: 19999 + +netdata: + scale: 1 \ No newline at end of file diff --git a/templates/NextCloud/0/docker-compose.yml b/templates/NextCloud/0/docker-compose.yml new file mode 100644 index 0000000..1cb599f --- /dev/null +++ b/templates/NextCloud/0/docker-compose.yml @@ -0,0 +1,45 @@ +version: '2' +services: + nextcloud: + image: nextcloud:12-apache + volumes_from: + - nextcloud-data + ports: + - ${NEXTCLOUD_PORT}:80 + depends_on: + - mariadb + labels: + io.rancher.sidekicks: nextcloud-data + io.rancher.container.hostname_override: container_name + + nextcloud-data: + image: nextcloud:12-apache + entrypoint: + - /bin/true + volumes: + - /var/www/html + labels: + io.rancher.container.start_once: 'true' + io.rancher.container.hostname_override: container_name + + mariadb: + image: mariadb:10 + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS} + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASS} + labels: + io.rancher.sidekicks: mariadb-data + io.rancher.container.hostname_override: container_name + + mariadb-data: + image: mariadb:10 + entrypoint: + - /bin/true + volumes: + - /var/lib/mysql + tty: true + labels: + io.rancher.container.start_once: 'true' + io.rancher.container.hostname_override: container_name \ No newline at end of file diff --git a/templates/NextCloud/0/rancher-compose.yml b/templates/NextCloud/0/rancher-compose.yml new file mode 100644 index 0000000..d5b5046 --- /dev/null +++ b/templates/NextCloud/0/rancher-compose.yml @@ -0,0 +1,47 @@ +version: '2' +catalog: + name: nextcloud + version: 0.0.1 + questions: + + - variable: NEXTCLOUD_PORT + label: Port + default: 80 + required: true + type: int + + - variable: MYSQL_ROOT_PASS + label: MySQL root password + required: true + type: password + + - variable: MYSQL_DATABASE + default: nextcloud + label: MySQL Database + required: true + type: string + + - variable: MYSQL_USER + default: nextcloud + label: MySQL User + required: true + type: string + + - variable: MYSQL_PASS + label: MySQL Pass + required: true + type: password + +services: + nextcloud: + scale: 1 + start_on_create: true + nextcloud-data: + scale: 1 + start_on_create: true + mariadb: + scale: 1 + start_on_create: true + mariadb-data: + scale: 1 + start_on_create: true \ No newline at end of file diff --git a/templates/OpenHAB/0/docker-compose.yml b/templates/OpenHAB/0/docker-compose.yml new file mode 100644 index 0000000..14742d5 --- /dev/null +++ b/templates/OpenHAB/0/docker-compose.yml @@ -0,0 +1,58 @@ +version: '2' +services: + openhab: +{{- if eq .Values.PCAP_SUPPORT_ENABLED "true"}} + cap_add: + - NET_ADMIN + - NET_RAW + command: "./start.sh" +{{- end}} +{{- if or (ne .Values.DEVICE_MAPPING_1 "") (ne .Values.DEVICE_MAPPING_2 "") }} + devices: +{{- end}} +{{- if ne .Values.DEVICE_MAPPING_1 ""}} + - "${DEVICE_MAPPING_1}" +{{- end}} +{{- if ne .Values.DEVICE_MAPPING_2 ""}} + - "${DEVICE_MAPPING_2}" +{{- end}} + environment: + CRYPTO_POLICY: "${CRYPTO_POLICY}" +{{- if ne .Values.EXTRA_JAVA_OPTS ""}} + EXTRA_JAVA_OPTS: "${EXTRA_JAVA_OPTS}" +{{- end}} + OPENHAB_HTTP_PORT: "${HTTP_PORT}" + OPENHAB_HTTPS_PORT: "${HTTPS_PORT}" + image: "openhab/openhab:2.4.0-snapshot-${IMAGE_ARCHITECTURE}-${IMAGE_DISTRIBUTION}" + labels: + io.rancher.container.pull_image: always +{{- if ne .Values.HOST_LABEL ""}} + io.rancher.scheduler.affinity:host_label: ${HOST_LABEL} +{{- end}} +{{- if ne .Values.NETWORK_MODE "managed"}} + network_mode: ${NETWORK_MODE} +{{- end}} + ports: + - ${HTTP_PORT}:${HTTP_PORT} + - ${HTTPS_PORT}:${HTTPS_PORT} + restart: unless-stopped + tty: true + volumes: +{{- if eq .Values.USE_HOST_TIME "true"}} + - "/etc/localtime:/etc/localtime:ro" + - "/etc/timezone:/etc/timezone:ro" +{{- end}} + - "addons:/openhab/addons" + - "conf:/openhab/conf" + - "userdata:/openhab/userdata" + +volumes: + addons: + driver: ${VOLUME_DRIVER} + per_container: true + conf: + driver: ${VOLUME_DRIVER} + per_container: true + userdata: + driver: ${VOLUME_DRIVER} + per_container: true \ No newline at end of file diff --git a/templates/OpenHAB/0/rancher-compose.yml b/templates/OpenHAB/0/rancher-compose.yml new file mode 100644 index 0000000..a5c1646 --- /dev/null +++ b/templates/OpenHAB/0/rancher-compose.yml @@ -0,0 +1,130 @@ +version: '2' +catalog: + name: "openHAB" + version: "2.4.0-SNAPSHOT" + description: "An open source, technology agnostic home automation platform" + questions: + + - variable: "IMAGE_ARCHITECTURE" + label: "Image Architecture" + description: | + Use "amd64" for AMD/Intel 64-bit architectures (e.g. x64, x86-64, x86_64). + Use "armhf" for ARMv7 32-bit architectures (e.g. most RaspberryPi 1/2/3). + Use "arm64" for ARMv8 64-bit architectures (not RaspberryPi 3) + required: true + default: "amd64" + type: enum + options: + - amd64 + - armhf + - arm64 + + - variable: "IMAGE_DISTRIBUTION" + label: "Image Distribution" + description: "The distribution on which the container image is based" + required: true + default: "debian" + type: enum + options: + - alpine + - debian + + - variable: "NETWORK_MODE" + label: "Network Mode" + description: "The network stack to connect the container to" + required: true + default: "host" + type: enum + options: + - host + - bridge + - managed + - none + + - variable: "HOST_LABEL" + label: "Host Label" + description: "Schedules openHAB to run only on hosts that have a specific label. Example: 'openhab=true'" + default: "" + type: "string" + required: false + + - variable: "USE_HOST_TIME" + label: "Use Host Time" + description: "Adds /etc/localtime and /etc/timezone as volumes from the host for providing timezone information" + required: true + default: false + type: boolean + + - variable: "PCAP_SUPPORT_ENABLED" + label: "Enable Packet Capture Support" + description: "Runs openHAB as root and adds network capabilities e.g. for libpcap support" + required: true + default: false + type: boolean + + - variable: "HTTP_PORT" + label: "HTTP Port" + description: "The port used for HTTP connections" + default: 8080 + required: true + type: "int" + + - variable: "HTTPS_PORT" + label: "HTTPS Port" + description: "The port used for HTTPS connections" + default: 8443 + required: true + type: "int" + + - variable: "DEVICE_MAPPING_1" + label: "Device Mapping 1" + description: "Maps a device from the host to the container. Example: '/dev/ttyUSB0' or '/dev/ttyController:/dev/ttyS1'" + default: "" + type: "string" + required: false + + - variable: "DEVICE_MAPPING_2" + label: "Device Mapping 2" + description: "Maps another device from the host to the container. Example: '/dev/ttyUSB1' or '/dev/ttyController:/dev/ttyS2'" + default: "" + type: "string" + required: false + + - variable: "CRYPTO_POLICY" + label: "Java Cryptographic Strength Policy" + description: "Due to local laws and export restrictions the container uses Java with a limited cryptographic strength policy by default. Some openHAB functionality (e.g. KM200 binding) may depend on unlimited strength. Before enabling this make sure this is allowed by local laws and you agree with the applicable license and terms" + required: true + default: "limited" + type: enum + options: + - limited + - unlimited + + - variable: "VOLUME_DRIVER" + label: "Volume Driver" + description: "The volume driver used for persisting data" + required: true + default: "local" + type: enum + options: + - local + - rancher-ebs + - rancher-efs + - rancher-nfs + + - variable: "EXTRA_JAVA_OPTS" + label: "Extra Java Options" + description: "Starts the openHAB JVM with the provided extra options. Example: '-Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0:/dev/zwave'" + default: "" + type: "string" + required: false + +services: + openhab: + scale: 1 + health_check: + port: ${HTTP_PORT} + interval: 5000 + response_timeout: 5000 + healthy_threshold: 2 + unhealthy_threshold: 3 \ No newline at end of file diff --git a/templates/OpenProject/0/docker-compose.yml b/templates/OpenProject/0/docker-compose.yml new file mode 100644 index 0000000..6ddb0a9 --- /dev/null +++ b/templates/OpenProject/0/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' +services: + openproject: + image: openproject/community:7 + volumes_from: + - openproject-data + ports: + - ${OPENPROJECT_PORT}:80 + labels: + io.rancher.sidekicks: openproject-data + io.rancher.container.hostname_override: container_name + openproject-data: + image: openproject/community:7 + entrypoint: + - /bin/true + volumes: + - /var/lib/postgresql/9.4/main + - /var/log/supervisor + - /var/db/openproject + labels: + io.rancher.container.start_once: 'true' + io.rancher.container.hostname_override: container_name \ No newline at end of file diff --git a/templates/OpenProject/0/rancher-compose.yml b/templates/OpenProject/0/rancher-compose.yml new file mode 100644 index 0000000..9c04755 --- /dev/null +++ b/templates/OpenProject/0/rancher-compose.yml @@ -0,0 +1,20 @@ +version: '2' +catalog: + name: openproject + version: 0.0.1 + description: Project planning and scheduling + questions: + + - variable: OPENPROJECT_PORT + label: Port + default: 80 + required: true + type: int + +services: + openproject: + scale: 1 + start_on_create: true + openproject-data: + scale: 1 + start_on_create: true \ No newline at end of file diff --git a/templates/RocketChat/0/docker-compose.yml b/templates/RocketChat/0/docker-compose.yml index e69de29..0c8d82d 100644 --- a/templates/RocketChat/0/docker-compose.yml +++ b/templates/RocketChat/0/docker-compose.yml @@ -0,0 +1,36 @@ +mongo: + image: mongo +# volumes: +# - ./data/runtime/db:/data/db +# - ./data/dump:/dump + command: mongod --smallfiles --oplogSize 128 + +rocketchat: + image: rocketchat/rocket.chat:latest +# volumes: +# - ./uploads:/app/uploads + environment: + - PORT=3000 + - ROOT_URL=http://yourhost:3000 + - MONGO_URL=mongodb://mongo:27017/rocketchat + links: + - mongo:mongo + ports: + - 3000:3000 + +# hubot, the popular chatbot (add the bot user first and change the password before starting this image) +hubot: + image: rocketchat/hubot-rocketchat + environment: + - ROCKETCHAT_URL=rocketchat:3000 + - ROCKETCHAT_ROOM=GENERAL + - ROCKETCHAT_USER=bot + - ROCKETCHAT_PASSWORD=botpassword + - BOT_NAME=bot +# you can add more scripts as you'd like here, they need to be installable by npm + - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics + links: + - rocketchat:rocketchat +# this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier + ports: + - 3001:8080 \ No newline at end of file diff --git a/templates/RocketChat/0/rancher-compose.yml b/templates/RocketChat/0/rancher-compose.yml index e69de29..509ff3b 100644 --- a/templates/RocketChat/0/rancher-compose.yml +++ b/templates/RocketChat/0/rancher-compose.yml @@ -0,0 +1,8 @@ +.catalog: + name: "RocketChat" + version: "v0.1-educaas" + description: "Have your own Slack like online chat, built with Meteor." + uuid: rocketchat-0 + questions: + +rocketchat: \ No newline at end of file diff --git a/templates/Thingsboard/0/docker-compose.yml b/templates/Thingsboard/0/docker-compose.yml new file mode 100644 index 0000000..54dbb92 --- /dev/null +++ b/templates/Thingsboard/0/docker-compose.yml @@ -0,0 +1,49 @@ +version: '2' +services: + tb: + image: "thingsboard/application:1.2.4" + ports: + - "${http_public_port}:8080" + - "${mqtt_public_port}:1883" + - "${coap_public_port}:5683/udp" + environment: + - MQTT_BIND_ADDRESS=0.0.0.0 + - MQTT_BIND_PORT=1883 + - COAP_BIND_ADDRESS=0.0.0.0 + - COAP_BIND_PORT=5683 + - ZOOKEEPER_URL=zk:2181 + - DATABASE_TYPE=${database_type} + {{- if eq .Values.database_type "cassandra" }} + - CASSANDRA_URL=db:9042 + - CASSANDRA_HOST=db + - CASSANDRA_PORT=9042 + {{- else }} + - POSTGRES_HOST=db + - POSTGRES_PORT=5432 + {{- end }} + - ADD_SCHEMA_AND_SYSTEM_DATA=${add_schema_and_system_data} + - ADD_DEMO_DATA=${add_demo_data} + volumes: + - hsqldb_data_dir:/usr/share/thingsboard/data/sql + links: + - db:db + external_links: + - ${zookeeper_service}:zk + entrypoint: /run-application.sh + db: + {{- if eq .Values.database_type "cassandra" }} + image: "cassandra:3" + volumes: + - db_data_dir:/var/lib/cassandra + {{- else }} + image: "postgres:9.6" + environment: + - POSTGRES_DB=${postgres_db} + volumes: + - db_data_dir:/var/lib/postgresql/data + {{- end }} +volumes: + hsqldb_data_dir: + driver: ${volume_driver} + db_data_dir: + driver: ${volume_driver} \ No newline at end of file diff --git a/templates/Thingsboard/0/rancher-compose.yml b/templates/Thingsboard/0/rancher-compose.yml new file mode 100644 index 0000000..b6a2e51 --- /dev/null +++ b/templates/Thingsboard/0/rancher-compose.yml @@ -0,0 +1,90 @@ +version: '2' +catalog: + name: "Thingsboard" + version: "v0.1" + description: "An open source IoT platform" + uuid: Thingsboard-1 + questions: + + - variable: http_public_port + description: "Thingsboard dashboard published port" + label: "Http public port" + required: true + default: "8080" + type: int + + - variable: mqtt_public_port + description: "MQTT published port" + label: "MQTT public port" + required: true + default: "1883" + type: int + + - variable: coap_public_port + description: "COAP published port" + label: "COAP public port" + required: true + default: "5683" + type: int + + - variable: database_type + description: "Choose database type to use: sql or cassandra" + label: "Database type" + required: true + default: "sql" + type: enum + options: + - sql + - cassandra + + - variable: add_schema_and_system_data + description: "Whether to init scheme and system data" + label: "Add schema and system data" + required: true + default: true + type: boolean + + - variable: add_demo_data + description: "Whether to insert demo data" + label: "Add demo data" + required: true + default: true + type: boolean + + - variable: zookeeper_service + description: "Zookeeper service stack" + label: "Zookeeper service" + required: true + default: "zookeeper/zk" + type: "service" + + - variable: postgres_db + description: "Database name in postgresql" + label: "Dbname" + required: true + default: "thingsboard" + type: string + + - variable: volume_driver + description: "Volume driver to use with this service" + label: "Volume driver" + required: true + default: "local" + type: enum + options: + - local + - rancher-nfs + - rancher-efs + - rancher-ebs + +services: + tb: + scale: 1 + retain_ip: true + health_check: + port: 8080 + interval: 5000 + unhealthy_threshold: 3 + request_line: 'GET / HTTP/1.0' + healthy_threshold: 2 + response_timeout: 5000 \ No newline at end of file diff --git a/templates/Traefik/0/docker-compose.yml b/templates/Traefik/0/docker-compose.yml new file mode 100644 index 0000000..8432c8c --- /dev/null +++ b/templates/Traefik/0/docker-compose.yml @@ -0,0 +1,133 @@ +version: '2' +services: + traefik: + ports: + - ${admin_port}:${admin_port}/tcp + - ${http_port}:${http_port}/tcp + {{- if ne .Values.https_enable "false"}} + - ${https_port}:${https_port}/tcp + {{- end}} + labels: + io.rancher.scheduler.global: 'true' + io.rancher.scheduler.affinity:host_label: ${host_label} + io.rancher.scheduler.affinity:container_label_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + {{- if eq .Values.rancher_integration "api"}} + io.rancher.container.agent.role: environment + io.rancher.container.create_agent: 'true' + {{- end}} + {{- if or (eq .Values.rancher_integration "external") (eq .Values.acme_enable "true")}} + io.rancher.sidekicks: + {{- if eq .Values.rancher_integration "external"}} traefik-conf + {{- if eq .Values.acme_enable "true" -}},{{- end -}} + {{- end -}} + {{- if eq .Values.acme_enable "true" -}} + {{- if ne .Values.rancher_integration "external"}} traefik-acme + {{- else -}}traefik-acme + {{- end -}} + {{- end -}} + {{- end}} + io.rancher.container.hostname_override: container_name + image: rawmind/alpine-traefik:1.6.4-0 + environment: + - TRAEFIK_HTTP_PORT=${http_port} + - TRAEFIK_HTTP_COMPRESSION=${compress_enable} + - TRAEFIK_HTTPS_PORT=${https_port} + - TRAEFIK_HTTPS_ENABLE=${https_enable} + - TRAEFIK_HTTPS_COMPRESSION=${compress_enable} + - TRAEFIK_USAGE_ENABLE=${usage_enable} + - TRAEFIK_TIMEOUT_READ=${timeout_read} + - TRAEFIK_TIMEOUT_WRITE=${timeout_write} + - TRAEFIK_TIMEOUT_IDLE=${timeout_idle} + - TRAEFIK_TIMEOUT_DIAL=${timeout_dial} + - TRAEFIK_TIMEOUT_HEADER=${timeout_header} + {{- if ne .Values.https_min_tls ""}} + - TRAEFIK_HTTPS_MIN_TLS=${https_min_tls} + {{- end}} + {{- if ne .Values.trusted_ips ""}} + - TRAEFIK_TRUSTEDIPS=${trusted_ips} + {{- end}} + {{- if ne .Values.ssl_key ""}} + - TRAEFIK_SSL_KEY=${ssl_key} + {{- end}} + {{- if ne .Values.ssl_crt ""}} + - TRAEFIK_SSL_CRT=${ssl_crt} + {{- end}} + - TRAEFIK_INSECURE_SKIP=${insecure_skip} + - TRAEFIK_ADMIN_ENABLE=true + - TRAEFIK_ADMIN_PORT=${admin_port} + - TRAEFIK_ADMIN_SSL=${admin_ssl} + - TRAEFIK_ADMIN_STATISTICS=${admin_statistics} + - TRAEFIK_ADMIN_AUTH_METHOD=${admin_auth_method} + - TRAEFIK_ADMIN_AUTH_USERS=${admin_users} + {{- if eq .Values.acme_enable "true"}} + - TRAEFIK_ACME_ENABLE=${acme_enable} + - TRAEFIK_ACME_EMAIL=${acme_email} + - TRAEFIK_ACME_CHALLENGE=${acme_challenge} + - TRAEFIK_ACME_CHALLENGE_HTTP_ENTRYPOINT=http + - TRAEFIK_ACME_ONHOSTRULE=${acme_onhostrule} + - TRAEFIK_ACME_CASERVER=${acme_caserver} + {{- end}} + {{- if ne .Values.rancher_integration "external"}} + - TRAEFIK_RANCHER_ENABLE=true + - TRAEFIK_FILE_ENABLE=false + - TRAEFIK_CONSTRAINTS=${constraints} + - TRAEFIK_RANCHER_HEALTHCHECK=${rancher_healthcheck} + - TRAEFIK_RANCHER_MODE=${rancher_integration} + {{- else}} + - TRAEFIK_FILE_ENABLE=true + {{- end}} + {{- if eq .Values.metrics_enable "true"}} + - TRAEFIK_METRICS_ENABLE=${metrics_enable} + - TRAEFIK_METRICS_EXPORTER=${metrics_exporter} + - TRAEFIK_METRICS_PUSH=${metrics_push} + - TRAEFIK_METRICS_ADDRESS=${metrics_address} + - TRAEFIK_METRICS_PROMETHEUS_BUCKETS=${metrics_prometheus_buckets} + {{- end}} + {{- if or (eq .Values.rancher_integration "external") (eq .Values.acme_enable "true")}} + volumes_from: + {{- if eq .Values.rancher_integration "external"}} + - traefik-conf + {{- end}} + {{- if eq .Values.acme_enable "true"}} + - traefik-acme + {{- end}} + {{- end}} + {{- if eq .Values.rancher_integration "external"}} + traefik-conf: + labels: + io.rancher.scheduler.global: 'true' + io.rancher.scheduler.affinity:host_label: ${host_label} + io.rancher.scheduler.affinity:container_label_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.start_once: 'true' + image: rawmind/rancher-traefik:1.5.0-0 + network_mode: none + volumes: + - tools-volume:/opt/tools + {{- end}} + {{- if eq .Values.acme_enable "true"}} + traefik-acme: + network_mode: none + labels: + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + io.rancher.container.hostname_override: container_name + io.rancher.container.start_once: true + environment: + - SERVICE_UID=10001 + - SERVICE_GID=10001 + - SERVICE_VOLUME=/opt/traefik/acme + volumes: + - ${acme_vol_name}:/opt/traefik/acme + image: rawmind/alpine-volume:0.0.2-1 + {{- end}} +{{- if or (eq .Values.rancher_integration "external") (eq .Values.acme_enable "true")}} +volumes: + {{- if eq .Values.rancher_integration "external"}} + tools-volume: + driver: local + per_container: true + {{- end}} + {{- if eq .Values.acme_enable "true"}} + ${acme_vol_name}: + driver: ${acme_vol_driver} + {{- end}} +{{- end}} \ No newline at end of file diff --git a/templates/Traefik/0/rancher-compose.yml b/templates/Traefik/0/rancher-compose.yml new file mode 100644 index 0000000..70dffe3 --- /dev/null +++ b/templates/Traefik/0/rancher-compose.yml @@ -0,0 +1,313 @@ +version: '2' +catalog: + name: traefik + version: v1.6.4-rancher1 + description: | + Traefik load balancer. + minimum_rancher_version: v0.59.0 + maintainer: "Raul Sanchez " + uuid: traefik-0 + questions: + + - variable: "rancher_integration" + label: "Choose rancher integration:" + description: | + Enable rancher integration mode. Traefik built in integration, metadata or api, or external sidekick integration with confd. + default: metadata + required: true + type: enum + options: + - metadata + - api + - external + + - variable: "rancher_healthcheck" + description: | + Enable/disable rancher services healtcheck filter. If enable, just healthy services will be published. + Only valid for api and metadata integration. + label: "Rancher healthcheck filter:" + required: true + default: false + type: "boolean" + + - variable: "usage_enable" + description: | + Enable/disable send anonymous usage collection to Traefik. See https://docs.traefik.io/basics/#collected-data + label: "Traefik send anonymous usage:" + required: true + default: false + type: "boolean" + + - variable: "constraints" + description: | + Traefik constraints for rancher provider. Eg: "tag==api" + Only valid for api and metadata integration. + label: "Traefik constraints:" + required: false + default: "" + type: "string" + + - variable: "host_label" + description: "Host label where to run traefik service." + label: "Host label:" + required: true + default: "traefik_lb=true" + type: "string" + + - variable: "http_port" + description: "Traefik http public port to listen." + label: "Http port:" + required: true + default: 8080 + type: "int" + + - variable: "https_port" + description: "Traefik https public port to listen." + label: "Https port:" + required: true + default: 8443 + type: "int" + + - variable: "admin_port" + description: "Traefik admin public port to listen for api, rest, ping and webui." + label: "Admin port:" + required: true + default: 8000 + type: "int" + + - variable: "admin_ssl" + description: "Enable ssl for api, rest, ping and webui." + label: "Admin ssl:" + required: true + default: false + type: "boolean" + + - variable: "https_enable" + label: "Https enable:" + description: | + Enable https working mode. If you activate, you need to fill SSL key and SSL crt in order to work. + default: false + required: true + type: enum + options: + - false + - true + - only + + - variable: "https_min_tls" + description: | + Minimal allowed tls version to accept connections from. + See the traefik documentation for allowed values. Default is `VersionTLS12`. + label: "Https min tls:" + required: false + default: "" + type: "string" + + - variable: "trusted_ips" + description: | + Enable proxyProtocol and forwardHeaders just for trusted IPs. Eg: `172.0.0.0/16,192.168.0.1` + See the traefik documentation for more info. Default is ``. + label: "Trusted IPs:" + required: false + default: "" + type: "string" + + - variable: "acme_enable" + description: "Enable acme support on traefik." + label: "ACME enable:" + required: true + default: false + type: "boolean" + + - variable: "acme_email" + description: "ACME user email." + label: "ACME email:" + required: true + default: "test@traefik.io" + type: "string" + + - variable: "acme_challenge" + description: "ACME challenge." + label: "ACME challenge:" + required: true + default: http + type: enum + options: # List of options if using type of `enum` + - http + + - variable: "acme_onhostrule" + description: "Enable acme onHostRule." + label: "ACME onHostRule:" + required: true + default: true + type: "boolean" + + - variable: "acme_caserver" + description: "ACME caServer to use." + label: "ACME caServer:" + required: true + default: "https://acme-v01.api.letsencrypt.org/directory" + type: "string" + + - variable: "acme_vol_name" + description: "The volume name shared to store ACME certs" + label: "ACME Volume Name" + required: true + default: "traefik_acme_vol" + type: "string" + + - variable: "acme_vol_driver" + description: "The volume driver shared to store ACME certs" + label: "ACME Volume Driver" + required: true + default: "local" + type: enum + options: # List of options if using type of `enum` + - local + - rancher-nfs + - rancher-efs + - rancher-ebs + + - variable: "ssl_key" + description: "SSL key to secure the service. *Required if you enable https or admin ssl" + label: "Https key" + type: "multiline" + required: false + default: "" + + - variable: "ssl_crt" + description: "SSL cert to secure the service. *Required if you enable https or admin ssl" + label: "Https crt" + type: "multiline" + required: false + default: "" + + - variable: "insecure_skip" + description: "Enable InsecureSkipVerify param." + label: "InsecureSkipVerify:" + required: true + default: false + type: "boolean" + + - variable: "compress_enable" + label: "Enable compression:" + description: | + Enable Traefik compression for entrypoints. + default: true + required: true + type: "boolean" + + - variable: "timeout_read" + label: "Timeout read:" + description: | + Traefik respondingTimeouts readTimeout (s). + default: 0 + required: true + type: "int" + + - variable: "timeout_write" + label: "Timeout write:" + description: | + Traefik respondingTimeouts writeTimeout (s). + default: 0 + required: true + type: "int" + + - variable: "timeout_idle" + label: "Timeout idle:" + description: | + Traefik respondingTimeouts idleTimeout (s). + default: 180 + required: true + type: "int" + + - variable: "timeout_dial" + label: "Timeout dial:" + description: | + Traefik forwardingTimeouts dialTimeout (s). + default: 30 + required: true + type: "int" + + - variable: "timeout_header" + label: "Timeout header:" + description: | + Traefik forwardingTimeouts responseHeaderTimeout (s). + default: 0 + required: true + type: "int" + + - variable: "admin_statistics" + description: "Enable more detailed statistics." + label: "Admin statistics history:" + required: true + default: 10 + type: "int" + + - variable: "admin_auth_method" + description: "Admin auth method on api, rest and webui." + label: "Admin auth method:" + required: true + default: "basic" + type: enum + options: # List of options if using type of `enum` + - basic + - digest + + - variable: "admin_users" + description: "Admin auth user list on api, rest and webui. Generate with htpassword for basic or htdigest with traefik realm for digest." + label: "Admin users:" + type: "multiline" + required: false + default: "" + + - variable: "metrics_enable" + description: "Enable traefik metrics." + label: "Metrics enable" + default: false + required: true + type: "boolean" + + - variable: "metrics_exporter" + description: "Traefik metrics exporter." + label: "Metrics exporter:" + required: false + default: + type: enum + options: # List of options if using type of `enum` + - prometheus + - datadog + - statsd + - influxdb + + - variable: "metrics_push" + description: "Traefik metrics exporter push interval. Apply on datadog, statsd and influxdb." + label: "Metrics push interval (s):" + required: false + default: 10 + type: "int" + + - variable: "metrics_address" + description: "Traefik metrics exporter address to push. Apply on datadog, statsd and influxdb." + label: "Metrics address:" + required: false + default: "" + type: "string" + + - variable: "metrics_prometheus_buckets" + description: "Traefik metrics buckets for prometheus." + label: "Metrics prometheus buckets" + default: "[0.1,0.3,1.2,5.0]" + required: false + type: "string" + +services: + traefik: + retain_ip: true + health_check: + healthy_threshold: 2 + response_timeout: 5000 + port: ${admin_port} + unhealthy_threshold: 3 + interval: 5000 + strategy: recreate \ No newline at end of file diff --git a/templates/Turtl/0/docker-compose.yml b/templates/Turtl/0/docker-compose.yml new file mode 100644 index 0000000..714ea1b --- /dev/null +++ b/templates/Turtl/0/docker-compose.yml @@ -0,0 +1,33 @@ +turtl-api-data: + labels: + io.rancher.container.start_once: 'true' + entrypoint: + - /bin/true + image: busybox + volumes: + - /opt/api/uploads + - /var/lib/rethinkdb/instance1 + +turtl-api: + ports: + - 8181:8181/tcp + environment: + DISPLAY_ERRORS: ${DISPLAY_ERRORS} + FQDN: ${FQDN} + SITE_URL: ${SITE_URL} + LOCAL_UPLOAD_URL: ${LOCAL_UPLOAD_URL} + LOCAL_UPLOAD_PATH: ${LOCAL_UPLOAD_PATH} + AWS_S3_TOKEN: ${AWS_S3_TOKEN} + ADMIN_EMAIL: ${ADMIN_EMAIL} + EMAIL_FROM: ${EMAIL_FROM} + SMTP_USER: ${SMTP_USER} + SMTP_PASS: ${SMTP_PASS} + DEFAULT_STORAGE_LIMIT: ${DEFAULT_STORAGE_LIMIT} + STORAGE_INVITE_CREDIT: ${STORAGE_INVITE_CREDIT} + image: webofmars/turtl-docker:latest + stdin_open: true + tty: true + labels: + io.rancher.sidekicks: turtl-api-data + volumes_from: + - turtl-api-data \ No newline at end of file diff --git a/templates/Turtl/0/rancher-compose.yml b/templates/Turtl/0/rancher-compose.yml new file mode 100644 index 0000000..85d16d3 --- /dev/null +++ b/templates/Turtl/0/rancher-compose.yml @@ -0,0 +1,105 @@ +.catalog: + name: "turtl" + version: 1.0.1 + questions: + + - variable: "DISPLAY_ERRORS" + descrition: "Display errors" + label: "Display errors: " + required: false + default: "t" + type: "string" + + - variable: "FQDN" + description: "Fully Qualified Domain Name (ex: 'notes.example.com')." + label: "fqdn" + required: true + default: "turtl.local" + type: "string" + + - variable: "SITE_URL" + description: "The uri used to access the turtl api" + label: "site url" + required: true + default: "http://turtl.local" + type: "string" + + - variable: "LOCAL_UPLOAD_PATH" + description: "The local path of the uploaded content." + label: "uploads local path" + required: false + default: "" + type: "string" + + - variable: "LOCAL_UPLOAD_URL" + description: "The urls used to retrieve uploaded content. Must be set if you change LOCAL_UPLOAD_PATH. (ex: http://turtl.local)" + label: "local upload url" + required: false + default: "" + type: "string" + + - variable: "AWS_S3_TOKEN" + description: | + Amazon Web Services S3 token. Used only if you use S3 as a storage backend. ex : (:token '' + secret '' + bucket '' + endpoint 'https://s3.amazonaws.com') + label: "AWS S3 token" + required: false + default: "" + type: "string" + + - variable: "ADMIN_EMAIL" + description: "email adresse of administrator ex: admin@example.com" + label: "Admin e-mail" + required: false + default: "" + type: "string" + + - variable: "EMAIL_FROM" + description: "The e-mail adress used to send the e-mail from turtl to users." + label: "e-mail from" + required: false + default: "" + type: "string" + + - variable: "SMTP_USER" + description: "The user used to authenticate to the smtp server. Can be blank." + label: "smtp user" + required: false + default: "" + type: "string" + + - variable: "SMTP_PASS" + description: "The password used to authenticate to the smtp server. Can be blank." + label: "smtp password" + required: false + default: "" + type: "string" + + - variable: "STORAGE_INVITE_CREDIT" + description: "The number of MB a user gain when he invites someone" + label: "storage invite credit" + required: false + default: "" + type: "int" + + - variable: "DEFAULT_STORAGE_LIMIT" + description: "Maximum storage space (in MB) that can be used by a single user (ex: 1000)" + label: "Default Storage Limit" + required: false + default: "" + type: "int" + +turtl-api-data: + scale: 1 +turtl-api: + scale: 1 + health_check: + port: 8181 + interval: 2000 + initializing_timeout: 300000 + unhealthy_threshold: 10 + strategy: recreate + response_timeout: 2000 + healthy_threshold: 2 \ No newline at end of file