This guide installs Directus as a systemd-managed Node.js service with PostgreSQL.
It supports Debian 10 to latest stable, Ubuntu LTS, and RHEL 9+ compatible systems.
- name: Install Directus
hosts: directus
become: true
vars:
directus_user: directus
directus_group: directus
directus_home: /opt/directus
directus_port: 8055
directus_db_name: directus
directus_db_user: directus
directus_db_password: change_me_now
tasks:
- name: Install dependencies on Debian/Ubuntu
apt:
name:
- nodejs
- npm
- postgresql
- postgresql-contrib
- curl
- git
state: present
update_cache: true
when: ansible_os_family == "Debian"
- name: Install dependencies on RHEL family
dnf:
name:
- nodejs
- npm
- postgresql-server
- postgresql
- curl
- git
state: present
when: ansible_os_family == "RedHat"
- name: Initialize PostgreSQL on RHEL family
command: postgresql-setup --initdb
args:
creates: /var/lib/pgsql/data/PG_VERSION
when: ansible_os_family == "RedHat"
- name: Enable and start PostgreSQL
service:
name: "{{ 'postgresql' if ansible_os_family == 'Debian' else 'postgresql' }}"
state: started
enabled: true
- name: Create Directus group
group:
name: "{{ directus_group }}"
state: present
- name: Create Directus user
user:
name: "{{ directus_user }}"
group: "{{ directus_group }}"
home: "{{ directus_home }}"
shell: /usr/sbin/nologin
create_home: true
- name: Create Directus application directory
file:
path: "{{ directus_home }}"
state: directory
owner: "{{ directus_user }}"
group: "{{ directus_group }}"
mode: "0755"
- name: Install Directus globally
npm:
name: directus
global: true
- name: Create Directus env file
copy:
dest: "{{ directus_home }}/.env"
owner: "{{ directus_user }}"
group: "{{ directus_group }}"
mode: "0640"
content: |
PORT={{ directus_port }}
DB_CLIENT=pg
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE={{ directus_db_name }}
DB_USER={{ directus_db_user }}
DB_PASSWORD={{ directus_db_password }}
- name: Create systemd service for Directus
copy:
dest: /etc/systemd/system/directus.service
mode: "0644"
content: |
[Unit]
Description=Directus Headless CMS
After=network.target postgresql.service
[Service]
User={{ directus_user }}
Group={{ directus_group }}
WorkingDirectory={{ directus_home }}
EnvironmentFile={{ directus_home }}/.env
ExecStart=/usr/bin/directus start
Restart=on-failure
[Install]
WantedBy=multi-user.target
- name: Reload systemd
systemd:
daemon_reload: true
- name: Enable and start Directus
service:
name: directus
state: started
enabled: true
We develop tailored automation solutions for:
Let’s discuss your requirements: office@linux-server-admin.com | Contact