內容目錄

很好,那我們就把整個專案正式定案。我會以企業內部檔案伺服器的標準來設計,但保持簡單、容易維護。


FS2 專案 (go2see.me)

第一階段目標

取代目前

dav2.go2see.me

建立新的

fs2.go2see.me

驗證完成後,再決定是否切換成

fs.go2see.me

目錄架構

我建議直接用 Linux 標準:

/srv/fs2/
├── pub/
├── info/
├── share/
├── private/
│   ├── cyue/
│   ├── shari/
│   ├── johnny/
│   ├── tony/
│   ├── may/
│   ├── yuhan/
│   └── yuchen/
├── backup/
├── recycle/
├── temp/
└── lost+found/      (預留)

FS2 v1.0 最終網址

公用

https://fs2.go2see.me/

首頁

https://fs2.go2see.me/pub/

公開

https://fs2.go2see.me/info/

公告

https://fs2.go2see.me/share/

共用


個人

https://fs2.go2see.me/cyue/
https://fs2.go2see.me/shari/
https://fs2.go2see.me/johnny/
https://fs2.go2see.me/tony/
https://fs2.go2see.me/may/
https://fs2.go2see.me/yuhan/
https://fs2.go2see.me/yuchen/

完全沒有 private


實際目錄

仍然保持:

/srv/fs2
pub/
info/
share/
private/
    cyue/
    shari/
    johnny/
    tony/
    may/
    yuhan/
    yuchen/

Apache 只是 Alias。

因此以後搬家不用改資料。


權限模型

我們不要把權限寫死在 Apache,而是先定義一份「FS2 權限模型」。

資料夾 Guest Member Maintainer
pub R R RW
info R RW
share RW RW
private/自己 RW RW
private/別人

Maintainer(cyue)預設不直接存取其他人的 private。
這樣比較符合隱私原則。如果未來真的需要管理者緊急存取,我們可以另外建立一個受控的「Emergency Access」流程,而不是日常就有權限。


使用者

帳號 角色
cyue Maintainer
shari Member
johnny Member
tony Member
may Member
yuhan Member
yuchen Member

Portal

首頁不是 Apache Directory Listing,而是:

FS2
Welcome cyue
📁 Public
📢 Information
👥 Shared Folder
🔒 My Folder
────────────
📰 Latest Announcement
────────────
👤 Profile
🚪 Logout

Admin(只有 cyue)

Dashboard
Users
Groups
Announcements
Logs
Storage
Settings

我希望加入的特色

① 最近公告

不用進 /info

直接首頁看到

2026-07-10
Server maintenance
Download PDF

② 容量

例如

Used
18.3 GB / 100 GB

███████░░░░

③ 最近登入

Last Login
2026-07-02 09:30
IP
192.168.xx.xx

④ 修改密碼

每個人都可以:

Old Password
New Password
Confirm

⑤ 管理者功能

可以:

  • 新增使用者
  • 停用帳號
  • 重設密碼
  • 修改容量
  • 發布公告

我建議的開發順序

Milestone 1(基礎)

  • 建立 /srv/fs2
  • Apache HTTPS
  • WebDAV
  • pub / info / share / private
  • 7 位使用者

這一步完成後就能投入使用。


Milestone 2(Portal)

  • 首頁
  • Login
  • Profile
  • Change Password
  • Announcement

Milestone 3(Admin)

  • User Management
  • Group Management
  • Logs
  • Storage

Milestone 4(進階)

  • 分享連結
  • Web File Manager
  • Recycle Bin
  • Email 通知
  • 全文搜尋

我想再加一個「企業級」功能

每位使用者都有自己的固定 Home:

/home

Portal 裡點擊 My Folder,會自動進入自己的私人空間。

而 WebDAV 仍保留:

/private/cyue
/private/johnny
...

這樣:

  • Portal:使用者不用知道實際路徑,體驗更好。
  • WebDAV:仍然使用標準 URL,相容 Windows、macOS、iPhone、Android。

我有一個最後的建議,也是整個專案最重要的一點:

我們不要一邊聊天一邊改設計。

建議先把整份 FS2 Design Specification v1.0 寫完整(架構圖、資料庫、Apache、權限、Portal 畫面、安裝流程),等規格確認後,再開始實作。這樣後面的 Apache 設定、PHP、MariaDB 都會依同一份設計文件進行,維護起來也容易得多。


