1 minute read

Yesterday I created my first Ansible role, a role to manage, configure and install Ghost, the blogging platform.

Why? Because I checked the others and they weren’t atomic, I wanted a role managing only Ghost, not the database, installing node, or configuring NGINX all in one.

You can install it this way.

> ansible-galaxy install javaguirre.ghost

I prefer to use roles doing only one thing right, because It’s easier to configure, to replace and maintain and If I have a history of success with a very good NGINX role I don’t want to gamble with a new, different one.

In case you want to give it a try, you can override this variables for now, If you need others, you can use Github to create an issue and I will answer as soon as I can! :-)

---

# Roles
ghost_enabled: true
ghost_remove: false

# Ghost service
ghost_production: false
ghost_version: '0.6.3'
ghost_zip_url: "https://ghost.org/zip/ghost-latest.zip"
ghost_user: ghost
ghost_install_dir: /home/ghost

# Ghost config.js
# Production
ghost_production_url: 'http://example.com'
ghost_production_host: '127.0.0.1'
ghost_production_port: '2368'
ghost_production_mail:
  transport: 'SMTP'
  options:
    service: 'Mailgun'
    auth:
      user: ''
      pass: ''
ghost_production_database:
  client: 'sqlite3'
  connection:
    filename: "/content/data/ghost.db"
    debug: false

# Development
ghost_development_url: 'http://example.com'
ghost_development_host: '127.0.0.1'
ghost_development_port: '2368'
ghost_development_mail:
  transport: 'SMTP'
  options:
    service: 'Mailgun'
    auth:
      user: ''
      pass: ''
ghost_development_database:
  client: 'sqlite3'
  connection:
    filename: "/content/data/ghost-dev.db"
    debug: false

Here you have an example using this role. The main site.yml could look like:

---
- name: Javaguirre.net
  hosts: all
  remote_user: vagrant

  vars_files:
    - vars/nginx.yml
    - vars/ghost.yml

  roles:
    - { role: nodejs, sudo: true }
    - { role: nginx, sudo: true }
    - ghost

My NGINX(vars/nginx.yml) configuration would look like.

---

nginx_events_params:
  - worker_connections 512

nginx_http_params:
  - sendfile "on"
  - tcp_nopush "on"
  - tcp_nodelay "on"
  - keepalive_timeout "65"
  - access_log "/var/log/nginx/access.log"
  - error_log "/var/log/nginx/error.log"

nginx_sites:
  ghost:
    - listen 0.0.0.0:80
    - server_name javaguirre.net

    - access_log /var/log/nginx/javaguirre.net.log
    - error_log /var/log/nginx/javaguirre.net.error.log

    - client_max_body_size 2m

    - location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;

        proxy_pass http://127.0.0.1:2368;
        proxy_redirect off;
      }

And my vars/ghost.yml.

---

ghost_user: vagrant
ghost_install_dir: /home/vagrant/ghost

ghost_production: true
ghost_production_url: 'http://javaguirre.net'
ghost_production_host: '127.0.0.1'

Any questions? Shoot! :-)