learn-ansible/playbooks/playbook.yaml
2025-03-03 23:54:15 +01:00

174 lines
4.7 KiB
YAML

---
- name: Follow Tutorial
hosts: debian
become: true
vars_files:
- vars.yaml
pre_tasks:
- name: Update apt cache if needed
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
handlers:
- name: Restart apache
ansible.builtin.service:
name: apache2
state: restarted
tasks:
- name: Get software for apt repository management
ansible.builtin.apt:
state: present
name:
- python3-apt
- python3-pycurl
- name: "Install Apache, MySQL, PHP, and other dependencies"
ansible.builtin.apt:
state: present
name:
- acl
- git
- curl
- unzip
- sendmail
- apache2
- php8.2-common
- php8.2-cli
- php8.2-dev
- php8.2-gd
- php8.2-curl
- php8.2-opcache
- php8.2-xml
- php8.2-mbstring
- php8.2-pdo
- php8.2-mysql
- php8.2-apcu
- libpcre3-dev
- libapache2-mod-php8.2
- python3-mysqldb
- default-mysql-server
- composer
- name: Install the firewall
ansible.builtin.apt:
name: ufw
state: present
- name: Disable the firewall (since this is for local dev only).
ansible.builtin.service:
name: ufw
state: stopped
- name: "Start Apache, MySQL, and PHP."
ansible.builtin.service:
name: "{{ item }}"
state: started
enabled: true
loop:
- apache2
- mysql
- name: Enable Apache rewrite module (required for Drupal).
community.general.apache2_module:
name: rewrite
state: present
notify: Restart apache
- name: Add Apache virtualhost for Drupal.
ansible.builtin.template:
src: "templates/drupal.test.conf.j2"
dest: "/etc/apache2/sites-available/{{ domain }}.test.conf"
owner: root
group: root
mode: "0664"
notify: Restart apache
- name: Enable Drupal site.
ansible.builtin.command:
cmd: a2ensite {{ domain }}.test
creates: /etc/apache2/sites-enabled/{{ domain }}.test.conf
notify: Restart apache
- name: Disable the default site.
ansible.builtin.command:
cmd: a2dissite 000-default
removes: /etc/apache2/sites-enabled/000-default.conf
notify: Restart apache
- name: Adjust OpCache memory setting.
ansible.builtin.lineinfile:
dest: "/etc/php/8.2/apache2/conf.d/10-opcache.ini"
regexp: "^opcache/memory_consumption"
line: "opcache.memory_consumption = 96"
state: present
notify: Restart apache
- name: Create a MySQL database for Drupal.
community.mysql.mysql_db:
db: "{{ domain }}"
state: present
- name: Create a MySQL user for Drupal.
community.mysql.mysql_user:
name: "{{ domain }}"
password: "1234"
priv: "{{ domain }}.*:ALL"
host: localhost
state: present
- name: Ensure Drupal directory exists.
ansible.builtin.file:
path: "{{ drupal_core_path }}"
state: directory
owner: www-data
group: www-data
mode: "755"
- name: Check if Drupal project already exists.
ansible.builtin.stat:
path: "{{ drupal_core_path }}/composer.json"
register: drupal_composer_json
- name: Create Drupal project.
community.general.composer:
command: create-project
arguments: drupal/recommended-project:^10 "{{ drupal_core_path }}"
working_dir: "{{ drupal_core_path }}"
no_dev: true
become_user: www-data
become: true
when: not drupal_composer_json.stat.exists
- name: Ensure cache dir is writable by www-data.
ansible.builtin.file:
dest: "/var/www/.cache"
state: directory
group: www-data
owner: www-data
mode: "0755"
- name: Add drush to the Drupal site with composer.
community.general.composer:
command: require
arguments: "drush/drush"
working_dir: "{{ drupal_core_path }}"
become_user: www-data
become: true
when: not drupal_composer_json.stat.exists
- name: Install Drupal
ansible.builtin.command:
argv:
- vendor/bin/drush si -y --site-name="{{ drupal_site_name }}"
- --account-name=admin
- --account-pass=admin
- --db-url=mysql://{{ domain }}:1234@localhost/{{ domain }}
- --root={{ drupal_core_path }}/web
chdir: "{{ drupal_core_path }}"
creates: "{{ drupal_core_path }}/web/sites/default/settings.php"
notify: Restart apache
become_user: www-data
become: true