diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | install/celery.service.template | 21 | ||||
-rw-r--r-- | install/celeryd.default.template | 17 | ||||
-rwxr-xr-x | install/ishtar-delete-instance | 10 | ||||
-rwxr-xr-x | install/ishtar-install | 48 | ||||
-rwxr-xr-x | install/ishtar-prepare-instance | 31 |
6 files changed, 120 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore index 68f835be4..fb2ae0068 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .~* drassm_app/* cd17_app/* +ansible/* django-simple-history/* django-formwizard/* ishtar-docs diff --git a/install/celery.service.template b/install/celery.service.template new file mode 100644 index 000000000..ecb88526e --- /dev/null +++ b/install/celery.service.template @@ -0,0 +1,21 @@ +[Unit] +Description=Celery Server #APP_NAME# +After=network.target + +[Service] +Type=forking +User=celery +Group=celery +EnvironmentFile=/etc/default/celeryd-#APP_NAME# +WorkingDirectory=#INSTALL_PATH# +ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \ + -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ + --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' +ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \ + --pidfile=${CELERYD_PID_FILE}' +ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \ + -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ + --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' + +[Install] +WantedBy=multi-user.target
\ No newline at end of file diff --git a/install/celeryd.default.template b/install/celeryd.default.template new file mode 100644 index 000000000..4220b6c35 --- /dev/null +++ b/install/celeryd.default.template @@ -0,0 +1,17 @@ +# The names of the workers. This example create one workers +CELERYD_NODES="#APP_NAME#w1" +#CELERYD_NODES="#APP_NAME#w1 #APP_NAME#w2" # 2 workers + +# The name of the Celery App, should be the same as the python file +# where the Celery tasks are defined +CELERY_APP="#APP_NAME#" + +# Log and PID directories +CELERYD_LOG_FILE="/var/log/celery/#APP_NAME#%n%I.log" +CELERYD_PID_FILE="/var/run/celery/#APP_NAME#%n.pid" + +# Log level +CELERYD_LOG_LEVEL=INFO + +# Path to celery binary, that is in your virtual environment +CELERY_BIN=/usr/local/bin/celery
\ No newline at end of file diff --git a/install/ishtar-delete-instance b/install/ishtar-delete-instance index 0cd004de3..7e4883192 100755 --- a/install/ishtar-delete-instance +++ b/install/ishtar-delete-instance @@ -86,6 +86,16 @@ do_delete_instance() { rm -f "$UWSGI_AVAILABLE_PATH/ishtar-$INSTANCE.ini" rm -f "$UWSGI_ENABLE_PATH/ishtar-$INSTANCE.ini" + if [ -v USE_CELERY ]; then + systemctl disable celeryd-$INSTANCE + systemctl stop celeryd-$INSTANCE + /usr/sbin/rabbitmqctl delete_vhost /ishtar$INSTANCE + /usr/sbin/rabbitmqctl delete_user ishtar$INSTANCE + rm "/etc/default/celeryd-"$INSTANCE + rm "/etc/default/celeryd-"$INSTANCE + systemctl daemon-reload + fi + DB_NAME="ishtar-$INSTANCE" export DB_NAME su postgres <<'EOF' diff --git a/install/ishtar-install b/install/ishtar-install index bb779a3f6..976c57c2c 100755 --- a/install/ishtar-install +++ b/install/ishtar-install @@ -298,6 +298,35 @@ EOF exit 1 fi + install_celery='' + cat >&2 <<-'EOF' + +------------------------------------------------------------------------------- + In order to make the consultation fluid post treatment are made intensively + in Ishtar. If you have a lot of data (> 10 000 items) installing a dedicated + daemon to do this post treatment is advised. This daemon is a new service + that performs background treatments. This daemon require RabbitMQ message + broker (auto installed). + +EOF + MSG="" + while [ "$install_celery" == '' ] + do + cecho y '* Install post treatment daemon? ([no]/yes) ' + read choice + case "$choice" in + yes ) install_celery="yes";; + y ) install_celery="yes";; + no ) install_celery="no";; + n ) install_celery="no";; + '' ) install_celery="no";; + esac + done + + echo "" + cecho g "*******************************************************************************" + echo "" + install_libreoffice='' cat >&2 <<-'EOF' @@ -450,6 +479,17 @@ EOF libreoffice libreoffice-script-provider-python python3-uno' ) fi + if [ "$install_celery" == 'yes' ]; then + ( set -x; $sh_c 'sleep 3; apt-get --no-install-recommends install -y -q \ + rabbitmq-server' ) + # buster: python3-celery + ( set -x; $sh_c 'pip3 install celery==4.2.1' ) + mkdir -p /var/log/celery/ + mkdir -p /var/run/celery/ + useradd -M --system -s /bin/false celery + chown celery:celery /var/log/celery/ /var/run/celery/ + fi + echo "-------------------------------------------------------------------------------"; cecho y "Installing django extra views" echo ""; @@ -482,11 +522,6 @@ EOF cecho y "Installing python3-virtualtime" echo ""; ( set -x; $sh_c 'pip3 install virtualtime==1.6' ) - ## not mandatory - # cecho y "Installing python3-django-background-tasks" - # echo ""; - #( set -x; $sh_c 'pip3 install django-background-tasks==1.1.11' - #) fi ;; @@ -509,6 +544,9 @@ EOF echo "ISHTAR_DB="$default_db >> $etc_path"config" echo "ISHTAR_WEBSERVER="$webserver >> $etc_path"config" echo "ISHTAR_LOCALE="$current_locale >> $etc_path"config" + if [ "$install_celery" == 'yes' ]; then + echo "USE_CELERY="$install_celery >> $etc_path"config" + fi echo "# settings added to all instances" >> $etc_path"extra_settings.py" echo "" cecho g "*******************************************************************************" diff --git a/install/ishtar-prepare-instance b/install/ishtar-prepare-instance index fcc5cb629..60fd0e39f 100755 --- a/install/ishtar-prepare-instance +++ b/install/ishtar-prepare-instance @@ -261,11 +261,34 @@ EOF fi echo $UWSGI_PORT > $PORT_FILE - ### __init__.py + # manage celery daemon + CELERY_CONF="" + if [ -v USE_CELERY ]; then + RBMQ_PASSWORD=$(apg -a 0 -M ncl -n 1 -x 10 -m 10) + /usr/sbin/rabbitmqctl add_vhost /ishtar$INSTANCE + /usr/sbin/rabbitmqctl add_user ishtar$INSTANCE $RBMQ_PASSWORD + /usr/sbin/rabbitmqctl set_permissions -p /ishtar$INSTANCE ishtar$INSTANCE ".*" ".*" ".*" + CELERY_CONF="BROKER_URL = 'ampq://ishtar"$INSTANCE":"$RBMQ_PASSWORD"@localhost//ishtar"$INSTANCE"'" + CELERY_CONF=$CELERY_CONF"\nUSE_BACKGROUND_TASK = True" + sed -s "s|#APP_NAME#|$INSTANCE|g;" \ + "install/celeryd.default.template" > \ + "/etc/default/celeryd-"$INSTANCE + sed -s "s|#APP_NAME#|$INSTANCE|g;\ + s|#INSTALL_PATH#|$INSTALL_PATH|g;"\ + "install/celery.service.template" > \ + "/etc/default/celeryd-"$INSTANCE + systemctl daemon-reload + systemctl enable celeryd-$INSTANCE + systemctl start celeryd-$INSTANCE + fi + ### __init__.py cd $INSTANCE - # ln -s __init__.py.celery.sample __init__.py - ln -s __init__.py.base.sample __init__.py + if [ -v USE_CELERY ]; then + ln -s __init__.py.celery.sample __init__.py + else + ln -s __init__.py.base.sample __init__.py + fi ### local_settings.py @@ -282,6 +305,8 @@ EOF "install/local_settings.py.sample" > \ "$INSTANCE/local_settings.py" + echo $CELERY_CONF >> "$INSTANCE/local_settings.py" + if [ -f $CONFIG_PATH"extra_settings.py" ]; then ln -s $CONFIG_PATH"extra_settings.py" >> "$INSTANCE/extra_settings.py" fi |