debops.rails_deploy default variables

---- System ----

rails_deploy_dependencies

Should certain services/envs be setup for you automatically? Redis will only be setup if you enable background worker support.

Keep in mind that if you remove ruby then you will be expected to put ruby on the system and ensure its binaries are on the system path.

rails_deploy_dependencies: ['database', 'redis', 'nginx', 'ruby', 'monit']
rails_deploy_packages

Which packages do you want installed? Add as many packages as you want, the database_package will automatically pick libpq-dev or libmysqlclient-dev depending on what database you picked.

rails_deploy_packages: ['{{ rails_deploy_database_package }}']
rails_deploy_user_groups

A list of additional groups that this app's user belongs to. If you want to be able to ssh into the server then you must include 'sshusers'.

rails_deploy_user_groups: []
rails_deploy_user_sshkey

Where should the public ssh key be read in from? This is only used when you have included 'sshusers' in the user_groups list.

rails_deploy_user_sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

---- Hosts ----

rails_deploy_hosts_group

What inventory group does your app belong to? If you want to have multiple apps then make this group gather up all sub-groups such as debops_rails_deploy_myapp and debops_rails_deploy_anotherapp.

rails_deploy_hosts_group: 'debops_rails_deploy'
rails_deploy_hosts_master

Which application server should run database related tasks?

rails_deploy_hosts_master: '{{ groups[rails_deploy_hosts_group][0] }}'

---- Git ----

rails_deploy_git_location

The location repo which will get cloned during each deploy. You can use a remote or local repo.

rails_deploy_git_location: ''
rails_deploy_git_version

Which branch or tag should be used?

rails_deploy_git_version: 'master'
rails_deploy_git_remote

Which remote should be used?

rails_deploy_git_remote: 'origin'

Supply your git provider's api token to automatically set deploy keys. If False you will have to manually add deploy keys for each app server.

rails_deploy_git_access_token

Supports github and gitlab for now: Github: https://github.com/settings/applications Under personal access tokens, check off 'write:public_key'. You may want to enable other access limits for repo/public_repo, etc..

Gitlab: https://yourgitlabhost.com/profile/account Your private token should already be there.

rails_deploy_git_access_token: False

---- Deploy ----

rails_deploy_service

What should the service be named? The default value plucks out your repo name (without .git) from your location.

rails_deploy_service: "{{ rails_deploy_git_location | basename | replace('.git', '') }}"
rails_deploy_home

Where should the user's home directory be?

rails_deploy_home: '/var/local/{{ rails_deploy_service }}'
rails_deploy_src

Where should the git repository be cloned to?

rails_deploy_src: '{{ rails_deploy_home }}/{{ rails_deploy_nginx_domains[0] }}/{{ rails_deploy_service }}/src'
rails_deploy_system_env

What should the system environment be set to?

rails_deploy_system_env: 'production'
rails_deploy_bundle_without

A list of environments to skip, it will remove your system env from the list during the deploy phase automatically.

rails_deploy_bundle_without: ['development', 'staging', 'production', 'test']
rails_deploy_service_timeout

Timeout for service and worker startup, in seconds

rails_deploy_service_timeout: '60'

---- Backend ----

rails_deploy_backend

Which backend type are you using? 'unicorn' and 'puma' are supported so far. You can also disable the backend by setting it to False in case you use passenger.

rails_deploy_backend: 'unicorn'
rails_deploy_backend_bind

What do you want to listen on? You can choose a tcp addr:port or unix socket. Do not bother to include the socket/tcp prefix, that will be handled for you.

rails_deploy_backend_bind: '{{ rails_deploy_service_socket }}'
rails_deploy_backend_state

What state should the backend be in?

rails_deploy_backend_state: 'started'
rails_deploy_backend_enabled

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_backend_enabled: True
rails_deploy_backend_always_restart

When set to true the backend will always restart instead of reload but it will only restart if the repo changed. This makes for hands free deployment at the cost of a few seconds+ of downtime per deploy.

You may want to combine this with force migrate in which case all you ever have to do is push your app and you don't have to wonder whether or not the code you're changing requires a full restart or not.

rails_deploy_backend_always_restart: False

---- Database ----

rails_deploy_database_create

Should the database be created by default?

rails_deploy_database_create: True
rails_deploy_database_prepare

