# 运行环境（PHP / Node.js / Bun / Python / Go / Java / 二进制）

> 文档更新：2026-09-27 ｜ 适用版本：v3 ｜ 功能位置：「运行环境」菜单下的七个页面（PHP 项目、Node.js、Bun、Python、GoLang、Java、二进制）

## 这组功能是干什么的

在服务器上以容器方式运行各类语言的应用：每个语言类型一个管理页面，统一提供"创建 → 配置 → 上线 → 日常运维"的完整流程。应用商店里的 WordPress 模板也纳入 PHP 运行环境管理，与通用 PHP 容器功能完全一致。

| 类型 | 适用 |
|---|---|
| PHP | PHP 网站（WordPress、Laravel 等） |
| Node.js | Node 应用（Nuxt、Next、Express 等） |
| Bun | Bun 应用（兼容 npm 生态，安装依赖更快） |
| Python | Python 应用（Flask、Django、FastAPI 等） |
| GoLang | Go 应用（含项目编译） |
| Java | 可执行 JAR 部署（Spring Boot 等），内置 JVM 配置与在线诊断 |
| 二进制 | 任意可执行文件（Rust、自定义进程等） |

## 通用操作（所有类型一致）

- 每个容器卡片都有：编辑（打开配置抽屉）、备份、建站、文件管理、日志、终端、启停；
- **容器终端须知**：打开终端后默认停在容器根目录 `/`，而 Node.js / Bun / Python / Go / Java 等运行环境容器的应用代码和文件统一在 `/app` 目录（PHP 容器基于 apache-php 镜像，不适用此约定，且在终端内操作 PHP 的情况并不多）。手动执行命令前先切换目录，例如：`cd /app && npm run build`。不切换就直接跑 npm / pip / go 等命令会报"找不到文件/找不到 package.json"；
- 「创建」按钮跳转容器编辑器并预填对应语言的模板；
- **建站对接**：有端口的容器可通过「建站」跳转创建 Caddy 站点，把该容器设为反向代理后端——容器跑应用、Caddy 管域名和 HTTPS，这是推荐的上线路径（站点配置详见网站与证书文档）。

## 各语言的配置要点

### PHP（4 个标签页）

- **概览**：容器信息、PHP 配置（内存限制 / 上传大小 / 时区）；
- **性能**：按内存档位一键套用预设方案（small / medium / large）；
- **扩展**：安装 / 禁用 PHP 扩展（gd、redis、imagick、mysqli 等）；
- **站点**：运行目录（如 public）、伪静态 Rewrite 规则、与 Caddy 站点对接。

### Node.js / Bun / Python（各 3 个标签页）

结构一致：**概览**（容器信息、初始化/重启）、**运行配置**（启动命令 + 环境变量；Node 与 Bun 支持 package.json scripts 快选）、**依赖管理**（Node 用 npm 镜像源与依赖列表；Bun 用 registry 镜像源；Python 用 pip 镜像源 + requirements.txt，可在线安装/卸载包）。

> Bun 的一个常见坑：Bun 默认不执行依赖包的 postinstall 脚本，sharp、esbuild 等含原生二进制的依赖需要在 package.json 中声明 `trustedDependencies` 才能正常安装。

### GoLang（3 个标签页）

概览、运行配置（启动命令 + 编译命令，编译产物在 `/app/bin/app`）、Go 项目（GOPROXY 镜像源、go mod init/tidy、在线编译）。

### Java（2 个标签页）

- **部署方式**：本地打好可执行 JAR（fat JAR）后，通过文件管理上传为容器内 `/app/app.jar`，在概览页点「生效」运行。JAR 同目录放 application.yml 可覆盖包内配置；
- **概览**：部署状态（等待部署 / 文件无效 / 待生效 / 已就绪）、OOM 与退出码提示、在线诊断（线程 Dump、堆对象统计）；
- **运行配置**：JVM 配置（按容器内存百分比分配堆、时区、追加参数）、环境变量。面板已内置合理默认值（堆内存百分比、UTF-8、OOM 自动堆转储、优雅停机），一般无需手改。

### 二进制（2 个标签页）

使用引导步骤 + 启动命令/环境变量/重启策略；需要完整容器配置时从高级设置跳转容器编辑器。

## 常见疑问

**问：容器跑起来了，怎么绑定域名让外网访问？**
用卡片上的「建站」入口创建 Caddy 站点并把容器设为反代后端（见上文"建站对接"）。别直接把容器端口开公网——走 Caddy 能统一管理 HTTPS 证书与防护。

**问：Node 项目依赖一直装不上 / 某些包安装报错？**
先在项目管理里换 npm 镜像源；若用的是 Bun，检查原生依赖是否声明了 `trustedDependencies`（见上文 Bun 的坑）。

**问：Java 应用更新了 jar 包怎么生效？**
重新上传覆盖 `/app/app.jar` → 概览页点「生效」。部署状态一栏可以看到当前所处阶段；显示"待生效"就是还没点生效。

**问：在容器终端里执行 npm run build（或类似命令）报错"找不到文件"？**
终端默认在容器根目录 `/`，Node.js / Bun / Python / Go / Java 等容器的应用文件在 `/app`。先执行 `cd /app` 再运行命令即可（PHP 容器不适用此约定）。

**问：PHP 网站提示缺少扩展（如 gd、redis）？**
编辑抽屉 →「扩展」标签页搜索安装，装完按提示重启容器。

**问：Go 项目怎么编译和运行？**
Go 项目标签页配置 GOPROXY 和模块信息后在线编译（产物 `/app/bin/app`），运行配置里的启动命令指向该产物即可。

## 指导用户时的注意点

- 七类页面结构一致，指导时先确认用户用的是哪类运行环境，再讲该类特有的标签页。
- 上线类问题优先引导走"建站对接"（容器 + Caddy），而不是直接暴露容器端口。
- Java 部署的"生效"是独立动作，用户换了 jar 却没生效时先查这一步；OOM/退出码提示出现在概览页，排查崩溃从那里入手。
- 依赖安装类问题先查镜像源配置，再查网络，最后才考虑手动进容器操作。
