技术积累
日进一寸

WIN10系统彻底永久关闭自动更新

imajeason阅读(47)

Win10停止支持后,坚持win10的用户最先面临的问题其实不是没有补丁可打,而是防止微软玩阴的。

万一哪天一个“不小心”更新了一个补丁,win10隔三岔五蓝屏卡顿你受得了么。

不管你受得了受不了,我是受不了,所以我决定彻底关闭win10的系统更新。

以下文档是抄的别人的,稍作改动。

一、首先我们需要做的就是禁用Windows Update服务

1、通过键盘Win + R健,弹出运行对话框,输入命令 services.msc ,按“确定”按钮,即可打开服务弹窗。

WIN10系统彻底永久关闭自动更新

 2、往下拉,寻找到找到Windows Update,双击打开。

WIN10系统彻底永久关闭自动更新

 3、双击打开弹框,点击“停止”,将启动类型选为“禁用”,最后点击确定。

WIN10系统彻底永久关闭自动更新

 4、然后切换到“恢复”选项,将第一次失败、第二次失败、后续失败全部修改为“无操作”,点击“应用”“确定”

WIN10系统彻底永久关闭自动更新

 二、通过组策略进行Win10自动更新相关服务关闭

1、按Win + R 组合键,调出运行命令操作弹框,输入“gpedit.msc”,点击确定。

WIN10系统彻底永久关闭自动更新

 2、本地组策略编辑器左侧菜单栏,依次选择:计算机配置 -> 管理模板 -> Windows组件 -> Windows更新

WIN10系统彻底永久关闭自动更新

 3、双击右侧“配置自动更新”,弹出框中设置为“已禁用”,点击“应用”“确定”

WIN10系统彻底永久关闭自动更新

 4、接着再找到“删除使用所有Windows更新功能的访问权限”,双击弹出框,设置已启用,然后“确定”

WIN10系统彻底永久关闭自动更新

 三、禁止任务计划中的Win10自动更新服务

这里可能会遇到权限问题

行到禁用windows update计划任务时,提示:

WIN10系统彻底永久关闭自动更新

这特么windows这个辣鸡系统,限制还真多!!!作为专业的技术人员这搁谁能手的鸟,发誓追查到底,杀无赦!!!

问题解决

  1. 下载windows工具:https://learn.microsoft.com/en-us/sysinternals/downloads/pstools
  2. cmd管理员模式运行,cd到你解压根目录,执行以下命令:
psexec.exe -i -s c:\Windows\system32\mmc.exe /s taskschd.msc

