部署应用
在独享容器中部署常驻的 Node.js、Python、Go 应用,并管理 PHP-FPM、PHP 版本、扩展与 php.ini。
本文介绍如何在独享容器中部署并常驻运行 Node.js、Python 或 Go 应用,如何管理 PHP-FPM,以及如何切换 PHP 版本、安装扩展和编辑 php.ini。
运行时环境
每个容器都预装了以下运行时,命令位于系统默认 PATH 中(如 node、npm、python3、go、java、ruby、php):
| 运行时 | 版本说明 |
|---|---|
| PHP | 支持 8.1 与 8.2,可在控制台切换 |
| Node.js、Python、Go、Java、Ruby | 每个镜像各提供一个版本 |
具体版本号请在容器详情页的 配置管理 标签下的 运行时环境 卡片中查看。
部署应用
容器详情页的 应用管理 标签中有四张运行时卡片:PHP-FPM、Node.js、Python、Golang。Node.js、Python、Golang 卡片在尚未部署应用时显示 部署应用 按钮。
第一步:上传代码
应用代码需要放在容器内的 /var/www/html 目录(或其子目录)下。在 文件管理 标签中,根目录 / 即对应容器内的 /var/www/html。您可以上传压缩包后在线解压,或使用 远程下载 从 URL 拉取,详见 文件与计划任务。
如果应用需要安装依赖(例如 npm install 或 pip install),请先在本地完成构建,再把包含依赖的目录打包上传。
第二步:填写启动参数
打开容器详情页,切换到 应用管理 标签。
在对应的运行时卡片上点击 部署应用。
在弹窗中填写:
字段 说明 启动命令 启动应用的完整命令,例如 node app.js、npm start、python app.py、gunicorn app:app -b 0.0.0.0:$PORT、./app工作目录 执行命令时所在的目录,默认 /var/www/html监听端口 应用在容器内监听的端口,默认 3000,范围 1–65535点击 部署并启动。提示“应用已部署并启动”后,卡片状态变为 运行中。
您填写的端口会以环境变量 PORT 的形式传给应用进程。在代码中读取 PORT(例如 Node.js 的 process.env.PORT)可以避免端口写死。
启动命令是如何执行的
- 命令通过
/bin/sh -c执行,因此可以使用参数、环境变量展开(如$PORT)和简单的 shell 语法。 - 应用以容器内的
www用户身份运行,请确保代码文件对该用户可读,应用需要写入的目录对该用户可写。 - 应用由容器内的进程守护程序托管:容器启动时自动拉起,进程意外退出后会自动重启。
- Go 应用需要先在本地编译成 Linux 可执行文件并上传,然后填写类似
./app的命令。
每个运行时一个应用
每张运行时卡片对应一个托管的应用进程,例如 Node.js 卡片只能部署一个 Node.js 应用。部署后卡片上的 部署应用 按钮会替换为 启动、停止、重启 和 日志 按钮。
管理运行中的应用
在 应用管理 标签中:
- 启动 / 停止 / 重启:控制对应的应用进程。
- 日志:查看应用标准输出与标准错误的最近 200 行,可在弹窗中点击 刷新。
- 刷新状态:重新读取所有运行时卡片的状态。卡片上会显示版本、PID 和运行时间(如有)。
如果某个运行时尚未部署应用,卡片显示 已停止 并提供 部署应用 按钮;此时点击启动会提示需要先部署应用。
PHP-FPM
PHP-FPM 在容器中默认常驻运行,无需部署。在 PHP-FPM 卡片上可以停止、启动或重启它,并查看日志。
切换 PHP 版本
- 在 概览 标签的 快捷操作 中,或在 配置管理 标签的 PHP配置 卡片中,点击 切换PHP版本。
- 选择 PHP 8.1 或 PHP 8.2,点击 确认切换。
切换后 PHP-FPM 会自动重启,并影响所有使用默认 PHP 的代码。请先确认您的程序兼容目标版本。
扩展与 php.ini
切换到 PHP 配置 标签:
- PHP 扩展:已加载的扩展以绿色标签显示,点击标签可禁用该扩展(核心扩展请谨慎操作)。在输入框中填写扩展名(如
redis、imap、soap、gmp)后点击 安装,扩展从 Alpine 官方软件包安装。 - php.ini:在线编辑当前 PHP 版本的完整 php.ini,保存后 PHP-FPM 会自动热重启。
扩展和 php.ini 只作用于当前活动的 PHP 版本。切换 PHP 版本后,请点击 刷新 重新加载对应版本的配置。
资源监控与容器操作
- 概览 标签显示 CPU 使用率、内存使用、磁盘使用及网络流量,并列出容器的 CPU、内存、磁盘限制。
- 顶部按钮可 启动、停止、重启 容器。停止容器会使容器内的所有应用不可用。
- 在 独享容器 列表中可以 删除 容器。删除后容器内的全部数据将被永久清除,且无法恢复。
通过 API 部署
控制台使用的接口同样可以通过 API 调用,需要在请求头中携带登录令牌 Authorization: Bearer <token>。container_id 为容器列表中返回的 id。
# 列出容器
curl -H "Authorization: Bearer $TOKEN" \
https://api.yeap.cloud/api/user/host/containers
# 部署 Node.js 应用
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
https://api.yeap.cloud/api/user/host/apps/create \
-d '{"container_id": 123, "type": "nodejs", "config": "node app.js", "working_dir": "/var/www/html", "port": 3000}'
# 查看应用状态与最近日志
curl -H "Authorization: Bearer $TOKEN" \
"https://api.yeap.cloud/api/user/host/apps/status?container_id=123&type=nodejs"
curl -H "Authorization: Bearer $TOKEN" \
"https://api.yeap.cloud/api/user/host/apps/logs?container_id=123&type=nodejs&lines=200"type 可取 nodejs、python、golang;启动、停止、重启分别对应 POST /api/user/host/apps/start、/stop、/restart,请求体为 {"container_id": 123, "type": "nodejs"}。