--- 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 - 从服务器下载 - 浏览服务器文件 - 读取服务器文件 category: Web Services --- # 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 # With custom config bash scripts/deploy.sh --config /path/to/config.yml # Dry run (preview without uploading) bash scripts/deploy.sh --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 ``` 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 # With custom config bash scripts/download.sh --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 / # With custom config bash scripts/read.sh /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