- 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"