Update
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
[] []
|
||||||
|
|
||||||
|
|
||||||
# 📦 StackPulse
|
# 📦 StackPulse
|
||||||
|
|
||||||
**StackPulse** ist eine kleine Web-App, die über die Portainer-API deine Docker-Stacks verwaltet und aktualisiert.
|
**StackPulse** ist eine kleine Web-App, die über die Portainer-API deine Docker-Stacks verwaltet und aktualisiert.
|
||||||
@@ -25,7 +28,7 @@ Ziel:
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details open>
|
<details open>
|
||||||
<summary>ð^|^e¡ v0.2.0 – In Entwicklung</summary>
|
<summary>✅ v0.2.0 – Release</summary>
|
||||||
|
|
||||||
### Backend
|
### Backend
|
||||||
- [x] Anbindung einer SQLite-Datenbank
|
- [x] Anbindung einer SQLite-Datenbank
|
||||||
@@ -54,7 +57,6 @@ Ziel:
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🗂️ Projektstruktur
|
## 🗂️ Projektstruktur
|
||||||
@@ -62,6 +64,8 @@ Ziel:
|
|||||||
```bash
|
```bash
|
||||||
stackpulse/
|
stackpulse/
|
||||||
├── backend/ # Node.js Backend mit Express
|
├── backend/ # Node.js Backend mit Express
|
||||||
|
│ └── data # SQlite Datenbank
|
||||||
|
│ └── db # Datenbank-Integration
|
||||||
├── frontend/ # React Frontend mit Tailwind
|
├── frontend/ # React Frontend mit Tailwind
|
||||||
├── scripts/ # Lokale Hilfsskripte (nicht Teil des Images)
|
├── scripts/ # Lokale Hilfsskripte (nicht Teil des Images)
|
||||||
│ └── start-dev.sh #Skript für den lokalen Start
|
│ └── start-dev.sh #Skript für den lokalen Start
|
||||||
@@ -102,6 +106,18 @@ services:
|
|||||||
- STACK_SELF_ID=ID_deiner_stackpulse_ID
|
- STACK_SELF_ID=ID_deiner_stackpulse_ID
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Die PORTAINER_ENDPOINT_ID erhältst du, wenn du die die URL im Browser ansiehst, wenn du das Dashboard in Portainer öffnest:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Die 3 wäre in diesem Fall Endpoint-ID.
|
||||||
|
|
||||||
|
Die STACK_SELF_ID findest du, wenn du das Frontend von StackPulse öffnest:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Diese ID kann erst nach dem Deploy von Stackpulse ausgelesen werden. Vergiss daher nicht, nach dem Hinterlegen der ID in den Variablen das Stack noch einmal zu redeployen!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Voraussetzungen
|
## 📋 Voraussetzungen
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -17,7 +17,8 @@ export default function Stacks() {
|
|||||||
return {
|
return {
|
||||||
...stack,
|
...stack,
|
||||||
redeploying: previous?.redeploying || stack.redeploying || false,
|
redeploying: previous?.redeploying || stack.redeploying || false,
|
||||||
redeployDisabled: stack.redeployDisabled ?? previous?.redeployDisabled ?? false
|
redeployDisabled: stack.redeployDisabled ?? previous?.redeployDisabled ?? false,
|
||||||
|
duplicateName: stack.duplicateName ?? previous?.duplicateName ?? false
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -94,9 +95,6 @@ export default function Stacks() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleRedeploy = async (stackId) => {
|
const handleRedeploy = async (stackId) => {
|
||||||
const targetStack = stacks.find((stack) => stack.Id === stackId);
|
|
||||||
if (targetStack?.redeployDisabled) return;
|
|
||||||
|
|
||||||
setSelectedStackIds((prev) => prev.filter((id) => id !== stackId));
|
setSelectedStackIds((prev) => prev.filter((id) => id !== stackId));
|
||||||
setStacks((prev) =>
|
setStacks((prev) =>
|
||||||
prev.map((stack) =>
|
prev.map((stack) =>
|
||||||
@@ -254,6 +252,9 @@ export default function Stacks() {
|
|||||||
<div>
|
<div>
|
||||||
<p className="text-lg font-semibold text-white">{stack.Name}</p>
|
<p className="text-lg font-semibold text-white">{stack.Name}</p>
|
||||||
<p className="text-sm text-gray-400">ID: {stack.Id}</p>
|
<p className="text-sm text-gray-400">ID: {stack.Id}</p>
|
||||||
|
{stack.duplicateName && (
|
||||||
|
<p className="text-xs text-amber-300">⚠️ Doppelter Name erkannt</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -275,8 +276,6 @@ export default function Stacks() {
|
|||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<span className="text-xs uppercase tracking-wide text-gray-400">Status</span>
|
|
||||||
<span className="text-amber-300">Veraltet</span>
|
|
||||||
<button
|
<button
|
||||||
onClick={() => handleRedeploy(stack.Id)}
|
onClick={() => handleRedeploy(stack.Id)}
|
||||||
disabled={isRedeploying}
|
disabled={isRedeploying}
|
||||||
|
|||||||
Reference in New Issue
Block a user