154 lines
4.3 KiB
Markdown
154 lines
4.3 KiB
Markdown
---
|
|
name: static-site-deploy
|
|
description: |-
|
|
Deploy, download, and browse static HTML sites on VPS via FTP.
|
|
triggers:
|
|
- deploy static site
|
|
- deploy html
|
|
- deploy to vps
|
|
- static deploy
|
|
- download from vps
|
|
- list files on vps
|
|
- browse ftp
|
|
- read file from vps
|
|
- 部署静态网站
|
|
- 部署HTML
|
|
- 部署到VPS
|
|
- 从服务器下载
|
|
- 浏览服务器文件
|
|
- 读取服务器文件
|
|
---
|
|
|
|
# Static Site Deploy
|
|
|
|
Upload, download, read, and browse static HTML files on a VPS via FTP.
|
|
|
|
## Use when
|
|
|
|
- Deploying static HTML/CSS/JS files to a VPS
|
|
- Downloading deployed files from VPS
|
|
- Reading file contents directly from VPS (without downloading to local)
|
|
- Browsing files and directories on VPS
|
|
- Publishing a single-page app, landing page, or documentation site
|
|
- User says "deploy", "upload to server", "publish site", "download from server", "read file", or "list files"
|
|
|
|
## Prerequisites
|
|
|
|
- ASSISTANT_ID environment variable must be set (bot_id)
|
|
- Deployment script configured with FTP credentials
|
|
|
|
## Deployment Workflow
|
|
|
|
### Phase 1: Prepare
|
|
|
|
1. Identify the source directory (e.g., `./dist/`, `./build/`, `./public/`, or user-specified)
|
|
2. Determine `project-name`:
|
|
- From user input, OR
|
|
- From the source directory's parent folder name
|
|
3. Verify ASSISTANT_ID environment variable is set
|
|
|
|
### Phase 2: Deploy
|
|
|
|
Execute the deploy script:
|
|
|
|
```bash
|
|
# Basic usage
|
|
bash scripts/deploy.sh <source-dir> <project-name>
|
|
|
|
# With custom config
|
|
bash scripts/deploy.sh <source-dir> <project-name> --config /path/to/config.yml
|
|
|
|
# Dry run (preview without uploading)
|
|
bash scripts/deploy.sh <source-dir> <project-name> --dry-run
|
|
```
|
|
|
|
The script will:
|
|
- Upload files to VPS
|
|
- Show deployment summary and progress
|
|
- Verify deployment via FTP and HTTP checks
|
|
|
|
### Phase 3: Verify
|
|
|
|
The script automatically verifies:
|
|
1. **FTP verification** - confirms files are present on server
|
|
2. **HTTP verification** - confirms site is accessible (expects HTTP 200)
|
|
|
|
Final output shows:
|
|
```
|
|
=== Deploy Complete ===
|
|
URL: https://domain/path/to/deploy/
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
| Error | Detection | Fix |
|
|
|-------|-----------|-----|
|
|
| FTP connection refused | curl returns "connection refused" | Check FTP service is running, verify port |
|
|
| FTP auth failed | curl returns 530 | Check username/password in config |
|
|
| Upload permission denied | curl returns 553 | Check FTP user write permission on web_root |
|
|
| HTTP 404 | curl returns 404 | Confirm Nginx root matches FTP upload path |
|
|
| HTTP 403 | curl returns 403 | Fix permissions: files 644, directories 755 |
|
|
|
|
## Implementation Notes
|
|
|
|
- Use `scripts/deploy.sh` for uploading files to VPS
|
|
- Use `scripts/download.sh` for downloading files from VPS
|
|
- Use `scripts/list.sh` for browsing FTP directory contents
|
|
- Use `scripts/read.sh` for reading file contents directly from FTP (output to stdout)
|
|
- Verify ASSISTANT_ID environment variable is set before calling scripts
|
|
- Show the command to the user before executing
|
|
- The scripts handle all FTP operations, progress display, and verification
|
|
|
|
## List Files Workflow
|
|
|
|
To browse files on VPS:
|
|
|
|
```bash
|
|
# List all projects under bot directory
|
|
bash scripts/list.sh
|
|
|
|
# List files in a specific project
|
|
bash scripts/list.sh <project-name>
|
|
```
|
|
|
|
The list script will:
|
|
- Read bot_id from ASSISTANT_ID environment variable
|
|
- Show directory contents from `/{bot_id}/` or `/{bot_id}/{project_name}/`
|
|
- Mark directories with trailing `/`
|
|
- Only list current directory level (non-recursive)
|
|
|
|
## Download Workflow
|
|
|
|
To download files from VPS:
|
|
|
|
```bash
|
|
# Basic usage
|
|
bash scripts/download.sh <project-name> <target-dir>
|
|
|
|
# With custom config
|
|
bash scripts/download.sh <project-name> <target-dir> --config /path/to/config.yml
|
|
```
|
|
|
|
The download script will:
|
|
- Read bot_id from ASSISTANT_ID environment variable
|
|
- Download files from `/{bot_id}/{project_name}/`
|
|
- Save to the specified target directory
|
|
- Show download summary and file count
|
|
|
|
## Read File Workflow
|
|
|
|
To read a file's content directly from VPS (output to stdout, no local download):
|
|
|
|
```bash
|
|
# Read a file from a project
|
|
bash scripts/read.sh <project-name>/<path/to/file.html>
|
|
|
|
# With custom config
|
|
bash scripts/read.sh <project-name>/index.html --config /path/to/config.yml
|
|
```
|
|
|
|
The read script will:
|
|
- Read bot_id from ASSISTANT_ID environment variable
|
|
- Fetch the file from `/{bot_id}/{file-path}` via FTP
|
|
- Output file contents directly to stdout
|