[helloworld] Install django-printer properly
Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>certbot_on_virtu
							parent
							
								
									32a0744e0f
								
							
						
					
					
						commit
						a9c2f976d1
					
				| 
						 | 
					@ -0,0 +1,65 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					glob_printer:
 | 
				
			||||||
 | 
					  django_secret_key: "{{ vault.printer.django_secret_key }}"
 | 
				
			||||||
 | 
					  admins:
 | 
				
			||||||
 | 
					    - ('Root', 'root@crans.org')
 | 
				
			||||||
 | 
					  allowed_hosts:
 | 
				
			||||||
 | 
					    - 'helloworld.crans.org'
 | 
				
			||||||
 | 
					    - 'imprimante.crans.org'
 | 
				
			||||||
 | 
					  email:
 | 
				
			||||||
 | 
					    ssl: false
 | 
				
			||||||
 | 
					    host: "{{ query('ldap', 'ip', 'redisdead', 'adm') | ipv4 | first }}"
 | 
				
			||||||
 | 
					    port: 25
 | 
				
			||||||
 | 
					    user: ''
 | 
				
			||||||
 | 
					    password: ''
 | 
				
			||||||
 | 
					    from: "root@crans.org"
 | 
				
			||||||
 | 
					    from_full: "Crans <root@crans.org>"
 | 
				
			||||||
 | 
					  database:
 | 
				
			||||||
 | 
					    host: "{{ query('ldap', 'ip', 'tealc', 'adm') | ipv4 | first }}"
 | 
				
			||||||
 | 
					    port: 5432
 | 
				
			||||||
 | 
					    user: 'helloworld'
 | 
				
			||||||
 | 
					    password: "{{ vault.printer.django_db_password }}"
 | 
				
			||||||
 | 
					    name: 'helloworld'
 | 
				
			||||||
 | 
					  note:
 | 
				
			||||||
 | 
					    url: 'https://note.crans.org/'
 | 
				
			||||||
 | 
					    client_id: '{{ vault.printer.note.client_id }}'
 | 
				
			||||||
 | 
					    client_secret: '{{ vault.printer.note.client_secret }}'
 | 
				
			||||||
 | 
					    note_id: 2088
 | 
				
			||||||
 | 
					    note_alias: 'Crans'
 | 
				
			||||||
 | 
					  printer_name: 'Lexmark_X950_Series'
 | 
				
			||||||
 | 
					  debug: false
 | 
				
			||||||
 | 
					  owner: root
 | 
				
			||||||
 | 
					  group: _nounou
 | 
				
			||||||
 | 
					  version: main
 | 
				
			||||||
 | 
					  settings_local_owner: www-data
 | 
				
			||||||
 | 
					  settings_local_group: _nounou
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loc_nginx:
 | 
				
			||||||
 | 
					  service_name: printer
 | 
				
			||||||
 | 
					  ssl: []
 | 
				
			||||||
 | 
					  servers:
 | 
				
			||||||
 | 
					    - ssl: false
 | 
				
			||||||
 | 
					      default: true
 | 
				
			||||||
 | 
					      server_name:
 | 
				
			||||||
 | 
					        - "helloworld.crans.org"
 | 
				
			||||||
 | 
					        - "imprimante.crans.org"
 | 
				
			||||||
 | 
					      locations:
 | 
				
			||||||
 | 
					        - filter: "/static"
 | 
				
			||||||
 | 
					          params:
 | 
				
			||||||
 | 
					            - "alias {% if printer.version == 'main' %}/var/lib/django-printer/static/{% else %}/var/local/django-printer/static/{% endif %}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        - filter: "/media"
 | 
				
			||||||
 | 
					          params:
 | 
				
			||||||
 | 
					            - "alias {% if printer.version == 'main' %}/var/lib/django-printer/media/{% else %}/var/local/django-printer/media/{% endif %}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        - filter: "/doc"
 | 
				
			||||||
 | 
					          params:
 | 
				
			||||||
 | 
					            - "alias /var/www/django-printer-doc/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        - filter: "/"
 | 
				
			||||||
 | 
					          params:
 | 
				
			||||||
 | 
					            - "uwsgi_pass printer"
 | 
				
			||||||
 | 
					            - "include /etc/nginx/uwsgi_params"
 | 
				
			||||||
 | 
					  upstreams:
 | 
				
			||||||
 | 
					    - name: 'printer'
 | 
				
			||||||
 | 
					      server: 'unix:///var/run/uwsgi/app/django-printer/printer.sock'
 | 
				
			||||||
