start ansible role to deploy dev environment
This commit is contained in:
parent
5e37728f66
commit
12c85d6234
|
@ -0,0 +1,3 @@
|
||||||
|
### tacticalrmm ansible WIP
|
||||||
|
|
||||||
|
ansible role to setup a Debian 11 VM for tacticalrmm local development
|
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
user: "tactical"
|
||||||
|
python_ver: "3.10.4"
|
||||||
|
backend_repo: "https://github.com/amidaware/tacticalrmm.git"
|
||||||
|
frontend_repo: "https://github.com/amidaware/tacticalrmm-web.git"
|
||||||
|
scripts_repo: "https://github.com/amidaware/community-scripts.git"
|
||||||
|
backend_dir: "/opt/trmm"
|
||||||
|
frontend_dir: "/opt/trmm-web"
|
||||||
|
scripts_dir: "/opt/community-scripts"
|
||||||
|
trmm_dir: "/opt/trmm/api/tacticalrmm/tacticalrmm"
|
||||||
|
settings_file: "{{ trmm_dir }}/settings.py"
|
||||||
|
local_settings_file: "{{ trmm_dir }}/local_settings.py"
|
||||||
|
|
||||||
|
base_pkgs:
|
||||||
|
- build-essential
|
||||||
|
- curl
|
||||||
|
- wget
|
||||||
|
- dirmngr
|
||||||
|
- gnupg
|
||||||
|
- openssl
|
||||||
|
- gcc
|
||||||
|
- g++
|
||||||
|
- make
|
||||||
|
- ca-certificates
|
||||||
|
- redis
|
||||||
|
- git
|
||||||
|
|
||||||
|
python_pkgs:
|
||||||
|
- zlib1g-dev
|
||||||
|
- libncurses5-dev
|
||||||
|
- libgdbm-dev
|
||||||
|
- libnss3-dev
|
||||||
|
- libssl-dev
|
||||||
|
- libreadline-dev
|
||||||
|
- libffi-dev
|
||||||
|
- libsqlite3-dev
|
||||||
|
- libbz2-dev
|
|
@ -0,0 +1,25 @@
|
||||||
|
worker_rlimit_nofile 1000000;
|
||||||
|
user www-data;
|
||||||
|
worker_processes auto;
|
||||||
|
pid /run/nginx.pid;
|
||||||
|
include /etc/nginx/modules-enabled/*.conf;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 2048;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
server_names_hash_bucket_size 64;
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
access_log /var/log/nginx/access.log;
|
||||||
|
error_log /var/log/nginx/error.log;
|
||||||
|
gzip on;
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
include /etc/nginx/sites-enabled/*;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
" This file loads the default vim options at the beginning and prevents
|
||||||
|
" that they are being loaded again later. All other options that will be set,
|
||||||
|
" are added, or overwrite the default settings. Add as many options as you
|
||||||
|
" whish at the end of this file.
|
||||||
|
|
||||||
|
" Load the defaults
|
||||||
|
source $VIMRUNTIME/defaults.vim
|
||||||
|
|
||||||
|
" Prevent the defaults from being loaded again later, if the user doesn't
|
||||||
|
" have a local vimrc (~/.vimrc)
|
||||||
|
let skip_defaults_vim = 1
|
||||||
|
|
||||||
|
|
||||||
|
" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
|
||||||
|
" Add as many options as you whish
|
||||||
|
|
||||||
|
" Set the mouse mode to 'r'
|
||||||
|
if has('mouse')
|
||||||
|
set mouse=r
|
||||||
|
endif
|
|
@ -0,0 +1,253 @@
|
||||||
|
---
|
||||||
|
- name: set mouse mode for vim
|
||||||
|
tags: vim
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: vimrc.local
|
||||||
|
dest: /etc/vim/vimrc.local
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: install base packages
|
||||||
|
tags: base
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
with_items:
|
||||||
|
- "{{ base_pkgs }}"
|
||||||
|
|
||||||
|
- name: install python prereqs
|
||||||
|
tags: python
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
with_items:
|
||||||
|
- "{{ python_pkgs }}"
|
||||||
|
|
||||||
|
- name: get cpu core count
|
||||||
|
tags: python
|
||||||
|
ansible.builtin.command: nproc
|
||||||
|
register: numprocs
|
||||||
|
|
||||||
|
- name: Create python tmpdir
|
||||||
|
tags: python
|
||||||
|
ansible.builtin.tempfile:
|
||||||
|
state: directory
|
||||||
|
suffix: python
|
||||||
|
register: python_tmp
|
||||||
|
|
||||||
|
- name: download and extract python
|
||||||
|
tags: python
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "https://www.python.org/ftp/python/{{ python_ver }}/Python-{{ python_ver }}.tgz"
|
||||||
|
dest: "{{ python_tmp.path }}"
|
||||||
|
remote_src: yes
|
||||||
|
|
||||||
|
- name: compile python
|
||||||
|
tags: python
|
||||||
|
ansible.builtin.shell:
|
||||||
|
chdir: "{{ python_tmp.path }}/Python-{{ python_ver }}"
|
||||||
|
cmd: |
|
||||||
|
./configure --enable-optimizations
|
||||||
|
make -j {{ numprocs.stdout }}
|
||||||
|
|
||||||
|
- name: alt install python
|
||||||
|
tags: python
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.shell:
|
||||||
|
chdir: "{{ python_tmp.path }}/Python-{{ python_ver }}"
|
||||||
|
cmd: |
|
||||||
|
make altinstall
|
||||||
|
|
||||||
|
- name: install nginx
|
||||||
|
tags: nginx
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: nginx
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: set nginx default conf
|
||||||
|
tags: nginx
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: nginx-default.conf
|
||||||
|
dest: /etc/nginx/nginx.conf
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: ensure nginx enabled and restarted
|
||||||
|
tags: nginx
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: nginx
|
||||||
|
enabled: yes
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: create postgres repo
|
||||||
|
tags: postgres
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "deb http://apt.postgresql.org/pub/repos/apt bullseye-pgdg main"
|
||||||
|
dest: /etc/apt/sources.list.d/pgdg.list
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0440"
|
||||||
|
|
||||||
|
- name: import postgres repo signing key
|
||||||
|
tags: postgres
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt_key:
|
||||||
|
url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: install postgresql
|
||||||
|
tags: postgres
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: postgresql-14
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: ensure postgres enabled and started
|
||||||
|
tags: postgres
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: postgresql
|
||||||
|
enabled: yes
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: setup database
|
||||||
|
tags: postgres
|
||||||
|
become: yes
|
||||||
|
become_user: postgres
|
||||||
|
ansible.builtin.shell:
|
||||||
|
cmd: |
|
||||||
|
psql -c "CREATE DATABASE tacticalrmm"
|
||||||
|
psql -c "CREATE USER {{ db_user }} WITH PASSWORD '{{ db_passwd }}'"
|
||||||
|
psql -c "ALTER ROLE {{ db_user }} SET client_encoding TO 'utf8'"
|
||||||
|
psql -c "ALTER ROLE {{ db_user }} SET default_transaction_isolation TO 'read committed'"
|
||||||
|
psql -c "ALTER ROLE {{ db_user }} SET timezone TO 'UTC'"
|
||||||
|
psql -c "ALTER ROLE {{ db_user }} CREATEDB"
|
||||||
|
psql -c "GRANT ALL PRIVILEGES ON DATABASE tacticalrmm TO {{ db_user }}"
|
||||||
|
|
||||||
|
- name: create repo dirs
|
||||||
|
become: yes
|
||||||
|
tags: git
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ user }}"
|
||||||
|
group: "{{ user }}"
|
||||||
|
mode: "0755"
|
||||||
|
with_items:
|
||||||
|
- "{{ backend_dir }}"
|
||||||
|
- "{{ frontend_dir }}"
|
||||||
|
- "{{ scripts_dir }}"
|
||||||
|
|
||||||
|
- name: git clone repos
|
||||||
|
tags: git
|
||||||
|
ansible.builtin.git:
|
||||||
|
repo: "{{ item.repo }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
version: "{{ item.version }}"
|
||||||
|
with_items:
|
||||||
|
- {
|
||||||
|
repo: "{{ backend_repo }}",
|
||||||
|
dest: "{{ backend_dir }}",
|
||||||
|
version: develop,
|
||||||
|
}
|
||||||
|
- {
|
||||||
|
repo: "{{ frontend_repo }}",
|
||||||
|
dest: "{{ frontend_dir }}",
|
||||||
|
version: develop,
|
||||||
|
}
|
||||||
|
- { repo: "{{ scripts_repo }}", dest: "{{ scripts_dir }}", version: main }
|
||||||
|
|
||||||
|
- name: get nats_server_ver
|
||||||
|
tags: nats
|
||||||
|
ansible.builtin.shell: grep "^NATS_SERVER_VER" {{ settings_file }} | awk -F'[= "]' '{print $5}'
|
||||||
|
register: nats_server_ver
|
||||||
|
|
||||||
|
- name: Create nats tmpdir
|
||||||
|
tags: nats
|
||||||
|
ansible.builtin.tempfile:
|
||||||
|
state: directory
|
||||||
|
suffix: nats
|
||||||
|
register: nats_tmp
|
||||||
|
|
||||||
|
- name: download and extract nats
|
||||||
|
tags: nats
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "https://github.com/nats-io/nats-server/releases/download/v{{ nats_server_ver.stdout }}/nats-server-v{{ nats_server_ver.stdout }}-linux-amd64.tar.gz"
|
||||||
|
dest: "{{ nats_tmp.path }}"
|
||||||
|
remote_src: yes
|
||||||
|
|
||||||
|
- name: install nats
|
||||||
|
tags: nats
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.copy:
|
||||||
|
remote_src: yes
|
||||||
|
src: "{{ nats_tmp.path }}/nats-server-v{{ nats_server_ver.stdout }}-linux-amd64/nats-server"
|
||||||
|
dest: /usr/local/bin/nats-server
|
||||||
|
owner: "{{ user }}"
|
||||||
|
group: "{{ user }}"
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Create nodejs tmpdir
|
||||||
|
tags: nodejs
|
||||||
|
ansible.builtin.tempfile:
|
||||||
|
state: directory
|
||||||
|
suffix: nodejs
|
||||||
|
register: nodejs_tmp
|
||||||
|
|
||||||
|
- name: download nodejs setup
|
||||||
|
tags: nodejs
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: https://deb.nodesource.com/setup_16.x
|
||||||
|
dest: "{{ nodejs_tmp.path }}/setup_node.sh"
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: run node setup script
|
||||||
|
tags: nodejs
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "{{ nodejs_tmp.path }}/setup_node.sh"
|
||||||
|
|
||||||
|
- name: install nodejs
|
||||||
|
tags: nodejs
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: nodejs
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: update npm
|
||||||
|
tags: nodejs
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.shell:
|
||||||
|
cmd: npm install -g npm
|
||||||
|
|
||||||
|
- name: deploy django local settings
|
||||||
|
tags: django
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: local_settings.j2
|
||||||
|
dest: "{{ local_settings_file }}"
|
||||||
|
mode: "0644"
|
||||||
|
owner: "{{ user }}"
|
||||||
|
group: "{{ user }}"
|
||||||
|
|
||||||
|
- name: remove tempdirs
|
||||||
|
tags: cleanup
|
||||||
|
become: yes
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
with_items:
|
||||||
|
- "{{ nats_tmp.path }}"
|
||||||
|
- "{{ python_tmp.path }}"
|
||||||
|
- "{{ nodejs_tmp.path }}"
|
|
@ -0,0 +1,19 @@
|
||||||
|
SECRET_KEY = "{{ django_secret }}"
|
||||||
|
DEBUG = True
|
||||||
|
ALLOWED_HOSTS = ['{{ api }}']
|
||||||
|
ADMIN_URL = "admin/"
|
||||||
|
CORS_ORIGIN_WHITELIST = [
|
||||||
|
"https://{{ rmm }}"
|
||||||
|
]
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
|
'NAME': 'tacticalrmm',
|
||||||
|
'USER': '{{ db_user }}',
|
||||||
|
'PASSWORD': '{{ db_passwd }}',
|
||||||
|
'HOST': 'localhost',
|
||||||
|
'PORT': '5432',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
REDIS_HOST = "localhost"
|
||||||
|
ADMIN_ENABLED = True
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
api: 'api.example.com'
|
||||||
|
rmm: 'rmm.example.com'
|
||||||
|
mesh: 'mesh.example.com'
|
||||||
|
github_username: 'changeme'
|
||||||
|
github_email: 'changeme@example.com'
|
||||||
|
mesh_site: 'changeme'
|
||||||
|
mesh_user: 'changeme'
|
||||||
|
mesh_token: 'changeme'
|
||||||
|
db_user: 'changeme'
|
||||||
|
db_passwd: 'changeme'
|
||||||
|
django_secret: 'changeme'
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- hosts: "{{ target }}"
|
||||||
|
vars:
|
||||||
|
ansible_user: tactical
|
||||||
|
roles:
|
||||||
|
- trmm_dev
|
Loading…
Reference in New Issue