Files
momentry_core/docs_v1.0/OPERATIONS/SFTPGo_Lifecycle.md
2026-05-17 02:26:09 +08:00

6.2 KiB

SFTPGo 生命週期管理 (Source → Install → Config → Use)

Date: 2026-05-15 Status: Active, Verified


生命週期總覽

Source → Archive → Build → Install → Config → Start → Verify → Use
 ①        ②         ③       ④         ⑤       ⑥       ⑦       ⑧

① Source Code

Field Value
Repository https://github.com/drakkan/sftpgo.git
Branch main (commit 6e543c6)
License AGPL v3
Language Go 1.26+
Go files 246
Source size 23 MB

② Archive

# Archive command
cd /tmp
tar czf release/system/v1.0/services/src/sftpgo-main.tar.gz sftpgo/

# Verify
shasum -a 256 release/system/v1.0/services/src/sftpgo-main.tar.gz
# → 6607334148917dd80a687706a3ae63ea8c532d10c6717c87491da23939c96d4a

Archive location: release/system/v1.0/services/src/sftpgo-main.tar.gz (9.2 MB)

③ Build

# Clone source
git clone --depth 1 https://github.com/drakkan/sftpgo.git /tmp/sftpgo

# Build binary
cd /tmp/sftpgo
go build -o /Users/accusys/bin/sftpgo .

# Verify binary
shasum -a 256 /Users/accusys/bin/sftpgo
# → 9991d2a1c877d5bcae17cb4e026de939862e4b880924589cf4ed15ac7291ec7e

ls -lh /Users/accusys/bin/sftpgo
# → 88 MB

Binary: /Users/accusys/bin/sftpgo (88 MB)

④ Install

Database

# Create dedicated PostgreSQL database + user
psql -U accusys -h /tmp -d postgres -c "CREATE DATABASE sftpgo"
psql -U accusys -h /tmp -d postgres -c "CREATE USER sftpgo WITH PASSWORD 'sftpgo_pass_2026'"
psql -U accusys -h /tmp -d sftpgo -c "GRANT ALL ON SCHEMA public TO sftpgo"

Templates & Static Files

# Copy from source (required by SFTPGo)
cp -r /tmp/sftpgo/templates/  /Users/accusys/momentry/etc/sftpgo/templates/
cp -r /tmp/sftpgo/static/     /Users/accusys/momentry/etc/sftpgo/static/
cp -r /tmp/sftpgo/openapi/    /Users/accusys/momentry/etc/sftpgo/openapi/

⑤ Configuration

Config file: /Users/accusys/momentry/etc/sftpgo/sftpgo.json

Key Settings

Section Key Value
data_provider driver postgresql
data_provider name sftpgo
data_provider users_base_dir /Users/accusys/momentry/var/sftpgo/data
httpd.bindings[0] port 8080
sftpd.bindings[0] port 2022
webdavd.bindings[0] port 8090

launchd Plist

File: momentry_runtime/plist/com.momentry.sftpgo.plist

<key>ProgramArguments</key>
<array>
    <string>/Users/accusys/bin/sftpgo</string>
    <string>serve</string>
    <string>-c</string>
    <string>/Users/accusys/momentry/etc/sftpgo/</string>
</array>

⑥ Start

Initialize Provider (first time only)

SFTPGO_DEFAULT_ADMIN_USERNAME=admin \
SFTPGO_DEFAULT_ADMIN_PASSWORD=Test3200Test3200 \
/Users/accusys/bin/sftpgo initprovider -c /Users/accusys/momentry/etc/sftpgo/

Start Serve

SFTPGO_DEFAULT_ADMIN_USERNAME=admin \
SFTPGO_DEFAULT_ADMIN_PASSWORD=Test3200Test3200 \
nohup /Users/accusys/bin/sftpgo serve \
    -c /Users/accusys/momentry/etc/sftpgo/ \
    > /Users/accusys/momentry/log/sftpgo.log 2>&1 &

⑦ Verify

# Service check
curl -sI http://localhost:8080/
# → Server: SFTPGo/2.7.99-dev

# HTTPS 
curl -sI https://m5sftpgo.momentry.ddns.net/
# → Server: SFTPGo/2.7.99-dev
# → Via: 1.1 Caddy

# Auth
curl -s -u "admin:Test3200Test3200" http://localhost:8080/api/v2/token
# → {"access_token":"eyJ...","expires_at":"..."}

⑧ Usage

User Management

Admin: admin / Test3200Test3200 Demo user: demo / demopassword123

# Get admin token
TOKEN=$(curl -s -u "admin:Test3200Test3200" \
    "http://localhost:8080/api/v2/token" | \
    python3 -c "import json,sys;print(json.load(sys.stdin).get('access_token',''))")

# Create user
curl -s -X POST "http://localhost:8080/api/v2/users" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"username":"demo","password":"demopassword123",
         "home_dir":"/Users/accusys/momentry/var/sftpgo/data/demo",
         "permissions": {"/": ["*"]}, "status": 1}'

# Update user password
curl -s -X PUT "http://localhost:8080/api/v2/users" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d "$(curl -s http://localhost:8080/api/v2/users -H 'Authorization: Bearer $TOKEN' | python3 -c \"import json,sys;u=[u for u in json.load(sys.stdin) if u['username']=='demo'][0];u['password']='newpass';print(json.dumps(u))\")"

# List users
curl -s "http://localhost:8080/api/v2/users" \
    -H "Authorization: Bearer $TOKEN"

External Access

# Via HTTPS
curl -s "https://m5sftpgo.momentry.ddns.net/api/v2/status"

# SFTP (port 2022)
sftp -P 2022 demo@m5sftpgo.momentry.ddns.net

# WebDAV (port 8090)
# http://m5sftpgo.momentry.ddns.net:8090/

資源管理記錄

dev.resources

INSERT INTO dev.resources (resource_id, resource_type, category, capabilities, config)
VALUES (
  'sftpgo', 'system_tool', 'file_upload',
  '["sftp", "file_transfer", "webdav"]',
  '{"binary": "/Users/accusys/bin/sftpgo",
    "version": "2.7.99-dev",
    "port": 8080,
    "source_sha256": "6607334148917dd80a687706a3ae63ea8c532d10c6717c87491da23939c96d4a",
    "binary_sha256": "9991d2a1c877d5bcae17cb4e026de939862e4b880924589cf4ed15ac7291ec7e",
    "source_archive": "release/system/v1.0/services/src/sftpgo-main.tar.gz",
    "plist": "momentry_runtime/plist/com.momentry.sftpgo.plist"}'
)
ON CONFLICT (resource_id) DO UPDATE SET
  resource_type = EXCLUDED.resource_type,
  category = EXCLUDED.category,
  config = EXCLUDED.config;

SHA256 Checksums Reference

Asset SHA256
Source archive (sftpgo-main.tar.gz) 6607334148917dd80a687706a3ae63ea8c532d10c6717c87491da23939c96d4a
Binary (/Users/accusys/bin/sftpgo) 9991d2a1c877d5bcae17cb4e026de939862e4b880924589cf4ed15ac7291ec7e

Ports Summary

Port Protocol Service External URL
8080 HTTP Web Admin + REST API https://m5sftpgo.momentry.ddns.net
2022 SFTP File Transfer sftp://m5sftpgo.momentry.ddns.net:2022
8090 WebDAV File Access https://m5sftpgo.momentry.ddns.net:8090/