parent
							
								
									7ccf7a73f1
								
							
						
					
					
						commit
						03f19b8cd3
					
				
							
								
								
									
										254
									
								
								.env.nanobox
									
									
									
									
									
								
							
							
						
						
									
										254
									
								
								.env.nanobox
									
									
									
									
									
								
							| @ -1,254 +0,0 @@ | |||||||
| # Service dependencies |  | ||||||
| # You may set REDIS_URL instead for more advanced options |  | ||||||
| REDIS_HOST=$DATA_REDIS_HOST |  | ||||||
| REDIS_PORT=6379 |  | ||||||
| # REDIS_DB=0 |  | ||||||
| 
 |  | ||||||
| # You may set DATABASE_URL instead for more advanced options |  | ||||||
| DB_HOST=$DATA_DB_HOST |  | ||||||
| DB_USER=$DATA_DB_USER |  | ||||||
| DB_NAME=gonano |  | ||||||
| DB_PASS=$DATA_DB_PASS |  | ||||||
| DB_PORT=5432 |  | ||||||
| 
 |  | ||||||
| # DATABASE_URL=postgresql://$DATA_DB_USER:$DATA_DB_PASS@$DATA_DB_HOST/gonano |  | ||||||
| 
 |  | ||||||
| # Optional Elasticsearch configuration |  | ||||||
| ES_ENABLED=true |  | ||||||
| ES_HOST=$DATA_ELASTIC_HOST |  | ||||||
| ES_PORT=9200 |  | ||||||
| 
 |  | ||||||
| BIND=0.0.0.0 |  | ||||||
| 
 |  | ||||||
| # Federation |  | ||||||
| # Note: Changing LOCAL_DOMAIN at a later time will cause unwanted side effects, including breaking all existing federation. |  | ||||||
| # LOCAL_DOMAIN should *NOT* contain the protocol part of the domain e.g https://example.com. |  | ||||||
| LOCAL_DOMAIN=${APP_NAME}.nanoapp.io |  | ||||||
| 
 |  | ||||||
| # Changing LOCAL_HTTPS in production is no longer supported. (Mastodon will always serve https:// links) |  | ||||||
| 
 |  | ||||||
| # Use this only if you need to run mastodon on a different domain than the one used for federation. |  | ||||||
| # You can read more about this option on https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Serving_a_different_domain.md |  | ||||||
| # DO *NOT* USE THIS UNLESS YOU KNOW *EXACTLY* WHAT YOU ARE DOING. |  | ||||||
| # WEB_DOMAIN=mastodon.example.com |  | ||||||
| 
 |  | ||||||
| # Use this if you want to have several aliases handler@example1.com |  | ||||||
| # handler@example2.com etc. for the same user. LOCAL_DOMAIN should not |  | ||||||
| # be added. Comma separated values |  | ||||||
| # ALTERNATE_DOMAINS=example1.com,example2.com |  | ||||||
| 
 |  | ||||||
| # Application secrets |  | ||||||
| # Generate each with the `rake secret` task (`nanobox run bundle exec rake secret`) |  | ||||||
| SECRET_KEY_BASE=$SECRET_KEY_BASE |  | ||||||
| OTP_SECRET=$OTP_SECRET |  | ||||||
| 
 |  | ||||||
| # VAPID keys (used for push notifications) |  | ||||||
| # You can generate the keys using the following command (first is the private key, second is the public one) |  | ||||||
| # You should only generate this once per instance. If you later decide to change it, all push subscription will |  | ||||||
| # be invalidated, requiring the users to access the website again to resubscribe. |  | ||||||
| # |  | ||||||
| # Generate with `rake mastodon:webpush:generate_vapid_key` task (`nanobox run bundle exec rake mastodon:webpush:generate_vapid_key`) |  | ||||||
| # |  | ||||||
| # For more information visit https://rossta.net/blog/using-the-web-push-api-with-vapid.html |  | ||||||
| VAPID_PRIVATE_KEY=$VAPID_PRIVATE_KEY |  | ||||||
| VAPID_PUBLIC_KEY=$VAPID_PUBLIC_KEY |  | ||||||
| 
 |  | ||||||
| # Registrations |  | ||||||
| # Single user mode will disable registrations and redirect frontpage to the first profile |  | ||||||
| # SINGLE_USER_MODE=true |  | ||||||
| # Prevent registrations with following e-mail domains |  | ||||||
| # EMAIL_DOMAIN_BLACKLIST=example1.com|example2.de|etc |  | ||||||
| # Only allow registrations with the following e-mail domains |  | ||||||
| # EMAIL_DOMAIN_WHITELIST=example1.com|example2.de|etc |  | ||||||
| 
 |  | ||||||