Should the database get a db:schema:load and db:seed in an idempotent way?

rails_deploy_database_prepare: True
rails_deploy_database_migrate

Should the database get automatically migrated in an idempotent way?

rails_deploy_database_migrate: True
rails_deploy_database_force_migrate

Should the database get migrated no matter what? You may want to do this as a 1 off command with --extra-vars in case your schema file's checksum somehow gets out of sync and you need to migrate.

Another use case would be if you have automatic migrations turned off and you just deployed but now you want to do an isolated migration.

rails_deploy_database_force_migrate: False
rails_deploy_database_adapter

It supports 'postgresql' or 'mysql' for now.

rails_deploy_database_adapter: 'postgresql'
rails_deploy_postgresql_cluster

Make sure this matches your pg cluster info, ignore it if you use mysql.

rails_deploy_postgresql_cluster: '9.1/main'
rails_deploy_database_host

Where is your database hosted?

rails_deploy_database_host: '{{ ansible_fqdn }}'
rails_deploy_database_port

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_database_port: '5432'  # 3306 for mysql
rails_deploy_postgresql_super_username

What are your super user names?

rails_deploy_postgresql_super_username: 'postgres'
rails_deploy_mysql_super_username

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_mysql_super_username: 'mysql'
rails_deploy_database_user_role_attrs

What are the roles that should be applied to the app postgres user? See https://docs.ansible.com/postgresql_user_module.html for available options

rails_deploy_database_user_role_attrs: ''
rails_deploy_database_pool

What should some of the configuration options be set to?

rails_deploy_database_pool: 25
rails_deploy_database_timeout

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_database_timeout: 5000

---- Background Worker ----

rails_deploy_worker_enabled

Enable background worker support. This will create an init.d service, register it with monit and add it into the deploy life cycle.

rails_deploy_worker_enabled: False
rails_deploy_worker_state

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_worker_state: 'started'
rails_deploy_worker

At the moment it only supports sidekiq but resque could happen in the future.

rails_deploy_worker: 'sidekiq'
rails_deploy_worker_host

Where is your worker hosted?

rails_deploy_worker_host: '{{ ansible_fqdn }}'
rails_deploy_worker_port

FIXME(yaml4rst): Describe what this variable is doing.

rails_deploy_worker_port: '6379'
rails_deploy_worker_url

How should the connection be made to the redis server? If your server has a password you must add it here. Example: redis://:mypassword@{{ rails_deploy_worker_host }}:{{ rails_deploy_worker_port }}/0'

rails_deploy_worker_url: 'redis://{{ rails_deploy_worker_host }}:{{ rails_deploy_worker_port }}/0'

---- Commands ----

Execute shell commands at various points in the deploy life cycle. They are executed in the context of the root directory of your app and are also only ran when your repo has changed.

rails_deploy_pre_migrate_shell_commands

Shell commands to run before migration They will still run even if you have migrations turned off.

rails_deploy_pre_migrate_shell_commands: []
rails_deploy_post_migrate_shell_commands

Shell commands to run after migration They will still run even if you have migrations turned off.

rails_deploy_post_migrate_shell_commands:
  - 'bundle exec rake assets:precompile'
  - 'rm -rf tmp/cache'
rails_deploy_post_restart_shell_commands

Shell commands to run after the backend was started Let's say you wanted to execute whenever after your app reloads/restarts:

  • 'bundle exec whenever --clear-crontab {{ rails_deploy_service }}'

This is the absolute last thing that happens during a deploy. They will still run even if you have no backend.

rails_deploy_post_restart_shell_commands: []

---- Services ----

Add 1 or more custom services related to the app, they will have their state changed on each deploy. The changed_state is the action to take when the state of the git repo has changed.

rails_deploy_extra_services

They will get restarted/reloaded at the end of the deploy. Everything is optional except for the name.

 rails_deploy_extra_services: []


 #rails_deploy_extra_services:

- name: ''
  changed_state: 'reloaded'
  state: 'started'
  enabled: True

---- Log rotation ----

rails_deploy_logrotate_interval

How often should they be rotated? Accepted values: hourly, daily, weekly, monthly and yearly

rails_deploy_logrotate_interval: 'weekly'
rails_deploy_logrotate_rotation

Log files are rotated N times before being removed.

rails_deploy_logrotate_rotation: 24

