Huginn is typically deployed from source or Docker, not from a standard apt/dnf package. This playbook uses a source-based deployment model for Debian/Ubuntu hosts.
- name: Deploy Huginn from source
hosts: huggin
become: true
vars:
huginn_user: huginn
huginn_dir: /home/huginn/huginn
huginn_repo: https://github.com/huginn/huginn.git
huginn_version: master
huginn_db_adapter: postgresql
huginn_db_host: 127.0.0.1
huginn_db_name: huginn
huginn_db_user: huginn
huginn_db_password: change-me
huginn_app_secret_token: change-me
huginn_domain: localhost:3000
tasks:
- name: Install required packages
ansible.builtin.apt:
name:
- git
- build-essential
- ruby-full
- libssl-dev
- libreadline-dev
- zlib1g-dev
- libpq-dev
state: present
update_cache: true
- name: Ensure Huginn service user exists
ansible.builtin.user:
name: "{{ huginn_user }}"
shell: /bin/bash
create_home: true
- name: Check whether Bundler is installed
ansible.builtin.command: gem list -i bundler
register: bundler_installed
changed_when: false
- name: Install Bundler gem
ansible.builtin.command: gem install bundler
when: bundler_installed.stdout != "true"
- name: Clone Huginn repository
ansible.builtin.git:
repo: "{{ huginn_repo }}"
dest: "{{ huginn_dir }}"
version: "{{ huginn_version }}"
become_user: "{{ huginn_user }}"
- name: Create .env from example if missing
ansible.builtin.command: cp .env.example .env
args:
chdir: "{{ huginn_dir }}"
creates: "{{ huginn_dir }}/.env"
become_user: "{{ huginn_user }}"
- name: Configure key Huginn environment values
ansible.builtin.lineinfile:
path: "{{ huginn_dir }}/.env"
regexp: "^{{ item.key }}="
line: "{{ item.key }}={{ item.value }}"
loop:
- { key: APP_SECRET_TOKEN, value: "{{ huginn_app_secret_token }}" }
- { key: DATABASE_ADAPTER, value: "{{ huginn_db_adapter }}" }
- { key: DATABASE_HOST, value: "{{ huginn_db_host }}" }
- { key: DATABASE_NAME, value: "{{ huginn_db_name }}" }
- { key: DATABASE_USERNAME, value: "{{ huginn_db_user }}" }
- { key: DATABASE_PASSWORD, value: "{{ huginn_db_password }}" }
- { key: DOMAIN, value: "{{ huginn_domain }}" }
become_user: "{{ huginn_user }}"
- name: Install Ruby dependencies
ansible.builtin.command: bundle install
args:
chdir: "{{ huginn_dir }}"
environment:
BUNDLE_WITHOUT: development:test
become_user: "{{ huginn_user }}"
- name: Run database migrations
ansible.builtin.command: bundle exec rake db:migrate
args:
chdir: "{{ huginn_dir }}"
become_user: "{{ huginn_user }}"
- name: Validate Huginn rake environment
ansible.builtin.command: bundle exec rake about
args:
chdir: "{{ huginn_dir }}"
become_user: "{{ huginn_user }}"
register: huginn_about
changed_when: false
- name: Show validation output
ansible.builtin.debug:
var: huginn_about.stdout_lines