首页
话语分享
技术手册
知识小记
登录
搜索
登录
搜索
Landscape
累计撰写
26
篇文章
累计收到
0
条评论
首页
话语分享
技术手册
知识小记
登录
自定义幻灯片
最新文章
2026-5-19
emblog 数据迁移
先按装宝塔,在宝塔中新建网站 https://www.emlog.net/docs/changelog#-%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%E5%BD%92%E6%A1%A3 在网站中下载迁移的emblog同版本,如2.3.16 将文件解压到新建的网站的文件下。 浏览器中输入网站域名,进行数据库安装和用户添加。 在要迁移的emblog中进行的数据库备份, 将要迁移emblog中的数据库备份导入到新的网站中。 导入后用户账号数据为sql导入数据,带图片文章正常显示,但资源中图片不显示,如: 图片物理路径在https://域名/content/uploadfile/日期文件,将原先的图片物理文件放入对应的新服务器文件中就可正常显示。如图:
2026年-5月-19日
151 阅读
0 评论
技术手册
2026-5-17
VLAN划分配置
VLAN划分配置 (1) 静态划分VLAN。手动把交换机的某些接口加入到某个VLAN,配置如下: [Huawei] vlan 10 //创建VLAN 10 [Huawei-vlan10] quit //退出 [Huawei] interface GigabitEthernet0/0/1 //进入接口 [Huawei-GigabitEthernet0/0/1] port link-type access //把接口设置成access [Huawei-GigabitEthernet0/0/1] port default vlan 10 //把接口加入VLAN 10 (2)动态划分VLAN。根据MAC地址、网络层地址、网络层协议、IP广播域或管理策略划分。 1) 基于MAC地址进行VLAN划分配置: [Huawei] vlan 20 //创建VLAN 20 [Huawei-vlan20] mac-vlan mac-address 5489-98FC-5825 // 把MAC地址为5489-98FC-5825的终端加入VLAN 20 2) 基于策略进行VLAN划分配置: [Huawei] vlan 20 //创建VLAN 20 [Huawei-vlan20] policy-vlan mac-address 0-1-1 ip 10.1.1.1 priority 7 //基于策略划分VLAN,把MAC地址为0-1-1,IP地址为1.1.1.1的主机划分到VLAN 20中,并配置该VLAN的802.1p优先级是7 VLAN作用 (1)控制网络流量。一个VLAN 内部的通信(包括广播通信)不会转发到其他VLAN 中去,从而有助 于控制广播风暴,减小冲突域,提高网络带宽的利用率。 (2)提高网络的安全性。可以通过配置VLAN 之间的路由来提供广播过滤、安全和流量控制等功能。 不同VLAN 之间的通信受到限制,提高了企业网络的安全性。 (3)灵活的网络管理。VLAN 机制使得工作组可以突破地理位置的限制而根据管理功能来划分。如果 根据MAC 地址划分VLAN,用户可以在任何地方接入交换网络,实现移动办公。
2026年-5月-17日
121 阅读
0 评论
知识小记
2026-5-17
分辨率、帧数与带宽需求对应关系
带宽要求 分辨率 帧数 4Mbps 1080P(1920x1080) 30/60 2Mbps 720P(1280x720) 30/60 1.5Mbps 4CIF(704x576) 25 128kbps~ 384kbps CIF(352x288) 15~25 128kbps~ 384kbps QCIF(176x144) 20~25 64kbps~ 128kbps QCIF(176x144) 15~20 56kbps QCIF(176x144) 4~6
2026年-5月-17日
126 阅读
0 评论
知识小记
2026-5-17
alist实现web连网盘
https://alistgo.com/zh/guide/drivers/quark.html#cookie 下载安装包 手动安装 # 解压下载的文件,得到可执行文件: tar -zxvf alist-xxxx.tar.gz # 授予程序执行权限: chmod +x alist # 运行程序 ./alist server # 获得管理员信息 以下两个不同版本,新版本也有随机生成和手动设置 # 低于v3.25.0版本 ./alist admin # 高于v3.25.0版本 # 随机生成一个密码 ./alist admin random # 手动设置一个密码 `NEW_PASSWORD`是指你需要设置的密码 ./alist admin set NEW_PASSWORD 守护进程 使用任意方式编辑 /usr/lib/systemd/system/alist.service 并添加如下内容,其中 path_alist 为 AList 所在的路径 [Unit] Description=alist After=network.target [Service] Type=simple WorkingDirectory=path_alist ExecStart=path_alist/alist server Restart=on-failure [Install] WantedBy=multi-user.target 然后,执行 systemctl daemon-reload 重载配置,现在你可以使用这些命令来管理程序: · 启动: systemctl start alist · 关闭: systemctl stop alist · 配置开机自启: systemctl enable alist · 取消开机自启: systemctl disable alist · 状态: systemctl status alist · 重启: systemctl restart alist
2026年-5月-17日
110 阅读
0 评论
技术手册
2026-5-17
Syncthing开源免费跨平台的文件同步工具
一、Syncthing下载安装 网站: 1. 官网:https://syncthing.net/ 2. 下载:https://syncthing.net/downloads/ 3. 项目:https://github.com/syncthing/syncthing/releases 1.1 Windows 对于Windows系统,可以直接安装官方提供的安装包:SyncTrayzor,下载地址:https://github.com/canton7/SyncTrayzor/releases/latest SyncTrayzor 是 Windows 上 Syncthing 的一个小托盘实用程序。它托管和包装了 Syncthing,使其运行起来更像原生 Windows 应用程序,而不像带有 Web 浏览器界面的命令行实用程序。 当然,官方原装的Syncthing程序也是不错的,下载地址:https://github.com/syncthing/syncthing/releases,运行后会打开命令窗口和浏览器,它的管理方式是通过Web方式管理的。 1.2 macOS 对于苹果电脑用户,请下载安装包:syncthing-macos,下载地址:https://github.com/syncthing/syncthing-macos/releases/latest syncthing-macos支持系统首选浏览器的托盘中打开 Syncthing WebGUI、可选择在登录时启动,因此您无需将 Syncthing 设置为服务、自动更新、在 Finder 中打开共享文件夹等。 1.3 手机APP 安卓手机APP: 1. Google Play :https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid 2. F-Droid:https://f-droid.org/packages/com.nutomic.syncthingandroid/ 开源项目: 1. syncthing-android:https://github.com/syncthing/syncthing-android 2. Syncthing-Fork:https://github.com/catfriend1/syncthing-android syncthing手机APP主要功能有:文件夹、设备和整体同步进度可以轻松地从 UI 中读取、“Syncthing 相机”、“每小时同步一次”以节省更多电量、可以为每个设备和每个文件夹应用单独的同步条件(对于专家用户)、无论 syncthing 是否正在运行,都可以更改文件夹和设备配置。 1.4 多终端同步? Syncthing 采用了与 Resilio Sync (BitTorrent Sync) 类似的 P2P 分布式技术,无需中心服务器,即可让多台设备互相实时同步文件。不过前提条件是:至少有一台设备是保持在线的,否则会出现文件同步冲突。 简单的解决办法:保持一台设备始终开机在线。最佳解决办法:利用VPS主机安装运行Syncthing ,这样可实现多终端24小时实时同步。 二、Syncthing安装教程 2.1 准备一台VPS 为了保证Syncthing 可以多终端24小时实时同步,我们需要用到VPS主机。现在VPS主机也差不多是白菜价了,选购VPS主机请参考:VPS主机排行榜单。 2.2 Syncthing安装 对于安装Windows系统的VPS主机,你可以直接下载安装SyncTrayzor ,这里主要介绍Linux系统的VPS主机: Debian/Ubuntu 系统 1. 网站:https://apt.syncthing.net 首先是添加 key. # Add the release PGP keys: sudo curl -o /usr/share/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg 添加稳定版APT源. # Add the "stable" channel to your APT sources: echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list 或者添加测试版源. # Add the "candidate" channel to your APT sources: echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing candidate" | sudo tee /etc/apt/sources.list.d/syncthing.list 开始安装命令如下: # Update and install syncthing: sudo apt-get update sudo apt-get install syncthing 其它Linux系统通用安装方法: Syncthing的更新很快,记得替换Syncthing为最新版的下载地址,具体地址请进入官网的Github下载页面。 ### 下载客户端 wget https://github.com/syncthing/syncthing/releases/download/v1.20.2/syncthing-linux-arm64-v1.20.2.tar.gz ### 解压 tar -zxvf syncthing-linux-arm64-v1.20.2.tar.gz ### 进入目录 cd syncthing-linux-arm64-v1.20.2 ### 复制到环境变量 cp syncthing /usr/local/bin/ Syncthing更新命令如下: sudo syncthing --upgrade 2.3 Syncthing运行 执行命令开始运行Syncthing:syncthing 这时你会看到Syncthing运行信息了。 root@c2022061103720:~# syncthing [start] 2022/07/02 12:14:08 INFO: syncthing v1.20.3-rc.2 "Fermium Flea" (go1.18.3 linux-amd64) deb@build.syncthing.net 2022-06-27 04:05:49 UTC [noupgrade] [start] 2022/07/02 12:14:08 INFO: Generating ECDSA key and certificate for syncthing... [start] 2022/07/02 12:14:08 INFO: Default folder created and/or linked to new config [start] 2022/07/02 12:14:08 INFO: Default config saved. Edit /root/.config/syncthing/config.xml to taste (with Syncthing stopped) or use the GUI [start] 2022/07/02 12:14:08 INFO: Archiving a copy of old config file format at: /root/.config/syncthing/config.xml.v0 [4I6IG] 2022/07/02 12:14:08 INFO: My ID: 4I6IGH3-7IEBSUO-M34V5AO-LAVDMT4-5ESZFME-OU74SOX-25TSEDS-F4N6OQN [4I6IG] 2022/07/02 12:14:09 INFO: Single thread SHA256 performance is 217 MB/s using minio/sha256-simd (201 MB/s using crypto/sha256). [4I6IG] 2022/07/02 12:14:09 INFO: Hashing performance is 187.82 MB/s [4I6IG] 2022/07/02 12:14:09 INFO: Running database migration 1... [4I6IG] 2022/07/02 12:14:09 INFO: Running database migration 2... [4I6IG] 2022/07/02 12:14:09 INFO: Using discovery mechanism: IPv4 local broadcast discovery on port 21027 [4I6IG] 2022/07/02 12:14:09 INFO: Using discovery mechanism: IPv6 local multicast discovery on address [ff12::8384]:21027 [4I6IG] 2022/07/02 12:14:09 INFO: TCP listener ([::]:22000) starting [4I6IG] 2022/07/02 12:14:09 INFO: Relay listener (dynamic+https://relays.syncthing.net/endpoint) starting 2022/07/02 12:14:09 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details. [4I6IG] 2022/07/02 12:14:09 INFO: Loading HTTPS certificate: open /root/.config/syncthing/https-cert.pem: no such file or directory [4I6IG] 2022/07/02 12:14:09 INFO: Creating new HTTPS certificate [4I6IG] 2022/07/02 12:14:09 INFO: GUI and API listening on 127.0.0.1:8384 [4I6IG] 2022/07/02 12:14:09 INFO: Access the GUI via the following URL: http://127.0.0.1:8384/ [4I6IG] 2022/07/02 12:14:09 INFO: QUIC listener ([::]:22000) starting [4I6IG] 2022/07/02 12:14:09 INFO: My name is "c2022061103720" [4I6IG] 2022/07/02 12:14:09 WARNING: Syncthing should not run as a privileged or system user. Please consider using a normal user account. [4I6IG] 2022/07/02 12:14:09 INFO: Ready to synchronize "Default Folder" (default) (sendreceive) [4I6IG] 2022/07/02 12:14:09 INFO: Completed initial scan of sendreceive folder "Default Folder" (default) [4I6IG] 2022/07/02 12:14:10 INFO: quic://0.0.0.0:22000 detected NAT type: Full cone NAT [4I6IG] 2022/07/02 12:14:10 INFO: quic://0.0.0.0:22000 resolved external address quic://156.247.14.1:22000 (via stun.syncthing.net:3478) [4I6IG] 2022/07/02 12:14:19 INFO: Detected 0 NAT services [4I6IG] 2022/07/02 12:15:07 INFO: Joined relay relay://45.33.16.96:443 Syncthing 默认监听以下几个端口: 22000 (TCP) --节点访问端口 8384 (TCP) --Web控制端口 21027 (UDP) 44647 (UDP) 37269 (UDP) 开放防火墙端口请根据自己服务器的情况来设置,使用CTRL + C停止运行。修改生成的配置文件,定位到/root/.config/syncthing/config.xml,或(/root/.local/state/syncthing) 将127.0.0.1:8384改成 0.0.0.0:8384 即可 现在 Linux 版本的 Syncthing 已经搭建完成,输入syncthing运行它。然后就可以在浏览器输入你的服务器IP:8384访问管理它了。 2.4 Syncthing域名 1. 网站:https://docs.syncthing.net/users/reverseproxy.html (可选)这一步是可选,毕竟VPS主机用IP地址也可以直接使用Syncthing,但是想要长期使用建议还是上域名+SSL证书,这样可以保证安全性和便捷性。免费域名申请:免费域名.tk,.ml,.ga,.cf,.gq申请注册和DNS解析。 首先,在VPS主机上安装好Nginx,建议使用Oneinstack或者LNMP一键安装包,在安装时仅选择安装Nginx即可。 然后在Oneinstack或者LNMP一键安装包中添加网站,绑定好域名,一键设置好SSL证书。最后,打开域名的Nginx配置文件,参考以下反向绑定域名配置文件: server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/hczj.wzfou.me.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/hczj.wzfou.me.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; server_name hczj.wzfou.me; access_log /data/wwwlogs/hczj.wzfou.me_nginx.log combined; index index.html index.htm index.php; root /data/wwwroot/hczj.wzfou.me; if ($ssl_protocol = "") { return 301 https://$host$request_uri; } include /usr/local/nginx/conf/rewrite/none.conf; #error_page 404 /404.html; #error_page 502 /502.html; #反向绑定域名部分 location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:8384/; proxy_read_timeout 600s; proxy_send_timeout 600s; } #反向绑定域名部分 } Syncthing使用域名+SSL证书访问如下: 其它的Web平台域名反向绑定域名配置如下: Apache 首先确认开启Apache module,命令是: a2enmod proxy_http headers. 然后添加以下配置到你的 Apache httpd configuration: <Location /> ProxyPass http://localhost:8384/ ProxyPassReverse http://localhost:8384/ RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} Require all granted </Location> Caddy proxy / localhost:8384 { transparent } timeouts { read none write none header none } Caddy v2 handle_path /* { uri strip_prefix / reverse_proxy http://localhost:8384 { header_up Host {upstream_hostport} header_up X-Forwarded-Host {host} } } 三、Syncthing同步设置 3.1 添加同步设备 假设你现在有A、B两台设设备要同步。A为本地电脑PC,B为VPS主机服务端,首先在本地电脑PC上设置一个你想要同步的文件夹。 然后点击右上角,显示ID。 然后,到VPS主机服务器B点击添加远程设备。 输入设备ID,确认保存。 这时在A处可以看到提示,询问你是否允许添加远程设备。 3.2 添加同步文件夹 同意之后,你就可以将本地电脑PC的想要共享出来的文件夹,添加进来,允许共享。 现在你在本地电脑PC上任何操作就会自动同步到VPS主机服务端了,当然在VPS主机服务器端的任何操作也会同步到本地电脑PC端了。 3.3 实现实时同步 在Syncthing可以看到实时同步速度。 Syncthing同步完成后,你在任意一个客户端或者服务端能看到文件变化。 Syncthing的日志也会详细记录你的同步记录。 四、Syncthing使用问题 4.1 设置管理密码 Syncthing默认的是不需要密码就可以进入管理的,如果你把Syncthing运行在服务端的话,最好是设置一个密码。 4.2 文件版本控制 Syncthing支持文件版本控制,如果你误删除了文件,还可以从这里找回来。 4.3 忽略文件同步 “忽略模式”允许用户排除主文件夹下不想被同步的文件夹或内容,需要用到通配符。 通配符如下: 星号 (*) 匹配文件名中的零个或多个字符,但不匹配目录分隔符。 te*ne 匹配电话、子目录/电话但不匹配电话/电话。 双星号 (**) 与上述匹配,但也匹配目录分隔符。 te**ne 匹配电话、子目录/电话和电话/子/目录/电话。 问号 (?) 匹配不是目录分隔符的单个字符。 te??st 匹配 tebest 但不匹配 teb/st 或 test。 方括号 ([]) 表示字符范围:[a-z] 匹配任何小写字符。 花括号 ({}) 表示一组逗号分隔的替代项:{banana,pineapple} 匹配香蕉或菠萝。 反斜杠 (\) “转义”一个特殊字符,使其失去其特殊含义。例如,\{banana\} 与 {banana} 完全匹配,并且不表示上面的一组替代项。 4.4 禁止IP访问 如果你已经成功绑定了域名到Syncthing,想要禁止使用IP访问Syncthing,那么把配置文件作如下修改即可。 把端口设置成:0.0.0.0:8384,那么syncthing可以通过ip进行访问 。 把端口设置成:127.0.0.1:8384,那么只能通过域名访问,这个时候只有通过nginx代*%¥理才能访问到127.0.0.1这个本地地址。 4.5 加快传输速度 如果你的Syncthing终端设备处于局域网内,系统会进行网络寻址数据流不会经过路由器直接在局域网内同步。如果你的Syncthing终端设备没在一个局域网也没有对应的公网 IP ,Syncthing 通过它分布全球的中继服务器进行数据同步。 但是这样的话速度会慢了,如果你是用VPS主机架构的Syncthing,我们完全可以让Syncthing直接使用VPS主机的带宽来传输,这样可以加快Syncthing传输速度了。在设置当中关闭“全球发现”和“NAT服务”。 4.6 Syncthing迁移 官方原装的Syncthing程序已经可以满足大部分人的需求了,不过有人会更喜欢软件版的Syncthing程序,两者其实是可以相互迁移的。原装的Syncthing程序的数据一般是保存在以下路径: C:\Users\Qi\AppData\Local\Syncthing 将这个Syncthing文件夹替换SyncTrayzor这类软件版的Syncthing程序下的Syncthing文件夹即可。 4.7 保持后台运行 对于VPS主机运行syncthing如果关闭终端,syncthing也会停止运行,可以将syncthing放在后台,命令如下: nohup syncthing & 4.8 开机自动运行 1. 网站:https://docs.syncthing.net/users/autostart.html 采用 Supervisord 开机自动启动并保持运行 进入 /etc/supervisor/conf.d/ 新建文件命名syncthing.conf ,用以下内容替换(记得把<USERNAME> 替换成你自己的用户名,例如root): [program:syncthing] autorestart = True directory = /home/<USERNAME>/ user = <USERNAME> command = /usr/bin/syncthing --no-browser --home="/home/<USERNAME>/.config/syncthing" environment = STNORESTART="1", HOME="/home/<USERNAME>" 重新加载 Supervisord: supervisorctl reload 启动: supervisorctl start syncthing 检查是否正常: supervisorctl status syncthing 有错误可以查看日志: supervisorctl tail syncthing 采用 systemd开机自动启动并保持运行 直接添加一个配置文件: vim /usr/lib/systemd/system/syncthing@.service 加入以下内容 [Unit] Description=Syncthing - Open Source Continuous File Synchronization for %I Documentation=man:syncthing(1) After=network.target [Service] User=%i ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0 Restart=on-failure SuccessExitStatus=3 4 RestartForceExitStatus=3 4 [Install] WantedBy=multi-user.target 然后保存退出,之后就可以通过systemd进行启动和管理了,注意注意把命令里面的root替换成自己的用户名: # 启动syncthing systemctl start syncthing@root.service # 查看syncthing运行状态 systemctl status syncthing@root.service # 停止syncthing systemctl stop syncthing@root.service # 设置syncthing开机自启 systemctl enable syncthing@root.service # 关闭syncthing开机自启 systemctl disable syncthing@root.service 或者可以用--user参数来运行 1systemctl –root start syncthing 来源:https://www.cnblogs.com/fisherpau/p/17475009.html
2026年-5月-17日
98 阅读
0 评论
技术手册
2026-5-17
个人网盘分享·Alist的安装配置和使用
简介 Alist是一款非常强大的开源个人文件管理软件,它的功能非常多。 Alist官方网站(https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Falist.nn.ci%2F&objectId=2142823&objectType=1&isNewArticle=undefined) 对我来说,它可以让我基于自己的服务器自由的分享自己的文件给亲人或者朋友,而不是依赖第三方平台,但是它强大也强大在可以依赖各个云盘实现共享而不占用自己服务器,官方支持的云盘如下: 本地存储 阿里云盘 OneDrive / SharePoint(国际版, 世纪互联,de,us) 天翼云盘 (个人云, 家庭云) GoogleDrive 123云盘 FTP / SFTP PikPak S3 又拍云对象存储 WebDAV(支持无API的OneDrive/SharePoint) Teambition(中国,国际) 分秒帧 和彩云 (个人云, 家庭云) Yandex.Disk 百度网盘 夸克网盘 迅雷网盘 蓝奏云 阿里云盘分享 谷歌相册 Mega.nz 一刻相册 安装 安装也非常简单,根据官方指导文件,可以分为下面两种: 一键脚本 仅适用于 Linux amd64/arm64 平台。 安装 代码语言:shell curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install 更新 代码语言:shell curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s update 卸载 代码语言:shell curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s uninstall 默认安装在 {/opt/alist} 中,个人建议根据实际路径情况自行添加路径: 比如我安装在 {/var/www/alist} 路径。 代码语言:shell # Install curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install /var/www/alist # update #curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s update /var/www/alist # Uninstall curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s uninstall /var/www/alist 可以直接执行以下命令: 启动: {systemctl start alist} 关闭: {systemctl stop alist} 配置开机自启: {systemctl enable alist} 取消开机自启: {systemctl disable alist} 状态: {systemctl status alist} 重启: {systemctl restart alist} 手动安装 手动安装我也试了一下,感觉没有区别,步骤为: 1.获取 AList 打开AList Release 下载待部署系统对应的文件。最新版的前端已经和后端打包好了,不用再下载前端文件了。 https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Fgithub.com%2Falist-org%2Falist%2Freleases&objectId=2142823&objectType=1&isNewArticle=undefined 2.运行 Linux&MacOS 代码语言:shell # 解压下载的文件,得到可执行文件:tar -zxvf alist-xxxx.tar.gz# 授予程序执行权限:chmod +x alist# 获得管理员信息 ./alist admin# 运行程序 ./alist server xxxx 指的是不同系统/架构对应的名称,一般 Linux-x86/64 为 alist-linux-amd64。如果你的 glibc 版本太低,建议下载 musl 版本 当你看到 {start server@0.0.0.0:5244} 的输出,之后没有报错,说明操作成功。 第一次运行时会输出初始密码。程序默认监听 5244 端口。 现在打开 {http://ip:5244} 可以看到登录页面。 登录界面 3.守护进程 使用任意方式编辑 {/usr/lib/systemd/system/alist.service} 并添加如下内容,其中 path_alist 为 AList 所在的路径。 代码语言:text [Unit] Description=alist After=network.target [Service] Type=simple WorkingDirectory=path_alist ExecStart=path_alist/alist-xxxx server Restart=on-failure [Install] WantedBy=multi-user.target 附上我的配置: 代码语言:text [Unit] Description=alist After=network.target [Service] Type=simple WorkingDirectory=/var/www/ ExecStart=/var/www/alist server Restart=on-failure [Install] WantedBy=multi-user.target 然后,执行 {systemctl daemon-reload} 重载配置,现在你可以使用这些命令来管理程序: 启动: {systemctl start alist} 关闭: {systemctl stop alist} 配置开机自启: {systemctl enable alist} 取消开机自启: {systemctl disable alist} 状态: {systemctl status alist} 重启: {systemctl restart alist} 配置 以{Nginx}为例: 修改 {/etc/nginx/sites-enable/alist.conf} 文件: 代码语言:text server { listen 80; listen [::]:80; server_name file.luxiyue.com; #你的域名 location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:5244/; } } 保存后载入配置: 代码语言:shell systemctl reload nginx 打开你的域名就可以访问了。 这边简单配置一下存储,以本地Local为例: 更多存储添加可以查看:官方文档 https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Falist.nn.ci%2Fzh%2Fguide%2Fdrivers%2F&objectId=2142823&objectType=1&isNewArticle=undefined 来源:https://cloud.tencent.com/developer/article/2142823
2026年-5月-17日
111 阅读
0 评论
技术手册
2026-5-14
docker-zerotier-planet实现虚拟路由
1:ZeroTier 介绍 ZeroTier 是一款强大的 P2P VPN 工具,它能让你在互联网上搭建属于自己的虚拟局域网。通过它,你可以轻松实现远程访问家中设备的需求 - 比如在公司用手机直接访问家里的 NAS。最重要的是,设备之间是点对点直连的,无需经过中转服务器,既保证了速度,又提升了安全性。 它的工作原理是这样的:通过 ZeroTier One 客户端,在不同设备(如笔记本、手机、服务器等)之间建立 P2P 连接,即使这些设备都在 NAT 后面也没问题。它使用了 STUN 等技术,可以穿透大多数类型的 NAT,实现设备间的直接通信。如果实在无法直连,才会通过中转服务器进行通信。 简单来说,ZeroTier 就像是一个跨越互联网的"虚拟交换机",让分布在世界各地的设备,都能像在同一个局域网内一样方便地相互访问。 ZeroTier 网络中的关键概念 PLANET(行星服务器):ZeroTier 网络的核心根服务器,负责网络发现和初始连接。相当于整个网络的"中枢"。 MOON(卫星服务器):用户可以自建的私有根服务器。它可以作为区域性的代理节点,帮助就近的设备更快地建立连接,提升网络性能。 LEAF(叶子节点):所有接入 ZeroTier 网络的终端设备,如电脑、手机、服务器等。这些设备通过 PLANET 和 MOON 的协调来相互发现和通信。 本教程将指导您搭建一个私有的 PLANET 服务器,让您完全掌控自己的 ZeroTier 网络。 2:为什么要自建PLANET 服务器 自建 PLANET 服务器有以下几个重要原因: 1、提升网络稳定性:官方服务器位于海外,国内用户访问延迟高且不稳定。自建服务器可以大幅提升连接质量。 2、加快连接速度:本地化的 PLANET 服务器可以更快地帮助设备建立 P2P 连接。 3、增强网络控制:自建服务器让您完全掌控网络配置,可以根据需求进行优化调整。 4、提高安全性:私有化部署意味着网络流量不经过第三方服务器,更加安全可靠。 5、降低依赖:避免因官方服务器故障或网络波动影响您的业务正常运行。 3:开始安装 3.1:环境准备 在开始安装之前,请确保您的服务器满足以下条件: 服务器要求: o 拥有公网IP地址 o 需开放以下端口: § 3443/tcp (管理面板,根据实际情况调整) § 9994/tcp (ZeroTier通信,根据实际情况调整) § 9994/udp (ZeroTier通信,根据实际情况调整) 软件依赖: o Docker (容器运行环境) o Git (获取项目代码) 系统要求: o 推荐使用较新的Linux发行版: § Debian 12 § Ubuntu 20.04+ § Rocky Linux § 其他同类系统 3.1.1 安装git #debian/ubuntu等 apt update && apt install git -y #centos等 yum update && yum install git -y 3.1.2 安装docker curl -fsSL https://get.docker.com |bash 如果网络问题,导致无法安装,可以使用国内镜像安装: 请参考:安装Docker https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker#33f11a5f1800n 3.1.3 启动docker service docker start 3.1.4 配置docker加速镜像(可选,不配也可以) sudo tee /etc/docker/daemon.json <
2026年-5月-14日
129 阅读
0 评论
技术手册
2026-5-14
python的Scrapy框架安装及简单使用
第一种 终端:pip install Scrapy 但由于Scrapy框架涉及多个模块之间的关联, 可能会与当前系统环境发生冲突而导致安装失败 第二种 1.安装Miniconda, 官方下载地址:https://conda.io/miniconda.html https://www.anaconda.com/download/success 下载安装当前系统对应版本 安装完毕后,打开“开始”菜单,找到Anaconda Prompt,打开可执行程序,输入: Conda install -c conda-forge scrapy命令,conda就会自动安装Scrapy以及对应的依赖包。 安装完后,直接命令行输入:Scrapy 如图安装成功。 创建Scrapy项目,执行scrapy startproject tutorial 命令 一、爬 以下是Spider代码,保存在tutorial/spiders/目录下的quotes_spider.py文件中: import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self,response): page = response.url.split("/")[-2] filename = 'quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename) 在tutorial项目的根目录,执行scrapy crawl quotes 命令 (注意) 如果在爬取其他网页的过程中出现[403]错误,可以尝试在setting.py 文件中增加USER_AGENT配置: USER_AGENT = ‘Mozilla/5.0 (Windows NT6.1;WOW64) AppleWebkit/537.36(KHTML, Like Gecko) Chrome/55.0.2883.87 Safari/537.36’ 二、取 项目根目录执行Scrapy Shell: scrapy shell “http://quotes.toscrape.com/page/1/” 在shell载入后,获得response回应,存储在本地变量response中。 输入:response.body 看到response的body部分,也就是抓取到页面内容。 输入:Response.headers 来查看header部分信息。 使用XPath选择器 XPath其实是一门在网页中查找特定信息的语言。 XPath表达式例子及对应的含义: /html/head/title:选择HTML文档中head元素内的title元素。 /html/head/title/text():选择上面提到的title元素的文本。 //td:选择所有的td元素。 //div[@class=”mine”]:选择所有具有class”mine”属性的div元素。 筛选出网页标题(title元素中的内容): >>> response.xpath('//title') [<Selector query='//title' data='<title>Quotes to Scrape</title>'>] extract()方法将Selector的内容提取出来: >>> response.xpath('//title').extract() ['<title>Quotes to Scrape</title>'] title元素中的文本,使用//title/text()方法获取title元素中的文本: >>> response.xpath('//title/text()').extract() ['Quotes to Scrape'] 返回的是一个列表,这是可以通过下标索引[0]获取文本: >>> response.xpath('//title/text()')[0].extract() 'Quotes to Scrape' 也可以写成这样: >>> response.xpath('//title/text()').extract_first() 'Quotes to Scrape' 使用CSS选择器 >>> response.css('title') [<Selector query='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>] 将其元素提取,使用extract()。 >>> response.css('title').extract() ['<title>Quotes to Scrape</title>'] 在元素后面加上::text,表示只想从元素中将文本提取出来: >>> response.css('title::text').extract() ['Quotes to Scrape'] Extract_first()方法仍然适用: >>> response.css('title::text').extract_first() 'Quotes to Scrape' 提取数据: 打开Scrapy Shell模式一下,找想要的数据: Scrapy shell “http://quotes.toscrape.com” 得到一个带有HTML元素的quote列表: >>> quote = response.css("div.quote")[0] 使用刚刚创建的quote对象从中提取title、author和tages: >>> title = quote.css("span.text::text").extract_first() >>> title '“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”' >>> author =quote.css("small.author::text").extract_first() >>> author 'Albert Einstein' 由于标签是字符串列表,可以使用.extract()方法直接提取: >>> tags = quote.css("div.tags a.tag::text").extract() >>> tags ['change', 'deep-thoughts', 'thinking', 'world'] 在找出了如何提取每个关键数据之后,现在可以遍历所有的引号元素,并将它们放 在一起成为一个Python字典: >>> for quote in response.css("div.quote"): ... text = quote.css("span.text::text").extract_first() ... author = quote.css("small.author::text").extract_first() ... tags = quote.css("div.tags a.tag::text").extract() ... print(dict(text=text, author=author, tags=tags)) 在回调中使用Python的yield关键字。 代码修改如下: import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] def parse(self, response): for quote in response.css("div.quote"): yield{ 'text': quote.css('span.text::text').extract_first(), 'author':quote.css('small.author::text').extract_first(), 'tags':quote.css('div.tags a.tag::text').extract(), } tutorial根目录执行:scrapy crawl quotes命令 三、存储内容: 存储抓取数据的最简单方法是使用Feed导出(Feed exports),使用以下命令: scrapy crawl quotes -o quotes.json 这将生成一个quotes.json文件,其中包含所有被抓取的项目。 出于历史原因,Scarpy将使用“追加”的方式创建文件,而不是覆盖其内容。也就 是说当运行这个命令第二次的时候,如果没有清空原来的JSON文件,由于附加的关系, 将会得到一个不合法的JSON文件。 还可以使用其他格式,如JOSN Lines: Scrapy crawl quotes -o quotes.jl JSON Lines格式有时候很管用,因为它是流式的,可以轻松地添加新的记录到它里面。 因此,即使运行两次以上,也不会出现上述问题。此外,由于每条记录都是单独运行, 因此可以处理大文件,而无须将所有内容都放在内存中。 跟进链接: 首先是提取要关注的网页的连接。检查页面,可以看到有一个链接到Next的标记: 尝试在shell中提取它: >>> response.css('li.next a').extract_first() '<a href="/page/2/">Next <span aria-hidden="true">→</span></a>' 这时得到锚(anchor)元素,但我们想要href。为此,Scrapy支持一个CSS扩展, 用类选择属性内容,如下所示: >>> response.css('li.next a::attr(href)').extract_first() '/page/2/' 现在爬虫被修改为递归跟进到下一页的链接,并从中提取数据: import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/page/1/', ] def parse(self, response): for quote in response.css("div.quote"): yield{ 'text': quote.css('span.text::text').extract_first(), 'author':quote.css('small.author::text').extract_first(), 'tags':quote.css('div.tags a.tag::text').extract(), } next_page =response.css('li.next a::attr(href)').extract_first() if next_page is not None: next_page = response.urljoin(next_page) yield scrapy.Request(next_page,callback=self.parse)
2026年-5月-14日
121 阅读
0 评论
技术手册
2026-5-14
用python对两个表格的两列数据对比
import openpyxl as vb import csv import pandas as pd #读取 需要对比的excel表 #代表表1 workbook_a = vb.load_workbook(r"D://a//表1.xlsx") #代表表2 workbook_b = vb.load_workbook(r"D://a//表2.xlsx") #读取需要对比的sheet名 sheet_a = workbook_a['Sheet1'] sheet_b = workbook_b['Sheet1'] #遍历所有的行与列 maxrow_a = sheet_a.max_row maxcolumn_a = sheet_a.max_column maxrow_b = sheet_b.max_row maxcolumn_b = sheet_b.max_column data_a = {} data_b = {} for i in range(1,int(maxrow_a)+1): cell_a_1 = sheet_a.cell(i,1) cell_a_2 = sheet_a.cell(i,2) c_a_1 = str(cell_a_1.value) c_a_2 = str(cell_a_2.value) data_a[c_a_1] = c_a_2 #data_a.append(cell_a.value) for j in range(1,int(maxrow_b)+1): cell_b_1 = sheet_b.cell(j,1) cell_b_2 = sheet_b.cell(j,2) c_b_1 = str(cell_b_1.value) c_b_2 = str(cell_b_2.value) data_b[c_b_1] = c_b_2 ''' description: 表1中没有表2的这些数据 return {*} Date: 2023-04-23 16:56:14 ''' data_aaa = [] for keys,value in data_a.items(): if keys not in data_b.keys(): print(keys,value) data_aaaa = [] data_aaaa = [keys,value] data_aaa.append(data_aaaa) columns11= ["code","name"] test_aaa=pd.DataFrame(columns=columns11,data=data_aaa)#数据有三列,列名分别为one,two,three test_aaa.to_csv('D:/a/表1有表2没有的这些数据.csv',encoding='utf8') ''' description: 表2没有表1这些数据 return {*} Date: 2023-04-23 17:00:36 ''' data_bbb = [] for keys,value in data_b.items(): if keys not in data_a.keys(): print(keys,value) data_bbbb = [] data_bbbb = [keys,value] data_bbb.append(data_bbbb) test_bbb=pd.DataFrame(columns=columns11,data=data_bbb)#数据有三列,列名分别为one,two,three test_bbb.to_csv('D:/a/表2有表1没有这些数据.csv',encoding='utf8')
2026年-5月-14日
141 阅读
0 评论
技术手册
2026-5-14
用python将多个xls表合成一个表里
import os import xlrd import xlsxwriter import glob biao_tou = "NULL" wei_zhi = "NULL" # 获取要合并的所有exce表格 def get_exce(): global wei_zhi wei_zhi = input("请输入Excel文件所在的目录:") all_exce = glob.glob(wei_zhi + "*.xls") print("该目录下有" + str(len(all_exce)) + "个excel文件:") if (len(all_exce) == 0): return 0 else: for i in range(len(all_exce)): print(all_exce[i]) return all_exce # 打开Exce文件 def open_exce(name): fh = xlrd.open_workbook(name) return fh # 获取exce文件下的所有sheet def get_sheet(fh): sheets = fh.sheets() return sheets # 获取sheet下有多少行数据 def get_sheetrow_num(sheet): return sheet.nrows # 获取sheet下的数据 def get_sheet_data(sheet, row): for i in range(row): if (i == 0): global biao_tou biao_tou = sheet.row_values(i) continue values = sheet.row_values(i) all_data1.append(values) return all_data1 if __name__ == '__main__': all_exce = get_exce() # 得到要合并的所有exce表格数据 if (all_exce == 0): print("该目录下无.xls文件!请检查您输入的目录是否有误!") os.system('pause') exit() all_data1 = [] # 用于保存合并的所有行的数据 # 下面开始文件数据的获取 for exce in all_exce: fh = open_exce(exce) # 打开文件 sheets = get_sheet(fh) # 获取文件下的sheet数量 for sheet in range(len(sheets)): row = get_sheetrow_num(sheets[sheet]) -2 # 获取一个sheet下的所有的数据的行数 all_data2 = get_sheet_data(sheets[sheet], row) # 获取一个sheet下的所有行的数据 all_data1.insert(0, biao_tou) # 表头写入 # 下面开始文件数据的写入 new_exce = wei_zhi + "总数据.xlsx" # 新建的exce文件名字 fh1 = xlsxwriter.Workbook(new_exce) # 新建一个exce表 new_sheet = fh1.add_worksheet() # 新建一个sheet表 for i in range(len(all_data1)): for j in range(len(all_data1[i])): c = all_data1[i][j] new_sheet.write(i, j, c) fh1.close() # 关闭该exce表 # print("文件合并成功,请查看“" + wei_zhi + "”目录下的总数据.xlsx文件!") os.system('pause') os.system('pause')
2026年-5月-14日
137 阅读
0 评论
技术手册
1
2
3