mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-14 17:23:25 +01:00
Compare commits
17 Commits
feat/remov
...
refactor/w
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34e897def2 | ||
|
|
ec3d7a3c31 | ||
|
|
24013fe87c | ||
|
|
7e2ede1508 | ||
|
|
b590fb41fa | ||
|
|
c65d41e26d | ||
|
|
fc2c191ced | ||
|
|
43d76b6ea7 | ||
|
|
7715a02f05 | ||
|
|
c29dfa7a29 | ||
|
|
1439d98ec4 | ||
|
|
44ad9370b6 | ||
|
|
4e96bb664f | ||
|
|
57c9308326 | ||
|
|
f07c221ca4 | ||
|
|
63097e3b64 | ||
|
|
632a39f56e |
19
CHANGELOG.md
19
CHANGELOG.md
@@ -410,6 +410,25 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
|
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
|
||||||
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- remove whiptail from update scripts for unattended update support [@MickLesk](https://github.com/MickLesk) ([#11712](https://github.com/community-scripts/ProxmoxVE/pull/11712))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Nginx-UI: better User Handling | ACME [@MickLesk](https://github.com/MickLesk) ([#11715](https://github.com/community-scripts/ProxmoxVE/pull/11715))
|
||||||
|
- NginxProxymanager: use better-sqlite3 [@MickLesk](https://github.com/MickLesk) ([#11708](https://github.com/community-scripts/ProxmoxVE/pull/11708))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- hwaccel: add libmfx-gen1.2 to Intel Arc setup for QSV support [@MickLesk](https://github.com/MickLesk) ([#11707](https://github.com/community-scripts/ProxmoxVE/pull/11707))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Bichon: Update website [@tremor021](https://github.com/tremor021) ([#11711](https://github.com/community-scripts/ProxmoxVE/pull/11711))
|
||||||
|
|
||||||
## 2026-02-08
|
## 2026-02-08
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
@@ -28,12 +28,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_error "This script is currently disabled due to an external issue with the OpenResty APT repository."
|
|
||||||
msg_error "The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026."
|
|
||||||
msg_error "The issue is tracked in openresty/openresty#1097"
|
|
||||||
msg_error "For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||||
msg_error "Wrong Debian version detected!"
|
msg_error "Wrong Debian version detected!"
|
||||||
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||||
@@ -145,15 +139,17 @@ function update_script() {
|
|||||||
"database": {
|
"database": {
|
||||||
"engine": "knex-native",
|
"engine": "knex-native",
|
||||||
"knex": {
|
"knex": {
|
||||||
"client": "sqlite3",
|
"client": "better-sqlite3",
|
||||||
"connection": {
|
"connection": {
|
||||||
"filename": "/data/database.sqlite"
|
"filename": "/data/database.sqlite"
|
||||||
}
|
},
|
||||||
|
"useNullAsDefault": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
sed -i 's/"client": "sqlite3"/"client": "better-sqlite3"/' /app/config/production.json
|
||||||
cd /app
|
cd /app
|
||||||
$STD yarn install --network-timeout 600000
|
$STD yarn install --network-timeout 600000
|
||||||
msg_ok "Initialized Backend"
|
msg_ok "Initialized Backend"
|
||||||
|
|||||||
64
ct/wger.sh
64
ct/wger.sh
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
|
|
||||||
APP="wger"
|
APP="wger"
|
||||||
var_tags="${var_tags:-management;fitness}"
|
var_tags="${var_tags:-management;fitness}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -23,38 +23,44 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /home/wger ]]; then
|
|
||||||
|
if [[ ! -d /opt/wger ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if check_for_gh_release "wger" "wger-project/wger"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wger
|
systemctl stop redis-server nginx celery celery-beat wger
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Backing up Data"
|
||||||
temp_file=$(mktemp)
|
cp -r /opt/wger/media /opt/wger_media_backup
|
||||||
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file"
|
cp /opt/wger/.env /opt/wger_env_backup
|
||||||
tar xzf "$temp_file"
|
msg_ok "Backed up Data"
|
||||||
cp -rf wger-"$RELEASE"/* /home/wger/src
|
|
||||||
cd /home/wger/src
|
|
||||||
$STD pip install -r requirements_prod.txt --ignore-installed
|
|
||||||
$STD pip install -e .
|
|
||||||
$STD python3 manage.py migrate
|
|
||||||
$STD python3 manage.py collectstatic --no-input
|
|
||||||
$STD yarn install
|
|
||||||
$STD yarn build:css:sass
|
|
||||||
rm -rf "$temp_file"
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
|
||||||
systemctl start wger
|
|
||||||
msg_ok "Started Service"
|
msg_info "Restoring Data"
|
||||||
msg_ok "Updated successfully!"
|
cp -r /opt/wger_media_backup/. /opt/wger/media
|
||||||
else
|
cp /opt/wger_env_backup /opt/wger/.env
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
rm -rf /opt/wger_media_backup /opt/wger_env_backup
|
||||||
|
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Updating wger"
|
||||||
|
cd /opt/wger
|
||||||
|
set -a && source /opt/wger/.env && set +a
|
||||||
|
export DJANGO_SETTINGS_MODULE=settings.main
|
||||||
|
$STD uv pip install .
|
||||||
|
$STD uv run python manage.py migrate
|
||||||
|
$STD uv run python manage.py collectstatic --no-input
|
||||||
|
msg_ok "Updated wger"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start redis-server nginx celery celery-beat wger
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -63,7 +69,7 @@ start
|
|||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
@@ -35,6 +35,10 @@
|
|||||||
{
|
{
|
||||||
"text": "The Disk space initially allocated by the script is only a placeholder, as we can't know how much space you will ever need. You should increase it to match your workload.",
|
"text": "The Disk space initially allocated by the script is only a placeholder, as we can't know how much space you will ever need. You should increase it to match your workload.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please copy your `BICHON_ENCRYPT_PASSWORD` from `/opt/bichon/bichon.env` to a safe place.",
|
||||||
|
"type": "warning"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": "admin",
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "On first visit, the setup wizard will guide you to create an admin account and configure ACME email.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
|
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
@@ -39,10 +43,6 @@
|
|||||||
{
|
{
|
||||||
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Initial Login data: `cat ~/nginx-ui.creds`",
|
|
||||||
"type": "info"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,10 +30,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": "admin@example.com",
|
"username": null,
|
||||||
"password": "changeme"
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "On first launch, a setup wizard will guide you through creating an admin account. There are no default credentials.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
|
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/wger.sh",
|
"script": "ct/wger.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 2,
|
||||||
"ram": 1024,
|
"ram": 2048,
|
||||||
"hdd": 6,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "13"
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Enable proxy support by uncommenting this line in `/home/wger/src/settings.py` and pointing it to your URL: `# CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1', 'https://my.domain.example.com']`, then restart the service `systemctl restart wger`.",
|
"text": "This LXC also runs Celery and Redis to synchronize workouts and ingredients",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -30,29 +30,20 @@ msg_ok "Installed Nginx UI"
|
|||||||
msg_info "Configuring Nginx UI"
|
msg_info "Configuring Nginx UI"
|
||||||
mkdir -p /usr/local/etc/nginx-ui
|
mkdir -p /usr/local/etc/nginx-ui
|
||||||
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
|
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
|
||||||
[server]
|
|
||||||
HttpHost = 0.0.0.0
|
|
||||||
HttpPort = 9000
|
|
||||||
RunMode = release
|
|
||||||
JwtSecret = $(openssl rand -hex 32)
|
|
||||||
|
|
||||||
[nginx]
|
|
||||||
AccessLogPath = /var/log/nginx/access.log
|
|
||||||
ErrorLogPath = /var/log/nginx/error.log
|
|
||||||
ConfigDir = /etc/nginx
|
|
||||||
PIDPath = /run/nginx.pid
|
|
||||||
TestConfigCmd = nginx -t
|
|
||||||
ReloadCmd = nginx -s reload
|
|
||||||
RestartCmd = systemctl restart nginx
|
|
||||||
|
|
||||||
[app]
|
[app]
|
||||||
PageSize = 10
|
PageSize = 10
|
||||||
|
|
||||||
|
[server]
|
||||||
|
Host = 0.0.0.0
|
||||||
|
Port = 9000
|
||||||
|
RunMode = release
|
||||||
|
JwtSecret = $(openssl rand -hex 32)
|
||||||
|
|
||||||
[cert]
|
[cert]
|
||||||
Email =
|
HTTPChallengePort = 9180
|
||||||
CADir =
|
|
||||||
RenewalInterval = 7
|
[terminal]
|
||||||
RecursiveNameservers =
|
StartCmd = login
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Configured Nginx UI"
|
msg_ok "Configured Nginx UI"
|
||||||
|
|
||||||
@@ -78,17 +69,6 @@ EOF
|
|||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
msg_info "Creating Initial Admin User"
|
|
||||||
systemctl start nginx-ui
|
|
||||||
sleep 3
|
|
||||||
systemctl stop nginx-ui
|
|
||||||
sleep 1
|
|
||||||
/usr/local/bin/nginx-ui reset-password --config /usr/local/etc/nginx-ui/app.ini &>/tmp/nginx-ui-reset.log || true
|
|
||||||
ADMIN_PASS=$(grep -oP 'Password: \K\S+' /tmp/nginx-ui-reset.log || echo "admin")
|
|
||||||
echo -e "Nginx-UI Credentials\nUsername: admin\nPassword: $ADMIN_PASS" >~/nginx-ui.creds
|
|
||||||
rm -f /tmp/nginx-ui-reset.log
|
|
||||||
msg_ok "Created Initial Admin User"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl enable -q --now nginx-ui
|
systemctl enable -q --now nginx-ui
|
||||||
rm -rf /etc/nginx/sites-enabled/default
|
rm -rf /etc/nginx/sites-enabled/default
|
||||||
|
|||||||
@@ -130,10 +130,11 @@ if [ ! -f /app/config/production.json ]; then
|
|||||||
"database": {
|
"database": {
|
||||||
"engine": "knex-native",
|
"engine": "knex-native",
|
||||||
"knex": {
|
"knex": {
|
||||||
"client": "sqlite3",
|
"client": "better-sqlite3",
|
||||||
"connection": {
|
"connection": {
|
||||||
"filename": "/data/database.sqlite"
|
"filename": "/data/database.sqlite"
|
||||||
}
|
},
|
||||||
|
"useNullAsDefault": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
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
|
||||||
|
|||||||
@@ -3595,6 +3595,7 @@ _setup_intel_arc() {
|
|||||||
$STD apt -y install \
|
$STD apt -y install \
|
||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
intel-opencl-icd \
|
intel-opencl-icd \
|
||||||
|
libmfx-gen1.2 \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
|
|
||||||
@@ -3621,6 +3622,7 @@ _setup_intel_arc() {
|
|||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
libvpl2 \
|
libvpl2 \
|
||||||
|
libmfx-gen1.2 \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user