Make gva run with Poetry and logging
This commit is contained in:
parent
3ab7cc2e4c
commit
18f0061ee4
7 changed files with 81 additions and 104 deletions
|
@ -9,9 +9,9 @@ gnuviechadmin:
|
|||
database:
|
||||
host: pgsql
|
||||
gva:
|
||||
django_secret_key: yBnbG4azhNaTxIW0/Rv2dEij9PcVU1KVR//1bR6LujmLBnZJw8OOrEi2dIqz3pyOdG8=
|
||||
django_secret_key: "yBnbG4azhNaTxIW0/Rv2dEij9PcVU1KVR//1bR6LujmLBnZJw8OOrEi2dIqz3pyOdG8="
|
||||
fullname: Self Service Web Interface
|
||||
git_branch: master
|
||||
git_branch: main
|
||||
git_url: https://git.dittberner.info/gnuviech/gva.git
|
||||
url_mysql_admin: https://phpmyadmin.gva.local/
|
||||
url_pgsql_admin: https://phppgadmin.gva.local/
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
{% set gvaappname = salt['pillar.get']('gnuviechadmin:appname') %}
|
||||
{% set app_home = salt['grains.get']('gnuviechadmin:home', '/home/{}'.format(gvaappname)) %}
|
||||
{% set app_user = salt['grains.get']('gnuviechadmin:user', gvaappname) %}
|
||||
{% set app_group = salt['grains.get']('gnuviechadmin:group', gvaappname) %}
|
||||
{% set venv = "{}/{}-venv".format(app_home, gvaappname) -%}
|
||||
|
||||
{% set amqp_user = salt['pillar.get']('gnuviechadmin:{}:amqp_user'.format(gvaappname), gvaappname) -%}
|
||||
{% set checkout = salt['grains.get']('gnuviechadmin:checkout', '/srv/{}'.format(gvaappname)) -%}
|
||||
|
@ -13,8 +13,7 @@
|
|||
{% from 'gnuviechadmin/gvaapp_macros.sls' import gvaapp_base with context %}
|
||||
include:
|
||||
- base
|
||||
- python.pipenv
|
||||
- python.virtualenv
|
||||
- python.poetry
|
||||
- uwsgi.python3
|
||||
|
||||
{{ gvaapp_base(gvaappname, 'uwsgi') }}
|
||||
|
@ -25,39 +24,34 @@ include:
|
|||
- libpq-dev
|
||||
- require_in:
|
||||
- cmd: {{ gvaappname }}-requirements
|
||||
- service: uwsgi
|
||||
|
||||
gettext:
|
||||
pkg.installed
|
||||
|
||||
{{ checkout }}/.env:
|
||||
{{ checkout }}/run{{ gvaappname }}:
|
||||
file.managed:
|
||||
- user: {{ app_user }}
|
||||
- group: {{ app_group }}
|
||||
- mode: 0640
|
||||
- source: salt://gnuviechadmin/{{ gvaappname }}/env-vars
|
||||
- mode: 0750
|
||||
- source: salt://gnuviechadmin/{{ gvaappname }}/run.sh
|
||||
- template: jinja
|
||||
- context:
|
||||
gvaappname: {{ gvaappname }}
|
||||
broker_url: amqp://{{ amqp_user }}:{{ salt['pillar.get']('gnuviechadmin:queues:users:{}:password'.format(amqp_user)) }}@{{ salt['pillar.get']('gnuviechadmin:amqp_host', 'mq') }}/{{ salt['pillar.get']('gnuviechadmin:queues:vhost') }}
|
||||
result_url: redis://:{{ salt['pillar.get']('gnuviechadmin:redis_password') }}@{{ salt['pillar.get']('gnuviechadmin:redis_host') }}/0
|
||||
gvaappname: {{ gvaappname }}
|
||||
checkout: {{ checkout }}
|
||||
- require:
|
||||
- user: {{ gvaappname }}-user
|
||||
- group: {{ gvaappname }}-group
|
||||
- file: {{ checkout }}
|
||||
- git: {{ gitrepo }}
|
||||
|
||||
{% for command in ['migrate --noinput', 'collectstatic --noinput', 'compilemessages'] %}
|
||||
{{ gvaappname }}-manage-{{ command }}:
|
||||
cmd.wait:
|
||||
- name: /usr/local/bin/pipenv run python3 manage.py {{ command }}
|
||||
- name: {{ checkout }}/run{{ gvaappname }} {{ command }}
|
||||
- runas: {{ app_user }}
|
||||
- cwd: {{ checkout }}/gnuviechadmin
|
||||
- env:
|
||||
- VIRTUAL_ENV: "{{ venv }}"
|
||||
- LC_ALL: C.UTF-8
|
||||
- LANG: C.UTF-8
|
||||
- watch:
|
||||
- cmd: {{ gvaappname }}-requirements
|
||||
- file: {{ checkout }}/.env
|
||||
{%- if update_git %}
|
||||
- git: {{ gitrepo }}
|
||||
{%- endif %}
|
||||
|
@ -75,8 +69,9 @@ gettext:
|
|||
broker_url: amqp://{{ amqp_user }}:{{ salt['pillar.get']('gnuviechadmin:queues:users:{}:password'.format(amqp_user)) }}@{{ salt['pillar.get']('gnuviechadmin:amqp_host', 'mq') }}/{{ salt['pillar.get']('gnuviechadmin:queues:vhost') }}
|
||||
result_url: redis://:{{ salt['pillar.get']('gnuviechadmin:redis_password') }}@{{ salt['pillar.get']('gnuviechadmin:redis_host') }}/0
|
||||
workdir: {{ checkout }}/gnuviechadmin
|
||||
venv: {{ venv }}
|
||||
venv: {{ checkout }}/.venv
|
||||
- require:
|
||||
- group: {{ gvaappname }}-group
|
||||
- pkg: uwsgi
|
||||
- require_in:
|
||||
- service: uwsgi
|
||||
|
|
33
states/gnuviechadmin/gva/run.sh
Normal file
33
states/gnuviechadmin/gva/run.sh
Normal file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
cd "{{ checkout }}/gnuviechadmin"
|
||||
|
||||
export DJANGO_SETTINGS_MODULE=gnuviechadmin.settings
|
||||
export GVA_ADMIN_EMAIL={{ salt['pillar.get']('gnuviechadmin:adminemail', 'admin@example.org') }}
|
||||
export GVA_ADMIN_NAME={{ salt['pillar.get']('gnuviechadmin:adminname', 'Gnuviech Admin') }}
|
||||
export GVA_BROKER_URL={{ broker_url }}
|
||||
export GVA_DOMAIN_NAME={{ salt['pillar.get']('gnuviechadmin:{}:domainname'.format(gvaappname), 'service.localhost') }}
|
||||
export GVA_LOG_FILE=/var/log/gnuviechadmin/{{ gvaappname }}.log
|
||||
export GVA_MIN_OS_GID={{ salt['pillar.get']('gnuviechadmin:minosgid', 10000) }}
|
||||
export GVA_MIN_OS_UID={{ salt['pillar.get']('gnuviechadmin:minosuid', 10000) }}
|
||||
export GVA_OSUSER_DEFAULT_SHELL={{ salt['pillar.get']('gnuviechadmin:osuserdefaultshell', '/sbin/nologin') }}
|
||||
export GVA_OSUSER_HOME_BASEPATH={{ salt['pillar.get']('gnuviechadmin:osuserhomedirbase', '/home') }}
|
||||
export GVA_OSUSER_PREFIX={{ salt['pillar.get']('gnuviechadmin:osuserprefix', 'user') }}
|
||||
export GVA_OSUSER_UPLOADSERVER={{ salt['pillar.get']('gnuviechadmin:uploadserver') }}
|
||||
export GVA_PGSQL_DATABASE={{ salt['pillar.get']('gnuviechadmin:database:name') }}
|
||||
export GVA_PGSQL_HOSTNAME={{ salt['pillar.get']('gnuviechadmin:database:host', 'localhost') }}
|
||||
export GVA_PGSQL_PASSWORD={{ salt['pillar.get']('gnuviechadmin:database:owner:password') }}
|
||||
export GVA_PGSQL_PORT={{ salt['pillar.get']('gnuviechadmin:database:port', 5432) }}
|
||||
export GVA_PGSQL_USER={{ salt['pillar.get']('gnuviechadmin:database:owner:user', gvaappname ) }}
|
||||
export GVA_RESULTS_REDIS_URL={{ result_url }}
|
||||
export GVA_SITE_ADMINMAIL={{ salt['pillar.get']('gnuviechadmin:adminemail', 'admin@example.org') }}
|
||||
export GVA_SITE_NAME={{ salt['pillar.get']('gnuviechadmin:sitename') }}
|
||||
export GVA_SITE_SECRET={{ salt['pillar.get']('gnuviechadmin:{}:django_secret_key'.format(gvaappname)) }}
|
||||
export GVA_URL_MYSQL_ADMIN={{ salt['pillar.get']('gnuviechadmin:{}:url_mysql_admin'.format(gvaappname)) }}
|
||||
export GVA_URL_PGSQL_ADMIN={{ salt['pillar.get']('gnuviechadmin:{}:url_pgsql_admin'.format(gvaappname)) }}
|
||||
export GVA_URL_WEBMAIL={{ salt['pillar.get']('gnuviechadmin:{}:url_webmail'.format(gvaappname)) }}
|
||||
export LANG=C.UTF-8
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
{{ checkout }}/.venv/bin/python3 manage.py $*
|
|
@ -15,6 +15,7 @@ env = GVA_ADMIN_EMAIL={{ salt['pillar.get']('gnuviechadmin:adminemail', 'admin@e
|
|||
env = GVA_ADMIN_NAME={{ salt['pillar.get']('gnuviechadmin:adminname', 'Gnuviech Admin') }}
|
||||
env = GVA_BROKER_URL={{ broker_url }}
|
||||
env = GVA_DOMAIN_NAME={{ salt['pillar.get']('gnuviechadmin:{}:domainname'.format(gvaappname), 'service.localhost') }}
|
||||
env = GVA_LOG_FILE=/var/log/gnuviechadmin/{{ gvaappname }}.log
|
||||
env = GVA_MIN_OS_GID={{ salt['pillar.get']('gnuviechadmin:minosgid', 10000) }}
|
||||
env = GVA_MIN_OS_UID={{ salt['pillar.get']('gnuviechadmin:minosuid', 10000) }}
|
||||
env = GVA_OSUSER_DEFAULT_SHELL={{ salt['pillar.get']('gnuviechadmin:osuserdefaultshell', '/sbin/nologin') }}
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
{% set app_home = salt['grains.get']('gnuviechadmin:home', '/home/{}'.format(gvaappname)) %}
|
||||
{% set app_user = salt['grains.get']('gnuviechadmin:user', gvaappname) %}
|
||||
{% set app_group = salt['grains.get']('gnuviechadmin:group', gvaappname) %}
|
||||
{% set venv = "{}/{}-venv".format(app_home, gvaappname) -%}
|
||||
|
||||
{% set appfullname = 'GNUViech Admin {} User'.format(salt['pillar.get']('gnuviechadmin:{}:fullname'.format(gvaappname))) -%}
|
||||
{% set update_git = salt['grains.get']('gnuviechadmin:update_git', True) %}
|
||||
{% set gitrepo = salt['pillar.get']('gnuviechadmin:{}:git_url'.format(gvaappname), 'git:gnuviech/{}.git'.format(gvaappname)) -%}
|
||||
{% set checkout = salt['grains.get']('gnuviechadmin:checkout', '/srv/{}'.format(gvaappname)) -%}
|
||||
{% set venv = "{}/.venv".format(checkout) -%}
|
||||
{% set deployment_key = '{}/.ssh/id_deployment'.format(app_home) -%}
|
||||
|
||||
{% for host in salt['pillar.get']('gnuviechadmin:machines', {}) %}
|
||||
|
@ -45,52 +45,14 @@ gvabase-dependencies:
|
|||
pkg.installed:
|
||||
- name: build-essential
|
||||
|
||||
{% if update_git %}
|
||||
{{ app_home }}/.ssh:
|
||||
/var/log/gnuviechadmin:
|
||||
file.directory:
|
||||
- user: {{ app_user }}
|
||||
- group: {{ app_group }}
|
||||
- mode: 0700
|
||||
- mode: 0750
|
||||
- require:
|
||||
- user: {{ gvaappname }}-user
|
||||
|
||||
SSH Deployment Key:
|
||||
cmd.run:
|
||||
- name: ssh-keygen -t ed25519 -C "Deployment key for {{ gvaappname }}" -N "" -f {{ deployment_key }}
|
||||
- creates: {{ deployment_key }}
|
||||
- runas: {{ app_user }}
|
||||
- requires:
|
||||
- file: {{ app_home }}/.ssh
|
||||
- require_in:
|
||||
- git: {{ gitrepo }}
|
||||
|
||||
SSH known hosts configuration:
|
||||
file.managed:
|
||||
- name: {{ app_home }}/.ssh/known_hosts
|
||||
- user: {{ app_user }}
|
||||
- group: {{ app_group }}
|
||||
- mode: 0600
|
||||
- contents_pillar: gnuviechadmin:ssh_known_hosts
|
||||
- require:
|
||||
- file: {{ app_home }}/.ssh
|
||||
- require_in:
|
||||
- git: {{ gitrepo }}
|
||||
|
||||
SSH configuration:
|
||||
file.managed:
|
||||
- name: {{ app_home }}/.ssh/config
|
||||
- user: {{ app_user }}
|
||||
- group: {{ app_group }}
|
||||
- mode: 0600
|
||||
- source: salt://gnuviechadmin/ssh_deploy_config
|
||||
- template: jinja
|
||||
- context:
|
||||
key: {{ deployment_key }}
|
||||
- require:
|
||||
- file: {{ app_home }}/.ssh
|
||||
- require_in:
|
||||
- git: {{ gitrepo }}
|
||||
{% endif %}
|
||||
- group: {{ gvaappname }}-group
|
||||
|
||||
{{ checkout }}:
|
||||
file.directory:
|
||||
|
@ -106,6 +68,7 @@ SSH configuration:
|
|||
- user: {{ app_user }}
|
||||
- target: {{ checkout }}
|
||||
- rev: {{ salt['pillar.get']('gnuviechadmin:{}:git_branch'.format(gvaappname), 'production') }}
|
||||
- force_clone: true
|
||||
- require:
|
||||
- file: {{ checkout }}
|
||||
- watch_in:
|
||||
|
@ -113,55 +76,17 @@ SSH configuration:
|
|||
- service: {{ servicename }}
|
||||
{% endif %}
|
||||
|
||||
rm -rf {{ venv }}:
|
||||
cmd.run:
|
||||
- runas: {{ app_user }}
|
||||
- unless: test -f {{ venv }}/bin/python3
|
||||
- require:
|
||||
- user: {{ gvaappname }}-user
|
||||
|
||||
create-{{ gvaappname }}-venv:
|
||||
cmd.run:
|
||||
- name: python3 -m virtualenv --python=python3 {{ venv }}
|
||||
- runas: {{ app_user }}
|
||||
- unless: test -f {{ venv }}/bin/pip3
|
||||
- require:
|
||||
- user: {{ gvaappname }}-user
|
||||
- python3-virtualenv-packages
|
||||
- watch_in:
|
||||
- cmd: update-{{ gvaappname }}-pip
|
||||
|
||||
update-{{ gvaappname }}-pip:
|
||||
cmd.wait:
|
||||
- name: {{ venv }}/bin/python3 -m pip install -U pip
|
||||
- runas: {{ app_user }}
|
||||
- require:
|
||||
- user: {{ gvaappname }}-user
|
||||
|
||||
{{ venv }}:
|
||||
file.directory:
|
||||
- user: {{ app_user }}
|
||||
- group: {{ app_group }}
|
||||
- require:
|
||||
- cmd: create-{{ gvaappname }}-venv
|
||||
- watch_in:
|
||||
- cmd: {{ gvaappname }}-requirements
|
||||
|
||||
{{ gvaappname }}-requirements:
|
||||
cmd.wait:
|
||||
- name: /usr/local/bin/pipenv install --deploy
|
||||
- name: /usr/local/poetry/bin/poetry install
|
||||
- runas: {{ app_user }}
|
||||
- cwd: {{ checkout }}
|
||||
- env:
|
||||
- VIRTUAL_ENV: "{{ venv }}"
|
||||
- PIPENV_HIDE_EMOJIS: 1
|
||||
- PIPENV_NOSPIN: 1
|
||||
- PIPENV_COLORBLIND: 1
|
||||
- POETRY_VIRTUALENVS_IN_PROJECT: "true"
|
||||
- LC_ALL: C.UTF-8
|
||||
- LANG: C.UTF-8
|
||||
- require:
|
||||
- cmd: install_pipenv
|
||||
- file: {{ venv }}
|
||||
- cmd: install_poetry
|
||||
{%- if update_git %}
|
||||
- git: {{ gitrepo }}
|
||||
{%- else %}
|
||||
|
|
22
states/python/poetry.sls
Normal file
22
states/python/poetry.sls
Normal file
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
curl:
|
||||
pkg.installed
|
||||
|
||||
python3:
|
||||
pkg.installed
|
||||
|
||||
poetry-preconditions:
|
||||
pkg.installed:
|
||||
- pkgs:
|
||||
- python3-wheel
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
|
||||
install_poetry:
|
||||
cmd.run:
|
||||
- name: curl -sSL https://install.python-poetry.org | POETRY_VERSION={{ salt['grains.get']('python:poetry:version', '1.4.2') }} POETRY_HOME=/usr/local/poetry /usr/bin/python3 -
|
||||
- creates: /usr/local/poetry/bin/poetry
|
||||
- require:
|
||||
- id: poetry-preconditions
|
||||
- pkg: curl
|
||||
- pkg: python3
|
|
@ -1,8 +1,9 @@
|
|||
---
|
||||
uwsgi:
|
||||
pkg:
|
||||
- installed
|
||||
service.running:
|
||||
- enable: True
|
||||
- reload: True
|
||||
- enable: true
|
||||
- reload: false
|
||||
- require:
|
||||
- pkg: uwsgi
|
||||
|
|
Loading…
Reference in a new issue