chore: update
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
- name: Déploiement complet Frontend
|
||||
hosts: uber-stup-web
|
||||
gather_facts: true
|
||||
become: true
|
||||
vars:
|
||||
domain_name: mln-uber.club
|
||||
frontend_dir: /home/ubuntu/frontend
|
||||
frontend_port: 5173
|
||||
tasks:
|
||||
- name: Update and upgrade
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
upgrade: dist
|
||||
|
||||
- name: Install basic dependencies
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- curl
|
||||
- nginx
|
||||
- tar
|
||||
- build-essential
|
||||
- certbot
|
||||
- python3-certbot-nginx
|
||||
state: present
|
||||
- name: Créer l'utilisateur de déploiement s'il n'existe pas
|
||||
ansible.builtin.user:
|
||||
name: "{{ user_deploy }}"
|
||||
shell: /bin/bash
|
||||
create_home: yes
|
||||
state: present
|
||||
|
||||
- name: Ensure /home/{{ user_deploy }} exists with correct permissions
|
||||
ansible.builtin.file:
|
||||
path: "/home/{{ user_deploy }}"
|
||||
state: directory
|
||||
owner: "{{ user_deploy }}"
|
||||
group: "{{ user_deploy }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Setup Node.js 20 repository
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||
args:
|
||||
executable: /bin/bash
|
||||
creates: /etc/apt/sources.list.d/nodesource.list
|
||||
|
||||
- name: Install Node.js 20
|
||||
ansible.builtin.apt:
|
||||
name: nodejs
|
||||
state: present
|
||||
update_cache: yes
|
||||
dpkg_options: "force-overwrite"
|
||||
|
||||
- name: Verify Node.js and npm versions
|
||||
ansible.builtin.shell: |
|
||||
node -v
|
||||
npm -v
|
||||
register: versions_check
|
||||
changed_when: false
|
||||
|
||||
- name: Show versions
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ versions_check.stdout_lines }}"
|
||||
|
||||
- name: Create folder for frontend
|
||||
ansible.builtin.file:
|
||||
path: "{{ frontend_dir }}"
|
||||
state: directory
|
||||
owner: "{{ user_deploy }}"
|
||||
group: "{{ user_deploy }}"
|
||||
mode: "0755"
|
||||
tags: frontend
|
||||
|
||||
- name: Synchroniser le frontend (excluant node_modules et .git)
|
||||
become_user: "{{ user_deploy }}"
|
||||
ansible.builtin.synchronize:
|
||||
src: ../frontend-prep/
|
||||
dest: "{{ frontend_dir }}/"
|
||||
rsync_opts:
|
||||
- "--exclude=node_modules"
|
||||
- "--exclude=.git"
|
||||
- "--exclude=.gitignore"
|
||||
- "--exclude=build"
|
||||
delete: no
|
||||
recursive: yes
|
||||
perms: yes
|
||||
owner: yes
|
||||
rsync_path: rsync
|
||||
tags: frontend
|
||||
|
||||
- name: Install npm dependencies
|
||||
become_user: "{{ user_deploy }}"
|
||||
ansible.builtin.command: npm install
|
||||
args:
|
||||
chdir: "{{ frontend_dir }}"
|
||||
tags: frontend
|
||||
|
||||
- name: Build frontend
|
||||
become_user: "{{ user_deploy }}"
|
||||
ansible.builtin.command: npm run build
|
||||
args:
|
||||
chdir: "{{ frontend_dir }}"
|
||||
tags: frontend
|
||||
|
||||
- name: Install serve globally
|
||||
ansible.builtin.command: npm install -g serve
|
||||
tags: frontend
|
||||
|
||||
- name: Création du fichier systemd pour le frontend
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/systemd/system/frontend.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Frontend React (serve)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User={{ user_deploy }}
|
||||
WorkingDirectory={{ frontend_dir }}
|
||||
ExecStart=/usr/bin/npx serve -s build -l {{ frontend_port }}
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment="NODE_ENV=production"
|
||||
Environment="VITE_TOMTOM_API_KEY=MERY8I7LMeYVSLKO5WuV73W9rKJpBLoB"
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
notify: Reload systemd
|
||||
tags: frontend
|
||||
|
||||
- name: Enable and start frontend service
|
||||
ansible.builtin.systemd:
|
||||
name: frontend
|
||||
state: started
|
||||
enabled: yes
|
||||
daemon_reload: yes
|
||||
tags: frontend
|
||||
|
||||
- name: Configuration UFW
|
||||
ansible.builtin.ufw:
|
||||
rule: allow
|
||||
port: "{{ item }}"
|
||||
proto: tcp
|
||||
loop:
|
||||
- "22"
|
||||
- "80"
|
||||
- "443"
|
||||
|
||||
- name: Activation du firewall
|
||||
ansible.builtin.ufw:
|
||||
state: enabled
|
||||
|
||||
- name: Vérifier si un certificat existe déjà
|
||||
ansible.builtin.stat:
|
||||
path: "/etc/letsencrypt/live/{{ domain_name }}/fullchain.pem"
|
||||
register: cert_file
|
||||
tags: [certbot]
|
||||
|
||||
- name: Déployer la configuration Nginx HTTP
|
||||
ansible.builtin.template:
|
||||
src: templates/nginx-frontend.conf.j2
|
||||
dest: /etc/nginx/sites-available/frontend
|
||||
vars:
|
||||
ssl_enabled: false
|
||||
tags: [certbot]
|
||||
|
||||
- name: Activation du site Nginx
|
||||
ansible.builtin.file:
|
||||
src: /etc/nginx/sites-available/frontend
|
||||
dest: /etc/nginx/sites-enabled/frontend
|
||||
state: link
|
||||
force: yes
|
||||
tags: [certbot]
|
||||
|
||||
- name: Suppression du site par défaut
|
||||
ansible.builtin.file:
|
||||
path: /etc/nginx/sites-enabled/default
|
||||
state: absent
|
||||
tags: [certbot]
|
||||
|
||||
- name: Test de la configuration Nginx
|
||||
ansible.builtin.command: nginx -t
|
||||
changed_when: false
|
||||
tags: [certbot]
|
||||
|
||||
- name: Redémarrage de Nginx
|
||||
ansible.builtin.systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
enabled: yes
|
||||
tags: [certbot]
|
||||
|
||||
# ============================================================
|
||||
# Certificat SSL Let's Encrypt
|
||||
# ============================================================
|
||||
|
||||
- name: Générer le certificat SSL avec Certbot
|
||||
ansible.builtin.command: >
|
||||
certbot certonly --nginx
|
||||
-d {{ domain_name }}
|
||||
--non-interactive
|
||||
--agree-tos
|
||||
--email admin@{{ domain_name }}
|
||||
when: not cert_file.stat.exists
|
||||
tags: [certbot]
|
||||
|
||||
# ============================================================
|
||||
# Nginx - reconfiguration HTTPS après certificat
|
||||
# ============================================================
|
||||
- name: Vérifier la présence du certificat
|
||||
ansible.builtin.stat:
|
||||
path: "/etc/letsencrypt/live/{{ domain_name }}/fullchain.pem"
|
||||
register: cert_file_after
|
||||
|
||||
- name: Déployer la configuration Nginx HTTPS
|
||||
ansible.builtin.template:
|
||||
src: templates/nginx-frontend.conf.j2
|
||||
dest: /etc/nginx/sites-available/frontend
|
||||
vars:
|
||||
ssl_enabled: true
|
||||
when: cert_file_after.stat.exists
|
||||
notify: Restart nginx
|
||||
tags: [nginx]
|
||||
|
||||
- name: Test de la configuration Nginx finale
|
||||
ansible.builtin.command: nginx -t
|
||||
changed_when: false
|
||||
tags: [nginx]
|
||||
|
||||
- name: Redémarrage de Nginx avec SSL
|
||||
ansible.builtin.systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
when: cert_file_after.stat.exists
|
||||
tags: [nginx]
|
||||
|
||||
- name: Vérifier le renouvellement automatique
|
||||
ansible.builtin.command: certbot renew --dry-run
|
||||
register: certbot_renew
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
tags: [certbot]
|
||||
|
||||
- name: Afficher le statut du renouvellement
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ certbot_renew.stdout_lines }}"
|
||||
tags: [certbot]
|
||||
|
||||
handlers:
|
||||
- name: Reload systemd
|
||||
ansible.builtin.systemd:
|
||||
daemon_reload: yes
|
||||
|
||||
- name: Restart nginx
|
||||
ansible.builtin.systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
Reference in New Issue
Block a user