mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-07-27 20:29:10 +00:00
116f15dae9
* fix(stacks): resolve permission denied error when deleting stacks with root-owned files When Docker Compose creates files as root inside a stack directory, the non-root Sencho process cannot remove them. This adds a Docker-based fallback: if fsPromises.rm fails with EACCES/EPERM, Sencho spawns a short-lived Alpine container to clean up the root-owned files. Also enhances docker compose down with --volumes --remove-orphans to let Docker clean up its own resources before filesystem deletion. * docs: clarify that pre-existing root-owned stacks can be deleted * fix(stacks): include Docker stderr in fallback deletion error message Fixes CI lint failure: 'stderr' was assigned but never read in forceDeleteViaDocker(). Now surfaces Docker stderr output in the error message when the fallback cleanup fails.
81 lines
3.4 KiB
Plaintext
81 lines
3.4 KiB
Plaintext
---
|
|
title: Stack Management
|
|
description: Create, deploy, control, and remove Docker Compose stacks.
|
|
---
|
|
|
|
A **stack** in Sencho is a Docker Compose project: a directory inside your `COMPOSE_DIR` that contains at least a `compose.yaml` (or `docker-compose.yml`) file. Sencho automatically discovers every subdirectory as a stack.
|
|
|
|
<Frame>
|
|
<img src="/images/stack-management/create-stack-dialog.png" alt="Create New Stack dialog" />
|
|
</Frame>
|
|
|
|
## Creating a stack
|
|
|
|
Click **Create Stack** in the left sidebar. Enter a name and click **Create**.
|
|
|
|
**Naming rules:**
|
|
- Lowercase letters, numbers, and hyphens only (e.g. `my-app`, `nextcloud`)
|
|
- No spaces or special characters
|
|
- Must be unique - duplicates are rejected
|
|
|
|
Sencho creates a new directory inside `COMPOSE_DIR` with a blank `compose.yaml` file. You'll land in the editor automatically.
|
|
|
|
## The stack list
|
|
|
|
All discovered stacks appear in the left sidebar. Each shows a color-coded status dot:
|
|
|
|
| Color | Meaning |
|
|
|-------|---------|
|
|
| Green | All containers running |
|
|
| Red | One or more containers exited |
|
|
| Gray | No containers / status unknown |
|
|
|
|
Use the **search box** above the list to filter stacks by name.
|
|
|
|
## Deploying a stack
|
|
|
|
Select a stack and click **Deploy** in the stack header. This runs `docker compose up -d` - pulling images if needed and creating or recreating containers.
|
|
|
|
<Frame>
|
|
<img src="/images/editor/editor-overview.png" alt="Stack editor with control buttons" />
|
|
</Frame>
|
|
|
|
## Controlling a running stack
|
|
|
|
The stack header exposes four actions:
|
|
|
|
| Button | Command | What it does |
|
|
|--------|---------|--------------|
|
|
| **Stop** | `docker compose stop` | Stops containers without removing them. State is preserved. |
|
|
| **Restart** | `docker compose restart` | Restarts all containers in the stack. |
|
|
| **Update** | `docker compose pull` + `up -d` | Pulls the latest image tags and recreates containers. |
|
|
| **Delete** | `down --volumes` + removes files | Stops and removes containers and volumes, then deletes the stack directory. |
|
|
|
|
<Warning>
|
|
**Delete** is irreversible. It removes the stack directory - including `compose.yaml`, `.env`, and any bind-mounted files stored there. Back up important files before deleting.
|
|
</Warning>
|
|
|
|
<Note>
|
|
Stack directories often contain root-owned files — either because Docker Compose creates them, or because the stacks were originally set up outside of Sencho with `sudo`. Sencho handles this automatically: if a normal deletion fails due to permissions, it uses Docker to clean up root-owned files. No manual intervention is needed in the standard setup.
|
|
</Note>
|
|
|
|
## Stack context menu
|
|
|
|
Right-click or use the **⋮** button on any stack in the sidebar to access:
|
|
|
|
<Frame>
|
|
<img src="/images/stack-management/stack-context-menu.png" alt="Stack context menu" />
|
|
</Frame>
|
|
|
|
- **Alerts** - configure metric-based alerting rules for this stack
|
|
- **Check for updates** - manually trigger an image update check
|
|
- **Deploy** - run `docker compose up -d`
|
|
- **Stop** - stop all containers in the stack
|
|
- **Restart** - restart all containers in the stack
|
|
- **Update** - pull latest images and recreate containers
|
|
- **Delete** - stop and remove the stack (admin only)
|
|
|
|
## Converting a `docker run` command
|
|
|
|
If you have an existing `docker run` command and want to turn it into a Compose stack, go to the **Home** tab and paste it into the "Convert Docker Run to Compose" field. Sencho converts it to YAML that you can save as a new stack.
|