Compare commits
27 Commits
localizati
...
update/too
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5faa7f3646 | ||
|
|
bc52256301 | ||
|
|
9e66cdd7ea | ||
|
|
83a51db265 | ||
|
|
1b09d1494e | ||
|
|
02fe842995 | ||
|
|
a464c845c2 | ||
|
|
5a69f58770 | ||
|
|
48c243f624 | ||
|
|
7af0717b1b | ||
|
|
9977d390ac | ||
|
|
ea5e801718 | ||
|
|
7d54481f75 | ||
|
|
fbc6a9362e | ||
|
|
6b534474c4 | ||
|
|
5bfbaca732 | ||
|
|
a3d0141950 | ||
|
|
529cb92e3c | ||
|
|
b175c709f0 | ||
|
|
bf908eef66 | ||
|
|
4adf052db4 | ||
|
|
2158ea42ba | ||
|
|
5fc1205ca5 | ||
|
|
d928058f97 | ||
|
|
11e1704116 | ||
|
|
26829ce355 | ||
|
|
deffba0969 |
@@ -26,4 +26,4 @@ AUTH_PASSWORD_HASH=
|
||||
AUTH_ENABLED=false
|
||||
AUTH_SETUP_COMPLETED=false
|
||||
JWT_SECRET=
|
||||
DATABASE_URL="file:./data/database.sqlite"
|
||||
DATABASE_URL="file:/opt/ProxmoxVE-Local/data/settings.db"
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -37,6 +37,9 @@ yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
update.log
|
||||
server.log
|
||||
|
||||
# local env files
|
||||
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
|
||||
.env
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
{
|
||||
"name": "Frigate",
|
||||
"slug": "frigate",
|
||||
"categories": [
|
||||
15
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": true,
|
||||
"interface_port": 5000,
|
||||
"documentation": "https://docs.frigate.video/",
|
||||
"website": "https://frigate.video/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
|
||||
"config_path": "",
|
||||
"description": "Frigate is an open source NVR built around real-time AI object detection. All processing is performed locally on your own hardware, and your camera feeds never leave your home.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/frigate.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "11"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Discussions (explore more advanced methods): `https://github.com/tteck/Proxmox/discussions/2711`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "go2rtc Interface port:`1984`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
"version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"documentation": "https://docs.openarchiver.com/",
|
||||
"config_path": "/opt/openarchiver/.env",
|
||||
"website": "https://openarchiver.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/OpenArchiver.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/open-archiver.webp",
|
||||
"description": "Open Archiver is a secure, self-hosted email archiving solution, and it's completely open source. Get an email archiver that enables full-text search across email and attachments. Create a permanent, searchable, and compliant mail archive from Google Workspace, Microsoft 35, and any IMAP server.",
|
||||
"install_methods": [
|
||||
{
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
"type": "default",
|
||||
"script": "ct/paperless-ai.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
|
||||
@@ -1,29 +1,164 @@
|
||||
[
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "5.0.6-tentative",
|
||||
"date": "2025-10-21T11:42:35Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.209.3",
|
||||
"date": "2025-10-21T10:53:07Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v11.5.10",
|
||||
"date": "2025-10-21T10:46:47Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.0.20rc1",
|
||||
"date": "2025-10-21T09:14:14Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.115.3",
|
||||
"date": "2025-10-14T14:40:17Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.128.0",
|
||||
"date": "2025-10-21T08:30:52Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.7.1",
|
||||
"date": "2025-10-15T10:44:03Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "prototype-v1.24.0.ignore-embedding-failures-2",
|
||||
"date": "2025-10-21T07:36:22Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.166",
|
||||
"date": "2025-10-21T05:54:33Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.16.0-rc1",
|
||||
"date": "2025-10-21T00:37:47Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.20",
|
||||
"date": "2025-10-21T00:27:05Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.0.1",
|
||||
"date": "2025-10-15T16:53:55Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.13.0",
|
||||
"date": "2025-10-21T00:21:04Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.10.0-rc2",
|
||||
"date": "2025-10-21T00:19:36Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.27.1",
|
||||
"date": "2025-10-21T00:01:36Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.14.1",
|
||||
"date": "2025-10-20T22:10:56Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.1",
|
||||
"date": "2025-10-16T07:21:53Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.8.1",
|
||||
"date": "2025-10-20T20:53:56Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.105.1",
|
||||
"date": "2025-10-20T20:19:23Z"
|
||||
},
|
||||
{
|
||||
"name": "pymedusa/Medusa",
|
||||
"version": "v1.0.23",
|
||||
"date": "2025-10-20T19:51:33Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.23.0-alpha.16",
|
||||
"date": "2025-10-20T19:29:20Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.80",
|
||||
"date": "2025-09-30T20:25:16Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.2.4-beta",
|
||||
"date": "2025-10-20T17:58:55Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.91.0-pre",
|
||||
"date": "2025-10-20T16:18:51Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.1",
|
||||
"date": "2025-10-20T16:11:12Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.29.2",
|
||||
"date": "2025-10-20T16:07:20Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.84.1",
|
||||
"date": "2025-10-20T15:32:24Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.71.2",
|
||||
"date": "2025-10-20T15:25:52Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "7.0.0-rc.1",
|
||||
"date": "2025-10-20T11:53:31Z"
|
||||
},
|
||||
{
|
||||
"name": "Kareadita/Kavita",
|
||||
"version": "v0.8.8",
|
||||
"date": "2025-10-20T11:26:24Z"
|
||||
},
|
||||
{
|
||||
"name": "wizarrrr/wizarr",
|
||||
"version": "v2025.10.4",
|
||||
"date": "2025-10-20T10:45:54Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "cassandra-4.0.19",
|
||||
"date": "2025-10-20T09:08:49Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
|
||||
"date": "2025-10-20T07:01:38Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.24.159",
|
||||
"date": "2025-10-20T05:53:23Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "1.0.7",
|
||||
@@ -49,16 +184,6 @@
|
||||
"version": "v1.0.0-beta27",
|
||||
"date": "2025-10-20T00:38:13Z"
|
||||
},
|
||||
{
|
||||
"name": "jeedom/core",
|
||||
"version": "4.4.20",
|
||||
"date": "2025-10-20T00:27:05Z"
|
||||
},
|
||||
{
|
||||
"name": "steveiliop56/tinyauth",
|
||||
"version": "v4.0.1",
|
||||
"date": "2025-10-15T16:53:55Z"
|
||||
},
|
||||
{
|
||||
"name": "seriousm4x/UpSnap",
|
||||
"version": "5.2.3",
|
||||
@@ -99,11 +224,6 @@
|
||||
"version": "v2.14.5.4836",
|
||||
"date": "2025-10-08T15:30:50Z"
|
||||
},
|
||||
{
|
||||
"name": "henrygd/beszel",
|
||||
"version": "v0.14.0",
|
||||
"date": "2025-10-18T23:54:15Z"
|
||||
},
|
||||
{
|
||||
"name": "BerriAI/litellm",
|
||||
"version": "v1.78.5.rc.1",
|
||||
@@ -124,11 +244,6 @@
|
||||
"version": "v2025-10-18",
|
||||
"date": "2025-10-18T20:35:54Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisvel/tududi",
|
||||
"version": "v0.84",
|
||||
"date": "2025-10-18T19:39:04Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.19.5",
|
||||
@@ -154,21 +269,6 @@
|
||||
"version": "v0.9.0",
|
||||
"date": "2025-10-18T17:03:56Z"
|
||||
},
|
||||
{
|
||||
"name": "booklore-app/booklore",
|
||||
"version": "v1.8.0",
|
||||
"date": "2025-10-18T16:22:25Z"
|
||||
},
|
||||
{
|
||||
"name": "chrisbenincasa/tunarr",
|
||||
"version": "v0.23.0-alpha.14",
|
||||
"date": "2025-10-18T15:43:53Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.29.1",
|
||||
"date": "2025-10-18T13:14:21Z"
|
||||
},
|
||||
{
|
||||
"name": "TasmoAdmin/TasmoAdmin",
|
||||
"version": "v4.3.2",
|
||||
@@ -199,11 +299,6 @@
|
||||
"version": "v25.4",
|
||||
"date": "2025-10-09T10:27:01Z"
|
||||
},
|
||||
{
|
||||
"name": "TwiN/gatus",
|
||||
"version": "v5.27.0",
|
||||
"date": "2025-10-18T02:44:26Z"
|
||||
},
|
||||
{
|
||||
"name": "9001/copyparty",
|
||||
"version": "v1.19.17",
|
||||
@@ -219,26 +314,11 @@
|
||||
"version": "2025.10.3",
|
||||
"date": "2025-10-17T21:15:07Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.105.0",
|
||||
"date": "2025-10-17T19:55:55Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.9.1.80",
|
||||
"date": "2025-09-30T20:25:16Z"
|
||||
},
|
||||
{
|
||||
"name": "forgejo/forgejo",
|
||||
"version": "v13.0.1",
|
||||
"date": "2025-10-17T18:54:16Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.4.1",
|
||||
"date": "2025-10-16T07:21:53Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.3.4",
|
||||
@@ -254,6 +334,11 @@
|
||||
"version": "v2.40.1",
|
||||
"date": "2025-10-17T13:42:04Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "5.26.14",
|
||||
"date": "2025-10-17T12:38:22Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "server/public/v0.1.21",
|
||||
@@ -369,11 +454,6 @@
|
||||
"version": "v2.13.1",
|
||||
"date": "2025-10-15T13:29:37Z"
|
||||
},
|
||||
{
|
||||
"name": "meilisearch/meilisearch",
|
||||
"version": "prototype-docker-alpine-3-22-v8",
|
||||
"date": "2025-10-15T13:20:20Z"
|
||||
},
|
||||
{
|
||||
"name": "TandoorRecipes/recipes",
|
||||
"version": "2.3.3",
|
||||
@@ -384,11 +464,6 @@
|
||||
"version": "jenkins-2.528.1",
|
||||
"date": "2025-10-15T12:51:20Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "7.0.0-beta.5",
|
||||
"date": "2025-10-15T11:43:16Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "349",
|
||||
@@ -399,11 +474,6 @@
|
||||
"version": "v0.14.1",
|
||||
"date": "2024-08-29T22:32:51Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.15.2",
|
||||
"date": "2025-10-15T07:42:29Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.1.2",
|
||||
@@ -419,21 +489,11 @@
|
||||
"version": "2025.10.0",
|
||||
"date": "2025-10-14T19:07:37Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.209.2",
|
||||
"date": "2025-10-14T18:55:44Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.5.5",
|
||||
"date": "2025-10-14T18:48:36Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.88.4",
|
||||
"date": "2025-10-14T17:57:52Z"
|
||||
},
|
||||
{
|
||||
"name": "plankanban/planka",
|
||||
"version": "planka-1.1.0",
|
||||
@@ -449,11 +509,6 @@
|
||||
"version": "v1.140.0",
|
||||
"date": "2025-10-14T15:57:12Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.115.3",
|
||||
"date": "2025-10-14T14:40:17Z"
|
||||
},
|
||||
{
|
||||
"name": "rogerfar/rdt-client",
|
||||
"version": "v2.0.119",
|
||||
@@ -584,11 +639,6 @@
|
||||
"version": "11.0.1",
|
||||
"date": "2025-10-09T12:34:15Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.12.10",
|
||||
"date": "2025-10-09T04:32:35Z"
|
||||
},
|
||||
{
|
||||
"name": "rabbitmq/rabbitmq-server",
|
||||
"version": "v4.1.4",
|
||||
@@ -639,11 +689,6 @@
|
||||
"version": "v0.15.1",
|
||||
"date": "2025-10-07T20:30:56Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.127.0",
|
||||
"date": "2025-10-07T14:31:32Z"
|
||||
},
|
||||
{
|
||||
"name": "thecfu/scraparr",
|
||||
"version": "v2.2.5",
|
||||
@@ -714,11 +759,6 @@
|
||||
"version": "8.2.2",
|
||||
"date": "2025-10-03T06:22:38Z"
|
||||
},
|
||||
{
|
||||
"name": "kyantech/Palmr",
|
||||
"version": "v3.2.3-beta",
|
||||
"date": "2025-10-02T13:48:14Z"
|
||||
},
|
||||
{
|
||||
"name": "actualbudget/actual",
|
||||
"version": "v25.10.0",
|
||||
@@ -739,11 +779,6 @@
|
||||
"version": "v5.41.4",
|
||||
"date": "2025-09-30T22:26:11Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.4.3",
|
||||
"date": "2025-09-30T21:49:53Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.2.1",
|
||||
@@ -764,21 +799,11 @@
|
||||
"version": "v1.7.4",
|
||||
"date": "2025-09-30T13:34:30Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "4.4.46",
|
||||
"date": "2025-09-30T13:21:24Z"
|
||||
},
|
||||
{
|
||||
"name": "thomiceli/opengist",
|
||||
"version": "v1.11.1",
|
||||
"date": "2025-09-30T00:24:16Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.8.4",
|
||||
"date": "2025-09-30T00:03:11Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/telegraf",
|
||||
"version": "v1.36.2",
|
||||
@@ -849,11 +874,6 @@
|
||||
"version": "1.2.39",
|
||||
"date": "2025-09-25T15:57:02Z"
|
||||
},
|
||||
{
|
||||
"name": "rclone/rclone",
|
||||
"version": "v1.71.1",
|
||||
"date": "2025-09-24T16:32:16Z"
|
||||
},
|
||||
{
|
||||
"name": "alexta69/metube",
|
||||
"version": "2025.09.24",
|
||||
@@ -869,11 +889,6 @@
|
||||
"version": "v2.0.10",
|
||||
"date": "2025-09-24T08:33:37Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v12.2.0",
|
||||
"date": "2025-09-23T23:47:02Z"
|
||||
},
|
||||
{
|
||||
"name": "postgres/postgres",
|
||||
"version": "REL_18_0",
|
||||
@@ -1014,11 +1029,6 @@
|
||||
"version": "0.6",
|
||||
"date": "2025-09-05T06:05:04Z"
|
||||
},
|
||||
{
|
||||
"name": "louislam/uptime-kuma",
|
||||
"version": "2.0.0-beta.2-temp",
|
||||
"date": "2025-03-28T08:45:58Z"
|
||||
},
|
||||
{
|
||||
"name": "healthchecks/healthchecks",
|
||||
"version": "v3.11.2",
|
||||
@@ -1224,11 +1234,6 @@
|
||||
"version": "250707-d28b3101e",
|
||||
"date": "2025-07-07T15:15:21Z"
|
||||
},
|
||||
{
|
||||
"name": "Kareadita/Kavita",
|
||||
"version": "v0.8.7",
|
||||
"date": "2025-07-05T20:08:58Z"
|
||||
},
|
||||
{
|
||||
"name": "qbittorrent/qBittorrent",
|
||||
"version": "release-5.1.2",
|
||||
@@ -1479,11 +1484,6 @@
|
||||
"version": "v0.7.3",
|
||||
"date": "2024-12-15T10:18:06Z"
|
||||
},
|
||||
{
|
||||
"name": "pymedusa/Medusa",
|
||||
"version": "v1.0.22",
|
||||
"date": "2024-12-13T12:22:19Z"
|
||||
},
|
||||
{
|
||||
"name": "phpipam/phpipam",
|
||||
"version": "v1.7.3",
|
||||
|
||||
612
package-lock.json
generated
612
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -51,36 +51,36 @@
|
||||
"remark-gfm": "^4.0.1",
|
||||
"server-only": "^0.0.1",
|
||||
"strip-ansi": "^7.1.2",
|
||||
"superjson": "^2.2.1",
|
||||
"superjson": "^2.2.3",
|
||||
"tailwind-merge": "^3.3.1",
|
||||
"ws": "^8.18.3",
|
||||
"zod": "^4.1.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@tailwindcss/postcss": "^4.0.15",
|
||||
"@tailwindcss/postcss": "^4.1.15",
|
||||
"@testing-library/jest-dom": "^6.9.1",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@testing-library/user-event": "^14.6.1",
|
||||
"@types/bcryptjs": "^3.0.0",
|
||||
"@types/better-sqlite3": "^7.6.8",
|
||||
"@types/jsonwebtoken": "^9.0.10",
|
||||
"@types/node": "^24.8.1",
|
||||
"@types/node": "^24.9.1",
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-dom": "^19.2.2",
|
||||
"@vitejs/plugin-react": "^5.0.2",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
"@vitest/ui": "^3.2.4",
|
||||
"eslint": "^9.38.0",
|
||||
"eslint-config-next": "^15.5.6",
|
||||
"jsdom": "^27.0.0",
|
||||
"eslint-config-next": "^16.0.0",
|
||||
"jsdom": "^27.0.1",
|
||||
"postcss": "^8.5.3",
|
||||
"prettier": "^3.5.3",
|
||||
"prettier-plugin-tailwindcss": "^0.7.1",
|
||||
"prisma": "^6.17.1",
|
||||
"tailwindcss": "^4.1.14",
|
||||
"tailwindcss": "^4.1.15",
|
||||
"typescript": "^5.8.2",
|
||||
"typescript-eslint": "^8.46.1",
|
||||
"typescript-eslint": "^8.46.2",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
"ct3aMetadata": {
|
||||
|
||||
@@ -439,17 +439,14 @@ advanced_settings() {
|
||||
exit_script
|
||||
fi
|
||||
done
|
||||
|
||||
if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 "$NEXTID" --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
|
||||
if [ -z "$CT_ID" ]; then
|
||||
CT_ID="$NEXTID"
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
else
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
fi
|
||||
else
|
||||
exit_script
|
||||
fi
|
||||
echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
|
||||
|
||||
while true; do
|
||||
if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
98
update.sh
98
update.sh
@@ -1,5 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
#21.10.2025 - @michelroegl-brunner
|
||||
# Enhanced update script for ProxmoxVE-Local
|
||||
# Fetches latest release from GitHub and backs up data directory
|
||||
|
||||
@@ -298,6 +299,7 @@ clear_original_directory() {
|
||||
# List of files/directories to preserve (already backed up)
|
||||
local preserve_patterns=(
|
||||
"data"
|
||||
"data/*"
|
||||
".env"
|
||||
"*.log"
|
||||
"update.log"
|
||||
@@ -354,7 +356,7 @@ restore_backup_files() {
|
||||
if [ -f ".env" ]; then
|
||||
rm -f ".env"
|
||||
fi
|
||||
if mv "$BACKUP_DIR/.env" ".env"; then
|
||||
if cp "$BACKUP_DIR/.env" ".env"; then
|
||||
log_success ".env file restored from backup"
|
||||
else
|
||||
log_error "Failed to restore .env file"
|
||||
@@ -369,7 +371,7 @@ restore_backup_files() {
|
||||
if [ -d "data" ]; then
|
||||
rm -rf "data"
|
||||
fi
|
||||
if mv "$BACKUP_DIR/data" "data"; then
|
||||
if cp -r "$BACKUP_DIR/data" "data"; then
|
||||
log_success "Data directory restored from backup"
|
||||
else
|
||||
log_error "Failed to restore data directory"
|
||||
@@ -396,7 +398,7 @@ restore_backup_files() {
|
||||
rm -rf "$target_dir"
|
||||
fi
|
||||
|
||||
if mv "$BACKUP_DIR/$backup_name" "$target_dir"; then
|
||||
if cp -r "$BACKUP_DIR/$backup_name" "$target_dir"; then
|
||||
log_success "$target_dir directory restored from backup"
|
||||
else
|
||||
log_error "Failed to restore $target_dir directory"
|
||||
@@ -412,6 +414,30 @@ restore_backup_files() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Verify database was restored correctly
|
||||
verify_database_restored() {
|
||||
log "Verifying database was restored correctly..."
|
||||
|
||||
# Check for both possible database filenames
|
||||
local db_file=""
|
||||
if [ -f "data/database.sqlite" ]; then
|
||||
db_file="data/database.sqlite"
|
||||
elif [ -f "data/settings.db" ]; then
|
||||
db_file="data/settings.db"
|
||||
else
|
||||
log_error "Database file not found after restore! (checked database.sqlite and settings.db)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local db_size=$(stat -f%z "$db_file" 2>/dev/null || stat -c%s "$db_file" 2>/dev/null)
|
||||
if [ "$db_size" -eq 0 ]; then
|
||||
log_warning "Database file is empty - will be recreated by Prisma migrations"
|
||||
return 0 # Don't fail the update, let Prisma recreate the database
|
||||
fi
|
||||
|
||||
log_success "Database verified (file: $db_file, size: $db_size bytes)"
|
||||
}
|
||||
|
||||
# Ensure DATABASE_URL is set in .env file for Prisma
|
||||
ensure_database_url() {
|
||||
log "Ensuring DATABASE_URL is set in .env file..."
|
||||
@@ -437,7 +463,7 @@ ensure_database_url() {
|
||||
log "Adding DATABASE_URL to .env file..."
|
||||
echo "" >> .env
|
||||
echo "# Database" >> .env
|
||||
echo "DATABASE_URL=\"file:./data/database.sqlite\"" >> .env
|
||||
echo "DATABASE_URL=\"file:./data/settings.db\"" >> .env
|
||||
|
||||
log_success "DATABASE_URL added to .env file"
|
||||
}
|
||||
@@ -465,15 +491,15 @@ stop_application() {
|
||||
if [ -f "package.json" ] && [ -f "server.js" ]; then
|
||||
app_dir="$(pwd)"
|
||||
else
|
||||
# Try to find the application directory
|
||||
app_dir=$(find /root -name "package.json" -path "*/ProxmoxVE-Local*" -exec dirname {} \; 2>/dev/null | head -1)
|
||||
if [ -n "$app_dir" ] && [ -d "$app_dir" ]; then
|
||||
# Change to production application directory
|
||||
app_dir="/opt/ProxmoxVE-Local"
|
||||
if [ -d "$app_dir" ] && [ -f "$app_dir/server.js" ]; then
|
||||
cd "$app_dir" || {
|
||||
log_error "Failed to change to application directory: $app_dir"
|
||||
return 1
|
||||
}
|
||||
else
|
||||
log_error "Could not find application directory"
|
||||
log_error "Production application directory not found: $app_dir"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@@ -555,7 +581,7 @@ update_files() {
|
||||
local should_exclude=false
|
||||
|
||||
for pattern in "${exclude_patterns[@]}"; do
|
||||
if [[ "$rel_path" == $pattern ]]; then
|
||||
if [[ "$rel_path" == $pattern ]] || [[ "$rel_path" == $pattern/* ]]; then
|
||||
should_exclude=true
|
||||
break
|
||||
fi
|
||||
@@ -595,6 +621,7 @@ update_files() {
|
||||
log_success "Application files updated successfully ($files_copied files)"
|
||||
}
|
||||
|
||||
|
||||
# Install dependencies and build
|
||||
install_and_build() {
|
||||
log "Installing dependencies..."
|
||||
@@ -650,6 +677,15 @@ install_and_build() {
|
||||
fi
|
||||
log_success "Prisma client generated successfully"
|
||||
|
||||
# Check if Prisma migrations exist and are compatible
|
||||
if [ -d "prisma/migrations" ]; then
|
||||
log "Existing migration history detected"
|
||||
local migration_count=$(find prisma/migrations -type d -mindepth 1 | wc -l)
|
||||
log "Found $migration_count existing migrations"
|
||||
else
|
||||
log_warning "No existing migration history found - this may be a fresh install"
|
||||
fi
|
||||
|
||||
# Run Prisma migrations
|
||||
log "Running Prisma migrations..."
|
||||
if ! npx prisma migrate deploy > "$npm_log" 2>&1; then
|
||||
@@ -706,11 +742,16 @@ start_application() {
|
||||
fi
|
||||
else
|
||||
log_error "Failed to enable/start service, falling back to npm start"
|
||||
start_with_npm
|
||||
if ! start_with_npm; then
|
||||
log_error "Failed to start application with npm"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log "Service was not running before update or no service exists, starting with npm..."
|
||||
start_with_npm
|
||||
if ! start_with_npm; then
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -834,23 +875,15 @@ main() {
|
||||
if [ -f "package.json" ] && [ -f "server.js" ]; then
|
||||
app_dir="$(pwd)"
|
||||
else
|
||||
# Try multiple common locations:
|
||||
for search_path in /opt /root /home /usr/local; do
|
||||
if [ -d "$search_path" ]; then
|
||||
app_dir=$(find "$search_path" -name "package.json" -path "*/ProxmoxVE-Local*" -exec dirname {} \; 2>/dev/null | head -1)
|
||||
if [ -n "$app_dir" ] && [ -d "$app_dir" ]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$app_dir" ] && [ -d "$app_dir" ]; then
|
||||
# Use production application directory
|
||||
app_dir="/opt/ProxmoxVE-Local"
|
||||
if [ -d "$app_dir" ] && [ -f "$app_dir/server.js" ]; then
|
||||
cd "$app_dir" || {
|
||||
log_error "Failed to change to application directory: $app_dir"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
log_error "Could not find application directory"
|
||||
log_error "Production application directory not found: $app_dir"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@@ -894,6 +927,12 @@ main() {
|
||||
# Restore .env and data directory before building
|
||||
restore_backup_files
|
||||
|
||||
# Verify database was restored correctly
|
||||
if ! verify_database_restored; then
|
||||
log_error "Database verification failed, rolling back..."
|
||||
rollback
|
||||
fi
|
||||
|
||||
# Ensure DATABASE_URL is set for Prisma
|
||||
ensure_database_url
|
||||
|
||||
@@ -903,12 +942,17 @@ main() {
|
||||
rollback
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
# Start the application
|
||||
if ! start_application; then
|
||||
log_error "Failed to start application after update"
|
||||
rollback
|
||||
fi
|
||||
|
||||
# Cleanup only after successful start
|
||||
rm -rf "$source_dir"
|
||||
rm -rf "/tmp/pve-update-$$"
|
||||
|
||||
# Start the application
|
||||
start_application
|
||||
rm -rf "$BACKUP_DIR"
|
||||
log "Backup directory cleaned up"
|
||||
|
||||
log_success "Update completed successfully!"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user