| # Optionally change default language |  | ||||||
| # DEFAULT_LOCALE=de |  | ||||||
| 
 |  | ||||||
| # E-mail configuration |  | ||||||
| # Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers |  | ||||||
| # If you want to use an SMTP server without authentication (e.g local Postfix relay) |  | ||||||
| # then set SMTP_AUTH_METHOD and SMTP_OPENSSL_VERIFY_MODE to 'none' and |  | ||||||
| # *comment* SMTP_LOGIN and SMTP_PASSWORD (leaving them blank is not enough). |  | ||||||
| SMTP_SERVER=$SMTP_SERVER |  | ||||||
| SMTP_PORT=587 |  | ||||||
| SMTP_LOGIN=$SMTP_LOGIN |  | ||||||
| SMTP_PASSWORD=$SMTP_PASSWORD |  | ||||||
| SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io |  | ||||||
| #SMTP_REPLY_TO= |  | ||||||
| #SMTP_DOMAIN= # defaults to LOCAL_DOMAIN |  | ||||||
| #SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail |  | ||||||
| #SMTP_AUTH_METHOD=plain |  | ||||||
| #SMTP_CA_FILE=/etc/ssl/certs/ca-certificates.crt |  | ||||||
| #SMTP_OPENSSL_VERIFY_MODE=peer |  | ||||||
| #SMTP_ENABLE_STARTTLS_AUTO=true |  | ||||||
| #SMTP_TLS=true |  | ||||||
| 
 |  | ||||||
| # Optional user upload path and URL (images, avatars). Default is :rails_root/public/system. If you set this variable, you are responsible for making your HTTP server (eg. nginx) serve these files. |  | ||||||
| # PAPERCLIP_ROOT_PATH=/var/lib/mastodon/public-system |  | ||||||
| # PAPERCLIP_ROOT_URL=/system |  | ||||||
| 
 |  | ||||||
| # Optional asset host for multi-server setups |  | ||||||
| # The asset host must allow cross origin request from WEB_DOMAIN or LOCAL_DOMAIN |  | ||||||
| # if WEB_DOMAIN is not set. For example, the server may have the |  | ||||||
| # following header field: |  | ||||||
| # Access-Control-Allow-Origin: https://example.com/ |  | ||||||
| # CDN_HOST=https://assets.example.com |  | ||||||
| 
 |  | ||||||
| # S3 (optional) |  | ||||||
| # The attachment host must allow cross origin request from WEB_DOMAIN or |  | ||||||
| # LOCAL_DOMAIN if WEB_DOMAIN is not set. For example, the server may have the |  | ||||||
| # following header field: |  | ||||||
| # Access-Control-Allow-Origin: https://192.168.1.123:9000/ |  | ||||||
| # S3_ENABLED=true |  | ||||||
| # S3_BUCKET= |  | ||||||
| # AWS_ACCESS_KEY_ID= |  | ||||||
| # AWS_SECRET_ACCESS_KEY= |  | ||||||
| # S3_REGION= |  | ||||||
| # S3_PROTOCOL=http |  | ||||||
| # S3_HOSTNAME=192.168.1.123:9000 |  | ||||||
| 
 |  | ||||||
| # S3 (Minio Config (optional) Please check Minio instance for details) |  | ||||||
| # The attachment host must allow cross origin request - see the description |  | ||||||
| # above. |  | ||||||
| # S3_ENABLED=true |  | ||||||
| # S3_BUCKET= |  | ||||||
| # AWS_ACCESS_KEY_ID= |  | ||||||
| # AWS_SECRET_ACCESS_KEY= |  | ||||||
| # S3_REGION= |  | ||||||
| # S3_PROTOCOL=https |  | ||||||
| # S3_HOSTNAME= |  | ||||||
| # S3_ENDPOINT= |  | ||||||
| # S3_SIGNATURE_VERSION= |  | ||||||
| 
 |  | ||||||
| # Google Cloud Storage (optional) |  | ||||||
| # Use S3 compatible API. Since GCS does not support Multipart Upload, |  | ||||||
| # increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload. |  | ||||||
| # The attachment host must allow cross origin request - see the description |  | ||||||
| # above. |  | ||||||
| # S3_ENABLED=true |  | ||||||
| # AWS_ACCESS_KEY_ID= |  | ||||||
| # AWS_SECRET_ACCESS_KEY= |  | ||||||
| # S3_REGION= |  | ||||||
| # S3_PROTOCOL=https |  | ||||||
| # S3_HOSTNAME=storage.googleapis.com |  | ||||||
| # S3_ENDPOINT=https://storage.googleapis.com |  | ||||||
| # S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes |  | ||||||
| 
 |  | ||||||
