This guide provides a full Ansible playbook to install NSQ with distro-aware package handling and baseline service configuration for Debian 10+, Ubuntu LTS, and RHEL 9+ compatible systems.
- name: Install NSQ
hosts: nsq
become: true
vars:
nsq_version: "1.3.0"
nsq_arch: "amd64"
nsq_download_url: "https://github.com/nsqio/nsq/releases/download/v{{ nsq_version }}/nsq-{{ nsq_version }}.linux-{{ nsq_arch }}.go1.20.tar.gz"
nsq_install_dir: /opt/nsq
nsq_user: nsq
nsq_group: nsq
tasks:
- name: Download NSQ
get_url:
url: "{{ nsq_download_url }}"
dest: /tmp/nsq-{{ nsq_version }}.tar.gz
mode: '0644'
- name: Create NSQ group
group:
name: "{{ nsq_group }}"
state: present
- name: Create NSQ user
user:
name: "{{ nsq_user }}"
group: "{{ nsq_group }}"
shell: /usr/sbin/nologin
system: yes
create_home: no
- name: Extract NSQ
unarchive:
src: /tmp/nsq-{{ nsq_version }}.tar.gz
dest: "{{ nsq_install_dir }}"
remote_src: yes
owner: "{{ nsq_user }}"
group: "{{ nsq_group }}"
extra_opts: [--strip-components=1]
- name: Create data directory
file:
path: "{{ nsq_install_dir }}/data"
state: directory
owner: "{{ nsq_user }}"
group: "{{ nsq_group }}"
mode: '0755'
- name: Create systemd service for nsqlookupd
copy:
dest: /etc/systemd/system/nsqlookupd.service
mode: '0644'
content: |
[Unit]
Description=NSQ Lookup Daemon
After=network.target
[Service]
Type=simple
User={{ nsq_user }}
Group={{ nsq_group }}
ExecStart={{ nsq_install_dir }}/bin/nsqlookupd
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Create systemd service for nsqd
copy:
dest: /etc/systemd/system/nsqd.service
mode: '0644'
content: |
[Unit]
Description=NSQ Daemon
After=network.target nsqlookupd.service
[Service]
Type=simple
User={{ nsq_user }}
Group={{ nsq_group }}
ExecStart={{ nsq_install_dir }}/bin/nsqd --lookupd-tcp-address=127.0.0.1:4160 --data-dir={{ nsq_install_dir }}/data
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Create systemd service for nsqadmin
copy:
dest: /etc/systemd/system/nsqadmin.service
mode: '0644'
content: |
[Unit]
Description=NSQ Admin UI
After=network.target nsqlookupd.service
[Service]
Type=simple
User={{ nsq_user }}
Group={{ nsq_group }}
ExecStart={{ nsq_install_dir }}/bin/nsqadmin --lookupd-http-address=127.0.0.1:4161
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Reload systemd
systemd:
daemon_reload: yes
- name: Enable and start nsqlookupd
systemd:
name: nsqlookupd
state: started
enabled: yes
- name: Enable and start nsqd
systemd:
name: nsqd
state: started
enabled: yes
- name: Enable and start nsqadmin
systemd:
name: nsqadmin
state: started
enabled: yes
- name: Verify NSQ is running
command: "{{ nsq_install_dir }}/bin/nsqd --version"
register: nsq_version_check
changed_when: false
failed_when: false
- name: Show NSQ version
debug:
var: nsq_version_check.stdout
| Variable | Default | Description |
|---|---|---|
nsq_version |
1.3.0 |
NSQ version to install |
nsq_arch |
amd64 |
Architecture (amd64, arm64) |
nsq_install_dir |
/opt/nsq |
Installation directory |
nsq_user |
nsq |
System user for NSQ |
nsq_group |
nsq |
System group for NSQ |
Any questions?
Feel free to contact us. Find all contact information on our contact page.