OK。下一步先在 Ubuntu 22.04 / VM2 上做 FS2 Phase 1

sudo -s 後工作,先做這三件:

mkdir -p /srv/fs2/{pub,info,share,backup,recycle,temp}
mkdir -p /srv/fs2/private/{cyue,shari,johnny,tony,may,yuhan,yuchen}

mkdir -p /opt/fs2
mkdir -p /etc/fs2
mkdir -p /var/log/fs2

chown -R www-data:www-data /srv/fs2
chmod -R 775 /srv/fs2

然後確認 Apache 模組:

a2enmod ssl dav dav_fs headers auth_basic authz_groupfile alias
apache2ctl configtest
systemctl reload apache2

接著我們做 fs2.go2see.me 的完整 Apache WebDAV 設定檔。


下面開始做 FS2 Phase 1:Apache WebDAV 版

1. 建目錄

mkdir -p /srv/fs2/{pub,info,share,backup,recycle,temp}
mkdir -p /srv/fs2/private/{cyue,shari,johnny,tony,may,yuhan,yuchen}

mkdir -p /var/www/fs2-index
mkdir -p /var/www/apache/var

touch /var/www/apache/var/users.password
touch /var/www/apache/var/groups
touch /var/www/apache/var/DavLock

chown -R www-data:www-data /srv/fs2
chown -R root:www-data /var/www/apache/var

chmod -R 775 /srv/fs2
chmod 750 /var/www/apache/var
chmod 640 /var/www/apache/var/users.password /var/www/apache/var/groups
chmod 660 /var/www/apache/var/DavLock

2. 建使用者密碼

(一行一行輸入密碼, 第一個用 -c create. 密碼 enter 後再寫)

htpasswd -c /var/www/apache/var/users.password cyue ~316
htpasswd /var/www/apache/var/users.password shari ~316
htpasswd /var/www/apache/var/users.password johnny ~96Ab
htpasswd /var/www/apache/var/users.password tony    ~96Ab
htpasswd /var/www/apache/var/users.password may ~228
htpasswd /var/www/apache/var/users.password yuhan   ~96
htpasswd /var/www/apache/var/users.password yuchen  ~96

3. 建群組

cat > /var/www/apache/var/groups <<'EOF'
members: cyue shari johnny tony may yuhan yuchen
maintainers: cyue
EOF

4. 建首頁

cat > /var/www/fs2-index/index.html <<'EOF'



  
  FS2 go2see.me


  

FS2 - go2see.me File Server

EOF

5. Apache 設定檔

nano /etc/apache2/sites-available/fs2-le-ssl.conf

先貼這份:


    ServerName fs2.go2see.me
    Redirect permanent / https://fs2.go2see.me/



    ServerName fs2.go2see.me

    DocumentRoot /var/www/fs2-index

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/fs2.go2see.me/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/fs2.go2see.me/privkey.pem

    DavLockDB /var/www/apache/var/DavLock

    ErrorLog ${APACHE_LOG_DIR}/fs2_error.log
    CustomLog ${APACHE_LOG_DIR}/fs2_access.log combined

    
        Options -Indexes
        AllowOverride None
        Require all granted
    

    Alias /pub /srv/fs2/pub
    
        DAV On
        Options Indexes
        AllowOverride None
        Require all granted

        
            AuthType Basic
            AuthName "FS2"
            AuthUserFile /var/www/apache/var/users.password
            AuthGroupFile /var/www/apache/var/groups
            Require group maintainers
        
    

    Alias /info /srv/fs2/info
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        AuthGroupFile /var/www/apache/var/groups

        
            Require group members
        

        
            Require group maintainers
        
    

    Alias /share /srv/fs2/share
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        AuthGroupFile /var/www/apache/var/groups
        Require group members
    

    Alias /cyue /srv/fs2/private/cyue
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user cyue
    

    Alias /shari /srv/fs2/private/shari
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user shari
    

    Alias /johnny /srv/fs2/private/johnny
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user johnny
    

    Alias /tony /srv/fs2/private/tony
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user tony
    

    Alias /may /srv/fs2/private/may
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user may
    

    Alias /yuhan /srv/fs2/private/yuhan
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user yuhan
    

    Alias /yuchen /srv/fs2/private/yuchen
    
        DAV On
        Options Indexes
        AllowOverride None

        AuthType Basic
        AuthName "FS2"
        AuthUserFile /var/www/apache/var/users.password
        Require user yuchen
    

