You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

321 lines
9.6 KiB
YAML

2 weeks ago
---
- name: Instalar peertube sobre Debian 11
hosts: debian
remote_user: ansible
gather_facts: yes
become: false
vars:
#domain: "video.core"
domain: "video.56k.es"
email: "fanta@56k.es"
peertubeVersion: "v5.0.1"
peertubeURL: "https://github.com/Chocobozzz/PeerTube/releases/download/{{peertubeVersion}}/peertube-{{peertubeVersion}}.zip"
nodeURL: "https://deb.nodesource.com/setup_16.x"
sysUser: "peertube"
dbUser: "{{sysUser}}"
dbName: "{{sysUser}}_prod"
vars_prompt:
- name: "ansible_become_pass"
prompt: "Become password (sudo)"
private: yes
- name: "SystemUserPasswd"
prompt: "System Password for USER {{sysUser}}"
private: yes
- name: "dbPasswd"
prompt: "PSQL DB Password"
private: yes
tasks:
- name: "DIR - Comprobamos si existe el directory /var/www/{{sysUser}}"
stat:
path: /var/www/{{sysUser}}
register: peertubeDir
- name: "DIR - Muestra un mensaje cuando el directorio /var/www/{{sysUser}} ya existe"
debug:
msg: "/var/www/{{sysUser}} actualmente ya existe"
when: peertubeDir.stat.exists
- name: "DIR - /var/www/{{sysUser}} no existe y por tanto se crea el directorio"
become: true
file:
path: /var/www/{{sysUser}}
state: directory
mode: 0755
group: root
owner: root
when: peertubeDir.stat.exists == false
- name: "USER - Se crea el usuario {{sysUser}} con /var/www/{{sysUser}} como home"
become: true
ansible.builtin.user:
name: "{{sysUser}}"
comment: "{{sysUser}} User"
home: /var/www/{{sysUser}}
shell: /bin/bash
password: "{{ SystemUserPasswd | password_hash('sha512') }}"
- name: "USER - Cambiamos permisos de /var/www/{{sysUser}} con owner {{sysUser}}"
become: true
ansible.builtin.file:
path: /var/www/{{sysUser}}
owner: "{{sysUser}}"
group: "{{sysUser}}"
mode: '0755'
- name: "DIR - Se crea el directorio /var/www/{{sysUser}}/config"
become: true
file:
path: /var/www/{{sysUser}}/config
state: directory
mode: 0750
group: peertube
owner: peertube
- name: "DIR - Se crea el directorio /var/www/{{sysUser}}/storage"
become: true
file:
path: /var/www/{{sysUser}}/storage
state: directory
mode: 0755
group: peertube
owner: peertube
- name: "DIR - Se crea el directorio /var/www/{{sysUser}}/versions"
become: true
file:
path: /var/www/{{sysUser}}/versions
state: directory
mode: 0755
group: peertube
owner: peertube
- name: "DEPS - Instalamos dependencias"
become: true
ansible.builtin.package:
name:
- python3-apt
- git
- unzip
- curl
- bash
- sudo
- python-dev
- cron
- openssl
- libssl-dev
- libssl-doc
- postgresql
- postgresql-contrib
- postgresql-client
- libpq-dev
- python3-psycopg2
- certbot
- nginx
- openssl
- make
- wget
- ffmpeg
- redis-server
- gcc
- g++
- vim
- nano
state: latest
- name: "DB - PSQL - Drop db {{dbName}}"
ansible.builtin.command: "sudo -u postgres dropdb {{dbName}}"
become: yes
ignore_errors: yes
args:
- name: "DB - PSQL - Drop user {{dbUser}}"
ansible.builtin.command: "sudo -u postgres dropuser {{dbUser}}"
become: yes
ignore_errors: yes
args:
- name: "DB - PSQL - Create user {{dbUser}} with the password"
ansible.builtin.command: sudo -u postgres psql -c "create role {{dbUser}} with login password '{{dbPasswd}}';"
become: yes
ignore_errors: yes
args:
chdir: "/var/www/{{sysUser}}"
- name: "DB - PSQL - Create db {{dbName}}"
ansible.builtin.command: sudo -u postgres createdb -O {{dbUser}} -E UTF8 -T template0 {{dbName}}
become: yes
- name: "DB - PSQL - Create db extension pg_trgm"
ansible.builtin.command: sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" {{dbName}}
become: yes
- name: "DB - PSQL - Create db extension unaccent"
ansible.builtin.command: sudo -u postgres psql -c "CREATE EXTENSION unaccent;" {{dbName}}
become: yes
- name: "ZIP - Download peertube zip to /tmp/peertube.zip"
become: yes
ansible.builtin.get_url:
url: "{{peertubeURL}}"
dest: "/tmp/peertube.zip"
mode: '0440'
- name: "ZIP - Unzip peertube.zip to /var/www/{{sysUser}}/versions/"
become: yes
ansible.builtin.unarchive:
src: "/tmp/peertube.zip"
dest: "/var/www/{{sysUser}}/versions"
remote_src: yes
- name: "DIR - Cambiamos Owner a peertube de los archivos descomprimidos"
become: yes
file:
path: "/var/www/{{sysUser}}/versions"
owner: peertube
recurse: true
group: peertube
- name: "DIR - Creamos un enlace simbolico peertube-latest apuntando a la versión"
become: yes
ansible.builtin.file:
src: "/var/www/{{sysUser}}/versions/peertube-{{peertubeVersion}}"
dest: "/var/www/{{sysUser}}/peertube-latest"
owner: peertube
group: peertube
state: link
- name: "DIR - Cambiamos Owner a peertube del directorio enlace simbolico"
become: true
ansible.builtin.file:
path: "/var/www/{{sysUser}}/peertube-latest"
owner: peertube
group: peertube
- name: "NODE - Descargamos script para instalar repositorio de nodejs"
become: yes
ansible.builtin.get_url:
url: "{{nodeURL}}"
dest: "/tmp/setup.x"
mode: '0777'
- name: "NODE - Ejecutamos script para instalar repositorio de nodejs"
ansible.builtin.command: "bash /tmp/setup.x"
become: yes
- name: "NODE - Instalamos nodejs"
become: true
ansible.builtin.package:
name:
- nodejs
state: latest
- name: "NODE - Instalamos yarn desde npm"
ansible.builtin.command: "npm install --global yarn"
become: yes
- name: "NODE - Instalamos peertube con yarn"
become: yes
ansible.builtin.command: "sudo -H -u {{sysUser}} yarn install --production --pure-lockfile"
args:
chdir: "/var/www/{{sysUser}}/{{sysUser}}-latest"
- name: "CONFIG - Copiamos configuracion default.yaml"
become: yes
ansible.builtin.command: "sudo -u peertube cp /var/www/peertube/peertube-latest/config/default.yaml /var/www/peertube/config/default.yaml"
- name: "CONFIG - Copiamos configuracion production.yaml"
become: yes
ansible.builtin.command: "sudo -u peertube cp /var/www/peertube/peertube-latest/config/production.yaml.example /var/www/peertube/config/production.yaml"
- name: "CONFIG - Cambiamos en production.yaml el dominio example.com por {{domain}}"
become: yes
ansible.builtin.command: "sed -i 's/example.com/{{domain}}/g' /var/www/peertube/config/production.yaml"
- name: "CONFIG - Generamos clave con openssl rand -hex 32"
become: yes
ansible.builtin.command: "openssl rand -hex 32"
register: peertubeOpenSSLKey
- name: "CONFIG - Mostramos la key {{peertubeOpenSSLKey.stdout}}"
debug:
msg: "{{peertubeOpenSSLKey.stdout}}"
- name: "CONFIG - Metemos en production.yaml la key que hemos generado"
become: yes
ansible.builtin.command: "sed -i \"s/peertube: ''/peertube: '{{peertubeOpenSSLKey.stdout}}'/g\" /var/www/peertube/config/production.yaml"
- name: "CONFIG - Metemos en production.yaml la password de la base de datos"
become: yes
ansible.builtin.command: "sed -i \"s/password: 'peertube'/password: '{{dbPasswd}}'/g\" /var/www/peertube/config/production.yaml"
- name: "CONFIG - Copiamos nginx config"
become: yes
ansible.builtin.command: "sudo cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube"
- name: "CONFIG - Cambiamos dominio en nginx config"
become: yes
ansible.builtin.command: "sed -i \"s/${WEBSERVER_HOST}/{{domain}}/g\" /etc/nginx/sites-available/peertube"
- name: "CONFIG - Cambiamos host en nginx config"
become: yes
ansible.builtin.command: "sed -i \"s/${PEERTUBE_HOST}/127.0.0.1:9000/g\" /etc/nginx/sites-available/peertube"
- name: "CONFIG - Creamos un enlace simbolico para activar la nginx config"
become: yes
ansible.builtin.file:
src: "/etc/nginx/sites-available/peertube"
dest: "/etc/nginx/sites-enabled/peertube"
state: link
- name: "NGINX paramos el servicio nginx"
become: yes
ansible.builtin.service:
name: nginx
state: stopped
- name: "DIR - Comprobamos si tiene ya el certificado SSL"
become: yes
stat:
path: "/etc/letsencrypt/live/{{domain}}"
register: certDir
- name: "NGINX - Obtenemos certificado SSL letsencrypt con certbot [{{domain}} {{email}} ]"
become: yes
ansible.builtin.command: "certbot certonly --standalone -d {{domain}} --email {{email}} --agree-tos"
when: certDir.stat.exists == false
- name: "NGINX iniciamos el servicio nginx"
become: yes
ansible.builtin.service:
name: nginx
state: started
- name: "SYSTEMD - Copiamos el template de servicio"
become: yes
ansible.builtin.command: "sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/"
- name: "SYSTEMD - Daemon reload"
become: yes
ansible.builtin.systemd:
state: restarted
daemon_reload: yes
name: nginx
- name: "SYSTEMD - Enable service"
become: yes
ansible.builtin.service:
name: peertube
enabled: yes
- name: "SYSTEMD - Iniciamos el servicio peertube"
become: yes
ansible.builtin.service:
name: peertube
state: started
# NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root