| # Swift (optional) |  | ||||||
| # The attachment host must allow cross origin request - see the description |  | ||||||
| # above. |  | ||||||
| # SWIFT_ENABLED=true |  | ||||||
| # SWIFT_USERNAME= |  | ||||||
| # For Keystone V3, the value for SWIFT_TENANT should be the project name |  | ||||||
| # SWIFT_TENANT= |  | ||||||
| # SWIFT_PASSWORD= |  | ||||||
| # Some OpenStack V3 providers require PROJECT_ID (optional) |  | ||||||
| # SWIFT_PROJECT_ID= |  | ||||||
| # Keystone V2 and V3 URLs are supported. Use a V3 URL if possible to avoid |  | ||||||
| # issues with token rate-limiting during high load. |  | ||||||
| # SWIFT_AUTH_URL= |  | ||||||
| # SWIFT_CONTAINER= |  | ||||||
| # SWIFT_OBJECT_URL= |  | ||||||
| # SWIFT_REGION= |  | ||||||
| # Defaults to 'default' |  | ||||||
| # SWIFT_DOMAIN_NAME= |  | ||||||
| # Defaults to 60 seconds. Set to 0 to disable |  | ||||||
| # SWIFT_CACHE_TTL= |  | ||||||
| 
 |  | ||||||
| # Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare) |  | ||||||
| # S3_ALIAS_HOST= |  | ||||||
| 
 |  | ||||||
| # Streaming API integration |  | ||||||
| # STREAMING_API_BASE_URL= |  | ||||||
| 
 |  | ||||||
| # Advanced settings |  | ||||||
| # If you need to use pgBouncer, you need to disable prepared statements: |  | ||||||
| # PREPARED_STATEMENTS=false |  | ||||||
| 
 |  | ||||||
| # Cluster number setting for streaming API server. |  | ||||||
| # If you comment out following line, cluster number will be `numOfCpuCores - 1`. |  | ||||||
| # STREAMING_CLUSTER_NUM=1 |  | ||||||
| 
 |  | ||||||
| # Docker mastodon user |  | ||||||
| # If you use Docker, you may want to assign UID/GID manually. |  | ||||||
| # UID=1000 |  | ||||||
| # GID=1000 |  | ||||||
| 
 |  | ||||||
| # LDAP authentication (optional) |  | ||||||
| # LDAP_ENABLED=true |  | ||||||
| # LDAP_HOST=localhost |  | ||||||
| # LDAP_PORT=389 |  | ||||||
| # LDAP_METHOD=simple_tls |  | ||||||
| # LDAP_BASE= |  | ||||||
| # LDAP_BIND_DN= |  | ||||||
| # LDAP_PASSWORD= |  | ||||||
| # LDAP_UID=cn |  | ||||||
| # LDAP_MAIL=mail |  | ||||||
| # LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email})) |  | ||||||
| # LDAP_UID_CONVERSION_ENABLED=true |  | ||||||
| # LDAP_UID_CONVERSION_SEARCH=., - |  | ||||||
| # LDAP_UID_CONVERSION_REPLACE=_ |  | ||||||
| 
 |  | ||||||
| # PAM authentication (optional) |  | ||||||
| # PAM authentication uses for the email generation the "email" pam variable |  | ||||||
| # and optional as fallback PAM_DEFAULT_SUFFIX |  | ||||||
| # The pam environment variable "email" is provided by: |  | ||||||
| # https://github.com/devkral/pam_email_extractor |  | ||||||
| # PAM_ENABLED=true |  | ||||||
| # Fallback email domain for email address generation (LOCAL_DOMAIN by default) |  | ||||||
| # PAM_EMAIL_DOMAIN=example.com |  | ||||||
| # Name of the pam service (pam "auth" section is evaluated) |  | ||||||
| # PAM_DEFAULT_SERVICE=rpam |  | ||||||
| # Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default) |  | ||||||
| # PAM_CONTROLLED_SERVICE=rpam |  | ||||||
| 
 |  | ||||||
