From fc2c191ced3e2be3f8fc9edeb163d82cf8559e17 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Mon, 9 Feb 2026 11:10:15 +0100 Subject: [PATCH] Refactor wger installation script for new services Updated installation script for wger, changing dependencies and configuration for PostgreSQL, Gunicorn, and Celery. Adjusted paths and service configurations for better compatibility. --- install/wger-install.sh | 207 +++++++++++++++++++++++++++------------- 1 file changed, 141 insertions(+), 66 deletions(-) diff --git a/install/wger-install.sh b/install/wger-install.sh index ddc90a179..8931520e9 100644 --- a/install/wger-install.sh +++ b/install/wger-install.sh @@ -2,7 +2,7 @@ # Copyright (c) 2021-2026 community-scripts ORG # Author: Slaviša Arežina (tremor021) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE # Source: https://github.com/wger-project/wger source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" @@ -15,92 +15,167 @@ update_os msg_info "Installing Dependencies" $STD apt install -y \ - git \ - apache2 \ - libapache2-mod-wsgi-py3 + build-essential \ + nginx \ + redis-server \ + libpq-dev msg_ok "Installed Dependencies" -msg_info "Installing Python" -$STD apt install -y python3-pip -rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED -msg_ok "Installed Python" - -NODE_VERSION="22" NODE_MODULE="yarn,sass" setup_nodejs +NODE_VERSION="22" NODE_MODULE="sass" setup_nodejs +setup_uv +PG_VERSION="16" setup_postgresql +PG_DB_NAME="wger" PG_DB_USER="wger" setup_postgresql_db +fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball" "latest" "/opt/wger" msg_info "Setting up wger" -$STD adduser wger --disabled-password --gecos "" -mkdir /home/wger/db -touch /home/wger/db/database.sqlite -chown :www-data -R /home/wger/db -chmod g+w /home/wger/db /home/wger/db/database.sqlite -mkdir /home/wger/{static,media} -chmod o+w /home/wger/media -temp_dir=$(mktemp -d) -cd "$temp_dir" -RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') -curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$RELEASE.tar.gz" -tar xzf "$RELEASE".tar.gz -mv wger-"$RELEASE" /home/wger/src -cd /home/wger/src -$STD pip install -r requirements_prod.txt --ignore-installed -$STD pip install -e . -$STD wger create-settings --database-path /home/wger/db/database.sqlite -sed -i "s#home/wger/src/media#home/wger/media#g" /home/wger/src/settings.py -sed -i "/MEDIA_ROOT = '\/home\/wger\/media'/a STATIC_ROOT = '/home/wger/static'" /home/wger/src/settings.py -$STD wger bootstrap -$STD python3 manage.py collectstatic -rm -rf "$temp_dir" -echo "${RELEASE}" >/opt/wger_version.txt -msg_ok "Finished setting up wger" +mkdir -p /opt/wger/{static,media} +chmod o+w /opt/wger/media +cd /opt/wger +$STD corepack enable +$STD npm install +$STD npm run build:css:sass +$STD uv venv +$STD uv pip install . --group docker +SECRET_KEY=$(openssl rand -base64 40) +cat </opt/wger/.env +DJANGO_SETTINGS_MODULE=settings.main +PYTHONPATH=/opt/wger -msg_info "Creating Service" -cat </etc/apache2/sites-available/wger.conf - - - Require all granted - - +DJANGO_DB_ENGINE=django.db.backends.postgresql +DJANGO_DB_DATABASE=${PG_DB_NAME} +DJANGO_DB_USER=${PG_DB_USER} +DJANGO_DB_PASSWORD=${PG_DB_PASS} +DJANGO_DB_HOST=localhost +DJANGO_DB_PORT=5432 +DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME} - - WSGIApplicationGroup %{GLOBAL} - WSGIDaemonProcess wger python-path=/home/wger/src python-home=/home/wger - WSGIProcessGroup wger - WSGIScriptAlias / /home/wger/src/wger/wsgi.py - WSGIPassAuthorization On +DJANGO_MEDIA_ROOT=/opt/wger/media +DJANGO_STATIC_ROOT=/opt/wger/static +DJANGO_STATIC_URL=/static/ - Alias /static/ /home/wger/static/ - - Require all granted - +ALLOWED_HOSTS=${LOCAL_IP},localhost,127.0.0.1 +CSRF_TRUSTED_ORIGINS=http://${LOCAL_IP}:3000 - Alias /media/ /home/wger/media/ - - Require all granted - +USE_X_FORWARDED_HOST=True +SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,http - ErrorLog /var/log/apache2/wger-error.log - CustomLog /var/log/apache2/wger-access.log combined - +DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache +DJANGO_CACHE_LOCATION=redis://127.0.0.1:6379/1 +DJANGO_CACHE_TIMEOUT=300 +DJANGO_CACHE_CLIENT_CLASS=django_redis.client.DefaultClient +AXES_CACHE_ALIAS=default + +USE_CELERY=True +CELERY_BROKER=redis://127.0.0.1:6379/2 +CELERY_BACKEND=redis://127.0.0.1:6379/2 + +SITE_URL=http://${LOCAL_IP}:3000 +SECRET_KEY=${SECRET_KEY} EOF -$STD a2dissite 000-default.conf -$STD a2ensite wger -systemctl restart apache2 +set -a && source /opt/wger/.env && set +a +$STD uv run wger bootstrap +$STD uv run python manage.py collectstatic --no-input +cat </etc/systemd/system/wger.service [Unit] -Description=wger Service +Description=wger Gunicorn After=network.target [Service] -Type=simple User=root -ExecStart=/usr/local/bin/wger start -a 0.0.0.0 -p 3000 +WorkingDirectory=/opt/wger +EnvironmentFile=/opt/wger/.env +ExecStart=/opt/wger/.venv/bin/gunicorn \ + --bind 127.0.0.1:8000 \ + --workers 3 \ + --threads 2 \ + --timeout 120 \ + wger.wsgi:application Restart=always [Install] WantedBy=multi-user.target EOF -systemctl enable -q --now wger -msg_ok "Created Service" +cat </etc/systemd/system/celery.service +[Unit] +Description=wger Celery Worker +After=network.target redis-server.service +Requires=redis-server.service + +[Service] +WorkingDirectory=/opt/wger +EnvironmentFile=/opt/wger/.env +ExecStart=/opt/wger/.venv/bin/celery -A wger worker -l info +Restart=always + +[Install] +WantedBy=multi-user.target +EOF + +mkdir -p /var/lib/wger/celery +chmod 700 /var/lib/wger/celery +cat </etc/systemd/system/celery-beat.service +[Unit] +Description=wger Celery Beat +After=network.target redis-server.service +Requires=redis-server.service + +[Service] +WorkingDirectory=/opt/wger +EnvironmentFile=/opt/wger/.env +ExecStart=/opt/wger/.venv/bin/celery -A wger beat -l info \ + --schedule /var/lib/wger/celery/celerybeat-schedule +Restart=always + +[Install] +WantedBy=multi-user.target +EOF +cat <<'EOF' >/etc/nginx/sites-available/wger +server { + listen 3000; + server_name _; + + client_max_body_size 20M; + + location /static/ { + alias /opt/wger/static/; + expires 30d; + } + + location /media/ { + alias /opt/wger/media/; + } + + location / { + proxy_pass http://127.0.0.1:8000; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + } +} +EOF +$STD rm -f /etc/nginx/sites-enabled/default +$STD ln -sf /etc/nginx/sites-available/wger /etc/nginx/sites-enabled/wger +systemctl enable -q --now redis-server nginx wger celery celery-beat +systemctl restart nginx +msg_ok "Created Config and Services" motd_ssh customize