216 lines
4.7 KiB
YAML
216 lines
4.7 KiB
YAML
---
|
||
|
||
- name: Install dependencies
|
||
apt:
|
||
state: present
|
||
name:
|
||
- cron
|
||
- gettext
|
||
- git
|
||
- nginx
|
||
- postgresql
|
||
- postgresql-server-dev-all # To compile Python client.
|
||
- pgbadger
|
||
- python3
|
||
- python3-pip
|
||
- python3-psycopg2
|
||
- python3-venv
|
||
update_cache: true
|
||
tags: website
|
||
|
||
- name: Add unix user website
|
||
user:
|
||
name: website
|
||
shell: /bin/false
|
||
system: yes
|
||
home: /opt/website
|
||
tags: website
|
||
|
||
- name: install website.service (systemd)
|
||
copy:
|
||
src: systemd/website.service
|
||
dest: /etc/systemd/system/website.service
|
||
owner: root
|
||
group: root
|
||
mode: 0644
|
||
notify: restart website
|
||
tags: website
|
||
|
||
- name: add user website to pgsql
|
||
become: true
|
||
become_user: postgres
|
||
postgresql_user:
|
||
user: website
|
||
tags: website
|
||
|
||
- name: add database media
|
||
become: true
|
||
become_user: postgres
|
||
postgresql_db:
|
||
name: media
|
||
owner: website
|
||
tags: website
|
||
|
||
- name: Collect PostgreSQL version and extensions
|
||
become: yes
|
||
become_user: postgres
|
||
postgresql_info:
|
||
filter: ver*
|
||
register: db_info
|
||
|
||
- name: Configure psql
|
||
notify: reload psql
|
||
copy:
|
||
dest: "/etc/postgresql/{{ db_info.version.major }}/main/conf.d/media.conf"
|
||
owner: postgres
|
||
group: postgres
|
||
mode: 0644
|
||
content: |
|
||
log_min_duration_statement = 0
|
||
log_checkpoints = on
|
||
log_connections = on
|
||
log_disconnections = on
|
||
log_lock_waits = on
|
||
log_temp_files = 0
|
||
log_autovacuum_min_duration = 0
|
||
log_error_verbosity = default
|
||
lc_messages='en_US.UTF-8'
|
||
lc_messages='C'
|
||
|
||
- name: Synchronize source
|
||
ansible.posix.synchronize:
|
||
src: "{{ inventory_dir }}/../"
|
||
dest: /opt/website/src/
|
||
rsync_opts:
|
||
- "--exclude=.venv"
|
||
- "--exclude=venv"
|
||
notify: restart website
|
||
|
||
- name: Creates a /opt/website/venv for virtual environments
|
||
file:
|
||
path: /opt/website/venv
|
||
state: directory
|
||
mode: 0755
|
||
tags: website
|
||
|
||
- name: Setup or upgrade venv
|
||
command: python3 -m venv --upgrade-deps /opt/website/venv
|
||
changed_when: false
|
||
|
||
- name: Creates a /opt/website/locale for translations
|
||
file:
|
||
path: /opt/website/locale
|
||
state: directory
|
||
mode: 0755
|
||
owner: root
|
||
group: root
|
||
tags: website
|
||
|
||
- name: Creates a /opt/website/media for medias
|
||
file:
|
||
path: /opt/website/media
|
||
state: directory
|
||
mode: 0755
|
||
owner: website
|
||
group: website
|
||
tags: website
|
||
|
||
- name: Creates a /opt/website/static for static
|
||
file:
|
||
path: /opt/website/locale
|
||
state: directory
|
||
mode: 0755
|
||
owner: root
|
||
group: root
|
||
tags: website
|
||
|
||
- name: pip installs requirements
|
||
pip:
|
||
chdir: /opt/website/src
|
||
requirements: requirements.txt
|
||
virtualenv: /opt/website/venv
|
||
virtualenv_command: /usr/bin/python3 -m venv
|
||
tags: website
|
||
|
||
- name: pip installs psycopg2
|
||
pip:
|
||
chdir: /opt/website/src
|
||
name: psycopg2
|
||
virtualenv: /opt/website/venv
|
||
virtualenv_command: /usr/bin/python3 -m venv
|
||
tags: website
|
||
|
||
- name: pip installs gunicorn
|
||
pip:
|
||
chdir: /opt/website/src
|
||
name: gunicorn
|
||
virtualenv: /opt/website/venv
|
||
virtualenv_command: /usr/bin/python3 -m venv
|
||
tags: website
|
||
|
||
- name: Install website configuration
|
||
template:
|
||
src: local_settings.py.j2
|
||
dest: /opt/website/src/local_settings.py
|
||
owner: root
|
||
group: website
|
||
mode: 0640
|
||
notify: restart website
|
||
tags: website
|
||
|
||
- name: Migrate db
|
||
command: "/opt/website/venv/bin/python manage.py migrate"
|
||
args:
|
||
chdir: "/opt/website/src"
|
||
register: migrate_result
|
||
changed_when: '" Applying " in migrate_result.stdout'
|
||
run_once: true
|
||
become: true
|
||
become_user: website
|
||
tags: [website, test]
|
||
|
||
- name: Collectstatic
|
||
command: "/opt/website/venv/bin/python manage.py collectstatic --noinput"
|
||
args:
|
||
chdir: "/opt/website/src"
|
||
register: collectstatic_result
|
||
changed_when: '"Copying " in collectstatic_result.stdout'
|
||
tags: [website, test]
|
||
|
||
- name: Compile gettext
|
||
command: "/opt/website/venv/bin/python manage.py compilemessages"
|
||
args:
|
||
chdir: "/opt/website/src"
|
||
notify: restart website
|
||
tags: [website, test]
|
||
|
||
- name: Ensure website is running
|
||
service: name=website state=started enabled=yes
|
||
tags: website
|
||
|
||
- name: Configure nginx host
|
||
template:
|
||
src: nginx-vhost
|
||
dest: "/etc/nginx/sites-available/{{ website_vhost }}"
|
||
owner: root
|
||
group: root
|
||
mode: 0644
|
||
notify: reload nginx
|
||
tags: website
|
||
|
||
- name: Create symlink for API nginx site
|
||
file:
|
||
src: "/etc/nginx/sites-available/{{ website_vhost }}"
|
||
dest: "/etc/nginx/sites-enabled/{{ website_vhost }}"
|
||
state: link
|
||
notify: reload nginx
|
||
tags: website
|
||
|
||
- name: Daily backup
|
||
cron:
|
||
user: website
|
||
name: "backup"
|
||
job: "/usr/bin/pg_dump --clean media > backup.sql"
|
||
hour: '2'
|
||
minute: '0'
|