| # Optional CAS authentication (cf. omniauth-cas) : |  | ||||||
| # CAS_ENABLED=true |  | ||||||
| # CAS_URL=https://sso.myserver.com/ |  | ||||||
| # CAS_HOST=sso.myserver.com/ |  | ||||||
| # CAS_PORT=443 |  | ||||||
| # CAS_SSL=true |  | ||||||
| # CAS_VALIDATE_URL= |  | ||||||
| # CAS_CALLBACK_URL= |  | ||||||
| # CAS_LOGOUT_URL= |  | ||||||
| # CAS_LOGIN_URL= |  | ||||||
| # CAS_UID_FIELD='user' |  | ||||||
| # CAS_CA_PATH= |  | ||||||
| # CAS_DISABLE_SSL_VERIFICATION=false |  | ||||||
| # CAS_UID_KEY='user' |  | ||||||
| # CAS_NAME_KEY='name' |  | ||||||
| # CAS_EMAIL_KEY='email' |  | ||||||
| # CAS_NICKNAME_KEY='nickname' |  | ||||||
| # CAS_FIRST_NAME_KEY='firstname' |  | ||||||
| # CAS_LAST_NAME_KEY='lastname' |  | ||||||
| # CAS_LOCATION_KEY='location' |  | ||||||
| # CAS_IMAGE_KEY='image' |  | ||||||
| # CAS_PHONE_KEY='phone' |  | ||||||
| # CAS_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true |  | ||||||
| 
 |  | ||||||
| # Optional SAML authentication (cf. omniauth-saml) |  | ||||||
| # SAML_ENABLED=true |  | ||||||
| # SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback |  | ||||||
| # SAML_ISSUER=https://example.com |  | ||||||
| # SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO |  | ||||||
| # SAML_IDP_CERT= |  | ||||||
| # SAML_IDP_CERT_FINGERPRINT= |  | ||||||
| # SAML_NAME_IDENTIFIER_FORMAT= |  | ||||||
| # SAML_CERT= |  | ||||||
| # SAML_PRIVATE_KEY= |  | ||||||
| # SAML_SECURITY_WANT_ASSERTION_SIGNED=true |  | ||||||
| # SAML_SECURITY_WANT_ASSERTION_ENCRYPTED=true |  | ||||||
| # SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_UID="urn:oid:0.9.2342.19200300.100.1.1" |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_EMAIL="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_FULL_NAME="urn:oid:2.16.840.1.113730.3.1.241" |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME="urn:oid:2.5.4.42" |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_LAST_NAME="urn:oid:2.5.4.4" |  | ||||||
| # SAML_UID_ATTRIBUTE="urn:oid:0.9.2342.19200300.100.1.1" |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_VERIFIED= |  | ||||||
| # SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL= |  | ||||||
| 
 |  | ||||||
| # Use HTTP proxy for outgoing request (optional) |  | ||||||
| # http_proxy=http://gateway.local:8118 |  | ||||||
| # Access control for hidden service. |  | ||||||
| # ALLOW_ACCESS_TO_HIDDEN_SERVICE=true |  | ||||||
							
								
								
									
										205
									
								
								boxfile.yml
									
									
									
									
									
								
							
							
						
						
									
										205
									
								
								boxfile.yml
									
									
									
									
									
								
							| @ -1,205 +0,0 @@ | |||||||
| run.config: |  | ||||||
|   engine: ruby |  | ||||||
|   engine.config: |  | ||||||
|     runtime: ruby-2.5 |  | ||||||
| 
 |  | ||||||
|   extra_packages: |  | ||||||
|     # basic servers: |  | ||||||
|     - nginx |  | ||||||
|     - nodejs |  | ||||||
| 
 |  | ||||||
|     # for images: |  | ||||||
|     - ImageMagick |  | ||||||
|     - jemalloc |  | ||||||
| 
 |  | ||||||
|     # for videos: |  | ||||||
|     - ffmpeg3 |  | ||||||
| 
 |  | ||||||
|     # to prep the .env file: |  | ||||||
|     - gettext-tools |  | ||||||
| 
 |  | ||||||
|     # for node-gyp, used in the asset compilation process: |  | ||||||
|     - python-2 |  | ||||||
| 
 |  | ||||||
|     # i18n: |  | ||||||
|     - libidn |  | ||||||
| 
 |  | ||||||
|   cache_dirs: |  | ||||||
|     - node_modules |  | ||||||
| 
 |  | ||||||
|   extra_path_dirs: |  | ||||||
|     - node_modules/.bin |  | ||||||
| 
 |  | ||||||
|   build_triggers: |  | ||||||
|     - .ruby-version |  | ||||||
|     - Gemfile |  | ||||||
|     - Gemfile.lock |  | ||||||
|     - package.json |  | ||||||
|     - yarn.lock |  | ||||||
| 
 |  | ||||||
|   extra_steps: |  | ||||||
|     - cp .env.nanobox .env |  | ||||||
|     - yarn |  | ||||||
| 
 |  | ||||||
|   fs_watch: true |  | ||||||
| 
 |  | ||||||
| deploy.config: |  | ||||||
|   extra_steps: |  | ||||||
|     - NODE_ENV=production bundle exec rake assets:precompile |  | ||||||
|   transform: |  | ||||||
|     - 'envsubst < /app/.env.nanobox > /app/.env.production' |  | ||||||
|     - |- |  | ||||||
|       if [ -z "$LOCAL_DOMAIN" ] |  | ||||||
|       then |  | ||||||
|         . /app/.env.production |  | ||||||
|         export LOCAL_DOMAIN |  | ||||||
|       fi |  | ||||||
|       erb /app/nanobox/nginx-web.conf.erb > /app/nanobox/nginx-web.conf |  | ||||||
|       erb /app/nanobox/nginx-stream.conf.erb > /app/nanobox/nginx-stream.conf |  | ||||||
|     - touch /app/log/production.log |  | ||||||
|   before_live: |  | ||||||
|     web.web: |  | ||||||
|       - bin/tootctl cache clear |  | ||||||
|       - bundle exec rake db:migrate:setup |  | ||||||
|   after_live: |  | ||||||
|     worker.sidekiq: |  | ||||||
|       - |- |  | ||||||
|         if [[ "${ES_ENABLED}" != "false" ]] |  | ||||||
|         then |  | ||||||
|           bin/tootctl search deploy |  | ||||||
|         fi |  | ||||||
| 
 |  | ||||||
| web.web: |  | ||||||
|   start: |  | ||||||
|     nginx: nginx -c /app/nanobox/nginx-web.conf |  | ||||||
|     rails: bundle exec puma -C /app/config/puma.rb |  | ||||||
| 
 |  | ||||||
|   routes: |  | ||||||
|     - '/' |  | ||||||
| 
 |  | ||||||
|   writable_dirs: |  | ||||||
|     - tmp |  | ||||||
| 
 |  | ||||||
|   log_watch: |  | ||||||
|     rails: 'log/production.log' |  | ||||||
| 
 |  | ||||||
|   network_dirs: |  | ||||||
|     data.storage: |  | ||||||
|       - public/system |  | ||||||
| 
 |  | ||||||
| web.stream: |  | ||||||
|   start: |  | ||||||
|     nginx: nginx -c /app/nanobox/nginx-stream.conf |  | ||||||
|     node: yarn run start |  | ||||||
| 
 |  | ||||||
|   routes: |  | ||||||
|     - '/api/v1/streaming*' |  | ||||||
|     # Somehow we're getting requests for scheme://domain//api/v1/streaming* - match those, too |  | ||||||
|     - '//api/v1/streaming*' |  | ||||||
| 
 |  | ||||||
|   writable_dirs: |  | ||||||
|     - tmp |  | ||||||
| 
 |  | ||||||
| worker.sidekiq: |  | ||||||
|   start: |  | ||||||
|     default: bundle exec sidekiq -c 5 -q default -L /app/log/sidekiq.log |  | ||||||
|     mailers: bundle exec sidekiq -c 5 -q mailers -L /app/log/sidekiq.log |  | ||||||
|     pull: bundle exec sidekiq -c 5 -q pull -L /app/log/sidekiq.log |  | ||||||
|     push: bundle exec sidekiq -c 5 -q push -L /app/log/sidekiq.log |  | ||||||
|     scheduler: bundle exec sidekiq -c 5 -q scheduler -L /app/log/sidekiq.log |  | ||||||
| 
 |  | ||||||
|   writable_dirs: |  | ||||||
|     - tmp |  | ||||||
| 
 |  | ||||||
|   log_watch: |  | ||||||
|     rails: 'log/production.log' |  | ||||||
|     sidekiq: 'log/sidekiq.log' |  | ||||||
| 
 |  | ||||||
|   network_dirs: |  | ||||||
|     data.storage: |  | ||||||
|       - public/system |  | ||||||
| 
 |  | ||||||
| data.db: |  | ||||||
|   image: nanobox/postgresql:9.6 |  | ||||||
| 
 |  | ||||||
