技术积累
日进一寸

frp安装

imajeason阅读(941)

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阅读(1278)

之前做了好多视频,都有讲到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阅读(1892)

本文章内容包括

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

在nas/vps上搭建免魔法的chatgpt镜像站,大量chatgpt共享账号免费体验

imajeason阅读(1220)

介绍

主流的使用chatgpt的方法是通过浏览器来访问chatgpt,因为chatgpt不为中国大陆和香港提供服务,这就意味着像我这样的用户需要一个梯子来访问

而搬瓦工是大家用的最多的,可是有搬瓦工vps的朋友应该知道了,chatgpt是不允许搬瓦工的ip访问的

好在chatgpt的接口api是不验证ip的,也就是说无论在那里都是可以通过apii来访问chatgpt的

chatgpt自建pandoraNext

而且,搬瓦工的vps很多时候也是我们的梯子本身,以naive为例,梯子本身大部分时候是一个https的普通网站,我们可以把这个普通网站换成chatgpt的页面,岂不是美滋滋。

当然,如果你没有vps或者不想自己搭建,可以直接访问

https://chat-shared3.zhile.io/shared.html?v=2

pandoranext chatgpt共享账号站

通过项目方提供的共享账号来使用pandoranext服务,不需要申请任何账号,直接用就行了,但是毕竟是公益服务,大家请勿滥用。

这个项目简单来说,就是通过pandoraNext项目提供的代码,搭建一个chatgpt的镜像站,配置完毕后,我们就可以访问这个不需要梯子就能访问的镜像站来使用chatgpt,而且它支持多用户与共享用户。

这是pandoranext的首页https://github.com/pandora-next/deploy

pandoranext部署

原版已经很好用了,部署也不麻烦,但是token需要自行定期手动更新,有点麻烦,推荐另外一个项目来部署

https://github.com/Yanyutin753/PandoraNext-TokensTool

pandoranext token tool管理工具

这个项目提供了一个管理token的web页面,方便我们进行token管理,还可以自动更新token

开始部署

那我们开始准备工作,首先申请必要的key

注意,需要你有一个可用的openai的账号,可以正常访问chatgpt的服务,注册很简单

还需要github账号用于申请licsnseid,后面会讲,先执行脚本

一键部署PandoraNext和tokensTool(最强推荐)

# 确保vps上已经安装了git命令
# 国内
cd / && git clone https://gitee.com/yangyangEN/tokenTools-sh.git
# 国外
cd / && git clone https://github.com/Yanyutin753/tokenTools-sh.g
# 运行脚本
cd /tokenTools-sh && sudo sh install.sh

# 一键更新pandoraNext和tokensTool服务
cd /tokenTools-sh && sudo sh update.s

通过netstat查看

netstat -nltp #可以查看端口是否已经启动
docker container ls #可以查看容器是否正常启动
docker logs 容器id  #可以查看具体某个容器的日志文件,无法访问的时候可以使用

申请key

此时项目还不能正常运行

注意路径,执行完脚本可以看到,项目创建了一个/pandora/目录

这个目录下面有个data目录

要想项目运行正常需要3个文件config.json  license.jwt  tokens.json

首先是config.json,内容入戏啊:

{
  "loginUsername": "root",
  "tokenKind": "session_token",
  "public_share": false,
  "whitelist": null,
  "server_tokens": true,
  "timeout": 600,
  "autoToken_url": "default",
  "site_password": "",
  "bind": "0.0.0.0:8181",
  "setup_password": "",
  "captcha": {
    "oai_username": false,
    "site_key": "",
    "provider": "",
    "site_secret": "",
    "setup_login": false,
    "site_login": false,
    "oai_password": false
  },
  "license_id": "v3XN8-BNrxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx",
  "containerName": "PandoraNext",
  "loginPassword": "123456",
  "server_mode": "web",
  "tls": {
    "key_file": "",
    "cert_file": "",
    "enabled": false
  },
  "proxy_url": "",
  "getTokenPassword": "123456"
}

8181就是pandora的端口,如果项目正常运行是可以访问的。

这里设置了一个账号密码,root  123456是端口是8081web页面的端口,也就是tools的账号密码,而不是pandora的

license_id 获取,这个项目需要github账号,他会根据github账号的使用年龄来限制此id的使用额度。

在这里获取:https://dash.pandoranext.com

复制License Id后的内容,填写在config.json的license_id字段。
注意检查不要复制到多余的空格等不可见字符。
如果config.json中没有填写license_id字段,启动会报错License ID is required。
没有固定IP的情况,IP变动后会自动尝试重新拉取。
如果你要同时启动web和proxy模式,则必须共同一份license.jwt,此时建议手动拉取!

site_password如果设置了,打开8181就需要密码了,就是这个密码,其他的不用设置

其他的不需要设置

 license.jwt  用来存放license的jwt,获取方法执行(这是复制来的,别直接copy这行命令)

这个命令在申请license id的页面提

cd /pandora/data
curl -fL "https://dash.pandoranext.com/data/v3XN8-BNrxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx/license.jwt" > license.jwt

生成jwt文件

tokens.json不需要生成。

cd /pandora
docker-compose up -d

打开8181端口查看服务

设置反代,实现https服务

恰好我这台机器上使用了naive,用我的脚本安装了naive

现在的naive域名打开是一个开启了ssl的centos页面

我打算把这个页面换成pandora,这样就一举两得了

打开配置/etc/caddy/caddy_config.json

修改部分内容

                      "match": [
                        {
                          "host": [
                            "域名"
                          ]
                        }
                      ],
                      "handle": [
                        {
                          "handler": "reverse_proxy",
                          "transport": {
                                        "protocol": "http",
                                        "read_buffer_size": 4096
                                    },
                          "upstreams": [
                                        {
                                            "dial": "127.0.0.1:8181"
                                        }
                                    ]
                        }
                      ],

这里的解释就是把原来的域名主页为静态html,修改为反代指向本地的8181端口的服务

而此时的8181是pandoranext

重启naive服务

打开https://域名:443

好了,全部完成

搭建https的pandoranext,实现了pandoranext与naive的混合部署,用同一个域名同一个证书。

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

imajeason阅读(1602)