| 
						 | 
					@ -2,3 +2,13 @@
 | 
				
			||||||
interfaces:
 | 
					interfaces:
 | 
				
			||||||
  adm: ens18
 | 
					  adm: ens18
 | 
				
			||||||
  srv_nat: ens19
 | 
					  srv_nat: ens19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loc_printer:
 | 
				
			||||||
 | 
					  note:
 | 
				
			||||||
 | 
					    url: 'https://note-dev.crans.org/'
 | 
				
			||||||
 | 
					    client_id: '{{ vault.printer.note.client_id }}'
 | 
				
			||||||
 | 
					    client_secret: '{{ vault.printer.note.client_secret }}'
 | 
				
			||||||
 | 
					    note_id: 2088
 | 
				
			||||||
 | 
					    note_alias: 'Crans'
 | 
				
			||||||
 | 
					  debug: true
 | 
				
			||||||
 | 
					  version: main
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
      - python3-django-polymorphic
 | 
					      - python3-django-polymorphic
 | 
				
			||||||
      - python3-ipython
 | 
					      - python3-ipython
 | 
				
			||||||
      - python3-pip
 | 
					      - python3-pip
 | 
				
			||||||
 | 
					      - python3-psycopg2
 | 
				
			||||||
      - python3-requests
 | 
					      - python3-requests
 | 
				
			||||||
  register: apt_result
 | 
					  register: apt_result
 | 
				
			||||||
  retries: 3
 | 
					  retries: 3
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Restart uWSGI
 | 
				
			||||||
 | 
					  systemd:
 | 
				
			||||||
 | 
					    name: uwsgi
 | 
				
			||||||
 | 
					    state: restarted
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,184 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Pin Django from Debian bullseye-backports
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: "apt/sources.list.d/bullseye-backports.list.j2"
 | 
				
			||||||
 | 
					    dest: "/etc/apt/sources.list.d/bullseye-backports.list"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install printer dependencies
 | 
				
			||||||
 | 
					  apt:
 | 
				
			||||||
 | 
					    update_cache: true
 | 
				
			||||||
 | 
					    install_recommends: false
 | 
				
			||||||
 | 
					    name:
 | 
				
			||||||
 | 
					      - cups
 | 
				
			||||||
 | 
					      - gettext
 | 
				
			||||||
 | 
					      - python3-authlib
 | 
				
			||||||
 | 
					      - python3-django
 | 
				
			||||||
 | 
					      - python3-django-extensions
 | 
				
			||||||
 | 
					      - python3-docutils
 | 
				
			||||||
 | 
					      - python3-ipython
 | 
				
			||||||
 | 
					      - python3-pip
 | 
				
			||||||
 | 
					      - python3-cups
 | 
				
			||||||
 | 
					      - python3-psycopg2
 | 
				
			||||||
 | 
					      - python3-pypdf2
 | 
				
			||||||
 | 
					      - python3-requests
 | 
				
			||||||
 | 
					      - python3-sphinx
 | 
				
			||||||
 | 
					      - python3-sphinx-rtd-theme
 | 
				
			||||||
 | 
					      - uwsgi
 | 
				
			||||||
 | 
					      - uwsgi-plugin-python3
 | 
				
			||||||
 | 
					  register: apt_result
 | 
				
			||||||
 | 
					  retries: 3
 | 
				
			||||||
 | 
					  until: apt_result is succeeded
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Set configuration directories in development mode
 | 
				
			||||||
 | 
					  when: printer.version != "main"
 | 
				
			||||||
 | 
					  set_fact:
 | 
				
			||||||
 | 
					    module_path: "/var/local/django-printer/printer"
 | 
				
			||||||
 | 
					    project_path: "/var/local/django-printer"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Set configuration directories in production mode
 | 
				
			||||||
 | 
					  when: printer.version == "main"
 | 
				
			||||||
 | 
					  set_fact:
 | 
				
			||||||
 | 
					    module_path: "/usr/local/lib/python3.9/dist-packages/printer"
 | 
				
			||||||
 | 
					    project_path: "/usr/local/lib/python3.9/dist-packages/printer"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create django-printer configuration directory
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: "/etc/django-printer"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '2775'
 | 
				
			||||||
 | 
					    owner: "{{ printer.owner }}"
 | 
				
			||||||
 | 
					    group: "{{ printer.group }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Set ACL for printer directory
 | 
				
			||||||
 | 
					  acl:
 | 
				
			||||||
 | 
					    path: "/etc/django-printer"
 | 
				
			||||||
 | 
					    default: true
 | 
				
			||||||
 | 
					    entity: _nounou
 | 
				
			||||||
 | 
					    etype: group
 | 
				
			||||||
 | 
					    permissions: rwx
 | 
				
			||||||
 | 
					    state: query
 | 
				
			||||||
 | 
					  ignore_errors: "{{ ansible_check_mode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Clone printer repository (development)
 | 
				
			||||||
 | 
					  when: printer.version != "main"
 | 
				
			||||||
 | 
					  git:
 | 
				
			||||||
 | 
					    repo: 'https://gitlab.adm.crans.org/nounous/django-printer.git'
 | 
				
			||||||
 | 
					    dest: "{{ project_path }}"
 | 
				
			||||||
 | 
					    umask: '002'
 | 
				
			||||||
 | 
					    version: "{{ printer.version }}"
 | 
				
			||||||
 | 
					    recursive: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install pip module with editable flag (development)
 | 
				
			||||||
 | 
					  when: printer.version != "main"
 | 
				
			||||||
 | 
					  pip:
 | 
				
			||||||
 | 
					    name:
 | 
				
			||||||
 | 
					      - "{{ project_path }}"
 | 
				
			||||||
 | 
					    editable: true
 | 
				
			||||||
 | 
					    state: latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install and upgrade django-printer (production)
 | 
				
			||||||
 | 
					  when: printer.version == "main"
 | 
				
			||||||
 | 
					  pip:
 | 
				
			||||||
 | 
					    name:
 | 
				
			||||||
 | 
					      - git+https://gitlab.adm.crans.org/nounous/django-printer.git
 | 
				
			||||||
 | 
					    state: latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Set owner of cloned project
 | 
				
			||||||
 | 
					  when: printer.version != "main"
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: "{{ project_path }}"
 | 
				
			||||||
 | 
					    owner: "{{ printer.owner }}"
 | 
				
			||||||
 | 
					    group: "{{ printer.group }}"
 | 
				
			||||||
 | 
					    recurse: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Set manage.py executable
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: "{{ module_path }}/manage.py"
 | 
				
			||||||
 | 
					    mode: 0755
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy local settings
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: django-printer/settings_local.py.j2
 | 
				
			||||||
 | 
					    dest: "/etc/django-printer/settings_local.py"
 | 
				
			||||||
 | 
					    mode: 0660
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Symlink configuration file
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    src: "/etc/django-printer/settings_local.py"
 | 
				
			||||||
 | 
					    dest: "{{ module_path }}/settings_local.py"
 | 
				
			||||||
 | 
					    state: link
 | 
				
			||||||
 | 
					  ignore_errors: "{{ ansible_check_mode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# In the future, migrations will be included in the repository.
 | 
				
			||||||
 | 
					- name: Make Django migrations
 | 
				
			||||||
 | 
					  django_manage:
 | 
				
			||||||
 | 
					    command: makemigrations
 | 
				
			||||||
 | 
					    project_path: "{{ project_path }}"
 | 
				
			||||||
 | 
					  notify: Restart uWSGI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Migrate database
 | 
				
			||||||
 | 
					  django_manage:
 | 
				
			||||||
 | 
					    command: migrate
 | 
				
			||||||
 | 
					    project_path: "{{ project_path }}"
 | 
				
			||||||
 | 
					  notify: Restart uWSGI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create static files directory
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: "/var/lib/django-printer/{{ item }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '2775'
 | 
				
			||||||
 | 
					    owner: "www-data"
 | 
				
			||||||
 | 
					    group: "{{ printer.group }}"
 | 
				
			||||||
 | 
					    recurse: true
 | 
				
			||||||
 | 
					  loop:
 | 
				
			||||||
 | 
					    - static
 | 
				
			||||||
 | 
					    - files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Collect static files
 | 
				
			||||||
 | 
					  django_manage:
 | 
				
			||||||
 | 
					    command: collectstatic
 | 
				
			||||||
 | 
					    project_path: "{{ project_path }}"
 | 
				
			||||||
 | 
					  notify: Restart uWSGI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Compile messages
 | 
				
			||||||
 | 
					  django_manage:
 | 
				
			||||||
 | 
					    command: compilemessages
 | 
				
			||||||
 | 
					    project_path: "{{ project_path }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Copy uWSGI app
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: "uwsgi/apps-available/printer.ini.j2"
 | 
				
			||||||
 | 
					    dest: "/etc/uwsgi/apps-available/printer.ini"
 | 
				
			||||||
 | 
					    owner: root
 | 
				
			||||||
 | 
					    group: root
 | 
				
			||||||
 | 
					    mode: 0644
 | 
				
			||||||
 | 
					  notify: Restart uWSGI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Activate uWSGI app
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    src: "../apps-available/printer.ini"
 | 
				
			||||||
 | 
					    dest: "/etc/uwsgi/apps-enabled/printer.ini"
 | 
				
			||||||
 | 
					    owner: root
 | 
				
			||||||
 | 
					    group: root
 | 
				
			||||||
 | 
					    state: link
 | 
				
			||||||
 | 
					  ignore_errors: "{{ ansible_check_mode }}"
 | 
				
			||||||
 | 
					  notify: Restart uWSGI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create documentation directory with good permissions
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: /var/www/django-printer-doc
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    owner: www-data
 | 
				
			||||||
 | 
					    group: www-data
 | 
				
			||||||
 | 
					    mode: u=rwx,g=rwxs,o=rx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Build HTML documentation
 | 
				
			||||||
 | 
					  command: "sphinx-build -b dirhtml {{ project_path }}/docs/ /var/www/django-printer-doc/"
 | 
				
			||||||
 | 
					  become_user: www-data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Indicate module in motd
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: update-motd.d/05-service.j2
 | 
				
			||||||
 | 
					    dest: /etc/update-motd.d/05-django-printer
 | 
				
			||||||
 | 
					    mode: 0755
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					{{ ansible_header | comment }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					deb {{ debian_mirror }} bullseye-backports main
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					{{ ansible_header | comment }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# A secret key used by the server.
 | 
				
			||||||
 | 
					SECRET_KEY = "{{ printer.django_secret_key }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Should the server run in debug mode ?
 | 
				
			||||||
 | 
					# SECURITY WARNING: don't run with debug turned on in production!
 | 
				
			||||||
 | 
					DEBUG = {{ printer.debug }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# A list of admins of the services. Receive mails when an error occurs
 | 
				
			||||||
 | 
					ADMINS = [{% for admin in printer.admins %}{{ admin }}, {% endfor %}]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The list of hostname the server will respond to.
 | 
				
			||||||
 | 
					ALLOWED_HOSTS = [{% for host in printer.allowed_hosts %}'{{ host }}', {% endfor %}]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The storage systems parameters to use
 | 
				
			||||||
 | 
					DATABASES = {
 | 
				
			||||||
 | 
					    'default': {  # The DB
 | 
				
			||||||
 | 
					        'ENGINE': 'django.db.backends.postgresql',
 | 
				
			||||||
 | 
					        'NAME': '{{ printer.database.name }}',
 | 
				
			||||||
 | 
					        'USER': '{{ printer.database.user }}',
 | 
				
			||||||
 | 
					        'PASSWORD': "{{ printer.database.password }}",
 | 
				
			||||||
 | 
					        'HOST': '{{ printer.database.host }}',
 | 
				
			||||||
 | 
					        'PORT': '{{ printer.database.port }}',
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if printer.version == "main" %}
 | 
				
			||||||
 | 
					STATIC_ROOT = "/var/lib/django-printer/static/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					MEDIA_ROOT = "/var/lib/django-printer/files/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The mail configuration to send mails
 | 
				
			||||||
 | 
					EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 | 
				
			||||||
 | 
					EMAIL_USE_SSL = {{ printer.email.ssl }}
 | 
				
			||||||
 | 
					EMAIL_HOST = '{{ printer.email.host }}'
 | 
				
			||||||
 | 
					EMAIL_PORT = {{ printer.email.port }}
 | 
				
			||||||
 | 
					EMAIL_HOST_USER = '{{ printer.email.user }}'
 | 
				
			||||||
 | 
					EMAIL_HOST_PASSWORD = '{{ printer.email.password }}'
 | 
				
			||||||
 | 
					SERVER_EMAIL = '{{ printer.email.from }}'
 | 
				
			||||||
 | 
					DEFAULT_FROM_EMAIL = '{{ printer.email.from_full }}'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOTE_KFET_URL = "{{ printer.note.url }}"
 | 
				
			||||||
 | 
					NOTE_KFET_CLIENT_ID = "{{ printer.note.client_id }}"
 | 
				
			||||||
 | 
					NOTE_KFET_CLIENT_SECRET = "{{ printer.note.client_secret }}"
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					#!/usr/bin/tail +14
 | 
				
			||||||
 | 
					{{ ansible_header | comment }}
 | 
				
			||||||
 | 
					[0m> [38;5;82mDjango-printer[0m a été déployé sur cette machine. Voir [38;5;6m{{ project_path }}/[0m.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					{{ ansible_header | comment }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[uwsgi]
 | 
				
			||||||
 | 
					uid             = www-data
 | 
				
			||||||
 | 
					gid             = www-data
 | 
				
			||||||
 | 
					# Django-related settings
 | 
				
			||||||
 | 
					# the base directory (full path)
 | 
				
			||||||
 | 
					chdir           = {{ project_path }}
 | 
				
			||||||
 | 
					wsgi-file       = {{ module_path }}/wsgi.py
 | 
				
			||||||
 | 
					plugin          = python3
 | 
				
			||||||
 | 
					# process-related settings
 | 
				
			||||||
 | 
					# master
 | 
				
			||||||
 | 
					master          = true
 | 
				
			||||||
 | 
					# maximum number of worker processes
 | 
				
			||||||
 | 
					processes       = 10
 | 
				
			||||||
 | 
					# the socket (use the full path to be safe)
 | 
				
			||||||
 | 
					socket          = /var/run/uwsgi/app/django-printer/django-printer.sock
 | 
				
			||||||
 | 
					# ... with appropriate permissions - may be needed
 | 
				
			||||||
 | 
					chmod-socket    = 664
 | 
				
			||||||
 | 
					# clear environment on exit
 | 
				
			||||||
 | 
					vacuum          = true
 | 
				
			||||||
 | 
					# Touch reload
 | 
				
			||||||
 | 
					touch-reload = {{ module_path }}/settings.py
 | 
				
			||||||
		Loading…
	
		Reference in New Issue