|   cron: |  | ||||||
|     - id: backup |  | ||||||
|       schedule: '0 3 * * *' |  | ||||||
|       command: | |  | ||||||
|         PGPASSWORD=${DATA_DB_PASS} pg_dump -U ${DATA_DB_USER} -w -Fc -O gonano | |  | ||||||
|         gzip | |  | ||||||
|         curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).sql.gz -X POST -T - >&2 |  | ||||||
|         curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | |  | ||||||
|         sed 's/,/\n/g' | |  | ||||||
|         grep ${HOSTNAME} | |  | ||||||
|         sort | |  | ||||||
|         head -n-${BACKUP_COUNT:-1} | |  | ||||||
|         sed 's/.*: \?"\(.*\)".*/\1/' | |  | ||||||
|         while read file |  | ||||||
|         do |  | ||||||
|           curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
| data.elastic: |  | ||||||
|   image: nanobox/elasticsearch:5 |  | ||||||
| 
 |  | ||||||
|   cron: |  | ||||||
|     - id: backup |  | ||||||
|       schedule: '0 3 * * *' |  | ||||||
|       command: | |  | ||||||
|         id=$(cat /proc/sys/kernel/random/uuid) |  | ||||||
|         curl -X PUT -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}" -d "{\"type\": \"fs\",\"settings\": {\"location\": \"/var/tmp/${id}\",\"compress\": true}}" |  | ||||||
|         curl -X PUT -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}/backup?wait_for_completion=true&pretty" |  | ||||||
|         tar -cz -C "/var/tmp/${id}" . | |  | ||||||
|         curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz -X POST -T - >&2 |  | ||||||
|         curl -X DELETE -H "Content-Type: application/json" "127.0.0.1:9200/_snapshot/${id}" |  | ||||||
|         rm -rf "/var/tmp/${id}" |  | ||||||
|         curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | |  | ||||||
|         sed 's/,/\n/g' | |  | ||||||
|         grep ${HOSTNAME} | |  | ||||||
|         sort | |  | ||||||
|         head -n-${BACKUP_COUNT:-1} | |  | ||||||
|         sed 's/.*: \?"\(.*\)".*/\1/' | |  | ||||||
|         while read file |  | ||||||
|         do |  | ||||||
|           curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
| data.redis: |  | ||||||
|   image: nanobox/redis:4.0 |  | ||||||
| 
 |  | ||||||
|   cron: |  | ||||||
|     - id: backup |  | ||||||
|       schedule: '0 3 * * *' |  | ||||||
|       command: | |  | ||||||
|         curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).rdb -X POST -T /data/var/db/redis/dump.rdb >&2 |  | ||||||
|         curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | |  | ||||||
|         sed 's/,/\n/g' | |  | ||||||
|         grep ${HOSTNAME} | |  | ||||||
|         sort | |  | ||||||
|         head -n-${BACKUP_COUNT:-1} | |  | ||||||
|         sed 's/.*: \?"\(.*\)".*/\1/' | |  | ||||||
|         while read file |  | ||||||
|         do |  | ||||||
|           curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
| data.storage: |  | ||||||
|   image: nanobox/unfs:0.9 |  | ||||||
| 
 |  | ||||||
|   cron: |  | ||||||
|     - id: backup |  | ||||||
|       schedule: '0 3 * * *' |  | ||||||
|       command: | |  | ||||||
|         tar cz -C /data/var/db/unfs/ . | |  | ||||||
|         curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz -X POST -T - >&2 |  | ||||||
|         curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ | |  | ||||||
|         sed 's/,/\n/g' | |  | ||||||
|         grep ${HOSTNAME} | |  | ||||||
|         sort | |  | ||||||
|         head -n-${BACKUP_COUNT:-1} | |  | ||||||
|         sed 's/.*: \?"\(.*\)".*/\1/' | |  | ||||||
|         while read file |  | ||||||
|         do |  | ||||||
|           curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/${file} -X DELETE |  | ||||||
|         done |  | ||||||
| @ -1,92 +0,0 @@ | |||||||
| worker_processes 1; |  | ||||||
| daemon off; |  | ||||||
| 
 |  | ||||||