之前的时候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`

自建速记工具,全平台可用

imajeason阅读(1053)

一直以来我都在寻找一款速记工具,要求就是必须非常简单易用,还要有移动端app可用即可。

找了很久都没有很合适的,最近终于找到了,它就是memos

项目主页:https://github.com/usememos/memos

demo

A privacy-first, lightweight note-taking service. Easily capture and share your great thoughts.

Home Page • Blogs • Docs • Live Demo

大家也知道,现在搭建服务必须用docker,其他的安装方式不推荐,不过你非要自行部署的话去项目页面找。

docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest

搭建虽简单,但是作为速记本来用的话还是要开启ssl才安全。

实现步骤:

  • 安装cert工具申请证书
  • 申请域名
  • 域名解析到vps
  • 如果是家庭内网nas中,就解析到公网ip,另外还需要配置ddns
  • 安装nginx
  • certbot工具申请证书
  • 配置nginx指向memos

具体的步骤有点长,大家的环境也不一样,有人需要的话再贴

客户端方面,首先是web端就不用说了,其他端:

NAS全平台同步神器Rsync

imajeason阅读(2640)

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,定时同步重要数据,可保数据无忧

我是张大七,下期再见。

8年nas总结|如何选购nas|nas系统|nas服务

imajeason阅读(2184)

大家好,我是张大七。

好久没做nas相关的视频了,因为我的nas稳定运行中,这个组合应该是当前用的比较顺手的状态,实在不想折腾了。

今天跟大家主要是聊一聊,都2023年了,我在用什么样的nas,硬件系统以及应用服务。

首先来看下设备,我现在主力nas有两台,一台是蜜獾超存6盘位,装了omv5,存储一些相比比较重要的数据,比如笔记、照片、数据库等。

另一台是攒的一台e31265l的4盘位机器,系统是unraid6.8,主要是跑服务器和一些比较消耗性能的服务。

那么,如果现在的你需要一台nas,该如何选择硬件呢。

这个需要结合大家自身的情况。

入门机型当然还是蜗牛星际,j1900 8g内存基本上可以应付市面上比较常见的应用,装个openwrt虚拟机性能也够,但是除此之外就不要要求更多了,好处自然是便宜,最便宜的4盘位nas,要啥自行车,j1900的机器还有暴风影音1代,但是只有2盘位,不建议。

如果对性能有要求,可以选择j3455,相应的机型是暴风影音2代,但这货也只有2盘位,所以建议相中j3455的朋友去购买j3455的带u主板,要4sata口的,再配上一个蜗牛星际的外壳,在买一个小尺寸的电源,就可以了。

性能稍微高点的话,可以选择e31265l甚至e31265lv3,需要去淘合适的主板,同样的可以配上蜗牛星际的外壳,这里要注意下主板与外壳的适配,有一些工控主板,非常合适做nas,但是因为配置了太多我们用不到的模块,导致空间拥挤,一些机箱可能很难装进去。

如果不差钱,可以直接上群晖,4盘位,配置简单,运行稳定,还有官方远程可用。这里不建议大家购买2盘位,一方面是2盘位不便于扩容,一旦有了nas,对容量的需求几乎是无限的,另一方面是性能,2盘位的普遍性能较低,装几个docker,跑个openwrt,负载就较高了。

如果需要高性能的nas,需要选择6代以上的cpu,以及相应的主板,但是问题来了,高性能cpu就需要相对较好的散热器,这就意味着蜗牛星际等4盘位的机箱就不再适用了,需要选择塔式机箱,也就是我们最常见的立式机箱,相应的电源和主板选择的余地也变大了,还要配上合适的硬盘笼子。

当然有的人可能直接购买二手服务器作为nas使用,我是非常不建议的,二手服务器作为企业级的设备,都是在机房中使用的,一般来说,功耗巨大,噪音巨大,单核性能堪忧,占用空间巨大,头铁的铁子可以考虑。

说完了硬件,再说一下系统。

都2023年了,系统选择方面的余地也不是特别大。

市面主流的nas系统还是那几位老哥,群晖、omv、unraid、truenas,pve可以算一个,但是pve与esxi都是虚拟机管理系统,并不能称之为nas系统,你安装了pve还是需要在虚拟机中安装nas系统。

群晖分白群和黑群,白群就是官方正版的nas设备自带的系统,黑群就是第三方修改版的可以在通用的硬件上安装的。

白群和黑群在功能上唯一的区别就是官方的远程访问nas服务只有在白群以及洗白的黑群上使用,洗白是要花钱的,而且这个服务本身的可用性并不高,速度很慢。

以上我们提到的硬件,绝大部分都是有对应的黑群可以安装的

对于绝大部分人来说,群晖都是组好的选择。至于为什么我没有群晖的nas,其实我有,但是不怎么用,也就没讲了。

群晖对新手非常友好,有优秀的插件库,有虚拟机管理系统,有docker支持,唯一的缺点是群晖系统作为一个深度定制的linux系统,有一些功能无法直接在系统层面使用,有些时候我们又需要对系统进行一些修改或者配置的话,就做不到了,但是绝大部分人并不需要担心这个,因为你暂时用不到。

所以如果你不知道如何选择系统,就群晖吧,有钱就白群,没钱就黑群。

那么,群晖这么优秀了,我们还有必要去了解别的nas系统么

当然有必要,一方面大部分人都不会购买白群,肯定选择黑群。

黑群毕竟是违反版权的,是一个盗版系统,稳定性和安全性存在隐患,因为你也不知道提供系统安装包的大神在里面做了什么,我们不能带着恶意揣测别人,但是涉及到数据安全,我还是更相信开源。

开源的nas首先一定是omv,有些人可能认为是truenas scale

这两个系统都是很优秀的nas系统,在基础的nas功能,也就是我们常说的samba与nfs功能上都是完备的,可以提供优秀的存储服务。

都是基于debian的nas系统,这里顺便一说,debian是世界上最好的linux发行版,没有之一。

他们都有docker支持,可以直接启动docker安装容器。

不同之处就是,omv没有对系统做任何修改,本身提供的功能也不多,看起来这是一个乏善可陈的nas系统,事实是少即是多。

因为是原版debian,这意味着你拥有在nas上做任何事情的权限和支持,拥有无限的可能

相比而言的truenas,在操作界面的使用习惯上会有一些反直觉,对新手并不友好,同时因为他对系统做了一定的修改。

另一方面,truenas scale使用zfs文件管理系统,而众所周知,zfs对内存的需求是巨大的,作为家庭用户来说,这无疑是巨大的浪费。

他们的缺点自然也是有的,而且是个大缺点。

虚拟机管理界面缺失,他们都需要通过自行安装第三方的管理工具才能实现相对简单易用的虚拟机管理,虽然能用,但是确实不好用。

这也是为什么我会选择在另一台nas上使用unraid系统

之前我也发过一篇视频,吐槽unraid的种种不足,引起了很大的争议。

我认为unraid并不是一个合格的nas系统,更像是一个应用管理系统与虚拟机管理系统。

它有糟糕的存取性能,有糟糕的数据冗余,有糟糕的数据校验

直到现在我也对此心怀不满

之所以选择它就是因为它高效易用的虚拟机管理与应用管理系统(也就是docker容器管理)

也就是说,我的这台unraid为我承担的是虚拟机服务器与部分docker容器服务器,也正因为此,它需要一颗相对强大的cpu与更多的内存。

至于重要数据,它只能作为数据冷备来使用,通过rsync等工具,把重要数据从主力nas上备份过来,进一步提高数据的安全性。

那你可能要问了,为什么不选择pve代替unraid呢

这不是个好问题,pve是一个纯粹的虚拟机管理系统,而unraid是提供了全套的nas功能以及相对完备的docker容器管理,这是pve无论如何也替代不了了。

据我所知,很多人的方案是使用pve,然后虚拟出omv来使用

如果你只有一台nas,你又跟我一样不满意于unraid的种种不足,这无疑是一个很好的替代方案,既有了omv优秀的nas管理与docker,又有了虚拟机管理,值得选择。

系统就分析完了,其他的冷门nas系统不做评价。

我们再来说下应用。

应用其实分多个层面,像群晖,提供了系统级的插件,也就是说大量的群晖插件是安装在群晖系统中的

使用过之后你会发现,这一类应用会在分区中创建相应的目录,想要管理这些目录是非常麻烦的,更不要说以后如果需要迁移服务到其他系统中会有多么的不便。

非常不建议大家直接使用这一类应用。

第二类应用是安装在docker中的,这也是我最常用的应用安装方案。

这么做的好处是显而易见的,我们可以讲容器的数据统一的放在指定的目录中,无论是容器的更新和重建以及迁移都变得简单,简单意味着故障率低以及更高的安全性。

第三类应用是安装在虚拟机中

有一些应用可能是我们自己写的或者需要复杂的环境配置,再或者需要windows环境,这时候就需要一个独立的系统环境来运行它,就需要虚拟机了。

这也是为什么虚拟机服务在nas中是非常重要的。

讲到这,我们的三个nas使用方案呼之欲出。

第一个就是群晖

第二个是omv

第二个是unraid

第三个是pve+omv

如果你跟我一样,有2台以上的设备,那么omv+unraid应该是最好的方案了。

下面我就展示一下,我个人在nas上安装的应用,系统能给大家一些帮助。

首先是这个导航是我用用的人家的代码简单修改了下,是一个纯静态html页面,运行在omv的docker中,其实就是一个nginx容器,放上html代码。

而这些图标是我用ps重置的,为了保持风格一致,有点像ios的图标吧。

电子书:CalibreWeb

影视:jellyfin 与自建在线电影观看网站

影音刮削:tmm

下载工具:transmission

网盘:nextcloud

音乐:navidrome

图片备份:immich

代码管理:gitlab

数据库:mysql与postgres以及mongodb

docker管理:portainer

网站管理:nginx与宝塔

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

imajeason阅读(7073)

多朋友没有独立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等等,他不香么

在nas上部署一个gpt直连服务,随心所欲与gpt聊天

imajeason阅读(1810)

大家好,我是张大七

最近大家用了gpt应该都有一段时间了

一边是gpt在同类工具中得王霸地位,一边是gpt网页得难用

首先就是不能直达,众所周知,gpt禁掉了整个亚洲得ip,禁掉了主流vps商得ip,能访问到gpt就是一个门槛了。

其次是gpt网页版速度,有点慢

然后是网页token失效,不一会就要刷新一次,烦都烦死了。

解决这个问题的思路就是自己搭一个中间服务,完成此功能的项目不少

今天给大家推荐得是这个项目,chatgpt-pandora

https://github.com/pengzhile/pandora

先给大家看搭建完得效果。

直观来说,这就是一个精简版得gpt,从这里可以打开我们自己的账号在gpt中得topic,而且速度快许多。

自己gpt与使用第三方得gpt最大的区别就是自建得gpt可以使用topic让gpt记住我们之前跟gpt得对话,在我们提问后,gpt会默认把之前的提问与回答加到语境中,这里的gpt是一个有记忆得gpt。

这非常重要。

帮助文件

https://github.com/pengzhile/pandora/blob/master/doc/wiki.md

获取token

https://ai.fakeopen.com/auth

安装chrome插件,根据帮助安装

登录gpt后获取token

创建token文件,将内容存进来

搭建得方法有几种

在docker中安装,需要使用portainer界面操作比较方便

把获取到的access token内容写到/mnt/user/appdata/chatgpt/data/access_token.txt

不存在的目录自己创建。

就不截图了,看我的视频吧,相当于执行:

docker run -d \
--name=pandora-chatgpt \
-e PANDORA_SERVER=0.0.0.0:8887 \
-e PANDORA_TOKENS_FILE=/data/access_token.txt \
-p 8803:8887 \
-v /mnt/user/appdata/chatgpt/data:/data \
--restart unless-stopped \
pengzhile/pandora:1.1.6

启动容器后就可以打开8803得网页访问gpt了

尽情聊吧。