---- Environment settings ----

Both the default and custom environment variables will get added together and be written to /etc/default/{{ rails_deploy_service }}.

rails_deploy_default_env

Default environment variables added to each app.

rails_deploy_default_env:
  RAILS_ENV: '{{ rails_deploy_system_env }}'

  DATABASE_URL: "{{ rails_deploy_database_adapter }}://{{ rails_deploy_service }}:{{ rails_deploy_database_user_password }}@{{ rails_deploy_database_host }}:{{ rails_deploy_database_port }}/{{ rails_deploy_service }}_{{ rails_deploy_system_env }}?pool={{ rails_deploy_database_pool }}&timeout={{ rails_deploy_database_timeout }}"

  # Application variables, they are used in the backend/worker variables below.
  SERVICE: '{{ rails_deploy_service }}'
  LOG_FILE: '{{ rails_deploy_log }}/{{ rails_deploy_service }}.log'
  RUN_STATE_PATH: '{{ rails_deploy_run }}'

  # Backend variables, they work in conjunction with the example
  # server configs. Check docs/examples/rails/config/puma.rb|unicorn.rb.
  LISTEN_ON: '{{ rails_deploy_backend_bind }}'

  THREADS_MIN: 0
  THREADS_MAX: 16
  WORKERS: 2

  # Background worker variables. Check docs/examples/rails/config/sidekiq.yml
  # and initializers/sidekiq.rb on how use this in your application.
  BACKGROUND_URL: '{{ rails_deploy_worker_url }}'
  BACKGROUND_THREADS: '{{ rails_deploy_database_pool }}'
rails_deploy_env

Custom environment variables added to a specific app.

rails_deploy_env: {}

---- Nginx settings ----

rails_deploy_nginx_server_enabled

Should nginx be enabled?

rails_deploy_nginx_server_enabled: True
rails_deploy_nginx_domains

What domain names should the app be associated to?

rails_deploy_nginx_domains: ['{{ ansible_fqdn }}']

If you want to edit any of the values for nginx below, you will need to copy the whole variable over even if you need to edit 1 value.

Consult the debops.nginx documentation if needed.

rails_deploy_nginx_upstream

Configure the upstream.

rails_deploy_nginx_upstream:
  enabled: '{{ rails_deploy_nginx_server_enabled }}'
  name: '{{ rails_deploy_service }}'
  server: "{{ 'unix:' + rails_deploy_backend_bind if not ':' in rails_deploy_backend_bind else rails_deploy_backend_bind }}"
rails_deploy_nginx_server

Configure the sites-available.

rails_deploy_nginx_server:
  enabled: '{{ rails_deploy_nginx_server_enabled }}'
  name: '{{ rails_deploy_nginx_domains }}'
  root: '{{ rails_deploy_src }}/public'
  webroot_create: False

  error_pages:
    '404': '/404.html'
    '422': '/422.html'
    '500': '/500.html'
    '502 503 504': '/502.html'

  location_list:
    - pattern: '/'
      options: |
        try_files $uri $uri/index.html $uri.html @{{ rails_deploy_nginx_upstream.name }};
    - pattern: '~ ^/(assets|system)/'
      options: |
        gzip_static on;
        expires max;
        add_header Cache-Control public;
        add_header Last-Modified "";
        add_header ETag "";
    - pattern: '@{{ rails_deploy_nginx_upstream.name }}'
      options: |
        gzip off;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_redirect     off;
        proxy_pass         http://{{ rails_deploy_nginx_upstream.name }};

Usage examples:

---- Bare minimum ----

#rails_deploy_git_location: 'git@github.com:yourname/mycoolapp.git'

---- Use a custom service name ----

#rails_deploy_service: 'myawesomeapp'

---- Use a tag or branch instead of master ----

#rails_deploy_git_version: 'v0.1.0'

---- Use mysql instead of postgres ----

#rails_deploy_database_adapter: 'mysql'

---- Use puma instead of unicorn ----

#rails_deploy_backend: 'puma'

---- Enable the background worker ----

#rails_deploy_worker_enable: True

---- Listen on a tcp port instead of a socket ----

#rails_deploy_backend_bind: '{{ ansible_fqdn }}:8080'

---- Deploy to staging instead of production ----

#rails_deploy_system_env: 'staging'