重复之前的禁用操作,这下就有权限了

    WIN10系统彻底永久关闭自动更新

    1、按 Win + R键,调出运行弹框,输入“taskschd.msc”,并“确定”

    WIN10系统彻底永久关闭自动更新

     2、任务计划程序弹框中,依次选择:任务计划程序库 -> Microsoft -> Windows -> WindowsUpdate,将其展示出来的项目均设置为 [ 禁用 ]

    WIN10系统彻底永久关闭自动更新

     四、通过注册表关闭Win10自动更新功能

    1、按Win + R 组合键,在弹出的运行框中输入:regedit,确定。

    WIN10系统彻底永久关闭自动更新

     2、在注册表编辑器中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc。然后在右侧找到“Start”键。

    WIN10系统彻底永久关闭自动更新

     3、双击start,在弹出框中把基数改成:16进制,数值数据改为“4”,点击确定。

    WIN10系统彻底永久关闭自动更新

     4、右侧找到“FailureActions”,双击弹出框中,把“0010”、“0018”行的左起第5个数值由原来的“01”改为“00”, “确定”。

    WIN10系统彻底永久关闭自动更新

    这样我们就可以彻底把win10自动更新永久关闭。

    搭建rhel系(centos、anolis、kylin)的yum镜像源

    imajeason阅读(395)

    因为工作原因,需要在内网环境搭建yum镜像源。

    搭建镜像源本身没有多大的技术难度,最主要解决的问题如下:

    1、部分系统的源在使用reposync进行从官方源拉取到本地的时候会校验我们本地使用的系统,如果系统不匹配会出现403错误,解决方法就是建一个需要同步源的操作系统的虚拟机,从这台机器里同步下来在scp/rsync到目标的机器上。

    2、同步时间较长,这个基本没有很好的办法,就挂机拉取吧。

    具体操作。

    首先,创建目标操作系统的repo文件,如果是本系统相同的yum源同步就不需要创建;

    然后,reposync –repoid=repo名字 -c repo文件名字,这个repo名字从repo文件里看name,同步下来的内容会放到repo同名的目录中,如果用系统的repo就不用指定-c;

    然后,cd到repo名字的目录中,执行createrepo ./,完成会会生成repodata目录

    现在,这个目录就是镜像源的主目录了。

    安装nginx,配置http服务,内网好提供服务,安装完成后,指定repo的主目录即可;

    生成一个repo文件,url就是nginx对外提供服务的ip端口/repo名字;

    [ks10-adv-os]
    name = Kylin Linux Advanced Server 10 - Os
    baseurl = http://172.10.11.11:8080/kylin/ks10-adv-os/
    gpgcheck = 0
    gpgkey=file:///etc/pki/rep-gpg/RPM-GPG-KEY-kylin
    enabled = 1
    

    在客户端配置上这个repo就可以使用了。具体的操作我就不截图了,仅做记录,也算不得教程。

    Nextcloud在家庭Nas(非80/443)配置ssl证书实现https访问

    imajeason阅读(1127)

    概述

    家庭环境,这里特指中国大陆家庭拨号上网环境,首先是80与443端口都是不通的,要想实现https,配置相对比较麻烦。

    • 1、如果拨号环境没有公网ip或要用443端口,也就是没法通过默认的https端口实现加密访问,就需要使用frp之类的服务将内网的nextcloud映射出去。
    • 2、如果有公网ip,可以端口映射使用非80/443端口,例如9988端口等映射出去。

    关联视频1:https://youtu.be/deA0M1zedlI

    考虑到网盘需要较高的安全性,毕竟是隐私数据,不能接受被入侵,就一定要开启ssl证书访问。

    如果你已经在内网nas搭建好了nextcloud,就直接直接到frp中转部分或者端口映射部分。

    如果没有搭建nextcloud,链接如下:

    nextcloud搭建

    要想实现https服务的前提是把nextcloud服务映射到公网:

    一共有3个方案,分别是frp转发、ipv4独立ip端口映射、ipv6独立ip开放。

    本视频后续操作是frp转发方案,如果做成一个视频,时长有点太长了。

    其他方案后面会陆续出视频。

    首先是第一个方案frp转发

    这个方案的好处是,家庭网络不需要在路由器上做端口映射,这就意味着不需要独立ip,也不需要担心在家庭网络开放服务从而导致运营商以此为借口搞什么幺蛾子,比如警告停止提供服务等,毕竟在中国大陆,私自在家庭网络中提供服务是不被允许的,即使我们搭建这种服务的目的是自用,不会跟你讲道理的。

    优点很明显,缺点当然也是有的,就是需要有一台有独立ip的服务器。同样因为国内vps价格高,带宽小。我的选择是购买cn2-gia网络的搬瓦工服务器,我在简介里放了个推荐链接,大家有需要的可以去挑选一台。

    cn2与cn2-gia的区别还是很大的,gia是专用网络,任意时间段都可以有几十m的速度,基本上可以把家庭网络跑满,达到在路由器上开启端口映射直接提供服务的水平。

    现在我已经准备好了一台机器,我们还需要一个域名,域名的选择比较多,有啥用啥,愿意花钱的可以考虑自行购买com域名,一年一百来块,次之是6位数xyz域名,一年10块左右,最后是不花钱的方案,去  申请一个4级域名,可是可以用的。

    有了域名,把域名解析到服务器ip上,解析的做法是做一条A记录,填写一个子域名名称,例如  pan.888888.xyz,只需要填写pan,ip地址就填写自己的服务器ip。

    现在准备工作已经做好了。

    下一步要搭建frp了。看拓扑图。

    FRP拓扑

    下面我们先做服务器端,在frp服务器上操作。

    1、安装nginx代理工具。

    nginx的作用是代理,也就是把frp转发后的端口再做一次代理,代理到80/443端口,并且挂上证书。

    sudo yum update
    sudo yum install nginx

    修改nginx配置

    cd /etc/nginx/conf.d/

    vi pan.conf

    server {
        listen 80;
        server_name zhangdaqi.duckdns.org;
        rewrite ^(.*) https://$server_name:443$1 permanent;
    }
    
    server {
        listen 443 ssl;
        server_name zhangdaqi.duckdns.org;
        charset utf-8;
    
        ssl_certificate /etc/letsencrypt/live/zhangdaqi.duckdns.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/zhangdaqi.duckdns.org/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;
        keepalive_timeout 70;
    
        index index.html index.php;
        root /html/zhangdaqi.duckdns.org;
        #charset koi8-r;
        #access_log logs/host.access.log main;
        location / { 
            #proxy_redirect on ;
            proxy_pass http://127.0.0.1:7001;
            proxy_ssl_session_reuse off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
    
            # Show real IP in v2ray access.log
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    2、域名解析

    在域名网站做一条解析
    A记录   pan      ip地址

    3、申请证书

    我喜欢用certbot工具申请,这是Let’s Encrypt 的证书申请工具,申请到的证书有效期三个月,到期前可以进行证书更新。

    安装certbot

    yum install python-urllib3
    yum install python-requests
    yum install certbot

    申请证书。

    certbot certonly --standalone -d pan.abc.com

    定时任务,自动更新证书。

    修改nginx证书相关配置,完整配置类似下面,注意修改为自己的域名,以及frp端口。

    现在重启nginx,就可以刷新web,实现了https。

    4、搭建frp服务。

    使用的操作系统是debian11

    然后在我们的内网的一台机器上做frp服务,与服务器端进行数据交换。

    5、openwrt配置frp

    如果你有openwrt,主路由旁路由都没关系,安装frp内网穿透工具,也是可以的,配置如下。

    配置nextcloud conf允许我们的域名和服务器访问。

    重启服务后,理论上已经可以通过域名https访问你的nextcloud服务了,但是会报证书错误。

    此为第一个方案,其他方法不久就会更新。

    frp安装

    imajeason阅读(412)

    frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

    官方网站:https://gofrp.org/zh-cn/

    具体实现:

    1、需要一个公网ip地址,用来安装部署frp服务端frps

    2、需要在内网环境中部署一台frp客户端frpc,当做代理服务器

    3、用户访问公网ip地址,会先连接到frp客户端,再根据相应的规则去匹配转发,把请求发送到内网中其他主机上

    4、在服务端需要开启相应的端口(7000,7001,7002,7003等)

    安装部署:

    1、下载frps

    frp压缩包同时包含了 frps(frp 服务端)和frpc(frp 客户端)

    下载地址:https://github.com/fatedier/frp/releases

    2、服务端部署

    #创建目录

    mkdir -p /data/soft
    mkdir -p /data/server

    上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面

    #解压
    cd /data/soft
    wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
    tar zxvf frp_0.52.3_linux_amd64.tar.gz
    mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
    #修改服务端配置文件
    cp /data/server/frp/frps.toml /data/server/frp/frps.toml.bak

    vi /data/server/frp/frps.toml

    [common]
    bind_addr = 0.0.0.0
    bind_port = 7000
    vhost_http_port = 7001
    vhost_https_port = 7002
    tcp_mux = true
    authentication_method = token
    token = 123456

    :wq! #保持退出

    #后台启动

    nohup /data/server/frp/frps -c /data/server/frp/frps.toml > /dev/null 2>&1 &

    #添加服务端开机启动

    vi /usr/lib/systemd/system/frps.service

    [Unit]
    Description=frps
    StartLimitIntervalSec=0
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=root
    WorkingDirectory=/data/server/frp
    ExecStart=/usr/bin/env ./frps -c ./frps.toml
    [Install]
    WantedBy=multi-user.target

    :wq! #保持退出

    #重新加载 systemd 配置
    systemctl daemon-reload
    #启动frp
    systemctl start frps
    #停止frp
    systemctl stop frps
    #重启frp
    systemctl restart frps
    #查看frp状态
    systemctl status frps
    #服务在系统开机启动时自动启动
    systemctl enable frps

    3、客户端部署

    #创建目录
    mkdir -p /data/soft
    mkdir -p /data/server

    上传安装包frp_0.52.3_linux_amd64.tar.gz到/data/soft目录下面

    #解压
    cd /data/soft
    tar zxvf frp_0.52.3_linux_amd64.tar.gz
    mv /data/soft/frp_0.52.3_linux_amd64 /data/server/frp
    #修改客户端配置文件
    cp /data/server/frp/frpc.toml /data/server/frp/frpc.toml.bak

    vi /data/server/frp/frpc.toml #编辑配置文件

    [common]
    server_addr = 1.2.3.4 #服务端的ip地址
    server_port = 7000 #服务端的端口
    tcp_mux = true #优化传输,和服务端必须一致
    authentication_method = token #身份验证方式,和服务端必须一致 
    token = 123456 #token设置密码,用于通过身份验证创建连接,和服务端必须一致
    [tcp]
    type = tcp #代理类型,包含 tcp, udp, http, https 等 
    local_ip = 192.168.128.198 #要转发到的真实ip地址 
    local_port = 3389 #要转发到的真实ip地址的端口 
    remote_port = 7003  #远程服务器的代理端口
    [http]
    type = http #代理类型,包含 tcp, udp, http, https 等 
    local_ip = 192.168.199.239 #要转发到的真实ip地址 
    local_port = 7001 #要转发到的真实ip地址的端口 
    custom_domains = zhangdaqi.duckdns.org #服务器域名或外网ip

    :wq! #保持退出

    #后台启动客户端
    nohup /data/server/frp/frpc -c /data/server/frp/frpc.toml > /dev/null 2>&1 &

    #添加客户端开机启动服务

    vi /usr/lib/systemd/system/frpc.service

    [Unit]
    Description=frpc
    StartLimitIntervalSec=0
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=root
    WorkingDirectory=/data/server/frp
    ExecStart=/usr/bin/env ./frpc -c ./frpc.toml
    [Install]
    WantedBy=multi-user.target

    :wq! #保持退出

    #重新加载 systemd 配置
    systemctl daemon-reload
    #启动frp
    systemctl start frpc
    #停止frp
    systemctl stop frpc
    #重启frp
    systemctl restart frpc
    #查看frp状态
    systemctl status frpc
    #服务在系统开机启动时自动启动
    systemctl enable frpc

    4、验证

    现在可以通过外网ip+端口来访问内网的服务器了。

    内网端口暴露在公网上,请务必设置强密码,不要使用弱口令,很容易被攻击!

    至此,Linux下使用frp搭建内网穿透服务器完成。

    原文链接:https://www.osyunwei.com/archives/14110.html

    Docker搭建Nextcloud容器实现自建网盘服务

    imajeason阅读(631)

    之前做了好多视频,都有讲到nextcloud搭建,但是没有一篇单独的文章写文档,此篇补全这个遗憾。

    之前关注我的朋友可能知道,我所有的应用都是在nextcloud中部署的,nextcloud当然也不例外。

    以unraid为例,先获取镜像:

    docker pull linuxserver/nextcloud:27.1.4

    然后启动容器。

    注意:

    /mnt/user/appdata/是unraid中的一个典型容器路径,而/mnt/user/appdata/nextcloud是nextcloud的专用路径。

    这个路径要改成你自己的,不要直接复制。

    puid与guid是你的第一个普通用户的id和组id,可以通过id 用户名查看。

    注意以下操作是在nas的命令行里操作的。

    docker run -d \
    --name nextcloud \
    -p 8444:443 \
    -p 8180:80 \
    -v /mnt/user/appdata/nextcloud/data:/data \
    -v /mnt/user/appdata/nextcloud:/config \
    -e PUID=1000 \
    -e GUID=100 \
    -e TZ=Asia/Shanghai \
    --restart unless-stopped \
    linuxserver/nextcloud:27.1.4
    

    等待容器启动,即可通过8180或者8443这个端口在内网访问网盘服务了。

    下载youtube|bilibili视频的免费工具,从视频到合集一网打尽

    imajeason阅读(840)

    本文章内容包括

    vividl下载工具下载安装使用说明
    youtubedl-material容器的安装使用
    yt-dlp命令行下载工具说明

    之前我在nas上搭建一个流媒体下载的工具

    http://192.168.188.100:17442/#/home

    可以用来下载在线视频网站的视频,其实这个下载工具背后使用的工具叫yt-dlp,非常好用

    youtubedl-material

    但是我近来下载合集比较多,如果用这个下载了之后视频我还要从nas上进行整理再传到我的网盘中,通过webdav服务进行观看,就比较麻烦

    所以我就用了一段时间的yt-dlp

    就是在win10中安装yt-dlp这个命令行工具,然后通过命令来下载

    再结合ffmpeg等工具就可以在下载完的同时把媒体文件转换成自己需要的格式

    但是我发现时间长了,还是不尽兴,命令行太麻烦了。

    幸好,我找到了这样一款功能简洁的基于yt-lp的下载工具,这个软件本质上就是调用yt-dlp命令来实现下载,跟命令行上能做的一样多。

    就是这个工具vividl是一个开源免费工具

    https://github.com/Bluegrams/Vividl

    这个工具仅有windows版本

    https://sourceforge.net/projects/vividl/files/

    大名鼎鼎的sourceforge,下载的时候需要开梯子

    下载下来安装上即可,因为是基于.net开发的,所以安装会依赖.net,如果没有的话去下载安装一下net再安装

    使用的时候要注意

    如果要下载youtube这种需要梯子的网站的视频也是需要设置梯子的

    下载目的文件夹也需要设置一下

    下载播放列表

    需要添加下载任务的时候选择download playlist

    这样就可以愉快的进行下载了

    下面是web版本的安装。通过docker-compose就可以启动

    注意,http_proxy与http_proxy是梯子的地址,设置你自己的,既然你有nas,搭建一个openwrt旁路由应该不是什么难事

    version: "2"
    services:
        ytdl_material:
            environment: 
                ytdl_mongodb_connection_string: 'mongodb://ytdl-mongo-db:27017'
                ytdl_use_local_db: 'false'
                write_ytdl_config: 'true'
                http_proxy: ""
                https_proxy: ""
            restart: always
            container_name: youtubedl-material
            volumes:
                - ./youtubedl-material/appdata:/app/appdata
                - ./youtubedl-material/subscriptions:/app/subscriptions
                - ./youtubedl-material/users:/app/users
                - ./download/audio:/app/audio
                - ./download/video:/app/video
    
            ports:
                - "17442:17442"
            image: tzahi12345/youtubedl-material:4.3.2
    
            
        ytdl-mongo-db:
            # If you are using a Raspberry Pi, use mongo:4.4.18
            image: mongo:4
            logging:
                driver: "none"          
            container_name: mongodb-ytdl
            restart: always
            volumes:
                - ./youtubedl-material/db/:/data/db
    

    再然后

    如果上面两个工具都不能满足你的需求,那就直接用命令行吧

    既然你选择使用命令行了,我相信安装python和配置环境变量都难不倒你

    再去下载转码工具ffmpeg,也把它配置到环境变量的path中

    此时保证打开cmd或者powershell中执行ffmpeg有出书工具说明

    输入python会进入python交互工具,就安装成功了

    这时候在命令行中执行

    pip install yt-dlp -i https://pypi.tuna.tsinghua.edu.cn/simple

    等待安装完毕在命令行中就有了yt-dlp命令

    yt-dlp命令详细使用方法请移步:https://www.dongvps.com/2023-12-14/yt-dlp/

    yt-dlp

    开源图片应用immich升级,智能图片分类功能可以在老机器上运行了

    imajeason阅读(607)

    之前的时候immich在我的e3 1265l的机器上无法运行,缺少avx支持,现在新版已经不需要这个了,可以运行成功自动分类了。

    immich
    最好的备份图片应用immich

    安装也有变化,多了个typesense

    官方安装文档:https://immich.app/docs/install/docker-compose

    内容如下:

    Step 1 – Download the required files

    创建一个immich的根目录,用于存放immich相关的文件,已经运行容器的目录

    mkdir ./immich-appcd ./immich-app
    cd  ./immich-app

    下载docker-compose.yml and example.env,

    wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

    我做了修改,主要是修改postgres的数据目录与typesense的数据目录,方便备份,官方的是通过docker自行创建的,不便于备份恢复。

    version: "3"
    
    #
    # WARNING: Make sure to use the docker-compose.yml of the current release:
    #
    # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    #
    # The compose file on main may not be compatible with the latest release.
    #
    
    
    services:
      immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        command: [ "start.sh", "immich" ]
        volumes:
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        ports:
          - 2283:3001
        depends_on:
          - redis
          - database
          - typesense
        restart: always
    
      immich-microservices:
        container_name: immich_microservices
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        # extends:
        #   file: hwaccel.yml
        #   service: hwaccel
        command: [ "start.sh", "microservices" ]
        volumes:
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        depends_on:
          - redis
          - database
          - typesense
        restart: always
    
      immich-machine-learning:
        container_name: immich_machine_learning
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        volumes:
          - model-cache:/cache
        env_file:
          - .env
        restart: always
    
      typesense:
        container_name: immich_typesense
        image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
        environment:
          - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
          - TYPESENSE_DATA_DIR=/data
          # remove this to get debug messages
          - GLOG_minloglevel=1
        volumes:
          - /srv/dev-disk-by-label-data/databases/immich_typesense/tsdata:/data
        restart: always
    
      redis:
        container_name: immich_redis
        image: redis:6.2-alpine@sha256:80cc8518800438c684a53ed829c621c94afd1087aaeb59b0d4343ed3e7bcf6c5
        restart: always
    
      database:
        container_name: immich_postgres
        image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
        env_file:
          - .env
        environment:
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_USER: ${DB_USERNAME}
          POSTGRES_DB: ${DB_DATABASE_NAME}
        volumes:
          - /srv/dev-disk-by-label-data/databases/immich_postgres/pgdata:/var/lib/postgresql/data
        restart: always
    
    volumes:
      model-cache:

    下载env文件,这个文件是immich的配置文件,创建容器的时候会读取这里面的配置:

    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    修改env文件的TYPESENSE_API_KEY,设置一个api key,长一点的,恢复容器的时候这个key要保持一致。

    修改UPLOAD_LOCATION,这个就是指定immich上传的图片的存放路径,如果不修改的话,就会在最开始创建的./immich-app中,因为我们要在这个目录启动容器。

    其他的不需要修改

    (可选) Get hwaccel.yml 文件是转码配置,用不到的吧。

    wget https://github.com/immich-app/immich/releases/latest/download/hwaccel.yml

    启动容器即可,启动后访问nas的2283端口即可。

    docker-compose up -d     # or `docker compose up -d` based on your docker-compose version

    升级容器。

    docker-compose pull && docker-compose up -d     # Or `docker compose up -d`

    NAS全平台同步神器Rsync

    imajeason阅读(1247)

    nas玩久了,数据就多起来了,还有些数据非常重要

    之前跟大家分享过,数据备份的三二一原则,三份相同的数据,我们需要让nas自行的进行完整的备份,至少每天一次。

    对于普通文档类数据,备份只是把数据备份出来,不需要考虑文件的属性

    但是对于一些应用类数据,比如docker用到的文件,如果备份的文件权限变了,等你需要复制回去进行应用恢复的时候就会发现各种权限带来的问题

    所以备份是需要专用工具的,而不是直接的复制粘贴

    rsync正是数据同步的神器,而且在大部分的nas系统上,rsync几乎是标配,我们只需要学会使用它

    Rsync是一款开源的、快速的、多功能的、可实现全量及增量(全量备份是指全部备份,增量备份是在上一次备份的基础上只备份更新的内容)的本地货远程数据同步备份的优秀工具。Rsync可以在大部分的操作系统上安装运行,包括windows。

    rsync可以根据同步文件的大小和修改时间等信息来判断文件是否需要同步,从而实现增量备份,而且能够同步文件的属性信息来确保文件的元信息一致。

    rsync有三种模式

    1、本地模式比较简单,跟我们的复制粘贴一样,但是不同处在于它可以复制文件的属性、属主等权限类信息,非常牛批

    2、shell模式,就是通过ssh命令实现文件的同步,这里的ssh命令特指linux系的操作系统,也就是说通过ssh命令获取对端的shell权限来进行同步

    这个模式是linux系统中比较常用的同步模式,因为这种同步不需要对端做任何的修改,只需要开放ssh即可

    3、daemon模式,是守护进程的方式传输数据,需要搭建服务

    daemon模式是nas上比较常用的模式,但是ssh模式也是可以的

    全局域网只需要有一台rsync服务,就可以让所有的rsync客户端实现数据的定时同步,非常方便

    OMV中rsync使用

    首先是omv,就是点点点就行

    创建用户,创建目录,赋予权限

    开启服务,设置账户和目录

    rsync -av gits/ [email protected]::backup

    群晖中rsync使用

    首先需要开启ssh

    群晖比较简单,打开后台,找到文件服务的rsync,开启22,注意,这里开启的是ssh模式

    这样就开启了rsync服务

    如果将群晖作为客户端使用需要去套件中间,安装backup

    在shell中测试,gits是需要备份的目录,后面是目标路径,这里是群晖

    rsync -av gits/ [email protected]::backup

    不过还是建议使用daemon模式,群晖开启daemon模式也需要去命令行里操作

    # 创建用户
    rsync_backup
    注意还要让用户对需要同步的目录有读写权限
    /volume1/storages/omv_backup/ 

    配置文件

    
    uid             = rsync_backup
    gid             = 0
    use chroot      = no
    max connections = 4
    pid file        = /var/run/rsyncd.pid
    timeout         = 600
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    [backups_synology]
        path = /volume1/storages/omv_backup/
        comment = Backups_omv
        read only = FALSE

    创建密码文件/etc/rsync.password,权限600

    rsync_backup:123456

    然后去控制面板关闭rsync,再开启,实现重启。

    unraid中rsync使用

    unraid内置了rsync,但是没有提供操作界面,我们可以通过命令行来启动rsync服务

    具体的操作也要去命令行里操作

    考虑到unraid系统的特殊性,建议将unraid作为服务器使用

    创建目录

    mkdir -p /boot/custom/etc/
    mkdir -p /boot/custom/etc/rc.d

     将rsyncd.conf文件同时放到/boot/custom/etc/etc下,两份一样内容。

    rsyncd.conf文件,内容:

    uid             = rsync_backup
    gid             = rsync_backup
    use chroot      = no
    max connections = 4
    pid file        = /var/run/rsyncd.pid
    timeout         = 600
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    
    [backups_synology]
        path = /mnt/user/backup/synology
        comment = Backups_synology
        read only = FALSE
    [backups_omv]
        path = /mnt/user/backup/omv/
        comment = Backups_omv
        read only = FALSE
    

    创建密码文件

    useradd rsync_backup -s /sbin/nologin -M
    mkdir /mnt/user/backup/omv -p
    
    chown rsync_backup.rsync_backup /mnt/user/backup
    
    echo "rsync_backup:123456">/etc/rsync.password
    
    chmod 600 /etc/rsync.password # 注意权限

    将配置持久化(unraid操作)

    touch /boot/custom/etc/rc.d/S20-init.rsyncd

    内容如下:
    S20-init.rsyncd

    #!/bin/bash
    if ! grep ^rsync /etc/inetd.conf > /dev/null ; then
    cat <<-EOF >> /etc/inetd.conf
    rsync   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/bin/rsync --daemon
    EOF
    read PID < /var/run/inetd.pid
    kill -1 ${PID}
    fi
    cp /boot/custom/etc/rsyncd.conf /etc/rsyncd.conf

    这是初始化文件,因为unraid在重启后会丢失配置,需要将配置初始化到flash中。

    编辑初始化文件

    vi /boot/config/go

    将下面的内容放在末尾,后续每次执行初始化,都会初始化rsync服务端的配置

    /boot/custom/etc/rc.d/S20-init.rsyncd

    如果此时rsync没有运行

    ps aux|grep rsync
    # 如果没运行
    rsync --daemon

    大家可以根据自己的nas系统与操作系统组合,选择合适的rsync搭配方案

    选择能够方便的进行定时任务的设备作为客户端,客户端可以作为数据源推送数据到服务器,也可以从rsync服务器拉取数据进行同步

    也就是说,rsync客户端的选择与源数据在哪台设备上并没有关系

    windows中rsync使用

    我们首先安装windows版,方便没有linux客户端的朋友进行测试

    windows系统安装rsync服务

    cwRsync4.2.0下载地址:https://www.jb51.net/softs/39404.html?spm=a2c6h.12873639.article-detail.5.1aa02876MqUwGv

    https://www.itefix.net/cwrsync

    链接:https://pan.baidu.com/s/1CnY_6DQPLWahb9OqY9Xr4g 
    提取码:5r2a 

    下载rsync

    下载解压后,得到server和client,根据需要安装

    windows版rsync server,安装完成后,进入安装的目录,安装路径下默认配置rsyncd.conf

    # C:\Program Files (x86)\ICW
    
    use chroot = false
    strict modes = false
    hosts allow = *   #允许任意IP
    lock file = rsyncd.lock 
    max connections = 5
    port = 28950   #指定端口号
    charset=UTF-8  #指定字符集
    #pid = 0
    uid = 0    #运行rsync守护进程的用户 0为不限制
    gid = 0    #运行rsync守护进程的组   0为不限制
    log file = rsyncd.log  #日志文件存放位置
     
    # Module definitions
    # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
    #
    #[test]
    #path = /cygdrive/c/work
    #read only = false
    #transfer logging = yes
     
    [data]
    path = /cygdrive/f/backup
    auth users = zhangdaqi       #指定授权用户名
    secrets file = etc/rsyncd.secrets  #指定密码存储文件
    read only = no         
    transfer logging = yes
    hosts allow = *

    特殊之处在于路径,这里要注意。确保指定的path存在,我这里设置的是F:\backup

    /cygdrive/c/work 相当于c:/work 

    通过 菜单–cwRsyncServer–02. Prep a Dir for Upload 设置目录权限,需要设置成600,也就是指定的用户可以读写,其他用户和用户组都没有权限。

    密码文件rsyncd.secrets的格式是 用户名:密码

    rsyncuser:rsyncpass

    需将其权限设置为600,即其他组没有读权限。同时要保证用户cwRsyncServer既是该文件拥有者又对其具有读写权限。

    此处需要确保账户zhangdaqi存在,如果没有就创建一个

    修改完毕后,win+R 跳出输入框,输入services.msc就可以打开服务,去win 的服务中启动cwrsync。

    windows客户端

    这里最好是把rsync 客户端(注意,不是服务端)的路径加到环境变量中,不然操作的时候需要带着rsync的绝对路径,不是很方便

    在windows cmd中执行命令

    rsync -vzrtopg --progress --delete [email protected]::test /cygdrive/d/rsyncBackup --password-file=/cygdrive/c/etc/rsyncd.secrets

    (–password-file也可以写前边)

    rsyncd.secrets密码文件,名字随便起,格式,只写密码

    rsyncpass

    设置密码访问权限chown.exe可从服务端拷贝过来

    同样的,目录权限需要设置成600,也就是指定的用户可以读写,其他用户和用户组都没有权限。

    chmod -c 600 /cygdrive/c/etc/rsyncd.secrets
    chown administrator /cygdrive/c/etc/rsyncd.secrets

    可访问局域网中所有的rsync服务,包括windows、unraid等标准rsync服务。

    rsync -vzrtopg --progress --delete /cygdrive/d/rsyncBackup/ 192.168.1.82::test
    
    rsync -vzrtopg --progress --delete /cygdrive/d/rsyncBackup/ [email protected]::test --password-file=/cygdrive/c/etc/rsyncd.secrets

    掌握了rsync,定时同步重要数据,可保数据无忧

    我是张大七,下期再见。

    5分钟搭建AI机器女友

    imajeason阅读(1291)

    这是一个AI女友的项目,可以在本地运行,也可以挂载到telegram机器人,实现一个基于gpt4的AI女友。

    首先看效果,telegram聊天

    原项目首页

    https://github.com/EniasCailliau/GirlfriendGPT/

    因为初始设定都是英文人设,我就fork了一下代码,修改成了中文人设

    https://github.com/imajeason/GirlfriendGPT

    这个项目可以本地直接运行

    创建一个python环境

    git clone

    安装依赖

    python main

    会提示申请api,我们就去申请api

    设置

    export STEAMSHIP_API_KEY=xxxxxxxxxxxxxxx

    python main

    就可以聊天了

    现在我们要部署到云上的话,需要申请telegram bot机器人token

    打开telegram,搜索bot father

    申请,复制token

    python deploy

    设置项目名称

    打开steamship页面

    填写token等

    现在就可以在telegram中搜索机器人,跟它聊天了

    简单聊两句

    本项目实际部署在steamship,有一美元的免费额度,超了后就不能聊天了,如果你喜欢这个项目就去交钱吧

    另外收到的语音讲英文很ok,但是讲中文实在蹩脚

    这个项目中使用了elevenlabs的语音接口生成语音信息,如果你喜欢这个项目就去开会员,然后自己生成喜欢的语音风格,定制你的专属女友声音。

    拿到elevenlabs的api在这里修改token和语音id

    另外就是ai发送的照片信息

    你也可以自己定制喜欢的女友长相

    需要修改提示词,在代码的这里修改。

    Tailscale高级功能篇(tailscale Funnel)——实现不需要独立ip的公网访问

    imajeason阅读(3109)

    多朋友没有独立ip,但是又想把nas上的服务映射到公网上使用。

    比较简单的方案是通过zerotier,tailscale,wireguard等虚拟内网工具,把需要访问的设备都加到虚拟内网中,通过穿透实现异地访问服务。

    其实tailscale本身可以提供类似于群晖的公网访问。

    这个工具叫Tailscale Funnel 

    基本原理是在tailscale会给你的设备分配一个二级域名,你通过二级域名的访问会被转发到指定的内网服务上,来实现。

    这个服务是免费的

    下面开始配置

    首先要去tailscale管理页面开启它,先登录你的tailscale

    https://login.tailscale.com/admin/dns

    系统会分配一个默认的二级域名

    然后激活magicDNS

    然后激活https

    打开access controls页面,激活funnel

    建议使用完整功能的linux系统操作,方便把局域网中其他设备的服务映射出去,我这里以ubuntu20为例。

    首先安装tailscale,打开
    https://pkgs.tailscale.com/stable/

    找到对应的平台安装tailscale

    申请证书

    tailscale cert 
    #会提示需要输入三级域名,格式是   node_name.tailxxx.ts.net
    # 输入正确的节点域名,重新执行
    tailscale cert g4560.tail471ed.ts.net

    首先确保这台机器上的服务正常启动了,注意一定要localhost也就是127.0.0.1的本机服务,这是funnel的限制,不要问我为什么不能直接把127.0.0.1写成局域网的其他设备ip,tailscale不让!!!那如果想映射局域网的其他设备怎么办,后面讲。

    tailscale serve https / http://127.0.0.1:9091
    tailscale funnel 443 on
    tailscale funnel status
    #https://example.pango-lin.ts.net (Funnel on)

    可以看到已经激活了

    但是如果你现在访问它是访问不了的,因为域名生效是需要时间的,稍等片刻一般来说就能更新出来

    不用等很久就可以访问了

    如果我们想把局域网中其他的服务访问出去怎么办

    要么你在有服务的节点上安装tailscale启用funnel

    如果那台机器不方便使用funnel怎么办,比如它是一台群晖

    办法总是有的,我们在一台可以安装tailscale的节点上,这台机器可以是虚拟机

    通过nginx先把服务给代理一下,本机上就可以通过localhost访问到了

    比如,我现在要把我的jellyfin服务映射出去。

    http://192.168.188.167:8096

    就需要nginx之类的反代工具了,其他的类似的caddy也是可以的,不过我个人是喜欢用nginx的。

    首先安装nginx

    sudo apt install nginx -y

    创建并配置/etc/nginx/conf.d/jellyfin.conf

    
    server {
        listen 8801;
        
        server_name _;
        charset utf-8;
    
    
        keepalive_timeout 70;
    
        location / {
            # proxy_redirect off;
            proxy_pass http://192.168.188.167:8096; # port
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
    
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
    
    }

    重启nginx使配置生效

    systemctl restart nginx

    查看服务是否已经启动

    netstat -nltp
    # 看到8801已经启动了

    重新配置funnel 443指向8096

    tailscale serve https / http://127.0.0.1:8096
    tailscale funnel 443 on
    tailscale funnel status
    #https://example.pango-lin.ts.net (Funnel on)

    刷新你的页面,可以看到页面已经变成了jellyfin,至此就完成了内网服务到公网的映射。

    速度取决于你的搭建tailscale的节点到tailscale的服务器的速度,并不快,但是免费的服务

    这个funnel功能适合实在没有办法的朋友,可以用于一些文字类的内网服务或者用于临时的内网服务管理。

    你可能要问能不能搭建一个中间服务器提速啊

    你是不是傻,如果你能自己搭建中间服务器,你有一台独立ip的vps,你还需要这个东西做什么呢,直接搭建ngrok、frp等等,他不香么