1
0

install_php_mysql_debian.yml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. # Run this with:
  2. # ansible-playbook -i <inventory> playbooks/install_php_mysql_debian.yml -bkK --limit debian-xyz -e @vars-debian-xyz.yml
  3. ---
  4. - name: Install PHP and MySQL on Debian-based systems
  5. hosts: debian
  6. become: yes
  7. tasks:
  8. - name: Update apt cache
  9. ansible.builtin.apt:
  10. update_cache: yes
  11. # Remarque : php 8.2 pour Debian Bookworm
  12. - name: Install PHP
  13. ansible.builtin.apt:
  14. name:
  15. - php8.2
  16. - php8.2-fpm
  17. - php8.2-iconv # for WordPress
  18. - php8.2-mysqli # for WordPress/MySQL
  19. - php8.2-phar # for wp-cli
  20. - php8.2-curl # for wp-cli
  21. - php8.2-gd # WordPress needs this in order to generate thumbnails
  22. state: present
  23. - name: Install curl
  24. ansible.builtin.apt:
  25. name: curl
  26. state: present
  27. - name: Install Nginx
  28. ansible.builtin.apt:
  29. name: nginx
  30. state: present
  31. - name: Check if WordPress exists in /var/www/wordpress
  32. stat:
  33. path: /var/www/wordpress
  34. register: wordpress_dir
  35. - name: Check if wp-config.php exists in /var/www/wordpress
  36. stat:
  37. path: /var/www/wordpress/wp-config.php
  38. register: wp_config
  39. # Only if wordpress_dir.stat.exists is false, download WordPress
  40. - name: Install WordPress using curl
  41. command: curl -o /tmp/wordpress.tar.gz https://wordpress.org/latest.tar.gz
  42. args:
  43. creates: /tmp/wordpress.tar.gz
  44. when: wordpress_dir.stat.exists == False
  45. # Unzip WordPress only if /var/www/wordpress doesn't exist
  46. - name: Unzip WordPress
  47. # ansible.builtin.unarchive:
  48. command: tar -xzf /tmp/wordpress.tar.gz -C /var/www
  49. when: wordpress_dir.stat.exists == False
  50. # ------ DEBUT AJOUTS SUGGÉRÉS PAR ChatGPT ------
  51. - name: Changer le propriétaire et le groupe de /var/www/wordpress
  52. ansible.builtin.file:
  53. path: /var/www/wordpress
  54. owner: www-data
  55. group: www-data
  56. recurse: yes
  57. state: directory
  58. - name: Définir les permissions des dossiers
  59. ansible.builtin.find:
  60. paths: /var/www/wordpress
  61. recurse: yes
  62. file_type: directory
  63. register: wordpress_directories
  64. - name: Appliquer les permissions 755 aux dossiers
  65. ansible.builtin.file:
  66. path: "{{ item.path }}"
  67. mode: '0755'
  68. loop: "{{ wordpress_directories.files }}"
  69. - name: Définir les permissions des fichiers
  70. ansible.builtin.find:
  71. paths: /var/www/wordpress
  72. recurse: yes
  73. file_type: file
  74. register: wordpress_files
  75. - name: Appliquer les permissions 644 aux fichiers
  76. ansible.builtin.file:
  77. path: "{{ item.path }}"
  78. mode: '0644'
  79. loop: "{{ wordpress_files.files }}"
  80. - name: Assurer des permissions sécurisées pour wp-config.php
  81. ansible.builtin.file:
  82. path: /var/www/wordpress/wp-config.php
  83. mode: '0440'
  84. owner: www-data
  85. group: www-data
  86. when: wp_config.stat.exists == True
  87. # ------ FIN AJOUTS SUGGÉRÉS PAR ChatGPT ------
  88. - name: Install MariaDB Server & Client
  89. ansible.builtin.apt:
  90. name:
  91. - mariadb-server
  92. - mariadb-client
  93. state: present
  94. - name: Start Nginx Service
  95. ansible.builtin.service:
  96. name: nginx
  97. state: started
  98. enabled: yes # Ensure the MySQL service starts on boot
  99. - name: Start MariaDB Service
  100. ansible.builtin.service:
  101. name: mariadb
  102. state: started
  103. enabled: yes # Ensure the MariaDB service starts on boot
  104. - name: Installer le client MySQL pour Python
  105. ansible.builtin.apt:
  106. name: python3-mysqldb
  107. state: present
  108. update_cache: yes
  109. - name: create MySQL database
  110. mysql_db:
  111. check_implicit_admin: yes
  112. login_user: "{{ db_username }}"
  113. login_password: "{{ db_password }}"
  114. name: "{{ db_name }}"
  115. encoding: utf8mb4
  116. collation: utf8mb4_unicode_ci
  117. state: present
  118. - name: create MySQL user
  119. mysql_user:
  120. name: "{{ db_username }}"
  121. password: "{{ db_password }}"
  122. priv: "{{ db_name }}.*:ALL,GRANT"
  123. state: present
  124. - name: Downlownload wp salt config
  125. command: curl https://api.wordpress.org/secret-key/1.1/salt/
  126. register: wp_salt
  127. when: wp_config.stat.exists == False
  128. # Register wp-salt content as variable
  129. # - name: Read wp-salt content
  130. # ansible.builtin.slurp:
  131. # src: /tmp/wp-salt
  132. # register: wp_salt
  133. # Use variables from vars above and from wp_salt
  134. - name: Create wp-config.php
  135. ansible.builtin.template:
  136. src: templates/wp-config-sample.php.j2
  137. dest: /var/www/wordpress/wp-config.php
  138. owner: root
  139. group: root
  140. mode: 0644
  141. when: wp_config.stat.exists == False
  142. # Overwrite default vhost config with our own
  143. - name: Write WordPress vhost config
  144. ansible.builtin.template:
  145. src: templates/nginx-wordpress.conf.j2
  146. dest: /etc/nginx/sites-available/nginx-wordpress.conf
  147. owner: root
  148. group: root
  149. mode: 0644
  150. - name: Create symbolic link to enable the vhost
  151. ansible.builtin.file:
  152. src: /etc/nginx/sites-available/nginx-wordpress.conf
  153. dest: /etc/nginx/sites-enabled/nginx-wordpress.conf
  154. state: link
  155. # remove `default` symlink from sites-enabled
  156. - name: Remove default symlink from sites-enabled
  157. ansible.builtin.file:
  158. path: /etc/nginx/sites-enabled/default
  159. state: absent
  160. - name: Restart PHP-FPM
  161. ansible.builtin.service:
  162. name: php8.2-fpm
  163. state: restarted
  164. enabled: yes # Ensure the PHP-FPM service starts on boot
  165. - name: Restart Nginx
  166. ansible.builtin.service:
  167. name: nginx
  168. state: restarted
  169. enabled: yes # Ensure the PHP-FPM service starts on boot
  170. # Check if wp-cli exists
  171. - name: Check if wp-cli exists
  172. ansible.builtin.stat:
  173. path: /usr/local/bin/wp
  174. register: wp_cli
  175. # Download WordPress CLI
  176. - name: Download WordPress CLI
  177. command: curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  178. args:
  179. creates: /usr/local/bin/wp
  180. when: wp_cli.stat.exists == False
  181. # Make WordPress CLI executable
  182. - name: Make WordPress CLI executable
  183. command: chmod +x /usr/local/bin/wp
  184. # Check if WordPress is installed
  185. - name: Check if WordPress is installed
  186. command: sudo -u debian wp core is-installed --path=/var/www/wordpress
  187. register: wp_installed
  188. ignore_errors: yes
  189. # WP core install (cwd: /var/www/wordpress)
  190. - name: Install WordPress
  191. command: sudo -u debian wp core install --url={{ site_url }} --title=My\ Blog --admin_user=admin --admin_password=admin --admin_email=benoithubert@gmail.com
  192. # WP-CLI complains if we run it as root, so we become a regular user
  193. become: no
  194. # Shou
  195. args:
  196. chdir: /var/www/wordpress
  197. when: wp_installed.rc != 0