install_php_mysql_debian.yml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. ---
  2. - name: Install PHP and MySQL on Debian-based systems
  3. hosts: debian
  4. become: yes
  5. # vars:
  6. # db_username: wordpress
  7. # db_password: wordpress
  8. # db_name: wordpress
  9. # site_url: debian-111
  10. tasks:
  11. - name: Update apt cache
  12. ansible.builtin.apt:
  13. update_cache: yes
  14. # Utilisés pour installer/compiler le package python mysqlclient
  15. # - name: Install gcc, mariadb-dev, pkgconfig and pip3
  16. # ansible.builtin.apt:
  17. # name:
  18. # - gcc # needed to compile
  19. # - python3-dev # needed to compile
  20. # # - mariadb-dev
  21. # - python3-pip
  22. # # - pkgconfig
  23. # state: present
  24. # Remarque : php 8.2 pour Debian Bookworm
  25. - name: Install PHP
  26. ansible.builtin.apt:
  27. name:
  28. - php8.2
  29. - php8.2-fpm
  30. - php8.2-iconv # for WordPress
  31. - php8.2-mysqli # for WordPress/MySQL
  32. - php8.2-phar # for wp-cli
  33. # - php8.2-json # for wp-cli
  34. # pas de package php8.2-openssl pour Debian Bookworm
  35. # - php8.2-openssl # for wp-cli
  36. - php8.2-curl # for wp-cli
  37. state: present
  38. - name: Install curl
  39. ansible.builtin.apt:
  40. name: curl
  41. state: present
  42. - name: Install Nginx
  43. ansible.builtin.apt:
  44. name: nginx
  45. state: present
  46. - name: Check if WordPress exists in /var/www/wordpress
  47. stat:
  48. path: /var/www/wordpress
  49. register: wordpress_dir
  50. - name: Check if wp-config.php exists in /var/www/wordpress
  51. stat:
  52. path: /var/www/wordpress/wp-config.php
  53. register: wp_config
  54. # Only if wordpress_dir.stat.exists is false, download WordPress
  55. - name: Install WordPress using curl
  56. command: curl -o /tmp/wordpress.tar.gz https://wordpress.org/latest.tar.gz
  57. args:
  58. creates: /tmp/wordpress.tar.gz
  59. when: wordpress_dir.stat.exists == False
  60. # Unzip WordPress only if /var/www/wordpress doesn't exist
  61. - name: Unzip WordPress
  62. # ansible.builtin.unarchive:
  63. command: tar -xzf /tmp/wordpress.tar.gz -C /var/www
  64. when: wordpress_dir.stat.exists == False
  65. - name: Install MariaDB Server & Client
  66. ansible.builtin.apt:
  67. name:
  68. - mariadb-server
  69. - mariadb-client
  70. state: present
  71. # - name: Start Nginx Service
  72. # ansible.builtin.service:
  73. # name: nginx
  74. # state: started
  75. # enabled: yes # Ensure the MySQL service starts on boot
  76. # Store mariadb status in a variable
  77. # It'll be useful to conditionally run `/etc/init.d/mariadb setup`
  78. - name: Check MariaDB status
  79. command: service mariadb status
  80. register: mariadb_status
  81. ignore_errors: yes
  82. # # Echo 'MARIADB STARTED' if mariadb is running
  83. # - name: Debug MariaDB status
  84. # ansible.builtin.debug:
  85. # msg: "MARIADB STARTED"
  86. # when: mariadb_status.stdout.find('started') != -1
  87. # # Echo 'MARIADB STOPPED' if mariadb is NOT running
  88. # - name: Debug MariaDB status
  89. # ansible.builtin.debug:
  90. # msg: "MARIADB STOPPED"
  91. # when: mariadb_status.stdout.find('started') == -1
  92. # Problem I had: it failed here after 1st run
  93. # - name: MariaDB setup
  94. # command: /etc/init.d/mariadb setup
  95. # # run only if service is NOT running, that is, the output from
  96. # # `rc-service mariadb status` doesn't contain `started`
  97. # when: mariadb_status.stdout.find('started') == -1
  98. - name: Start MariaDB Service
  99. ansible.builtin.service:
  100. name: mariadb
  101. state: started
  102. enabled: yes # Ensure the MariaDB service starts on boot
  103. # On ne va pas le faire avec pip mais avec apt
  104. # - name: Install mysqlclient
  105. # ansible.builtin.pip:
  106. # name: mysqlclient
  107. # state: present
  108. - name: Installer le client MySQL pour Python
  109. ansible.builtin.apt:
  110. name: python3-mysqldb
  111. state: present
  112. update_cache: yes
  113. - name: create MySQL database
  114. mysql_db:
  115. check_implicit_admin: yes
  116. login_user: "{{ db_username }}"
  117. login_password: "{{ db_password }}"
  118. name: "{{ db_name }}"
  119. encoding: utf8mb4
  120. collation: utf8mb4_unicode_ci
  121. state: present
  122. - name: create MySQL user
  123. mysql_user:
  124. name: "{{ db_username }}"
  125. password: "{{ db_password }}"
  126. priv: "{{ db_name }}.*:ALL,GRANT"
  127. state: present
  128. - name: Downlownload wp salt config
  129. command: curl https://api.wordpress.org/secret-key/1.1/salt/
  130. register: wp_salt
  131. when: wp_config.stat.exists == False
  132. # Register wp-salt content as variable
  133. # - name: Read wp-salt content
  134. # ansible.builtin.slurp:
  135. # src: /tmp/wp-salt
  136. # register: wp_salt
  137. # Use variables from vars above and from wp_salt
  138. - name: Create wp-config.php
  139. ansible.builtin.template:
  140. src: templates/wp-config-sample.php.j2
  141. dest: /var/www/wordpress/wp-config.php
  142. owner: root
  143. group: root
  144. mode: 0644
  145. when: wp_config.stat.exists == False
  146. # Overwrite default vhost config with our own
  147. - name: Write WordPress vhost config
  148. ansible.builtin.template:
  149. src: templates/nginx-wordpress.conf.j2
  150. dest: /etc/nginx/sites-available/nginx-wordpress.conf
  151. owner: root
  152. group: root
  153. mode: 0644
  154. - name: Create symbolic link to enable the vhost
  155. ansible.builtin.file:
  156. src: /etc/nginx/sites-available/nginx-wordpress.conf
  157. dest: /etc/nginx/sites-enabled/nginx-wordpress.conf
  158. state: link
  159. # remove `default` symlink from sites-enabled
  160. - name: Remove default symlink from sites-enabled
  161. ansible.builtin.file:
  162. path: /etc/nginx/sites-enabled/default
  163. state: absent
  164. - name: Restart PHP-FPM
  165. ansible.builtin.service:
  166. name: php8.2-fpm
  167. state: restarted
  168. enabled: yes # Ensure the PHP-FPM service starts on boot
  169. - name: Restart Nginx
  170. ansible.builtin.service:
  171. name: nginx
  172. state: restarted
  173. enabled: yes # Ensure the PHP-FPM service starts on boot
  174. # Check if wp-cli exists
  175. - name: Check if wp-cli exists
  176. ansible.builtin.stat:
  177. path: /usr/local/bin/wp
  178. register: wp_cli
  179. # Download WordPress CLI
  180. - name: Download WordPress CLI
  181. command: curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  182. args:
  183. creates: /usr/local/bin/wp
  184. when: wp_cli.stat.exists == False
  185. # Make WordPress CLI executable
  186. - name: Make WordPress CLI executable
  187. command: chmod +x /usr/local/bin/wp
  188. # Check if WordPress is installed
  189. - name: Check if WordPress is installed
  190. command: sudo -u debian wp core is-installed --path=/var/www/wordpress
  191. register: wp_installed
  192. ignore_errors: yes
  193. # WP core install (cwd: /var/www/wordpress)
  194. - name: Install WordPress
  195. command: sudo -u debian wp core install --url={{ site_url }} --title=My\ Blog --admin_user=admin --admin_password=admin --admin_email=benoithubert@gmail.com
  196. # WP-CLI complains if we run it as root, so we become a regular user
  197. become: no
  198. # Shou
  199. args:
  200. chdir: /var/www/wordpress
  201. when: wp_installed.rc != 0