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.
This commit is contained in:
CanbiZ (MickLesk)
2026-02-09 11:10:15 +01:00
committed by GitHub
parent 43d76b6ea7
commit fc2c191ced
+141 -66
View File
@@ -2,7 +2,7 @@
# Copyright (c) 2021-2026 community-scripts ORG # Copyright (c) 2021-2026 community-scripts ORG
# Author: Slaviša Arežina (tremor021) # 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: https://github.com/wger-project/wger
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
@@ -15,92 +15,167 @@ update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt install -y \ $STD apt install -y \
git \ build-essential \
apache2 \ nginx \
libapache2-mod-wsgi-py3 redis-server \
libpq-dev
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Installing Python" NODE_VERSION="22" NODE_MODULE="sass" setup_nodejs
$STD apt install -y python3-pip setup_uv
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED PG_VERSION="16" setup_postgresql
msg_ok "Installed Python" PG_DB_NAME="wger" PG_DB_USER="wger" setup_postgresql_db
fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball" "latest" "/opt/wger"
NODE_VERSION="22" NODE_MODULE="yarn,sass" setup_nodejs
msg_info "Setting up wger" msg_info "Setting up wger"
$STD adduser wger --disabled-password --gecos "" mkdir -p /opt/wger/{static,media}
mkdir /home/wger/db chmod o+w /opt/wger/media
touch /home/wger/db/database.sqlite cd /opt/wger
chown :www-data -R /home/wger/db $STD corepack enable
chmod g+w /home/wger/db /home/wger/db/database.sqlite $STD npm install
mkdir /home/wger/{static,media} $STD npm run build:css:sass
chmod o+w /home/wger/media $STD uv venv
temp_dir=$(mktemp -d) $STD uv pip install . --group docker
cd "$temp_dir" SECRET_KEY=$(openssl rand -base64 40)
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}') cat <<EOF >/opt/wger/.env
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$RELEASE.tar.gz" DJANGO_SETTINGS_MODULE=settings.main
tar xzf "$RELEASE".tar.gz PYTHONPATH=/opt/wger
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"
msg_info "Creating Service" DJANGO_DB_ENGINE=django.db.backends.postgresql
cat <<EOF >/etc/apache2/sites-available/wger.conf DJANGO_DB_DATABASE=${PG_DB_NAME}
<Directory /home/wger/src> DJANGO_DB_USER=${PG_DB_USER}
<Files wsgi.py> DJANGO_DB_PASSWORD=${PG_DB_PASS}
Require all granted DJANGO_DB_HOST=localhost
</Files> DJANGO_DB_PORT=5432
</Directory> DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
<VirtualHost *:80> DJANGO_MEDIA_ROOT=/opt/wger/media
WSGIApplicationGroup %{GLOBAL} DJANGO_STATIC_ROOT=/opt/wger/static
WSGIDaemonProcess wger python-path=/home/wger/src python-home=/home/wger DJANGO_STATIC_URL=/static/
WSGIProcessGroup wger
WSGIScriptAlias / /home/wger/src/wger/wsgi.py
WSGIPassAuthorization On
Alias /static/ /home/wger/static/ ALLOWED_HOSTS=${LOCAL_IP},localhost,127.0.0.1
<Directory /home/wger/static> CSRF_TRUSTED_ORIGINS=http://${LOCAL_IP}:3000
Require all granted
</Directory>
Alias /media/ /home/wger/media/ USE_X_FORWARDED_HOST=True
<Directory /home/wger/media> SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,http
Require all granted
</Directory>
ErrorLog /var/log/apache2/wger-error.log DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache
CustomLog /var/log/apache2/wger-access.log combined DJANGO_CACHE_LOCATION=redis://127.0.0.1:6379/1
</VirtualHost> 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 EOF
$STD a2dissite 000-default.conf set -a && source /opt/wger/.env && set +a
$STD a2ensite wger $STD uv run wger bootstrap
systemctl restart apache2 $STD uv run python manage.py collectstatic --no-input
cat <<EOF | uv run python manage.py shell
from django.contrib.auth import get_user_model
User = get_user_model()
user, created = User.objects.get_or_create(
username="admin",
defaults={"email": "admin@localhost"},
)
if created:
user.set_password("${PG_DB_PASS}")
user.is_superuser = True
user.is_staff = True
user.save()
EOF
msg_ok "Set up wger"
msg_info "Creating Config and Services"
cat <<EOF >/etc/systemd/system/wger.service cat <<EOF >/etc/systemd/system/wger.service
[Unit] [Unit]
Description=wger Service Description=wger Gunicorn
After=network.target After=network.target
[Service] [Service]
Type=simple
User=root 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 Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now wger cat <<EOF >/etc/systemd/system/celery.service
msg_ok "Created 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 <<EOF >/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 motd_ssh
customize customize