---
description: 1panel 托管应用部署（按 1panel 目录约定上传产物 + 重启对应 compose/服务）
applicable: [1panel, docker]
requires: [docker]
buildSource: artifact
variables:
  - key: deployRoot
    label: 1panel 应用目录
    default: "/opt/1panel/apps/{{project}}"
    required: true
  - key: composeCmd
    label: compose 命令（留空 = 自动探测 docker compose / docker-compose）
    required: false
  - key: service
    label: 服务名（留空=全部）
    required: false
---

# 1panel 托管应用

1panel 把每个应用放在固定目录（默认 `/opt/1panel/apps/<name>`）。本配方把构建产物按 releases
软链切换进该目录的 current，再用 compose 重启容器。

> 注意：1panel 自身的 OpenResty / 数据库由 1panel 管理，本配方只发布"你的应用"那一层。
> 装 1panel / docker 本身属于环境准备（provisioning），不在部署配方内 —— 见内置技能 1panel-ops / docker-ps。
> **compose 命令自动探测**：优先 `docker compose`（v2），不可用回退 `docker-compose`（v1）；也可手动指定。

```bash stage:release on:target
DC='{{composeCmd}}'; [ -z "$DC" ] && DC='docker compose'; $DC version >/dev/null 2>&1 || { docker compose version >/dev/null 2>&1 && DC='docker compose' || DC='docker-compose'; }
cd {{deployRoot}}/current && $DC up -d {{service}}
```

```bash stage:health on:target
DC='{{composeCmd}}'; [ -z "$DC" ] && DC='docker compose'; $DC version >/dev/null 2>&1 || { docker compose version >/dev/null 2>&1 && DC='docker compose' || DC='docker-compose'; }
cd {{deployRoot}}/current && $DC ps {{service}} | grep -qE 'Up|running|healthy'
```
