文档 / 入门 / 首次部署

首次部署

从你电脑上的目录把自己的代码发布上线,无需 Git 仓库。下面的每条命令都在 sh0 服务器上实际执行过,输出为真实结果。

概述

sh0 可以从四种来源部署应用。本指南采用第一种,适合大多数项目:

  • 本地目录,由 sh0 push 打包上传 -- 你的代码,带 Dockerfile 或可自动识别的技术栈(Node.js、Python、Go、Rust、PHP 等)。
  • 在控制台上传的 ZIP 归档。
  • 由服务器克隆的 Git 仓库(公开或私有)。
  • 目录中的模板(数据库、CMS、工具)。

第 1 步:准备目录

在根目录放置 Dockerfile 可以完全控制镜像。没有 Dockerfile 时,sh0 根据项目文件识别技术栈。应用必须监听一个端口,这里是 3000:

Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY server.js .
EXPOSE 3000
CMD ["node","server.js"]

sh0 check 在上传前为目录打分并指出需要修复的问题。sh0 push 会执行相同的检查,遇到阻断性问题时停止(除非使用 --no-check);警告不会阻止部署:

Terminal
$ 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。

检查连接:

Terminal
$ sh0 whoami
  Server:  https://panel.example.com
  User:    [email protected]
  Role:    owner

第 3 步:推送

在项目目录中执行:

Terminal
$ 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 步。

Terminal
$ 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 证书。详见自定义域名。

Warning
请在 DNS 记录已指向服务器之后再添加域名。否则证书申请会失败,而 Let's Encrypt 会限制重复失败的请求。

通过控制台

在侧边栏打开 Deploy,选择来源:

  • File Upload -- 项目的 ZIP 归档。
  • Git URL 或 GitHub -- 仓库和分支。
  • Template -- 目录中的应用。
Note
私有仓库请在 Access Token 字段填写访问令牌,或使用已添加到服务器的 SSH 密钥;见 Git 部署。

下一步

你的应用已上线。接下来: