首次部署
从你电脑上的目录把自己的代码发布上线,无需 Git 仓库。下面的每条命令都在 sh0 服务器上实际执行过,输出为真实结果。
概述
sh0 可以从四种来源部署应用。本指南采用第一种,适合大多数项目:
- 本地目录,由
sh0 push打包上传 -- 你的代码,带 Dockerfile 或可自动识别的技术栈(Node.js、Python、Go、Rust、PHP 等)。 - 在控制台上传的 ZIP 归档。
- 由服务器克隆的 Git 仓库(公开或私有)。
- 目录中的模板(数据库、CMS、工具)。
第 1 步:准备目录
在根目录放置 Dockerfile 可以完全控制镜像。没有 Dockerfile 时,sh0 根据项目文件识别技术栈。应用必须监听一个端口,这里是 3000:
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node","server.js"]sh0 check 在上传前为目录打分并指出需要修复的问题。sh0 push 会执行相同的检查,遇到阻断性问题时停止(除非使用 --no-check);警告不会阻止部署:
$ sh0 check .
Scanning /home/you/my-api
Detected: Dockerfile
Health Score: 95/100
Complexity: 2 (Simple)
[~] Warnings (1):
- Missing .dockerignore
Fix: Create a .dockerignore file with: node_modules, .git, dist, .env
1 issue(s): 0 blocking, 1 warnings, 0 auto-fix, 0 info第 2 步:连接 CLI
在电脑上安装 CLI(见 CLI 安装),然后用你的面板地址运行 sh0 login --url https://panel.example.com。它会询问邮箱和密码(启用 2FA 时还会询问验证码),并把 API 密钥保存到 ~/.sh0/config.toml。
检查连接:
$ sh0 whoami
Server: https://panel.example.com
User: [email protected]
Role: owner第 3 步:推送
在项目目录中执行:
$ sh0 push -n my-api --port 3000
Deploying my-api
Detected dockerfile -- 95/100 health
2 files (0.0 MB) packaged
Uploading OK 5ms
Routing OK 10.0s
[ok] Live in 10.0s
-> https://my-api-<instance>.sh0.app-n指定应用名称;不指定时使用目录名。之后使用相同名称会更新同一个应用。--port是应用在容器内监听的端口。- 归档大小上限为 500 MB。添加
.dockerignore排除node_modules、.git和构建产物;其他限制见 Push 部署。
第 4 步:验证
sh0 push 输出的最后一行就是应用地址。在连接了 sh0 云代理的服务器上,它是一个带 HTTPS 的 *.sh0.app 子域名;使用自己的域名请见第 6 步。
$ sh0 status my-api
App: my-api
------------------------------
ID: 85aab295-4166-470a-9538-807b46e8bec3
Status: running
...
Latest Deployment
------------------------------
ID: 551c1602-5a46-49eb-93df-70ee831cfea3
Status: running
Duration: 37.9s
When: 39s ago
$ curl -s https://my-api-<instance>.sh0.app/
{"db":true,"version":2,"greeting":"salut"}如果应用没有响应,用 sh0 logs my-api --tail 100 查看日志,或在控制台打开应用查看本次部署的构建日志。
第 5 步:更新
修改代码后再次运行同样的 sh0 push -n my-api --port 3000:sh0 会构建新镜像,并在新容器就绪后替换正在运行的容器。上面的更新耗时 38 秒,应用随即返回了新版本。
第 6 步:使用自己的域名
把域名的 A 记录指向服务器 IP,然后在应用的 Domains 标签页中添加,或运行 sh0 domains my-api add api.example.com。sh0 会向 Let's Encrypt 申请 TLS 证书。详见自定义域名。
通过控制台
在侧边栏打开 Deploy,选择来源:
- File Upload -- 项目的 ZIP 归档。
- Git URL 或 GitHub -- 仓库和分支。
- Template -- 目录中的应用。
下一步
你的应用已上线。接下来: