h5ai+webdav搞个简易网盘

为了防止我在复刻的时候失忆,特此记录。

系统为Ubuntu22.04,要用到php。主要通过webDAV编辑文件,h5ai只是为了好看。用nginx是因为vps配置有点拉。

必须项目搞一下

sudo apt update && sudo apt upgrade -y
sudo apt install nginx nginx-extras php-fpm php-cli php-curl php-xml php-mbstring curl git -y

文件夹搞好

sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data /var/www/webdav
sudo chmod -R 755 /var/www/webdav

h5ai下载

sudo apt install unzip -y
cd /var/www/webdav
sudo curl -L https://github.com/lrsjng/h5ai/releases/download/v0.30.0/h5ai-0.30.0.zip -o h5ai.zip
unzip h5ai.zip
sudo rm h5ai.zip

弄个密码,安全点

sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/webdav_passwd 用户名

有域名就申请下证书

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d 域名.com
sudo certbot renew --dry-run

h5ai莫得上传或者删除,所以要搞个webdav服务。

写配置文件/etc/nginx/sites-available/webdav

server {
    listen 80;
    server_name 域名.com;

    return 301 https://$host$request_uri;  # Redirect HTTP to HTTPS
}
server {
    listen 443 ssl;
    server_name 域名.com;
    ssl on;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_certificate /etc/letsencrypt/live/域名.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/域名.com/privkey.pem;

    root /var/www/webdav;
    index /_h5ai/public/index.php;

    try_files $uri $uri/ =404;

    location / {
        root /var/www/webdav/;

        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods PROPFIND OPTIONS;
        dav_access user:rw group:rw all:r;

        auth_basic "WebDAV";
        auth_basic_user_file /etc/nginx/webdav_passwd;

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php/php-fpm.sock;
            fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        }
    }

    location /_h5ai/ {
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        }

        location ~ /(private|config|lib|templates|3rdparty|tests|data)/ {
            deny all;
        }
    }

    error_log /var/log/nginx/webdav_error.log;
    access_log /var/log/nginx/webdav_access.log;
}

尝试运行

sudo ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

理论上这样应该能运行,因为过程比较曲折我也记不清了。连接webdav就用域名+用户名+密码。

我还搞了个aria2,远程下点东西来。大佬的脚本:

wget -N git.io/aria2.sh && chmod +x aria2.sh
./aria2.sh

防止出什么权限问题搞个脚本/usr/local/bin/fix_permissions.sh

#!/bin/bash
chown -R www-data:www-data /var/www/webdav
chmod -R 755 /var/www/webdav

给个权限

sudo chmod +x /usr/local/bin/fix_permissions.sh

修改/etc/aria2.conf

on-download-complete=/usr/local/bin/fix_permissions.sh

然后用脚本重启下就好了


感谢GPT兄和网上的各路大佬提供参考。

img