Add Next.js vhost role
This commit is contained in:
parent
89714aeeec
commit
a906fe11bc
27
roles/vhosts/nextjs/defaults/main.yml
Normal file
27
roles/vhosts/nextjs/defaults/main.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
nextjs_repo_url: "https://github.com/cloud-neutral/portal.onwalk.net.git"
|
||||||
|
nextjs_repo_version: "main"
|
||||||
|
nextjs_app_dir: "/var/www/dashboard"
|
||||||
|
|
||||||
|
nextjs_run_mode: "dev" # dev or prod
|
||||||
|
nextjs_node_env: "{{ 'production' if nextjs_run_mode == 'prod' else 'development' }}"
|
||||||
|
nextjs_port: 3000
|
||||||
|
|
||||||
|
nextjs_exec_start_dev: "yarn dev"
|
||||||
|
nextjs_exec_start_prod: "yarn start"
|
||||||
|
nextjs_exec_start: "{{ nextjs_exec_start_prod if nextjs_run_mode == 'prod' else nextjs_exec_start_dev }}"
|
||||||
|
|
||||||
|
nextjs_service_name: "next"
|
||||||
|
nextjs_service_description: "Next.js (XControl homepage - CN)"
|
||||||
|
nextjs_service_user: "root"
|
||||||
|
nextjs_service_group: "root"
|
||||||
|
|
||||||
|
nextjs_restart_policy: "always"
|
||||||
|
nextjs_restart_sec: 5
|
||||||
|
nextjs_limit_nofile: 65535
|
||||||
|
|
||||||
|
nextjs_no_new_privileges: true
|
||||||
|
nextjs_private_tmp: true
|
||||||
|
|
||||||
|
nextjs_install_deps: true
|
||||||
|
nextjs_build: "{{ nextjs_run_mode == 'prod' }}"
|
||||||
9
roles/vhosts/nextjs/handlers/main.yml
Normal file
9
roles/vhosts/nextjs/handlers/main.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
- name: Reload systemd daemon
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
daemon_reload: true
|
||||||
|
|
||||||
|
- name: Restart nextjs service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: "{{ nextjs_service_name }}"
|
||||||
|
state: restarted
|
||||||
3
roles/vhosts/nextjs/meta/main.yml
Normal file
3
roles/vhosts/nextjs/meta/main.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- role: roles/vhosts/nodejs
|
||||||
51
roles/vhosts/nextjs/tasks/main.yml
Normal file
51
roles/vhosts/nextjs/tasks/main.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure git is installed
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: git
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Ensure application directory exists
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ nextjs_app_dir }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ nextjs_service_user }}"
|
||||||
|
group: "{{ nextjs_service_group }}"
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Clone Next.js repository
|
||||||
|
ansible.builtin.git:
|
||||||
|
repo: "{{ nextjs_repo_url }}"
|
||||||
|
dest: "{{ nextjs_app_dir }}"
|
||||||
|
version: "{{ nextjs_repo_version }}"
|
||||||
|
update: true
|
||||||
|
notify: Restart nextjs service
|
||||||
|
|
||||||
|
- name: Install Next.js dependencies
|
||||||
|
ansible.builtin.command: yarn install
|
||||||
|
args:
|
||||||
|
chdir: "{{ nextjs_app_dir }}"
|
||||||
|
when: nextjs_install_deps | bool
|
||||||
|
notify: Restart nextjs service
|
||||||
|
|
||||||
|
- name: Build Next.js application
|
||||||
|
ansible.builtin.command: yarn build
|
||||||
|
args:
|
||||||
|
chdir: "{{ nextjs_app_dir }}"
|
||||||
|
when: nextjs_build | bool
|
||||||
|
notify: Restart nextjs service
|
||||||
|
|
||||||
|
- name: Install Next.js systemd service
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: nextjs.service.j2
|
||||||
|
dest: "/etc/systemd/system/{{ nextjs_service_name }}.service"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: '0644'
|
||||||
|
notify: Reload systemd daemon
|
||||||
|
|
||||||
|
- name: Enable and start Next.js service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: "{{ nextjs_service_name }}"
|
||||||
|
enabled: true
|
||||||
|
state: started
|
||||||
25
roles/vhosts/nextjs/templates/nextjs.service.j2
Normal file
25
roles/vhosts/nextjs/templates/nextjs.service.j2
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[Unit]
|
||||||
|
Description={{ nextjs_service_description }}
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory={{ nextjs_app_dir }}
|
||||||
|
|
||||||
|
Environment=NODE_ENV={{ nextjs_node_env }}
|
||||||
|
Environment=PORT={{ nextjs_port }}
|
||||||
|
|
||||||
|
ExecStart={{ nextjs_exec_start }}
|
||||||
|
|
||||||
|
Restart={{ nextjs_restart_policy }}
|
||||||
|
RestartSec={{ nextjs_restart_sec }}
|
||||||
|
LimitNOFILE={{ nextjs_limit_nofile }}
|
||||||
|
|
||||||
|
User={{ nextjs_service_user }}
|
||||||
|
Group={{ nextjs_service_group }}
|
||||||
|
|
||||||
|
NoNewPrivileges={{ nextjs_no_new_privileges | lower }}
|
||||||
|
PrivateTmp={{ nextjs_private_tmp | lower }}
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
5
setup-nextjs.yml
Normal file
5
setup-nextjs.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: Setup Next.js
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/nextjs/
|
||||||
Loading…
Reference in New Issue
Block a user