Add role for apis-rilec
This commit is contained in:
parent
61d5b4b6d8
commit
216deda916
9 changed files with 293 additions and 0 deletions
1
roles/rilec/files/motd
Normal file
1
roles/rilec/files/motd
Normal file
|
|
@ -0,0 +1 @@
|
|||
Apis rilec. Glug glug, njam njam.
|
||||
2
roles/rilec/files/uwsgi.ini
Normal file
2
roles/rilec/files/uwsgi.ini
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
[uwsgi]
|
||||
emperor = /etc/uwsgi/conf.d
|
||||
17
roles/rilec/handlers/main.yml
Normal file
17
roles/rilec/handlers/main.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
- name: reload nginx
|
||||
service:
|
||||
name: nginx
|
||||
state: reloaded
|
||||
when: "'handler' not in ansible_skip_tags"
|
||||
|
||||
- name: reload uwsgi
|
||||
service:
|
||||
name: uwsgi
|
||||
state: reloaded
|
||||
when: "'handler' not in ansible_skip_tags"
|
||||
|
||||
- name: restart uwsgi
|
||||
service:
|
||||
name: uwsgi
|
||||
state: restarted
|
||||
when: "'handler' not in ansible_skip_tags"
|
||||
2
roles/rilec/meta/main.yml
Normal file
2
roles/rilec/meta/main.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
dependencies:
|
||||
- role: nginx
|
||||
174
roles/rilec/tasks/main.yml
Normal file
174
roles/rilec/tasks/main.yml
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
- 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"
|
||||
|
||||
32
roles/rilec/templates/apis-rilec.ini.j2
Normal file
32
roles/rilec/templates/apis-rilec.ini.j2
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
[uwsgi]
|
||||
plugin = python3
|
||||
|
||||
uid = {{ user }}
|
||||
gid = {{ user }}
|
||||
|
||||
# the socket (use the full path to be safe
|
||||
socket = /run/apis-rilec.socket
|
||||
chown-socket = {{ user }}:nginx
|
||||
chmod-socket = 660
|
||||
|
||||
# log
|
||||
logto = /var/log/uwsgi/apis-rilec/apis-rilec.log
|
||||
|
||||
# Django-related settings
|
||||
# the base directory (full path)
|
||||
chdir = {{ django_app }}
|
||||
# Django's wsgi file
|
||||
module = apis_rilec_fri.wsgi
|
||||
# the virtualenv (full path)
|
||||
home = {{ django_venv }}
|
||||
|
||||
# process-related settings
|
||||
# master
|
||||
master = true
|
||||
# maximum number of worker processes
|
||||
processes = 16
|
||||
harakiri = 3600
|
||||
# clear environment on exit
|
||||
vacuum = true
|
||||
|
||||
|
||||
4
roles/rilec/templates/apis_process_data.sh.j2
Normal file
4
roles/rilec/templates/apis_process_data.sh.j2
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
. {{ django_venv }}/bin/activate
|
||||
{{ django_app }}/manage.py from_ldap
|
||||
{{ django_app }}/manage.py to_ldapobjects -gs -cd
|
||||
36
roles/rilec/templates/environment.j2
Normal file
36
roles/rilec/templates/environment.j2
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
DEBUG=false
|
||||
# DATABASE_URL="mysql://apisrilec:TestBazeZaApisRilec@127.0.0.1:3306/apisrilecphp"
|
||||
DATABASE_URL="postgresql://{{ user }}@localhost/{{database | default(user)}}"
|
||||
# mysql://USER:PASSWORD@HOST:PORT/NAME
|
||||
ALLOWED_HOSTS=apis-rilec.fri.uni-lj.si,apis-rilec.fri1.uni-lj.si,apis-rilec-php.fri1.uni-lj.si
|
||||
SECRET_KEY="{{ password.secret_key }}"
|
||||
PUBLIC_ROOT={{ user_info.home }}/www_data/apis-rilec
|
||||
|
||||
# APIS_X_API_KEY="ToleJeSkrivnost"
|
||||
X_API_KEY="{{ password.x_api_key }}"
|
||||
|
||||
STUDIS_API_TOKEN="{{ password.studis_api_token }}"
|
||||
STUDIS_API_BASE_URL=https://studisfri.uni-lj.si/api
|
||||
|
||||
#LDAP_SERVER_URI="ldap://212.235.188.28:389"
|
||||
# LDAP_SERVER_URI="ldap://dcv1fri1.fri1.uni-lj.si:389"
|
||||
# LDAP_BIND_DN="CN=ldap test,OU=ServiceAccounts,DC=test,DC=nodomain",
|
||||
# LDAP_BIND_DN="CN=LDAP\\, RILEC,OU=System,OU=admin,DC=fri1,DC=uni-lj,DC=si"
|
||||
# LDAP_BIND_PASSWORD="rUn.n-9pNUMq>7[}{AAF2W)f"
|
||||
|
||||
|
||||
LDAP_SERVER_URI="{{ ldap_server }}"
|
||||
LDAP_BIND_DN="{{ password.ldap_bind_dn }}"
|
||||
LDAP_BIND_PASSWORD="{{ password.ldap_bind_pass }}"
|
||||
LDAP_USER_SEARCH_BASE="OU=FRI,DC=fri1,DC=uni-lj,DC=si"
|
||||
LDAP_USER_SEARCH_SCOPE="SUBTREE"
|
||||
LDAP_START_TLS=true
|
||||
LDAP_OPT_X_TLS_REQUIRE_CERT="NEVER"
|
||||
|
||||
# AUTH_LDAP_USER_DN_TEMPLATE = "userPrincipalName=%(user)s,OU=Users,OU=FRI,DC=fri1,DC=uni-lj,DC=si"
|
||||
|
||||
LDAP_GROUP_SEARCH_BASE="OU=FRI,DC=fri1,DC=uni-lj,DC=si"
|
||||
AUTH_LDAP_MIRROR_GROUPS=true
|
||||
AUTH_LDAP_ALWAYS_UPDATE_USER=true
|
||||
AUTH_LDAP_CACHE_GROUPS=true
|
||||
AUTH_LDAP_GROUP_CACHE_TIMEOUT=3600
|
||||
25
roles/rilec/templates/nginx.conf.j2
Normal file
25
roles/rilec/templates/nginx.conf.j2
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name {{ dns_name }};
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ dns_name }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ dns_name }}/privkey.pem;
|
||||
|
||||
location @uwsgi {
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/run/apis-rilec.socket;
|
||||
}
|
||||
location / {
|
||||
# First attempt to serve request as file, then
|
||||
# as directory, then fall back to displaying a 404.
|
||||
alias {{ public_root }};
|
||||
try_files $uri @uwsgi;
|
||||
}
|
||||
location /media/ {
|
||||
alias {{ public_root }}/media/;
|
||||
}
|
||||
location /static/ {
|
||||
alias {{ public_root }}/static/;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue