Compare commits

...

11 Commits

Author SHA1 Message Date
4280bf07e9 cpu 2025-06-27 23:04:25 +02:00
ccb06d547a curl 2025-06-27 22:36:23 +02:00
eb2ad226e9 'Add new script' 2025-06-27 20:35:14 +00:00
7057fba151 push-to-gitea.yaml (#5523) 2025-06-27 20:51:09 +02:00
e24ca6472c Update CHANGELOG.md (#5522)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-06-27 16:41:35 +01:00
028feb363f Update wireguard.json (#5514) 2025-06-27 17:40:59 +02:00
491b341fdf push-to-gitea.yaml (#5521) 2025-06-27 17:17:22 +02:00
db77e42a50 Update CHANGELOG.md (#5520)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-06-27 15:04:47 +01:00
cf3f790f03 wizarr: remove unneeded tmp file (#5517) 2025-06-27 16:04:11 +02:00
a0da56997c Workflow to gitea (forgot git add and commit) (#5513)
* New workflow to push to gitea and change links

* Update workflow
2025-06-27 16:03:27 +02:00
c000235d81 Update versions.json (#5518)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-06-27 14:07:44 +02:00
9 changed files with 304 additions and 60 deletions

View File

@ -33,12 +33,16 @@ jobs:
echo "No files found containing GitHub raw URLs"
fi
- name: Push to Gitea
run: |
git config --global user.name "Push From Github"
git config --global user.email "actions@github.com"
git remote add gitea https://$GITEA_USER:$GITEA_TOKEN@git.community-scripts.org/community-scripts/ProxmoxVE.git
git push gitea --all
git add .
git commit -m "Sync to Gitea"
git push gitea --all --force
env:
GITEA_USER: ${{ secrets.GITEA_USERNAME }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}

View File

@ -16,12 +16,24 @@ All LXC instances created using this repository come pre-installed with Midnight
## 2025-06-27
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- wizarr: remove unneeded tmp file [@MickLesk](https://github.com/MickLesk) ([#5517](https://github.com/community-scripts/ProxmoxVE/pull/5517))
### 🧰 Maintenance
- #### 📂 Github
- New workflow to push to gitea and change links to gitea [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5510](https://github.com/community-scripts/ProxmoxVE/pull/5510))
### 🌐 Website
- #### 📝 Script Information
- Wireguard, Update Link to Documentation. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5514](https://github.com/community-scripts/ProxmoxVE/pull/5514))
## 2025-06-26
### 🆕 New Scripts

79
ct/booklore.sh Normal file
View File

@ -0,0 +1,79 @@
#!/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://github.com/adityachandelgit/BookLore
APP="BookLore"
var_tags="${var_tags:-books;library}"
var_cpu="${var_cpu:-3}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-7}"
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/booklore ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.booklore 2>/dev/null)" ]] || [[ ! -f ~/.booklore ]]; then
msg_info "Stopping $APP"
systemctl stop booklore
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "booklore" "adityachandelgit/BookLore"
msg_info "Building Frontend"
cd /opt/booklore/booklore-ui
$STD npm install --force
$STD npm run build --configuration=production
msg_ok "Built Frontend"
msg_info "Building Backend"
cd /opt/booklore/booklore-api
APP_VERSION=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
$STD ./gradlew clean build --no-daemon
mkdir -p /opt/booklore/dist
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
if [[ -z "$JAR_PATH" ]]; then
msg_error "Backend JAR not found"
exit 1
fi
cp "$JAR_PATH" /opt/booklore/dist/app.jar
msg_ok "Built Backend"
msg_info "Starting $APP"
systemctl start booklore
systemctl reload nginx
msg_ok "Started $APP"
msg_ok "Update 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}:6060${CL}"

6
ct/headers/booklore Normal file
View File

@ -0,0 +1,6 @@
____ __ __
/ __ )____ ____ / /__/ / ____ ________
/ __ / __ \/ __ \/ //_/ / / __ \/ ___/ _ \
/ /_/ / /_/ / /_/ / ,< / /___/ /_/ / / / __/
/_____/\____/\____/_/|_/_____/\____/_/ \___/

View File

@ -60,7 +60,6 @@ function update_script() {
msg_info "Cleaning Up"
rm -rf "$BACKUP_FILE"
rm /tmp/"$RELEASE".zip
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else

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

@ -0,0 +1,35 @@
{
"name": "BookLore",
"slug": "booklore",
"categories": [
13
],
"date_created": "2025-06-23",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 6060,
"documentation": "https://github.com/ejmg/booklore",
"website": "https://booklore.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/booklore.webp",
"config_path": "/opt/booklore_storage/.env",
"description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.",
"install_methods": [
{
"type": "default",
"script": "ct/booklore.sh",
"resources": {
"cpu": 3,
"ram": 2048,
"hdd": 7,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -1,4 +1,54 @@
[
{
"name": "rclone/rclone",
"version": "v1.70.2",
"date": "2025-06-27T11:30:28Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.1",
"date": "2025-04-11T09:57:47Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.3",
"date": "2025-06-27T09:53:57Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.1",
"date": "2025-06-27T09:14:14Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.0-rc.5",
"date": "2025-06-27T08:53:45Z"
},
{
"name": "cockpit-project/cockpit",
"version": "341.1",
"date": "2025-06-27T08:50:16Z"
},
{
"name": "home-assistant/core",
"version": "2025.6.3",
"date": "2025-06-24T13:00:12Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.10",
"date": "2025-06-27T06:40:00Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2064",
"date": "2025-06-27T05:54:03Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.3-rc5",
"date": "2025-06-26T04:47:09Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
@ -14,21 +64,16 @@
"version": "15.2",
"date": "2025-04-14T15:37:12Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.5",
"date": "2025-05-28T06:49:43Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.3",
"date": "2025-06-26T18:42:56Z"
},
{
"name": "home-assistant/core",
"version": "2025.6.3",
"date": "2025-06-24T13:00:12Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.4-rc0",
"date": "2025-06-26T17:32:48Z"
},
{
"name": "apache/tika",
"version": "3.2.1-rc2",
@ -74,11 +119,6 @@
"version": "18.0.7",
"date": "2025-06-26T09:16:33Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2056",
"date": "2025-06-26T05:51:50Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.18",
@ -114,11 +154,6 @@
"version": "v3.2.0",
"date": "2025-06-25T17:31:48Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.5",
"date": "2025-05-28T06:49:43Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.5",
@ -134,16 +169,6 @@
"version": "testing",
"date": "2025-06-16T18:10:42Z"
},
{
"name": "cockpit-project/cockpit",
"version": "341",
"date": "2025-06-25T11:49:28Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.0",
"date": "2025-05-12T09:12:04Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.17",
@ -216,8 +241,8 @@
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-06-23T19:10:33Z"
"version": "v4.2.1",
"date": "2025-06-03T20:04:28Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
@ -314,11 +339,6 @@
"version": "v4.0.15.2941",
"date": "2025-06-20T17:20:54Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.9",
"date": "2025-06-20T10:58:45Z"
},
{
"name": "syncthing/syncthing",
"version": "2.0.0-rc.19",
@ -334,11 +354,6 @@
"version": "v2.17.1",
"date": "2025-06-19T19:35:01Z"
},
{
"name": "rclone/rclone",
"version": "v1.70.1",
"date": "2025-06-19T13:19:02Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.21.0",
@ -429,11 +444,6 @@
"version": "2025.6.1",
"date": "2025-06-17T12:45:39Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.1",
"date": "2025-04-11T09:57:47Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.9",
@ -554,11 +564,6 @@
"version": "v3.3.25",
"date": "2025-06-14T02:52:44Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.2",
"date": "2025-06-12T22:48:11Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-06-12",
@ -569,11 +574,6 @@
"version": "v3.3.0",
"date": "2025-06-12T06:54:48Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.0-rc.4",
"date": "2025-06-12T00:27:41Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.63.1",

View File

@ -44,7 +44,7 @@
},
"notes": [
{
"text": "Wireguard and WGDashboard are not the same. More info: `https://donaldzou.github.io/WGDashboard-Documentation/what-is-wireguard-what-is-wgdashboard.html`",
"text": "Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
"type": "info"
}
]

109
install/booklore-install.sh Normal file
View File

@ -0,0 +1,109 @@
#!/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://github.com/adityachandelgit/BookLore
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 nginx
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "booklore" "adityachandelgit/BookLore"
JAVA_VERSION="21" setup_java
NODE_VERSION="22" setup_nodejs
setup_mariadb
setup_yq
msg_info "Setting up database"
DB_NAME=booklore_db
DB_USER=booklore_user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
$STD mariadb -u root -e "GRANT SELECT ON \`mysql\`.\`time_zone_name\` TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "BookLore Database Credentials"
echo "Database: $DB_NAME"
echo "Username: $DB_USER"
echo "Password: $DB_PASS"
} >>~/booklore.creds
msg_ok "Set up database"
msg_info "Building Frontend"
cd /opt/booklore/booklore-ui
$STD npm install --force
$STD npm run build --configuration=production
msg_ok "Built Frontend"
msg_info "Creating Environment"
mkdir -p /opt/booklore_storage{/data,/books}
cat <<EOF >/opt/booklore_storage/.env
DATABASE_URL=jdbc:mariadb://localhost:3306/$DB_NAME
DATABASE_USERNAME=$DB_USER
DATABASE_PASSWORD=$DB_PASS
BOOKLORE_DATA_PATH=/opt/booklore_storage/data
BOOKLORE_BOOKS_PATH=/opt/booklore_storage/books
EOF
msg_ok "Created Environment"
msg_info "Building Backend"
cd /opt/booklore/booklore-api
APP_VERSION=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
$STD ./gradlew clean build --no-daemon
mkdir -p /opt/booklore/dist
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
if [[ -z "$JAR_PATH" ]]; then
msg_error "Backend JAR not found"
exit 1
fi
cp "$JAR_PATH" /opt/booklore/dist/app.jar
msg_ok "Built Backend"
msg_info "Configure Nginx"
rm -rf /usr/share/nginx/html
ln -s /opt/booklore/booklore-ui/dist/booklore/browser /usr/share/nginx/html
cp /opt/booklore/nginx.conf /etc/nginx/nginx.conf
systemctl restart nginx
msg_ok "Configured Nginx"
msg_info "Creating Systemd Service"
cat <<EOF >/etc/systemd/system/booklore.service
[Unit]
Description=BookLore Java Service
After=network.target
[Service]
User=root
WorkingDirectory=/opt/booklore/dist
ExecStart=/usr/bin/java -jar /opt/booklore/dist/app.jar
EnvironmentFile=/opt/booklore_storage/.env
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now booklore
msg_ok "Created BookLore Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"