servers/roles/rilec/tasks/main.yml
2025-10-23 20:32:48 +02:00

174 lines
4.1 KiB
YAML

- name: Install dependencies
package:
name:
- git
- python3
- python3-dev
- py3-pip
- py3-virtualenv
- bash # for upgrade script
- build-base # to build psycopg if not available
- postgresql-dev # likewise
- uwsgi
- uwsgi-python3
- openldap-dev
- name: Create group for web service
group:
name: '{{ user }}'
system: yes
- name: Create user for web service
user:
name: '{{ user }}'
group: '{{ user }}'
home: '/srv/{{ user }}'
shell: /bin/sh
system: yes
register: user_info
- name: Clone web files
become: yes
become_user: "{{ user }}"
become_method: su
become_flags: "-s /bin/sh"
git:
repo: 'https://github.com/polz113/apis-ad-rilec'
dest: "{{ user_info.home }}/apis-rilec"
force: yes
notify: reload uwsgi
- name: Set django_app
set_fact:
django_app: "{{ user_info.home }}/apis-rilec/python/django/apis_rilec_fri/"
django_venv: "{{ user_info.home }}/venv/apis-rilec/"
public_root: "{{ user_info.home }}/www_data/apis-rilec/"
- name: Create directory for static files
file:
state: directory
owner: "{{ user }}"
path: "{{ public_root }}/static"
- name: Create directory for media
file:
state: directory
owner: "{{ user }}"
path: "{{ public_root }}/media"
- name: Install requirements
become: yes
become_user: "{{ user }}"
become_method: su
become_flags: '-s /bin/sh'
pip:
requirements: "{{ django_app }}/requirements.txt"
virtualenv: "{{ django_venv }}"
notify: restart uwsgi
- name: Install database driver
become: yes
become_user: "{{ user }}"
become_method: su
become_flags: '-s /bin/sh'
pip:
name: "psycopg"
virtualenv: "{{ django_venv }}"
notify: restart uwsgi
- name: Configure settings
template:
dest: "{{ django_app }}/apis_rilec_fri/.env"
src: "environment.j2"
owner: apis
group: apis
mode: 0600
force: yes
notify: restart uwsgi
- name: Run migrations
become: yes
become_user: '{{ user }}'
command:
cmd: '{{ django_venv }}/bin/python {{ django_app }}/manage.py migrate --noinput'
- name: Collect static files
command:
cmd: '{{ django_venv }}/bin/python {{ django_app }}/manage.py collectstatic --noinput'
- name: Create superuser / set password
become: yes
become_user: '{{ user }}'
command:
cmd: '{{ django_venv }}/bin/python {{ django_app }}/manage.py shell --interface python'
stdin: |
import sys
from django.contrib.auth.models import User
username = '{{ password.admin_user }}'
u, created = User.objects.get_or_create(username=username)
u.set_password('{{ password.admin_pass }}')
u.is_staff = True
u.is_superuser = True
u.save()
register: result
#- name: Create admin user
# shell: ". {{django_venv}}/bin/activate; cd {{ django_app }}; ./manage.py createsuperuser --noinput"
- name: Configure uwsgi
copy:
dest: /etc/uwsgi/
src: uwsgi.ini
notify: restart uwsgi
- name: Configure uwsgi instance
template:
dest: /etc/uwsgi/conf.d/apis-rilec.ini
src: apis-rilec.ini.j2
owner: apis
group: apis
- name: Enable uwsgi
service:
name: uwsgi
enabled: yes
state: started
- name: Configure nginx instance
template:
dest: /etc/nginx/http.d/apis-rilec.conf
src: nginx.conf.j2
notify: reload nginx
- name: Process data every day
cron:
name: "delete data older than 1 month"
job: ". {{django_venv}}/bin/activate; cd {{ django_app }}; ./manage.py clean -d 32"
user: apis
hour: "02"
minute: "15"
- name: Create data update script
template:
dest: "{{ user_info.home }}/apis_process_data.sh"
src: apis_process_data.sh.j2
mode: 0775
owner: apis
group: apis
- name: Periodically update data
cron:
name: "Process data from apis"
job: "{{ user_info.home }}/rilec_process_data.sh"
user: apis
hour: "19,7"
minute: "00"
- name: Periodically delete data older than 1 month
cron:
name: "delete data older than 1 month"
job: ". {{django_venv}}/bin/activate; cd {{ django_app }}; ./manage.py clean -d 32"
user: apis
hour: "02"
minute: "15"