5. 然後申請憑證:

sudo certbot certonly --apache -d fs2.go2see.me

6. 啟用 FS2

a2enmod ssl dav dav_fs headers auth_basic authz_groupfile alias
a2ensite fs2-le-ssl.conf

apache2ctl configtest
systemctl reload apache2

7. 測試

curl -I https://fs2.go2see.me/
curl -I https://fs2.go2see.me/pub/

curl -u cyue https://fs2.go2see.me/info/
curl -u johnny https://fs2.go2see.me/share/
curl -u johnny https://fs2.go2see.me/private/johnny/
curl -u johnny https://fs2.go2see.me/private/cyue/

預期:

/                 200
/pub/             200
/info/            401 未登入
/info/ + cyue     200
/share/ + johnny  200
/private/johnny/  200
/private/cyue/    401 或 403

AH00558 只是警告,不影響運作。要消除可加:

echo "ServerName fs2.go2see.me" | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo apache2ctl configtest
sudo systemctl reload apache2

是,Phase 1 已經 OK

你的結果符合預期:

/                         200 OK
/pub/                     200 OK
/info/ 未登入              401 OK
/info/ cyue               200 OK
/share/ johnny            200 OK
/johnny/ johnny           200 OK
/cyue/ johnny             401 OK

johnny 不能進 /cyue/,代表私人目錄隔離成功。

現在可以確認:

✅ HTTPS 正常
✅ 首頁正常
✅ pub 公開讀取正常
✅ info 需要登入
✅ share 成員可登入
✅ 個人目錄正常
✅ 其他人的個人目錄不能進
✅ Apache 設定 Syntax OK

下一步建議做 寫入測試

curl -u johnny -T /etc/hostname https://fs2.go2see.me/share/test-johnny.txt
curl -u johnny -T /etc/hostname https://fs2.go2see.me/johnny/test-johnny.txt
curl -u johnny -T /etc/hostname https://fs2.go2see.me/info/test-johnny.txt
curl -u cyue -T /etc/hostname https://fs2.go2see.me/info/test-cyue.txt

預期:

johnny 寫 share     成功
johnny 寫 johnny    成功
johnny 寫 info      失敗
cyue 寫 info        成功

完全正確,FS2 Phase 1 通過

結果確認:

✅ johnny 寫入 /share 成功
✅ johnny 寫入 /johnny 成功
✅ johnny 寫入 /info 失敗
✅ cyue 寫入 /info 成功

現在可以標記:

FS2 Phase 1:完成

建議清掉測試檔:

rm -f /srv/fs2/share/test-johnny.txt
rm -f /srv/fs2/private/johnny/test-johnny.txt
rm -f /srv/fs2/info/test-cyue.txt

下一步可以做:建立備份腳本 + 開始規劃 Phase 2 Portal / 改密碼功能

先做 FS2 Phase 1 收尾:備份腳本

1. 建備份目錄

sudo -s

mkdir -p /backup/fs2
mkdir -p /opt/fs2/tools

2. 建備份腳本

nano /opt/fs2/tools/backup_fs2.sh

貼上:

#!/bin/bash
set -e

DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR="/backup/fs2/$DATE"

mkdir -p "$BACKUP_DIR"

tar czf "$BACKUP_DIR/fs2-storage.tar.gz" /srv/fs2
tar czf "$BACKUP_DIR/fs2-apache.tar.gz" \
    /etc/apache2/sites-available/fs2-le-ssl.conf \
    /var/www/fs2-index \
    /var/www/apache/var/users.password \
    /var/www/apache/var/groups \
    /var/www/apache/var/DavLock

echo "FS2 backup completed:"
echo "$BACKUP_DIR"

3. 加執行權限

chmod +x /opt/fs2/tools/backup_fs2.sh

4. 測試備份

/opt/fs2/tools/backup_fs2.sh
ls -lh /backup/fs2/

5. 建每日自動備份

crontab -e

加入:

30 3 * * * /opt/fs2/tools/backup_fs2.sh >> /var/log/fs2/backup.log 2>&1

這樣每天凌晨 03:30 備份一次。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *