Compare commits

...

42 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
3a2f0bf2cc Update CHANGELOG.md (#5992)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 00:15:18 +00:00
community-scripts-pr-app[bot]
a83b58f1df Update versions.json (#5991)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-15 02:14:59 +02:00
CanbiZ
e5e8b1e020 fix ipv6 config file 2025-07-14 22:37:36 +02:00
CanbiZ
3b3e62c4cf escape ipv6 config file 2025-07-14 22:33:05 +02:00
CanbiZ
478b65b2c2 qf 2025-07-14 22:17:48 +02:00
community-scripts-pr-app[bot]
1982ca80d2 Update CHANGELOG.md (#5986)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 19:51:17 +00:00
CanbiZ
b060de68c0 Push (#5978) 2025-07-14 21:50:56 +02:00
community-scripts-pr-app[bot]
a437a7896b Update CHANGELOG.md (#5981)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:41:09 +00:00
tug-benson
561a2f2712 add --break-system-packages certbot-dns-cloudflare to the nginxproxymanager.sh script (#5957) 2025-07-14 16:40:41 +02:00
community-scripts-pr-app[bot]
aa0a2e1654 Update CHANGELOG.md (#5980)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:40:13 +00:00
community-scripts-pr-app[bot]
b34b4e09d8 Update CHANGELOG.md (#5979)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:39:51 +00:00
CanbiZ
f48593ac81 Dashy: remove unbound variable (RELEASE) (#5974) 2025-07-14 16:39:39 +02:00
push-app-to-main[bot]
eba06a27f3 'Add new script' (#5977) 2025-07-14 16:39:18 +02:00
community-scripts-pr-app[bot]
ac1d7f8169 Update versions.json (#5972)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 14:06:21 +02:00
community-scripts-pr-app[bot]
595fb1ecd9 Update date in json (#5970)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-07-14 09:46:47 +00:00
community-scripts-pr-app[bot]
207616ec66 Update CHANGELOG.md (#5969)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 09:46:38 +00:00
push-app-to-main[bot]
9297ee5e7b Mealie (#5968)
* 'Add new script'

* increase json

* env

* release crawling with jq

* spelling in update

* curl

* Update mealie-install.sh

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-07-14 11:46:19 +02:00
CanbiZ
3fc21c7705 change runner 2025-07-14 11:23:49 +02:00
CanbiZ
a514a7ff97 change runner 2025-07-14 11:23:39 +02:00
community-scripts-pr-app[bot]
591106adb4 Update CHANGELOG.md (#5966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-14 08:04:55 +00:00
Michel Roegl-Brunner
149b2f1602 Revert from Self Hosted to Ubunut-latest for actions (#5965)
* Update auto-update-app-headers.yml

* Update autolabeler.yml

* Update changelog-pr.yml

* Update crawl-versions.yaml

* Update delete-json-branch.yml

* Update frontend-cicd.yml

* Update github-release.yml

* Update update-json-date.yml
2025-07-14 10:04:35 +02:00
CanbiZ
3aff85b730 qf: threadfin 2025-07-14 08:55:39 +02:00
CanbiZ
c116e773b3 qf: threadfin 2025-07-14 08:54:56 +02:00
CanbiZ
1e58019e2e qf: threadfin 2025-07-14 08:54:09 +02:00
Calvin Li
17e671cae9 Update nic-offloading-fix: add Intel as search Text (#5954)
* Update nic-offloading-fix.json

* Update nic-offloading-fix.json
2025-07-13 20:00:59 +02:00
Slaviša Arežina
4d236e6382 Firefly: Move to prebuild archive as installation source (#5952) 2025-07-13 09:58:47 +02:00
Slaviša Arežina
f4ac341c15 Add composer (#5947) 2025-07-12 13:22:58 +02:00
smhc
20e9e9efe8 Fix url to gpg key (#5946) 2025-07-12 11:37:09 +02:00
community-scripts-pr-app[bot]
ee5cd20915 Update CHANGELOG.md (#5942)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-12 01:15:38 +01:00
community-scripts-pr-app[bot]
5dcd39231f Update versions.json (#5941)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-12 02:15:06 +02:00
Slaviša Arežina
8f79823c95 Fix dependencies (#5940) 2025-07-11 22:04:41 +02:00
community-scripts-pr-app[bot]
ba00a1d3f0 Update CHANGELOG.md (#5939)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 19:24:43 +01:00
Chris
599d65768e immich: hotfix 5821 (#5938) 2025-07-11 20:24:06 +02:00
community-scripts-pr-app[bot]
471e2f758f Update CHANGELOG.md (#5936)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 14:06:04 +01:00
CanbiZ
f3a4bd461d bookstack: add setup_composer in update (#5935) 2025-07-11 15:05:26 +02:00
community-scripts-pr-app[bot]
b115fe9120 Update versions.json (#5934)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 14:07:46 +02:00
community-scripts-pr-app[bot]
f9429ecf5a Update CHANGELOG.md (#5933)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 12:56:53 +01:00
Chris
ebea43f299 Immich: revert install sequence (#5932)
- apparently the Postgresql-16 install does not like running after
packages from Testing are installed. Reverted the change and restored
running the DB Collation queries
2025-07-11 13:56:20 +02:00
community-scripts-pr-app[bot]
d693c9361b Update CHANGELOG.md (#5927)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 10:40:20 +01:00
CanbiZ
3ca53067a7 Refactor & Function Bump: Docker (#5889)
* Refactor: Docker

* add more features

* update_script

* Update docker.sh
2025-07-11 11:39:50 +02:00
community-scripts-pr-app[bot]
93e204850b Update CHANGELOG.md (#5925)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-07-11 07:36:12 +01:00
Chris
8595d48cec Immich: handle custom library dependency updates; other fixes (#5896)
- Adds libaom-dev to the installer; checks for it and installs during
update
- Refactor immich.sh to simplify custom library recompilations into
functions
- Move installation of packages from Testing repo before Postgresql
install to avoid DB collation issue
2025-07-11 08:35:45 +02:00
38 changed files with 1289 additions and 470 deletions

View File

@@ -11,7 +11,7 @@ on:
jobs: jobs:
update-app-files: update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write

2
.github/workflows/autolabeler.yml generated vendored
View File

@@ -9,7 +9,7 @@ on:
jobs: jobs:
autolabeler: autolabeler:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
permissions: permissions:
pull-requests: write pull-requests: write
env: env:

2
.github/workflows/changelog-pr.yml generated vendored
View File

@@ -8,7 +8,7 @@ on:
jobs: jobs:
update-changelog-pull-request: update-changelog-pull-request:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
env: env:
CONFIG_PATH: .github/changelog-pr-config.json CONFIG_PATH: .github/changelog-pr-config.json
BRANCH_NAME: github-action-update-changelog BRANCH_NAME: github-action-update-changelog

View File

@@ -12,7 +12,7 @@ permissions:
jobs: jobs:
close-discussion: close-discussion:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
steps: steps:
- name: Checkout Repository - name: Checkout Repository

View File

@@ -13,7 +13,7 @@ permissions:
jobs: jobs:
crawl-versions: crawl-versions:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
steps: steps:
- name: Checkout Repository - name: Checkout Repository

View File

@@ -10,7 +10,7 @@ on:
jobs: jobs:
delete_branch: delete_branch:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
steps: steps:
- name: Checkout the code - name: Checkout the code
uses: actions/checkout@v3 uses: actions/checkout@v3

View File

@@ -26,7 +26,7 @@ concurrency:
jobs: jobs:
build: build:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: frontend # Set default working directory for all run steps working-directory: frontend # Set default working directory for all run steps

View File

@@ -8,7 +8,7 @@ on:
jobs: jobs:
create-daily-release: create-daily-release:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write
steps: steps:

View File

@@ -11,7 +11,7 @@ on:
jobs: jobs:
update-app-files: update-app-files:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write

View File

@@ -11,7 +11,7 @@ jobs:
check-files: check-files:
if: github.repository == 'community-scripts/ProxmoxVE' if: github.repository == 'community-scripts/ProxmoxVE'
name: Check changed files name: Check changed files
runs-on: runner-cluster-htl-set runs-on: ubuntu-latest
permissions: permissions:
pull-requests: write pull-requests: write

View File

@@ -10,8 +10,50 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-15
## 2025-07-14
### 🆕 New Scripts
- Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
### 🚀 Updated Scripts
- Config-File: Some Addons, Bugfixes... [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
- #### 🐞 Bug Fixes
- add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
- Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
### 🌐 Website
- #### 📝 Script Information
- Update nic-offloading-fix: add Intel as search Text [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
## 2025-07-12
## 2025-07-11 ## 2025-07-11
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938))
- bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935))
- Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932))
- #### ✨ New Features
- Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889))
- #### 🔧 Refactor
- Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896))
## 2025-07-10 ## 2025-07-10
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -45,6 +45,8 @@ function update_script() {
cp -r /opt/baikal-backup/Specific/ /opt/baikal/ cp -r /opt/baikal-backup/Specific/ /opt/baikal/
chown -R www-data:www-data /opt/baikal/ chown -R www-data:www-data /opt/baikal/
chmod -R 755 /opt/baikal/ chmod -R 755 /opt/baikal/
cd /opt/baikal
$STD composer install
msg_ok "Configured Baikal" msg_ok "Configured Baikal"
msg_info "Starting Service" msg_info "Starting Service"

128
ct/bar-assistant.sh Normal file
View File

@@ -0,0 +1,128 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01 | CanbiZ
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/karlomikus/bar-assistant
# Source: https://github.com/karlomikus/vue-salt-rim
# Source: https://www.meilisearch.com/
APP="Bar-Assistant"
var_tags="${var_tags:-cocktails;drinks}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bar-assistant ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
msg_info "Stopping nginx"
systemctl stop nginx
msg_ok "Stopped nginx"
msg_info "Backing up Bar Assistant"
mv /opt/bar-assistant /opt/bar-assistant-backup
msg_ok "Backed up Bar Assistant"
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
cd /opt/bar-assistant
$STD composer install --no-interaction
$STD php artisan migrate --force
$STD php artisan storage:link
$STD php artisan bar:setup-meilisearch
$STD php artisan scout:sync-index-settings
$STD php artisan config:cache
$STD php artisan route:cache
$STD php artisan event:cache
chown -R www-data:www-data /opt/bar-assistant
msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
msg_info "Starting nginx"
systemctl start nginx
msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/bar-assistant-backup
msg_ok "Cleaned"
else
msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
fi
if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
msg_info "Backing up Vue Salt Rim"
mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
msg_ok "Backed up Vue Salt Rim"
msg_info "Stopping nginx"
systemctl stop nginx
msg_ok "Stopped nginx"
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
cd /opt/vue-salt-rim
$STD npm install
$STD npm run build
msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
msg_info "Starting nginx"
systemctl start nginx
msg_ok "Started nginx"
msg_info "Cleaning up"
rm -rf /opt/vue-salt-rim-backup
msg_ok "Cleaned"
msg_ok "Updated"
else
msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
fi
if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
msg_info "Stopping Meilisearch"
systemctl stop meilisearch
msg_ok "Stopped Meilisearch"
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
msg_info "Starting Meilisearch"
systemctl start meilisearch
msg_ok "Started Meilisearch"
msg_ok "Updated Meilisearch"
else
msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -40,6 +40,7 @@ function update_script() {
fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack" fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
setup_composer
msg_info "Restoring backup" msg_info "Restoring backup"
cp /opt/bookstack-backup/.env /opt/bookstack/.env cp /opt/bookstack-backup/.env /opt/bookstack/.env

View File

@@ -20,18 +20,68 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" get_latest_release() {
exit curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
fi }
msg_info "Updating ${APP} LXC"
$STD apt-get update msg_info "Updating base system"
$STD apt-get -y upgrade $STD apt-get update
msg_ok "Updated ${APP} LXC" $STD apt-get -y upgrade
exit msg_ok "Base system updated"
msg_info "Updating Docker Engine"
$STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io
msg_ok "Docker Engine updated"
if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then
COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose"
COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose")
msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION"
curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o "$COMPOSE_BIN"
chmod +x "$COMPOSE_BIN"
msg_ok "Docker Compose updated"
fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
msg_info "Updating Portainer"
$STD docker pull portainer/portainer-ce:latest
$STD docker stop portainer && docker rm portainer
$STD docker volume create portainer_data >/dev/null 2>&1
$STD docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
msg_ok "Updated Portainer"
fi
if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
msg_info "Updating Portainer Agent"
$STD docker pull portainer/agent:latest
$STD docker stop portainer_agent && docker rm portainer_agent
$STD docker run -d \
-p 9001:9001 \
--name=portainer_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent
msg_ok "Updated Portainer Agent"
fi
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup complete"
exit
} }
start start
@@ -39,4 +89,4 @@ 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}"

View File

@@ -39,7 +39,7 @@ function update_script() {
cp -r /opt/firefly/storage /opt/storage cp -r /opt/firefly/storage /opt/storage
msg_ok "Backed up data" msg_ok "Backed up data"
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
rm -rf /opt/firefly/storage rm -rf /opt/firefly/storage

6
ct/headers/bar-assistant Normal file
View File

@@ -0,0 +1,6 @@
____ ___ _ __ __
/ __ )____ ______ / | __________(_)____/ /_____ _____ / /_
/ __ / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
/ /_/ / /_/ / / /_____/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
/_____/\__,_/_/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/

6
ct/headers/mealie Normal file
View File

@@ -0,0 +1,6 @@
__ ___ ___
/ |/ /__ ____ _/ (_)__
/ /|_/ / _ \/ __ `/ / / _ \
/ / / / __/ /_/ / / / __/
/_/ /_/\___/\__,_/_/_/\___/

View File

@@ -51,134 +51,12 @@ function update_script() {
fi fi
if [[ -f ~/.immich_library_revisions ]]; then if [[ -f ~/.immich_library_revisions ]]; then
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips") libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do cd "$BASE_DIR"
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)" $STD git pull
done) for library in "${libraries[@]}"; do
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))" compile_"$library"
if [[ "$UPDATED_REVISIONS" ]]; then done
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}') msg_ok "Image-processing libraries updated"
rm -rf "$SOURCE_DIR"
mkdir -p "$SOURCE_DIR"
cd "$BASE_DIR"
$STD git pull
cd "$STAGING_DIR"
for name in "${NAMES[@]}"; do
if [[ "$name" == "libjxl" ]]; then
msg_info "Recompiling libjxl"
SOURCE=${SOURCE_DIR}/libjxl
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBJXL_REVISION"
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
mkdir build
cd build
$STD cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DJPEGXL_ENABLE_DOXYGEN=OFF \
-DJPEGXL_ENABLE_MANPAGES=OFF \
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
-DJPEGXL_ENABLE_BENCHMARK=OFF \
-DJPEGXL_ENABLE_EXAMPLES=OFF \
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
-DJPEGXL_ENABLE_JPEGLI=ON \
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
-DJPEGXL_ENABLE_PLUGINS=ON \
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
..
$STD cmake --build . -- -j"$(nproc)"
$STD cmake --install .
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/{build,third_party}
msg_ok "Recompiled libjxl"
fi
if [[ "$name" == "libheif" ]]; then
msg_info "Recompiling libheif"
SOURCE=${SOURCE_DIR}/libheif
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION"
mkdir build
cd build
$STD cmake --preset=release-noplugins \
-DWITH_DAV1D=ON \
-DENABLE_PARALLEL_TILE_DECODING=ON \
-DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=OFF \
-DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \
..
$STD make install -j "$(nproc)"
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libheif"
fi
if [[ "$name" == "libraw" ]]; then
msg_info "Recompiling libraw"
SOURCE=${SOURCE_DIR}/libraw
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install
$STD ./configure
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled libraw"
fi
if [[ "$name" == "imagemagick" ]]; then
msg_info "Recompiling ImageMagick"
SOURCE=$SOURCE_DIR/imagemagick
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$IMAGEMAGICK_REVISION"
$STD ./configure --with-modules
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled ImageMagick"
fi
if [[ "$name" == "libvips" ]]; then
msg_info "Recompiling libvips"
SOURCE=$SOURCE_DIR/libvips
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION"
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
cd build
$STD ninja install
ldconfig /usr/local/lib
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libvips"
fi
done
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
msg_ok "Image-processing libraries compiled"
fi
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
@@ -245,6 +123,10 @@ function update_script() {
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/ cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR" cp LICENSE "$APP_DIR"
cd "$APP_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD npm install sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
msg_ok "Updated ${APP} web and microservices" msg_ok "Updated ${APP} web and microservices"
cd "$SRC_DIR"/machine-learning cd "$SRC_DIR"/machine-learning
@@ -276,8 +158,6 @@ function update_script() {
ln -s "$GEO_DIR" "$APP_DIR" ln -s "$GEO_DIR" "$APP_DIR"
msg_info "Updating Immich CLI" msg_info "Updating Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli $STD npm i -g @immich/cli
msg_ok "Updated Immich CLI" msg_ok "Updated Immich CLI"
@@ -293,6 +173,144 @@ function update_script() {
exit exit
} }
function compile_libjxl() {
SOURCE=${SOURCE_DIR}/libjxl
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
: "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libjxl"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBJXL_REVISION"
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
mkdir build
cd build
$STD cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF \
-DJPEGXL_ENABLE_DOXYGEN=OFF \
-DJPEGXL_ENABLE_MANPAGES=OFF \
-DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
-DJPEGXL_ENABLE_BENCHMARK=OFF \
-DJPEGXL_ENABLE_EXAMPLES=OFF \
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
-DJPEGXL_FORCE_SYSTEM_HWY=ON \
-DJPEGXL_ENABLE_JPEGLI=ON \
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
-DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
-DJPEGXL_ENABLE_PLUGINS=ON \
-DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
-DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
-DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
..
$STD cmake --build . -- -j"$(nproc)"
$STD cmake --install .
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/{build,third_party}
msg_ok "Recompiled libjxl"
fi
}
function compile_libheif() {
SOURCE=${SOURCE_DIR}/libheif
if ! dpkg -l | grep -q libaom; then
$STD apt-get install -y libaom-dev
local update="required"
fi
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libheif"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBHEIF_REVISION"
mkdir build
cd build
$STD cmake --preset=release-noplugins \
-DWITH_DAV1D=ON \
-DENABLE_PARALLEL_TILE_DECODING=ON \
-DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=ON \
-DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \
..
$STD make install -j "$(nproc)"
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libheif"
fi
}
function compile_libraw() {
SOURCE=${SOURCE_DIR}/libraw
local update
: "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libraw"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBRAW_REVISION"
$STD autoreconf --install
$STD ./configure
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled libraw"
fi
}
function compile_imagemagick() {
SOURCE=$SOURCE_DIR/imagemagick
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling ImageMagick"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$IMAGEMAGICK_REVISION"
$STD ./configure --with-modules
$STD make -j"$(nproc)"
$STD make install
ldconfig /usr/local/lib
$STD make clean
cd "$STAGING_DIR"
msg_ok "Recompiled ImageMagick"
fi
}
function compile_libvips() {
SOURCE=$SOURCE_DIR/libvips
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
msg_info "Recompiling libvips"
if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION"
$STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
cd build
$STD ninja install
ldconfig /usr/local/lib
cd "$STAGING_DIR"
rm -rf "$SOURCE"/build
msg_ok "Recompiled libvips"
fi
}
start start
build_container build_container
description description

97
ct/mealie.sh Normal file
View File

@@ -0,0 +1,97 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://mealie.io
APP="Mealie"
var_tags="${var_tags:-recipes}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/mealie ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
PYTHON_VERSION="3.12" setup_uv
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
msg_info "Stopping $APP"
systemctl stop mealie
msg_ok "Stopped $APP"
msg_info "Backing up .env and start.sh"
cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
msg_ok "Backup completed"
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
msg_info "Rebuilding Frontend"
export NUXT_TELEMETRY_DISABLED=1
cd /opt/mealie/frontend
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
msg_ok "Frontend rebuilt"
msg_info "Rebuilding Backend Environment"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
$STD /opt/mealie/.venv/bin/poetry build --output dist
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
echo " \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
msg_ok "Backend prepared"
msg_info "Finalize Installation"
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
msg_ok "Mealie installed"
msg_info "Restoring Configuration"
mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
chmod +x /opt/mealie/start.sh
msg_ok "Configuration restored"
msg_info "Starting $APP"
systemctl start mealie
msg_ok "Started $APP"
msg_ok "Update to $RELEASE Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"

View File

@@ -99,7 +99,7 @@ function update_script() {
mkdir -p /app/global /app/frontend/images mkdir -p /app/global /app/frontend/images
cp -r backend/* /app cp -r backend/* /app
cp -r global/* /app/global cp -r global/* /app/global
$STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
msg_ok "Setup Enviroment" msg_ok "Setup Enviroment"
msg_info "Building Frontend" msg_info "Building Frontend"

View File

@@ -29,7 +29,7 @@ function update_script() {
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
msg_info "Stopping $APP" msg_info "Stopping $APP"
systemctl stop threadfin systemctl stop threadfin

35
frontend/public/json/bar-assistant.json generated Normal file
View File

@@ -0,0 +1,35 @@
{
"name": "Bar-Assistant",
"slug": "bar-assistant",
"categories": [
24
],
"date_created": "2025-07-14",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://docs.barassistant.app/",
"website": "https://barassistant.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp",
"config_path": "/opt/bar-assistant",
"description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
"install_methods": [
{
"type": "default",
"script": "ct/bar-assistant.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

35
frontend/public/json/mealie.json generated Normal file
View File

@@ -0,0 +1,35 @@
{
"name": "Mealie",
"slug": "mealie",
"categories": [
13
],
"date_created": "2025-07-14",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/mealie/mealie.env",
"interface_port": 3000,
"documentation": "https://mealie.io/",
"website": "https://mealie.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",
"description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.",
"install_methods": [
{
"type": "default",
"script": "ct/mealie.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 10,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,5 +1,5 @@
{ {
"name": "NIC Offloading Fix", "name": "Intel e1000e NIC Offloading Fix",
"slug": "nic-offloading-fix", "slug": "nic-offloading-fix",
"categories": [ "categories": [
1 1

View File

@@ -1,14 +1,254 @@
[ [
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.1",
"date": "2025-07-12T13:41:57Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "pi-hole/pi-hole",
"version": "v6.1.4",
"date": "2025-07-14T21:22:17Z"
},
{
"name": "ipfs/kubo",
"version": "v0.36.0",
"date": "2025-07-14T18:59:57Z"
},
{
"name": "esphome/esphome",
"version": "2025.6.3",
"date": "2025-07-03T01:07:26Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.16",
"date": "2025-07-14T17:39:38Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.5.0",
"date": "2025-07-14T16:54:21Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.3",
"date": "2025-07-14T16:28:03Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.102.3",
"date": "2025-07-14T14:53:08Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.2",
"date": "2025-07-14T11:29:58Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.0",
"date": "2025-07-14T06:19:59Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w28-4.13.0",
"date": "2025-07-08T11:25:24Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.3",
"date": "2025-07-14T07:14:31Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.9",
"date": "2025-07-14T06:07:20Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2154",
"date": "2025-07-14T06:00:33Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.20",
"date": "2025-07-02T04:03:37Z"
},
{
"name": "homebridge/homebridge",
"version": "v1.11.0",
"date": "2025-07-13T19:22:47Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.6",
"date": "2025-07-13T19:10:15Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "openhab/openhab-core",
"version": "5.0.0.M4",
"date": "2025-07-13T16:04:39Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.23.5",
"date": "2025-07-13T15:23:02Z"
},
{
"name": "mayswind/AriaNg",
"version": "1.3.11",
"date": "2025-07-13T13:33:48Z"
},
{
"name": "evcc-io/evcc",
"version": "0.205.0",
"date": "2025-07-13T12:27:31Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.5",
"date": "2025-07-13T06:12:47Z"
},
{
"name": "henrygd/beszel",
"version": "v0.11.1",
"date": "2025-04-29T01:14:35Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.7.13",
"date": "2025-07-12T23:32:05Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.6",
"date": "2025-07-12T19:52:52Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.26.0",
"date": "2025-07-12T19:31:21Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
"date": "2025-04-05T19:14:59Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.0",
"date": "2025-07-12T15:52:03Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.28.1",
"date": "2025-07-12T08:50:59Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-seerr",
"date": "2025-07-12T08:15:55Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-07-12",
"date": "2025-07-12T07:53:52Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.1",
"date": "2025-07-09T15:41:43Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.1.2",
"date": "2025-07-12T03:58:47Z"
},
{
"name": "eclipse-mosquitto/mosquitto",
"version": "v2.0.22",
"date": "2025-07-11T21:34:20Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.0-alpha0",
"date": "2025-07-11T21:06:26Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.0.124-2.1.0.124_canary_2025-07-11",
"date": "2025-07-11T20:09:08Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
"date": "2025-06-22T08:30:10Z"
},
{
"name": "neo4j/neo4j",
"version": "2025.06.2",
"date": "2025-07-11T18:03:51Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.4",
"date": "2025-07-11T13:26:54Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.9.0",
"date": "2025-07-11T12:57:54Z"
},
{
"name": "zitadel/zitadel",
"version": "v3.3.1",
"date": "2025-07-11T11:51:48Z"
},
{
"name": "traefik/traefik",
"version": "v3.4.4",
"date": "2025-07-11T08:41:34Z"
},
{
"name": "mattermost/mattermost",
"version": "preview-v0.1",
"date": "2025-06-27T14:35:47Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.1",
"date": "2025-07-11T02:55:56Z"
},
{
"name": "outline/outline",
"version": "v0.85.1",
"date": "2025-07-11T01:17:53Z"
},
{ {
"name": "jenkinsci/jenkins", "name": "jenkinsci/jenkins",
"version": "jenkins-2.518", "version": "jenkins-2.518",
"date": "2025-07-08T13:52:55Z" "date": "2025-07-08T13:52:55Z"
}, },
{
"name": "rcourtman/Pulse",
"version": "v3.41.1",
"date": "2025-07-10T17:10:46Z"
},
{ {
"name": "LibreTranslate/LibreTranslate", "name": "LibreTranslate/LibreTranslate",
"version": "v1.7.2", "version": "v1.7.2",
@@ -24,16 +264,6 @@
"version": "v0.9.6", "version": "v0.9.6",
"date": "2025-07-08T01:26:29Z" "date": "2025-07-08T01:26:29Z"
}, },
{
"name": "msgbyte/tianji",
"version": "v1.23.4",
"date": "2025-07-10T18:13:38Z"
},
{
"name": "mongodb/mongo",
"version": "r6.0.25",
"date": "2025-07-10T16:59:44Z"
},
{ {
"name": "forgejo/forgejo", "name": "forgejo/forgejo",
"version": "v11.0.3", "version": "v11.0.3",
@@ -44,36 +274,11 @@
"version": "v1.6.10", "version": "v1.6.10",
"date": "2025-07-10T12:04:30Z" "date": "2025-07-10T12:04:30Z"
}, },
{
"name": "neo4j/neo4j",
"version": "5.26.9",
"date": "2025-07-10T10:04:29Z"
},
{ {
"name": "meilisearch/meilisearch", "name": "meilisearch/meilisearch",
"version": "prototype-incremental-vector-store-3", "version": "prototype-incremental-vector-store-3",
"date": "2025-07-07T10:27:19Z" "date": "2025-07-07T10:27:19Z"
}, },
{
"name": "mattermost/mattermost",
"version": "preview-v0.1",
"date": "2025-06-27T14:35:47Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2140",
"date": "2025-07-10T05:54:59Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.20",
"date": "2025-07-02T04:03:37Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.0",
"date": "2025-07-09T23:15:25Z"
},
{ {
"name": "pocket-id/pocket-id", "name": "pocket-id/pocket-id",
"version": "v1.6.2", "version": "v1.6.2",
@@ -104,16 +309,6 @@
"version": "v1.4.9", "version": "v1.4.9",
"date": "2025-07-09T16:27:46Z" "date": "2025-07-09T16:27:46Z"
}, },
{
"name": "duplicati/duplicati",
"version": "v2.1.0.123-2.1.0.123_canary_2025-07-09",
"date": "2025-07-09T16:08:36Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.1",
"date": "2025-07-09T15:41:43Z"
},
{ {
"name": "nicolargo/glances", "name": "nicolargo/glances",
"version": "v4.3.3", "version": "v4.3.3",
@@ -139,36 +334,11 @@
"version": "v0.107.63", "version": "v0.107.63",
"date": "2025-06-26T14:34:19Z" "date": "2025-06-26T14:34:19Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.102.0",
"date": "2025-07-07T15:32:29Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.6.3",
"date": "2025-07-09T09:28:42Z"
},
{ {
"name": "cockpit-project/cockpit", "name": "cockpit-project/cockpit",
"version": "342", "version": "342",
"date": "2025-07-09T08:48:21Z" "date": "2025-07-09T08:48:21Z"
}, },
{
"name": "esphome/esphome",
"version": "2025.6.3",
"date": "2025-07-03T01:07:26Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "henrygd/beszel",
"version": "v0.11.1",
"date": "2025-04-29T01:14:35Z"
},
{ {
"name": "Prowlarr/Prowlarr", "name": "Prowlarr/Prowlarr",
"version": "v1.37.0.5076", "version": "v1.37.0.5076",
@@ -179,11 +349,6 @@
"version": "v5.26.2.10099", "version": "v5.26.2.10099",
"date": "2025-06-11T20:10:39Z" "date": "2025-06-11T20:10:39Z"
}, },
{
"name": "ipfs/kubo",
"version": "v0.35.0",
"date": "2025-05-21T18:00:32Z"
},
{ {
"name": "grokability/snipe-it", "name": "grokability/snipe-it",
"version": "v8.1.18", "version": "v8.1.18",
@@ -204,11 +369,6 @@
"version": "v1.6.2", "version": "v1.6.2",
"date": "2025-07-08T13:52:33Z" "date": "2025-07-08T13:52:33Z"
}, },
{
"name": "wazuh/wazuh",
"version": "coverity-w28-4.13.0",
"date": "2025-07-08T11:25:24Z"
},
{ {
"name": "docker/compose", "name": "docker/compose",
"version": "v2.38.2", "version": "v2.38.2",
@@ -219,11 +379,6 @@
"version": "v2.4.0p7", "version": "v2.4.0p7",
"date": "2025-07-08T05:51:08Z" "date": "2025-07-08T05:51:08Z"
}, },
{
"name": "TandoorRecipes/recipes",
"version": "1.5.35",
"date": "2025-06-22T08:30:10Z"
},
{ {
"name": "VictoriaMetrics/VictoriaMetrics", "name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.121.0", "version": "pmm-6401-v1.121.0",
@@ -244,26 +399,11 @@
"version": "v25.05.2", "version": "v25.05.2",
"date": "2025-07-07T14:08:25Z" "date": "2025-07-07T14:08:25Z"
}, },
{
"name": "Paymenter/Paymenter",
"version": "v1.2.1",
"date": "2025-07-07T10:11:26Z"
},
{ {
"name": "nzbgetcom/nzbget", "name": "nzbgetcom/nzbget",
"version": "v25.2", "version": "v25.2",
"date": "2025-07-04T08:21:42Z" "date": "2025-07-04T08:21:42Z"
}, },
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.8.0",
"date": "2025-07-07T08:37:45Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.2",
"date": "2025-05-11T16:40:55Z"
},
{ {
"name": "slskd/slskd", "name": "slskd/slskd",
"version": "0.23.1", "version": "0.23.1",
@@ -279,11 +419,6 @@
"version": "v1.0.0-beta14", "version": "v1.0.0-beta14",
"date": "2025-07-06T21:07:07Z" "date": "2025-07-06T21:07:07Z"
}, },
{
"name": "Luligu/matterbridge",
"version": "3.1.2",
"date": "2025-07-06T20:55:23Z"
},
{ {
"name": "bluenviron/mediamtx", "name": "bluenviron/mediamtx",
"version": "v1.13.0", "version": "v1.13.0",
@@ -304,11 +439,6 @@
"version": "8.0.3", "version": "8.0.3",
"date": "2025-07-06T12:19:24Z" "date": "2025-07-06T12:19:24Z"
}, },
{
"name": "fallenbagel/jellyseerr",
"version": "preview-OIDC",
"date": "2025-07-06T00:51:06Z"
},
{ {
"name": "hyperion-project/hyperion.ng", "name": "hyperion-project/hyperion.ng",
"version": "2.1.1", "version": "2.1.1",
@@ -319,41 +449,16 @@
"version": "v0.8.7", "version": "v0.8.7",
"date": "2025-07-05T20:08:58Z" "date": "2025-07-05T20:08:58Z"
}, },
{
"name": "cross-seed/cross-seed",
"version": "v6.12.7",
"date": "2025-06-18T03:44:24Z"
},
{ {
"name": "runtipi/runtipi", "name": "runtipi/runtipi",
"version": "v4.3.0", "version": "v4.3.0",
"date": "2025-07-05T12:14:52Z" "date": "2025-07-05T12:14:52Z"
}, },
{
"name": "theonedev/onedev",
"version": "v11.11.4",
"date": "2025-07-05T09:23:25Z"
},
{ {
"name": "linkwarden/linkwarden", "name": "linkwarden/linkwarden",
"version": "v2.11.3", "version": "v2.11.3",
"date": "2025-07-05T04:34:46Z" "date": "2025-07-05T04:34:46Z"
}, },
{
"name": "home-assistant/core",
"version": "2025.7.1",
"date": "2025-07-04T20:02:52Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.27.0",
"date": "2025-07-04T19:16:16Z"
},
{
"name": "zitadel/zitadel",
"version": "v3.3.0",
"date": "2025-06-12T06:54:48Z"
},
{ {
"name": "emqx/emqx", "name": "emqx/emqx",
"version": "e6.0.0-M1.202507-alpha.1", "version": "e6.0.0-M1.202507-alpha.1",
@@ -369,11 +474,6 @@
"version": "6.3.1", "version": "6.3.1",
"date": "2025-07-04T11:20:48Z" "date": "2025-07-04T11:20:48Z"
}, },
{
"name": "outline/outline",
"version": "v0.85.0",
"date": "2025-07-04T00:06:47Z"
},
{ {
"name": "cloudflare/cloudflared", "name": "cloudflare/cloudflared",
"version": "2025.7.0", "version": "2025.7.0",
@@ -399,11 +499,6 @@
"version": "v25.7.1", "version": "v25.7.1",
"date": "2025-07-03T01:03:18Z" "date": "2025-07-03T01:03:18Z"
}, },
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.0",
"date": "2025-07-03T00:31:22Z"
},
{ {
"name": "Koenkk/zigbee2mqtt", "name": "Koenkk/zigbee2mqtt",
"version": "2.5.1", "version": "2.5.1",
@@ -474,11 +569,6 @@
"version": "v0.9.81", "version": "v0.9.81",
"date": "2025-06-30T16:40:33Z" "date": "2025-06-30T16:40:33Z"
}, },
{
"name": "prometheus/prometheus",
"version": "v2.53.5",
"date": "2025-06-30T11:01:12Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "v7.4.4", "version": "v7.4.4",
@@ -494,11 +584,6 @@
"version": "v29.0", "version": "v29.0",
"date": "2025-06-30T03:52:33Z" "date": "2025-06-30T03:52:33Z"
}, },
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.5",
"date": "2025-06-29T08:54:47Z"
},
{ {
"name": "plexguide/Huntarr.io", "name": "plexguide/Huntarr.io",
"version": "8.1.11", "version": "8.1.11",
@@ -514,11 +599,6 @@
"version": "version/2025.6.3", "version": "version/2025.6.3",
"date": "2025-06-27T14:01:06Z" "date": "2025-06-27T14:01:06Z"
}, },
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.3",
"date": "2025-06-27T09:53:57Z"
},
{ {
"name": "netbox-community/netbox", "name": "netbox-community/netbox",
"version": "v4.3.3", "version": "v4.3.3",
@@ -529,11 +609,6 @@
"version": "v1.84.3", "version": "v1.84.3",
"date": "2025-06-26T16:31:57Z" "date": "2025-06-26T16:31:57Z"
}, },
{
"name": "traefik/traefik",
"version": "v3.5.0-rc1",
"date": "2025-06-26T15:08:43Z"
},
{ {
"name": "node-red/node-red", "name": "node-red/node-red",
"version": "4.1.0-beta.2", "version": "4.1.0-beta.2",
@@ -549,21 +624,11 @@
"version": "v4.101.2", "version": "v4.101.2",
"date": "2025-06-25T21:18:52Z" "date": "2025-06-25T21:18:52Z"
}, },
{
"name": "wavelog/wavelog",
"version": "2.0.5",
"date": "2025-06-25T14:53:31Z"
},
{ {
"name": "moghtech/komodo", "name": "moghtech/komodo",
"version": "v1.18.4", "version": "v1.18.4",
"date": "2025-06-25T00:06:56Z" "date": "2025-06-25T00:06:56Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.204.5",
"date": "2025-06-24T19:17:16Z"
},
{ {
"name": "ErsatzTV/ErsatzTV", "name": "ErsatzTV/ErsatzTV",
"version": "v25.2.0", "version": "v25.2.0",
@@ -584,11 +649,6 @@
"version": "1.22.0", "version": "1.22.0",
"date": "2025-06-23T03:11:37Z" "date": "2025-06-23T03:11:37Z"
}, },
{
"name": "OliveTin/OliveTin",
"version": "2025.6.22",
"date": "2025-06-22T22:41:11Z"
},
{ {
"name": "clusterzx/paperless-ai", "name": "clusterzx/paperless-ai",
"version": "v3.0.7", "version": "v3.0.7",
@@ -659,11 +719,6 @@
"version": "v3.12.7", "version": "v3.12.7",
"date": "2025-06-18T14:22:53Z" "date": "2025-06-18T14:22:53Z"
}, },
{
"name": "openhab/openhab-core",
"version": "5.0.0.M3",
"date": "2025-06-18T14:18:12Z"
},
{ {
"name": "Bubka/2FAuth", "name": "Bubka/2FAuth",
"version": "v5.6.0", "version": "v5.6.0",
@@ -694,16 +749,6 @@
"version": "2.402", "version": "2.402",
"date": "2025-06-17T05:20:42Z" "date": "2025-06-17T05:20:42Z"
}, },
{
"name": "open-webui/open-webui",
"version": "v0.6.15",
"date": "2025-06-16T14:34:42Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
"date": "2025-04-05T19:14:59Z"
},
{ {
"name": "crafty-controller/crafty-4", "name": "crafty-controller/crafty-4",
"version": "v4.4.11", "version": "v4.4.11",
@@ -729,11 +774,6 @@
"version": "v2.12.4.4658", "version": "v2.12.4.4658",
"date": "2025-06-09T17:27:45Z" "date": "2025-06-09T17:27:45Z"
}, },
{
"name": "advplyr/audiobookshelf",
"version": "v2.25.1",
"date": "2025-06-14T23:32:15Z"
},
{ {
"name": "semaphoreui/semaphore", "name": "semaphoreui/semaphore",
"version": "v2.15.0", "version": "v2.15.0",
@@ -744,11 +784,6 @@
"version": "v3.3.25", "version": "v3.3.25",
"date": "2025-06-14T02:52:44Z" "date": "2025-06-14T02:52:44Z"
}, },
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-06-12",
"date": "2025-06-12T20:59:47Z"
},
{ {
"name": "autobrr/autobrr", "name": "autobrr/autobrr",
"version": "v1.63.1", "version": "v1.63.1",
@@ -794,11 +829,6 @@
"version": "v1.5.8", "version": "v1.5.8",
"date": "2025-06-07T11:39:10Z" "date": "2025-06-07T11:39:10Z"
}, },
{
"name": "homebridge/homebridge",
"version": "v1.10.0",
"date": "2025-06-07T08:31:48Z"
},
{ {
"name": "ioBroker/ioBroker", "name": "ioBroker/ioBroker",
"version": "2025-05-31", "version": "2025-05-31",
@@ -814,11 +844,6 @@
"version": "1.6.14", "version": "1.6.14",
"date": "2025-06-05T16:40:52Z" "date": "2025-06-05T16:40:52Z"
}, },
{
"name": "pi-hole/pi-hole",
"version": "v6.1.2",
"date": "2025-06-05T11:32:45Z"
},
{ {
"name": "MariaDB/server", "name": "MariaDB/server",
"version": "mariadb-11.8.2", "version": "mariadb-11.8.2",
@@ -854,11 +879,6 @@
"version": "v1.3.2", "version": "v1.3.2",
"date": "2025-06-01T19:02:46Z" "date": "2025-06-01T19:02:46Z"
}, },
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{ {
"name": "release-argus/Argus", "name": "release-argus/Argus",
"version": "0.26.3", "version": "0.26.3",
@@ -894,11 +914,6 @@
"version": "v3.5.4", "version": "v3.5.4",
"date": "2025-05-25T06:53:34Z" "date": "2025-05-25T06:53:34Z"
}, },
{
"name": "authelia/authelia",
"version": "v4.39.4",
"date": "2025-05-25T02:27:28Z"
},
{ {
"name": "0xERR0R/blocky", "name": "0xERR0R/blocky",
"version": "v0.26.2", "version": "v0.26.2",
@@ -929,11 +944,6 @@
"version": "v25.05.2", "version": "v25.05.2",
"date": "2025-05-17T12:53:29Z" "date": "2025-05-17T12:53:29Z"
}, },
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{ {
"name": "motioneye-project/motioneye", "name": "motioneye-project/motioneye",
"version": "0.42.1", "version": "0.42.1",
@@ -1154,11 +1164,6 @@
"version": "v0.28.1", "version": "v0.28.1",
"date": "2025-03-07T15:41:35Z" "date": "2025-03-07T15:41:35Z"
}, },
{
"name": "eclipse-mosquitto/mosquitto",
"version": "v2.0.21",
"date": "2025-03-06T16:24:56Z"
},
{ {
"name": "toniebox-reverse-engineering/teddycloud", "name": "toniebox-reverse-engineering/teddycloud",
"version": "tc_v0.6.4", "version": "tc_v0.6.4",
@@ -1199,11 +1204,6 @@
"version": "v7.4.1", "version": "v7.4.1",
"date": "2025-02-15T20:54:00Z" "date": "2025-02-15T20:54:00Z"
}, },
{
"name": "mayswind/AriaNg",
"version": "1.3.10",
"date": "2025-02-14T16:23:14Z"
},
{ {
"name": "TryGhost/Ghost-CLI", "name": "TryGhost/Ghost-CLI",
"version": "v1.27.0", "version": "v1.27.0",

View File

@@ -15,6 +15,7 @@ update_os
PG_VERSION="16" setup_postgresql PG_VERSION="16" setup_postgresql
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
setup_composer
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal" fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
msg_info "Setting up PostgreSQL Database" msg_info "Setting up PostgreSQL Database"
@@ -32,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
msg_ok "Set up PostgreSQL Database" msg_ok "Set up PostgreSQL Database"
msg_info "Configuring Baikal" msg_info "Configuring Baikal"
cd /opt/baikal
$STD composer install
cat <<EOF >/opt/baikal/config/baikal.yaml cat <<EOF >/opt/baikal/config/baikal.yaml
database: database:
backend: pgsql backend: pgsql

View File

@@ -0,0 +1,195 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01 | CanbiZ
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/karlomikus/bar-assistant
# Source: https://github.com/karlomikus/vue-salt-rim
# Source: https://www.meilisearch.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
redis-server \
nginx \
lsb-release \
libvips
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
setup_composer
NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
msg_info "Configuring PHP"
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
$STD systemctl reload php${PHPVER}-fpm
msg_info "configured PHP"
msg_info "Configure MeiliSearch"
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
MASTER_KEY=$(openssl rand -base64 12)
sed -i \
-e 's|^env =.*|env = "production"|' \
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
-e 's|^# no_analytics = true|no_analytics = true|' \
-e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
/etc/meilisearch.toml
msg_ok "Configured MeiliSearch"
msg_info "Creating MeiliSearch service"
cat <<EOF >/etc/systemd/system/meilisearch.service
[Unit]
Description=Meilisearch
After=network.target
[Service]
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now meilisearch
sleep 5
msg_ok "Created Service MeiliSearch"
msg_info "Installing Bar Assistant"
cd /opt/bar-assistant
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//')
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
LOCAL_IP=$(hostname -I | awk '{print $1}')
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
-e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
-e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
-e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
-e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
/opt/bar-assistant/.env
$STD composer install --no-interaction
$STD php artisan key:generate
touch storage/bar-assistant/database.ba3.sqlite
$STD php artisan migrate --force
$STD php artisan storage:link
$STD php artisan bar:setup-meilisearch
$STD php artisan scout:sync-index-settings
$STD php artisan config:cache
$STD php artisan route:cache
$STD php artisan event:cache
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
chown -R www-data:www-data /opt/bar-assistant
msg_ok "Installed Bar Assistant"
msg_info "Installing Salt Rim"
cd /opt/vue-salt-rim
cat <<EOF >/opt/vue-salt-rim/public/config.js
window.srConfig = {}
window.srConfig.API_URL = "http://${LOCAL_IP}/bar"
window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search"
EOF
$STD npm install
$STD npm run build
msg_ok "Installed Salt Rim"
msg_info "Creating Service"
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
client_max_body_size 100M;
location /bar/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
location /search/ {
proxy_pass http://127.0.0.1:7700/;
}
location / {
proxy_pass http://127.0.0.1:8081/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
}
server {
listen 127.0.0.1:8080;
server_name example.com;
root /opt/bar-assistant/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
server {
listen 127.0.0.1:8081;
server_name _;
root /opt/vue-salt-rim/dist;
location / {
try_files \$uri \$uri/ /index.html;
}
}
EOF
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
$STD systemctl reload nginx
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -14,12 +14,10 @@ network_check
update_os update_os
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y redis
apache2 \
redis
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy" fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
msg_info "Configuring barcodebuddy" msg_info "Configuring barcodebuddy"

View File

@@ -16,11 +16,11 @@ update_os
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" setup_nodejs
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
msg_info "Installing Dashy ${RELEASE} (Patience)" msg_info "Installing Dashy"
cd /opt/dashy cd /opt/dashy
$STD npm install $STD npm install
$STD npm run build $STD npm run build
msg_ok "Installed Dashy ${RELEASE}" msg_ok "Installed Dashy"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/dashy.service cat <<EOF >/etc/systemd/system/dashy.service

View File

@@ -29,7 +29,17 @@ echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json
$STD sh <(curl -fsSL https://get.docker.com) $STD sh <(curl -fsSL https://get.docker.com)
msg_ok "Installed Docker $DOCKER_LATEST_VERSION" msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Install Docker Compose v2 plugin? <y/N> " prompt_compose
if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
mkdir -p /usr/local/lib/docker/cli-plugins
curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
fi
read -r -p "${TAB3}Would you like to add Portainer (UI)? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
docker volume create portainer_data >/dev/null docker volume create portainer_data >/dev/null
@@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
portainer/portainer-ce:latest portainer/portainer-ce:latest
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
$STD docker run -d \ $STD docker run -d \
-p 9001:9001 \ -p 9001:9001 \
--name portainer_agent \ --name portainer_agent \
@@ -57,12 +67,25 @@ else
fi fi
fi fi
read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? <y/N> " prompt read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then case "${socket_choice,,}" in
msg_info "Enabling Docker TCP socket on port 2375 (insecure)" l)
socket="tcp://127.0.0.1:2375"
mkdir -p /etc/docker ;;
echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json a)
socket="tcp://0.0.0.0:2375"
;;
*)
socket=""
;;
esac
if [[ -n "$socket" ]]; then
msg_info "Enabling Docker TCP socket on $socket"
$STD apt-get install -y jq
tmpfile=$(mktemp)
jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json
mkdir -p /etc/systemd/system/docker.service.d mkdir -p /etc/systemd/system/docker.service.d
cat <<EOF > /etc/systemd/system/docker.service.d/override.conf cat <<EOF > /etc/systemd/system/docker.service.d/override.conf
@@ -75,14 +98,13 @@ EOF
$STD systemctl daemon-reload $STD systemctl daemon-reload
if systemctl restart docker; then if systemctl restart docker; then
msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375" msg_ok "Docker TCP socket available on $socket"
else else
msg_error "Docker failed to restart. Check journalctl -xeu docker.service" msg_error "Docker failed to restart. Check journalctl -xeu docker.service"
exit 1 exit 1
fi fi
fi fi
motd_ssh motd_ssh
customize customize

View File

@@ -13,14 +13,9 @@ setting_up_container
network_check network_check
update_os update_os
msg_info "Installing Dependencies"
$STD apt-get install -y apache2
msg_ok "Installed Dependencies"
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
setup_composer setup_composer
setup_mariadb setup_mariadb
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
LOCAL_IP=$(hostname -I | awk '{print $1}') LOCAL_IP=$(hostname -I | awk '{print $1}')
msg_info "Setting up database" msg_info "Setting up database"
@@ -38,6 +33,8 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
} >>~/firefly.creds } >>~/firefly.creds
msg_ok "Set up database" msg_ok "Set up database"
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
msg_info "Configuring Firefly III (Patience)" msg_info "Configuring Firefly III (Patience)"
chown -R www-data:www-data /opt/firefly chown -R www-data:www-data /opt/firefly
chmod -R 775 /opt/firefly/storage chmod -R 775 /opt/firefly/storage
@@ -45,8 +42,6 @@ cd /opt/firefly
cp .env.example .env cp .env.example .env
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
source ~/.bashrc
$STD composer install --no-dev --no-plugins --no-interaction $STD composer install --no-dev --no-plugins --no-interaction
$STD php artisan firefly:upgrade-database $STD php artisan firefly:upgrade-database
$STD php artisan firefly:correct-database $STD php artisan firefly:correct-database

View File

@@ -66,6 +66,7 @@ $STD apt-get install --no-install-recommends -y \
mesa-vulkan-drivers \ mesa-vulkan-drivers \
ocl-icd-libopencl1 \ ocl-icd-libopencl1 \
tini \ tini \
libaom-dev \
zlib1g zlib1g
$STD apt-get install -y \ $STD apt-get install -y \
libgdk-pixbuf-2.0-dev librsvg2-dev libtool libgdk-pixbuf-2.0-dev librsvg2-dev libtool
@@ -153,7 +154,6 @@ if [[ -f ~/.openvino ]]; then
fi fi
msg_ok "Packages from Testing Repo Installed" msg_ok "Packages from Testing Repo Installed"
# Fix default DB collation issue after libc update
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;" $STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;" $STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
@@ -218,7 +218,7 @@ $STD cmake --preset=release-noplugins \
-DWITH_LIBSHARPYUV=ON \ -DWITH_LIBSHARPYUV=ON \
-DWITH_LIBDE265=ON \ -DWITH_LIBDE265=ON \
-DWITH_AOM_DECODER=OFF \ -DWITH_AOM_DECODER=OFF \
-DWITH_AOM_ENCODER=OFF \ -DWITH_AOM_ENCODER=ON \
-DWITH_X265=OFF \ -DWITH_X265=OFF \
-DWITH_EXAMPLES=OFF \ -DWITH_EXAMPLES=OFF \
.. ..
@@ -254,7 +254,8 @@ $STD make clean
cd "$STAGING_DIR" cd "$STAGING_DIR"
SOURCE=$SOURCE_DIR/libvips SOURCE=$SOURCE_DIR/libvips
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}" # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
$STD git clone https://github.com/libvips/libvips.git "$SOURCE" $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
cd "$SOURCE" cd "$SOURCE"
$STD git reset --hard "$LIBVIPS_REVISION" $STD git reset --hard "$LIBVIPS_REVISION"
@@ -301,6 +302,10 @@ cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/ cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR" cp LICENSE "$APP_DIR"
cd "$APP_DIR"
export SHARP_FORCE_GLOBAL_LIBVIPS=true
$STD npm install sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
msg_ok "Installed Immich Web Components" msg_ok "Installed Immich Web Components"
cd "$SRC_DIR"/machine-learning cd "$SRC_DIR"/machine-learning
@@ -331,8 +336,6 @@ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
msg_info "Installing Immich CLI" msg_info "Installing Immich CLI"
$STD npm install --build-from-source sharp
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
$STD npm i -g @immich/cli $STD npm i -g @immich/cli
msg_ok "Installed Immich CLI" msg_ok "Installed Immich CLI"

148
install/mealie-install.sh Normal file
View File

@@ -0,0 +1,148 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://mealie.io
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
build-essential \
libpq-dev \
libwebp-dev \
libsasl2-dev \
libldap2-dev \
libssl-dev
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.12" setup_uv
POSTGRES_VERSION="16" setup_postgresql
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
msg_info "Setup Database"
DB_NAME=mealie_db
DB_USER=mealie__user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
{
echo "Mealie-Credentials"
echo "Mealie Database User: $DB_USER"
echo "Mealie Database Password: $DB_PASS"
echo "Mealie Database Name: $DB_NAME"
} >>~/mealie.creds
msg_ok "Set up Database"
msg_info "Building Frontend"
export NUXT_TELEMETRY_DISABLED=1
cd /opt/mealie/frontend
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
$STD yarn generate
msg_ok "Built Frontend"
msg_info "Copying Built Frontend into Backend Package"
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
msg_ok "Copied Frontend"
msg_info "Preparing Backend (Poetry)"
$STD uv venv /opt/mealie/.venv
$STD /opt/mealie/.venv/bin/python -m ensurepip --upgrade
$STD /opt/mealie/.venv/bin/python -m pip install --upgrade pip
$STD /opt/mealie/.venv/bin/pip install uv
cd /opt/mealie
$STD /opt/mealie/.venv/bin/uv pip install poetry==2.0.1
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
msg_ok "Prepared Poetry"
msg_info "Writing Environment File"
cat <<EOF >/opt/mealie/mealie.env
HOST=0.0.0.0
PORT=9000
DB_ENGINE=postgres
POSTGRES_SERVER=localhost
POSTGRES_PORT=5432
POSTGRES_USER=${DB_USER}
POSTGRES_PASSWORD=${DB_PASS}
POSTGRES_DB=${DB_NAME}
NLTK_DATA=/nltk_data
PRODUCTION=true
STATIC_FILES=/opt/mealie/frontend/dist
EOF
msg_ok "Wrote Environment File"
msg_info "Creating Start Script"
cat <<'EOF' >/opt/mealie/start.sh
#!/bin/bash
set -a
source /opt/mealie/mealie.env
set +a
exec /opt/mealie/.venv/bin/mealie
EOF
chmod +x /opt/mealie/start.sh
msg_ok "Created Start Script"
msg_info "Building Mealie Backend Wheel"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/poetry build --output dist
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
echo " \\" >>dist/requirements.txt
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
msg_ok "Built Wheel + Requirements"
msg_info "Installing Mealie via uv"
cd /opt/mealie
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
msg_ok "Installed Mealie"
msg_info "Downloading NLTK Data"
mkdir -p /nltk_data/
$STD /opt/mealie/.venv/bin/python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
msg_ok "Downloaded NLTK Data"
msg_info "Set Symbolic Links for Mealie"
ln -sf /opt/mealie/.venv/bin/mealie /usr/local/bin/mealie
ln -sf /opt/mealie/.venv/bin/poetry /usr/local/bin/poetry
msg_ok "Set Symbolic Links"
msg_info "Creating Systemd Service"
cat <<EOF >/etc/systemd/system/mealie.service
[Unit]
Description=Mealie Backend Server
After=network.target postgresql.service
[Service]
User=root
WorkingDirectory=/opt/mealie
ExecStart=/opt/mealie/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now mealie
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -15,7 +15,7 @@ update_os
msg_info "Installing Mosquitto MQTT Broker" msg_info "Installing Mosquitto MQTT Broker"
source /etc/os-release source /etc/os-release
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg >/usr/share/keyrings/mosquitto-repo.gpg.key
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
$STD apt-get update $STD apt-get update

View File

@@ -20,6 +20,8 @@ $STD apt-get install -y \
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64" fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
mv /root/.threadfin /root/.threadfin_version
mkdir -p /root/.threadfin
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/threadfin.service cat <<EOF >/etc/systemd/system/threadfin.service

View File

@@ -192,7 +192,6 @@ base_settings() {
GATE="" GATE=""
APT_CACHER="" APT_CACHER=""
APT_CACHER_IP="" APT_CACHER_IP=""
#DISABLEIP6="no"
MTU="" MTU=""
SD="" SD=""
NS="" NS=""
@@ -228,7 +227,7 @@ write_config() {
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Write configfile" --yesno "Do you want to write the selections to a config file?" 10 60; then if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Write configfile" --yesno "Do you want to write the selections to a config file?" 10 60; then
FILEPATH="/opt/community-scripts/${NSAPP}.conf" FILEPATH="/opt/community-scripts/${NSAPP}.conf"
if [[ ! -f $FILEPATH ]]; then if [[ ! -f $FILEPATH ]]; then
cat <<EOF >"$FILEPATH" cat <<EOF >"$FILEPATH"
# ${NSAPP} Configuration File # ${NSAPP} Configuration File
# Generated on $(date) # Generated on $(date)
@@ -236,31 +235,36 @@ CT_TYPE="${CT_TYPE}"
DISK_SIZE="${DISK_SIZE}" DISK_SIZE="${DISK_SIZE}"
CORE_COUNT="${CORE_COUNT}" CORE_COUNT="${CORE_COUNT}"
RAM_SIZE="${RAM_SIZE}" RAM_SIZE="${RAM_SIZE}"
VERBOSE="${VERBOSE}"
PW="${PW##-password }"
#CT_ID=$NEXTID
HN="${HN}" HN="${HN}"
BRG="${BRG}" BRG="${BRG}"
NET="${NET}"
IPV6_METHOD="${IPV6_METHOD:-none}"
# Set this only if using "IPV6_METHOD=static"
#IPV6STATIC="fd00::1234/64"
GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}"
DISABLEIP6="" MTU="${MTU:-1500}"
PW='${PW:-none}' SD="${SD:-none}"
NS="${NS:-none}"
MAC="${MAC:-none}"
VLAN="${VLAN:-none}"
SSH="${SSH}" SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
VERBOSE="${VERBOSE}"
TAGS="${TAGS:-none}" TAGS="${TAGS:-none}"
VLAN="${VLAN:-none}" ENABLE_FUSE="$ENABLE_FUSE"
MTU="${MTU:-1500}" ENABLE_TUN="$ENABLE_TUN"
GATE="${GATE:-none}"
SD="${SD:-none}"
MAC="${MAC:-none}"
NS="${NS:-none}"
NET="${NET}"
FUSE="${ENABLE_FUSE}"
EOF EOF
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}" echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
else else
echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}" echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Overwrite configfile" --yesno "Do you want to overwrite the existing config file?" 10 60; then if whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "Overwrite configfile" --yesno "Do you want to overwrite the existing config file?" 10 60; then
rm -f "$FILEPATH" rm -f "$FILEPATH"
cat <<EOF >"$FILEPATH" cat <<EOF >"$FILEPATH"
# ${NSAPP} Configuration File # ${NSAPP} Configuration File
# Generated on $(date) # Generated on $(date)
@@ -268,24 +272,29 @@ CT_TYPE="${CT_TYPE}"
DISK_SIZE="${DISK_SIZE}" DISK_SIZE="${DISK_SIZE}"
CORE_COUNT="${CORE_COUNT}" CORE_COUNT="${CORE_COUNT}"
RAM_SIZE="${RAM_SIZE}" RAM_SIZE="${RAM_SIZE}"
VERBOSE="${VERBOSE}"
PW="${PW##-password }"
#CT_ID=$NEXTID
HN="${HN}" HN="${HN}"
BRG="${BRG}" BRG="${BRG}"
NET="${NET}"
IPV6_METHOD="${IPV6_METHOD:-none}"
# Set this only if using "IPV6_METHOD=static"
#IPV6STATIC="fd00::1234/64"
GATE="${GATE:-none}"
APT_CACHER_IP="${APT_CACHER_IP:-none}" APT_CACHER_IP="${APT_CACHER_IP:-none}"
DISABLEIP6="" MTU="${MTU:-1500}"
PW='${PW:-none}' SD="${SD:-none}"
NS="${NS:-none}"
MAC="${MAC:-none}"
VLAN="${VLAN:-none}"
SSH="${SSH}" SSH="${SSH}"
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}" SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
VERBOSE="${VERBOSE}"
TAGS="${TAGS:-none}" TAGS="${TAGS:-none}"
VLAN="${VLAN:-none}" ENABLE_FUSE="$ENABLE_FUSE"
MTU="${MTU:-1500}" ENABLE_TUN="$ENABLE_TUN"
GATE="${GATE:-none}"
SD="${SD:-none}"
MAC="${MAC:-none}"
NS="${NS:-none}"
NET="${NET}"
FUSE="${ENABLE_FUSE}"
EOF EOF
echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}" echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
else else
@@ -667,13 +676,6 @@ advanced_settings() {
fi fi
fi fi
# if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "IPv6" --yesno "Disable IPv6?" 10 58); then
# DISABLEIP6="yes"
# else
# DISABLEIP6="no"
# fi
# echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
if [ -z "$MTU1" ]; then if [ -z "$MTU1" ]; then
MTU1="Default" MTU1="Default"
@@ -815,7 +817,6 @@ DIAGNOSTICS=yes
#"ram_size" #"ram_size"
#"os_type" #"os_type"
#"os_version" #"os_version"
#"disableip6"
#"nsapp" #"nsapp"
#"method" #"method"
#"pve_version" #"pve_version"
@@ -842,7 +843,6 @@ DIAGNOSTICS=no
#"ram_size" #"ram_size"
#"os_type" #"os_type"
#"os_version" #"os_version"
#"disableip6"
#"nsapp" #"nsapp"
#"method" #"method"
#"pve_version" #"pve_version"
@@ -1064,7 +1064,6 @@ build_container() {
export CACHER="$APT_CACHER" export CACHER="$APT_CACHER"
export CACHER_IP="$APT_CACHER_IP" export CACHER_IP="$APT_CACHER_IP"
export tz="$timezone" export tz="$timezone"
#export DISABLEIPV6="$DISABLEIP6"
export APPLICATION="$APP" export APPLICATION="$APP"
export app="$NSAPP" export app="$NSAPP"
export PASSWORD="$PW" export PASSWORD="$PW"

View File

@@ -446,6 +446,22 @@ config_file() {
fi fi
fi fi
if [[ "$IPV6_METHOD" == "static" ]]; then
if [[ -n "$IPV6STATIC" ]]; then
IP6=",ip6=${IPV6STATIC}"
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}${IPV6STATIC}${CL}"
else
msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty"
exit
fi
elif [[ "$IPV6_METHOD" == "auto" ]]; then
IP6=",ip6=auto"
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}auto${CL}"
else
IP6=""
echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}none${CL}"
fi
if [[ -n "${SD-}" ]]; then if [[ -n "${SD-}" ]]; then
if [[ "$SD" == "none" ]]; then if [[ "$SD" == "none" ]]; then
SD="" SD=""
@@ -622,6 +638,24 @@ config_file() {
echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}" echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}"
fi fi
if [[ -n "$ENABLE_TUN" ]]; then
if [[ "$ENABLE_TUN" == "yes" ]]; then
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}Yes${CL}"
elif [[ "$ENABLE_TUN" == "no" ]]; then
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}No${CL}"
else
msg_error "Enable TUN needs to be 'yes' or 'no', was ${ENABLE_TUN}"
exit
fi
else
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58); then
ENABLE_TUN="yes"
else
ENABLE_TUN="no"
fi
echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}$ENABLE_TUN${CL}"
fi
if [[ -n "${VERBOSE-}" ]]; then if [[ -n "${VERBOSE-}" ]]; then
if [[ "$VERBOSE" == "yes" ]]; then if [[ "$VERBOSE" == "yes" ]]; then
echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}" echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"