| events { |  | ||||||
|     worker_connections 1024; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| http { |  | ||||||
|     include /data/etc/nginx/mime.types; |  | ||||||
|     sendfile on; |  | ||||||
| 
 |  | ||||||
|     gzip on; |  | ||||||
|     gzip_disable "MSIE [1-6]\."; |  | ||||||
|     gzip_vary on; |  | ||||||
|     gzip_proxied any; |  | ||||||
|     gzip_comp_level 6; |  | ||||||
|     gzip_buffers 16 8k; |  | ||||||
|     gzip_min_length 500; |  | ||||||
|     gzip_http_version 1.1; |  | ||||||
|     gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; |  | ||||||
| 
 |  | ||||||
|     # Proxy upstream to the puma process |  | ||||||
|     upstream rails { |  | ||||||
|         server 127.0.0.1:3000; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     # Proxy upstream to the node process |  | ||||||
|     upstream node { |  | ||||||
|         server 127.0.0.1:4000; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     map $http_upgrade $connection_upgrade { |  | ||||||
|         default upgrade; |  | ||||||
|         ''      close; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     # Configuration for Nginx |  | ||||||
|     server { |  | ||||||
|         # Listen on port 8080 |  | ||||||
|         listen 8080; |  | ||||||
| 
 |  | ||||||
|         keepalive_timeout    70; |  | ||||||
|         client_max_body_size 80M; |  | ||||||
| 
 |  | ||||||
|         root /app/public; |  | ||||||
| 
 |  | ||||||
|         add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
| 
 |  | ||||||
|         location / { |  | ||||||
|             try_files $uri @rails; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         # Proxy connections to rails |  | ||||||
|         location @rails { |  | ||||||
|             proxy_set_header Host $host; |  | ||||||
|             proxy_set_header X-Real-IP $remote_addr; |  | ||||||
|             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |  | ||||||
|             proxy_set_header X-Forwarded-Proto https; |  | ||||||
|             proxy_set_header Proxy ""; |  | ||||||
|             proxy_pass_header Server; |  | ||||||
| 
 |  | ||||||
|             proxy_pass http://rails; |  | ||||||
|             proxy_buffering off; |  | ||||||
|             proxy_redirect off; |  | ||||||
|             proxy_http_version 1.1; |  | ||||||
|             proxy_set_header Upgrade $http_upgrade; |  | ||||||
|             proxy_set_header Connection $connection_upgrade; |  | ||||||
| 
 |  | ||||||
|             tcp_nodelay on; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         # Proxy connections to node |  | ||||||
|         location /api/v1/streaming { |  | ||||||
|             proxy_set_header Host $host; |  | ||||||
|             proxy_set_header X-Real-IP $remote_addr; |  | ||||||
|             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |  | ||||||
|             proxy_set_header X-Forwarded-Proto https; |  | ||||||
|             proxy_set_header Proxy ""; |  | ||||||
| 
 |  | ||||||
|             proxy_pass http://node; |  | ||||||
|             proxy_buffering off; |  | ||||||
|             proxy_redirect off; |  | ||||||
|             proxy_http_version 1.1; |  | ||||||
|             proxy_set_header Upgrade $http_upgrade; |  | ||||||
|             proxy_set_header Connection $connection_upgrade; |  | ||||||
| 
 |  | ||||||
|             tcp_nodelay on; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     error_page 500 501 502 503 504 /500.html; |  | ||||||
| } |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| worker_processes 1; |  | ||||||
| daemon off; |  | ||||||
| 
 |  | ||||||
| events { |  | ||||||
|     worker_connections 1024; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| http { |  | ||||||
|     include /data/etc/nginx/mime.types; |  | ||||||
|     sendfile on; |  | ||||||
| 
 |  | ||||||
|     gzip on; |  | ||||||
|     gzip_disable "MSIE [1-6]\."; |  | ||||||
|     gzip_vary on; |  | ||||||
|     gzip_proxied any; |  | ||||||
|     gzip_comp_level 6; |  | ||||||
|     gzip_buffers 16 8k; |  | ||||||
|     gzip_min_length 500; |  | ||||||
|     gzip_http_version 1.1; |  | ||||||
|     gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; |  | ||||||
| 
 |  | ||||||
|     # Proxy upstream to the node process |  | ||||||
|     upstream node { |  | ||||||
|         server 127.0.0.1:4000; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     map $http_upgrade $connection_upgrade { |  | ||||||
|         default upgrade; |  | ||||||
|         ''      close; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     # Configuration for Nginx |  | ||||||
|     server { |  | ||||||
|         # Listen on port 8080 |  | ||||||
|         listen 8080; |  | ||||||
| 
 |  | ||||||
|         keepalive_timeout    70; |  | ||||||
|         client_max_body_size 80M; |  | ||||||
| 
 |  | ||||||
|         root /app/public; |  | ||||||
| 
 |  | ||||||
|         add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
| 
 |  | ||||||
|         location / { |  | ||||||
|             try_files $uri @node; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         # Proxy connections to node |  | ||||||
|         location @node { |  | ||||||
|             proxy_set_header Host $host; |  | ||||||
|             proxy_set_header X-Real-IP $remote_addr; |  | ||||||
|             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |  | ||||||
|             proxy_set_header X-Forwarded-Proto https; |  | ||||||
|             proxy_set_header Proxy ""; |  | ||||||
| 
 |  | ||||||
|             proxy_pass http://node; |  | ||||||
|             proxy_buffering off; |  | ||||||
|             proxy_redirect off; |  | ||||||
|             proxy_http_version 1.1; |  | ||||||
|             proxy_set_header Upgrade $http_upgrade; |  | ||||||
|             proxy_set_header Connection $connection_upgrade; |  | ||||||
| 
 |  | ||||||
|             tcp_nodelay on; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,90 +0,0 @@ | |||||||
| worker_processes 1; |  | ||||||
| daemon off; |  | ||||||
| 
 |  | ||||||
| events { |  | ||||||
|     worker_connections 1024; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| http { |  | ||||||
|     include /data/etc/nginx/mime.types; |  | ||||||
|     sendfile on; |  | ||||||
| 
 |  | ||||||
|     gzip on; |  | ||||||
|     gzip_disable "MSIE [1-6]\."; |  | ||||||
|     gzip_vary on; |  | ||||||
|     gzip_proxied any; |  | ||||||
|     gzip_comp_level 6; |  | ||||||
|     gzip_buffers 16 8k; |  | ||||||
|     gzip_min_length 500; |  | ||||||
|     gzip_http_version 1.1; |  | ||||||
|     gzip_types text/plain text/xml text/javascript text/css text/comma-separated-values application/xml+rss application/xml application/x-javascript application/json application/javascript application/atom+xml; |  | ||||||
| 
 |  | ||||||
|     # Proxy upstream to the puma process |  | ||||||
|     upstream rails { |  | ||||||
|         server 127.0.0.1:3000; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     map $http_upgrade $connection_upgrade { |  | ||||||
|         default upgrade; |  | ||||||
|         ''      close; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     # Configuration for Nginx |  | ||||||
|     server { |  | ||||||
|         # Listen on port 8080 |  | ||||||
|         listen 8080; |  | ||||||
| 
 |  | ||||||
|         keepalive_timeout    70; |  | ||||||
|         client_max_body_size 80M; |  | ||||||
| 
 |  | ||||||
|         root /app/public; |  | ||||||
| 
 |  | ||||||
|         add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
| 
 |  | ||||||
|         location / { |  | ||||||
|             try_files $uri @rails; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         location /sw.js { |  | ||||||
|             add_header Cache-Control "public, max-age=0"; |  | ||||||
|             add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
|             try_files $uri @rails; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         location ~ ^/(emoji|packs|system/media_attachments/files|system/accounts/avatars) { |  | ||||||
|             add_header Cache-Control "public, max-age=31536000, immutable"; |  | ||||||
|             add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
|             try_files $uri @rails; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         # Proxy connections to rails |  | ||||||
|         location @rails { |  | ||||||
|             proxy_set_header Host $host; |  | ||||||
|             proxy_set_header X-Real-IP $remote_addr; |  | ||||||
|             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |  | ||||||
|             proxy_set_header X-Forwarded-Proto https; |  | ||||||
|             proxy_set_header Proxy ""; |  | ||||||
|             proxy_pass_header Server; |  | ||||||
| 
 |  | ||||||
|             proxy_pass http://rails; |  | ||||||
|             proxy_buffering on; |  | ||||||
|             proxy_redirect off; |  | ||||||
|             proxy_http_version 1.1; |  | ||||||
|             proxy_set_header Upgrade $http_upgrade; |  | ||||||
|             proxy_set_header Connection $connection_upgrade; |  | ||||||
| 
 |  | ||||||
|             proxy_cache CACHE; |  | ||||||
|             proxy_cache_valid 200 7d; |  | ||||||
|             proxy_cache_valid 410 24h; |  | ||||||
|             proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; |  | ||||||
|             add_header Strict-Transport-Security "max-age=31536000"; |  | ||||||
|             add_header X-Cached $upstream_cache_status; |  | ||||||
| 
 |  | ||||||
|             tcp_nodelay on; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     proxy_cache_path /data/var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g; |  | ||||||
| 
 |  | ||||||
|     error_page 500 501 502 503 504 /500.html; |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user