# SFTPGo 安裝指南 (本地部署) ## 概述 本文檔說明如何在 macOS 上安裝 SFTPGo,配置為本地部署,用於 SFTP/FTP/WebDAV 檔案傳輸服務。 --- ## 當前狀態 | 項目 | 狀態 | |------|------| | SFTPGo | ✅ 已安裝 v2.7.0 | | Port | 8080 (HTTP), 2022 (SFTP) | | 配置目錄 | /Users/accusys/momentry/etc/sftpgo/ | | 日誌目錄 | /Users/accusys/momentry/log/ | | Plist | /Library/LaunchDaemons/com.momentry.sftpgo.plist | --- ## 安裝步驟 ### Step 1: 安裝 SFTPGo (使用 brew) ```bash # 安裝 SFTPGo brew install sftpgo ``` **驗證**: ```bash sftpgo --version # SFTPGo 2.7.0 ``` --- ### Step 2: 建立目錄 ```bash # 建立配置目錄 mkdir -p /Users/accusys/momentry/etc/sftpgo # 建立日誌目錄 mkdir -p /Users/accusys/momentry/log # 建立工作目錄 mkdir -p /Users/accusys/workspace/sftpgo # 建立日誌文件 touch /Users/accusys/momentry/log/sftpgo.log touch /Users/accusys/momentry/log/sftpgo.error.log # 設定權限 chown -R accusys:staff /Users/accusys/momentry/etc/sftpgo chown -R accusys:staff /Users/accusys/momentry/log chown -R accusys:staff /Users/accusys/workspace/sftpgo ``` --- ### Step 3: 建立設定檔 建立 `/Users/accusys/momentry/etc/sftpgo/sftpgo.json`: ```json { "common": { "idle_timeout": 15, "upload_mode": 0, "max_per_host_connections": 20 }, "users": [ { "username": "accusys", "password": "", "public_keys": [], "home_dir": "/Users/accusys/workspace/sftpgo", "uid": 501, "gid": 20, "permissions": { "/": ["*"] } } ], "httpd": { "bind_port": 8080, "bind_address": "0.0.0.0" }, "ftpd": { "bind_port": 21, "bind_address": "0.0.0.0" }, "sftpd": { "bind_port": 2022, "bind_address": "0.0.0.0" }, "webdavd": { "bind_port": 0, "bind_address": "" } } ``` --- ### Step 4: 使用 plist 開機自動啟動 ```bash # 複製 plist 到 LaunchDaemons 目錄 sudo cp /Users/accusys/momentry_core_0.1/momentry_runtime/plist/com.momentry.sftpgo.plist /Library/LaunchDaemons/ # 載入並啟動 sudo launchctl load /Library/LaunchDaemons/com.momentry.sftpgo.plist ``` --- ## 監控配置 ### 添加到監控配置 在 `monitor/config/monitor_config.yaml` 中添加: ```yaml service: services: - name: "sftpgo" type: "http" port: 8080 host: "localhost" check_url: "http://localhost:8080/api/v2/info" timeout: 5 enabled: true ``` --- ## 卸載步驟 ### 重要: 路徑說明 | 路徑 | 類型 | 說明 | |------|------|------| | `/Users/accusys/momentry/etc/sftpgo/` | 配置 | **不要刪除** - SFTPGo 配置 | | `/Users/accusys/momentry/log/` | 日誌 | **不要刪除** - 日誌目錄 | | `/Users/accusys/workspace/sftpgo/` | 數據 | **不要刪除** - 上傳檔案目錄 | | `/opt/homebrew/opt/sftpgo/` | 安裝 | **刪除** - SFTPGo 安裝目錄 | ### Step 1: 停止 SFTPGo ```bash # 找到 SFTPGo 進程 ps aux | grep sftpgo | grep -v grep # 停止 SFTPGo pkill sftpgo # 確認停止 ps aux | grep sftpgo | grep -v grep || echo "SFTPGo 已停止" ``` --- ### Step 2: 卸載 SFTPGo ```bash # 卸載 SFTPGo brew uninstall sftpgo # 移除 plist sudo launchctl unload /Library/LaunchDaemons/com.momentry.sftpgo.plist sudo rm /Library/LaunchDaemons/com.momentry.sftpgo.plist ``` --- ### Step 3: 刪除專屬檔案 ```bash # 刪除配置目錄 (可選) rm -rf /Users/accusys/momentry/etc/sftpgo # 刪除日誌 (可選) rm -f /Users/accusys/momentry/log/sftpgo.log rm -f /Users/accusys/momentry/log/sftpgo.error.log ``` **注意: 不要刪除以下目錄**: ```bash # 這些是重要的,不要刪除! # /Users/accusys/momentry/etc/sftpgo # /Users/accusys/momentry/log # /Users/accusys/workspace/sftpgo ``` --- ### Step 4: 卸載後檢查清單 ```bash echo "=== SFTPGo 卸載後檢查 ===" # 1. 檢查 SFTPGo 進程 echo "1. SFTPGo 進程:" ps aux | grep sftpgo | grep -v grep && echo " ✗ 仍在運行" || echo " ✓ 已停止" # 2. Port 8080/2022 echo "2. Port 8080/2022:" (lsof -i :8080 > /dev/null 2>&1 || lsof -i :2022 > /dev/null 2>&1) && echo " ✗ 仍被佔用" || echo " ✓ 已釋放" # 3. sftpgo 命令 echo "3. sftpgo 命令:" which sftpgo > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 4. brew 安裝 echo "4. brew 安裝:" brew list sftpgo > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 5. launchctl 服務 echo "5. launchctl 服務:" sudo launchctl list | grep sftpgo > /dev/null 2>&1 && echo " ✗ 仍存在" || echo " ✓ 已移除" # 6. 配置目錄 (可選刪除) echo "6. 配置目錄:" [ -d "/Users/accusys/momentry/etc/sftpgo" ] && echo " ✓ 保留" || echo " ✗ 已刪除" ``` --- ## 手動檢查命令 ```bash # 1. 檢查進程 ps aux | grep sftpgo | grep -v grep # 2. 檢查 Port lsof -i :8080 lsof -i :2022 # 3. 測試連線 curl http://localhost:8080/ # 4. 查看版本 sftpgo --version # 5. 驗證配置 sftpgo validate --config /Users/accusys/momentry/etc/sftpgo/sftpgo.json # 6. 查看日誌 tail -20 /Users/accusys/momentry/log/sftpgo.log ``` --- ## 連線資訊 | 項目 | 值 | |------|-----| | HTTP/WebDAV | http://localhost:8080 | | SFTP | localhost:2022 | | FTP | localhost:21 | | Admin API | http://localhost:8080/api/v2/info | --- ## 環境變數 在 `.env` 中: ```env SFTPGO_CONFIG=/Users/accusys/momentry/etc/sftpgo/sftpgo.json SFTPGO_DATA_DIR=/Users/accusys/workspace/sftpgo ``` --- ## 故障排除 ### SFTPGo 無法啟動 ```bash # 檢查日誌 tail -f /Users/accusys/momentry/log/sftpgo.log # 驗證配置語法 sftpgo validate --config /Users/accusys/momentry/etc/sftpgo/sftpgo.json # 檢查目錄權限 ls -la /Users/accusys/momentry/etc/sftpgo/ # 重新設定權限 chown -R $(whoami):staff /Users/accusys/momentry/etc/sftpgo ``` ### Port 被佔用 ```bash # 檢查哪個程序佔用 port lsof -i :8080 lsof -i :2022 # 終止佔用程序 kill ``` ### 需要重新載入 plist ```bash # 卸載舊服務 (如果存在) sudo launchctl unload /Library/LaunchDaemons/com.momentry.sftpgo.plist 2>/dev/null # 載入新服務 sudo launchctl load /Library/LaunchDaemons/com.momentry.sftpgo.plist ``` --- ## 檔案位置 | 類型 | 路徑 | 說明 | |------|------|------| | 安裝 | `/opt/homebrew/opt/sftpgo/` | SFTPGo 安裝目錄 | | 執行檔 | `/opt/homebrew/opt/sftpgo/bin/sftpgo` | SFTPGo 執行檔 | | 配置 | `/Users/accusys/momentry/etc/sftpgo/sftpgo.json` | 設定檔 | | 日誌 | `/Users/accusys/momentry/log/sftpgo.log` | 執行日誌 | | 錯誤日誌 | `/Users/accusys/momentry/log/sftpgo.error.log` | 錯誤日誌 | | 工作目錄 | `/Users/accusys/workspace/sftpgo/` | 上傳檔案目錄 | | plist | `/Library/LaunchDaemons/com.momentry.sftpgo.plist` | 開機啟動 | | 備份 | `/Users/accusys/momentry/var/sftpgo_backup/sftpgo.json` | 配置備份 | --- ## 常用指令 ```bash # 驗證配置 sftpgo validate --config /Users/accusys/momentry/etc/sftpgo/sftpgo.json # 查看版本 sftpgo --version # 查看可用命令 sftpgo --help # 重載配置 (熱重載) sftpgo reload --config /Users/accusys/momentry/etc/sftpgo/sftpgo.json ``` --- ## 版本資訊 - 版本: 2.7.0 - HTTP Port: 8080 - SFTP Port: 2022 - FTP Port: 21 - 配置: /Users/accusys/momentry/etc/sftpgo/sftpgo.json - 工作目錄: /Users/accusys/workspace/sftpgo - 日誌目錄: /Users/accusys/momentry/log/