群晖nas上部署immich并批量导入照片

前言

今天看了一篇介绍immich的的文章,其中对于照片管理中AI能力的支持对比吸引了我,immich因为开源支持很多插件,比较容易与目前的AI能力相结合,决定周末在我的nas上安装immich,安装过程比较简单,但是在将硬盘中的历史照片导入,却波费了点功夫,在此将其记录下来。

immich安装

1: nas上部署docker

1) 在nas上建立immich的目录

2)immich官网提供了脚本,ssh到nas上复制粘贴比较简单。登录nas并进入目录:/docker/immich-app
2)执行两个命令,下载编译文件:

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

(可选)为了便于将来硬盘整理,我在配置文件中指定了一个照片存放的位置,如果放在默认位置可以忽略这一步:
进入nas的/volume1/docker/immich-app 目录下
执行vi .env

将照片指定到一个固定位置中

3)群晖Docker管理工具 Container Manager上项目选项新建名字为immich-app的项目,并按要求进行设置,并指定前面下载的docker-compose.yml文件,参考下面图示。

4) 摘要页面检查是否按要求设置,查看“创建项目后立即启动”是否勾选,如没有勾选,请勾选,然后点击完成,开始部署immich。

5) 部署成功后,可以看到这个immich项目其实是由6个容器构成一个整体,这6个容器由2个镜像支撑。并且可以看到这个6个容器堆内存需求还是很大的。

2.immich软件启动设置

immich部署好后,可以浏览器打开http://:2283,按图示提示进行初始化账号设置,目前immich的web界面还不支持中文,这点看看后续会不会增加。用户名是以邮件email格式设立

手机端配置:使用的是iPhone手机,immich有自己的手机端APP软件,支持IOSImmich 和Android Immich, 这里以IOS版本为例说明:第一次需要填写自己搭建的immich服务器的地址,注意格式为:http://:2283/api 注意后面的api。

将硬盘上的历史照片自动批量导入

在我的nas硬盘上已经保存了几万张的历史照片,现在需要将其批量导入到immich中进行管理。
immich提供了批量的照片导入工具immich cli,按照步骤来说明一下:
1)登录nas并安装immcih工具

sudo npm install -g @immich/cli

如果提示下面的错误,说明nas上的node.js版本太低:

需要到群晖nas的组件管理中安装node.js的20版本,记得不要卸载原来的18.0的版本,否则会影响群晖drive、station等的使用

更新完node.js后nas的ssh客户端重新执行安装脚本就没有问题了。

2) 获取immich的token api
在immich的页面(http://nas地址:2283)点击右上方的个人头像,选择Account Settings
点击新建API KEY

记下弹出的token信息,只会显示一次。

3) 启动批量导入
--在nas的ssh中执行登录命令:--

immich login-key http://nas-ip:2283/api 前面记录下来的token号码

如果信息没有错误将显示:Wrote auth info to /root/.config/immich/auth.yml
表示已经登录成功并且写入了授权文件。

--启动批量导入--

immich upload --recursive /volume1/你的存放照片的目录Photos

然后nas的cpu就进入99%的满负载状态,照片开始批量的导入中:
Crawling for assets...
Checking files | ████████████████████████████████████████ | 100% | ETA: 0s | 237844/237844 assets
Found 237819 new files and 25 duplicates
Uploading assets | █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ | 1% | ETA: 07h30m | 7.9 GB/463.6 GB

Telegraph-Image免费图床增加域名访问限制

原来的博客部署在vps上,硬盘空间非常有限,空间告警后寻求部署一个免费的基于cloudflare的图床。

安装基于cloudflare的免费图床

选择Telegraph-Image免费图床的原因是它在GitHub平台上的热度较高,安装过程相对简单,按照官方文档进行操作即可完成基本的设置:
简单 3 步,即可部署本项目,拥有自己的图床

2024年4月12日更新版本,不需要修改代码,只需要拉取就可以了,补充视频操作介绍

特性

1.无限图片储存数量,你可以上传不限数量的图片

2.无需购买服务器,托管于 Cloudflare 的网络上,当使用量不超过 Cloudflare 的免费额度时,完全免费

3.无需购买域名,可以使用 Cloudflare Pages 提供的*.pages.dev的免费二级域名,同时也支持绑定自定义域名

4.支持图片审查 API,可根据需要开启,开启后不良图片将自动屏蔽,不再加载

5.支持后台图片管理,可以对上传的图片进行在线预览,添加白名单,黑名单等操作

6.支持图片引用的域名判断,避免图片滥用。(2024年4月12日增加)


如何部署

提前准备

你唯一需要提前准备的就是一个 Cloudflare 账户。

手把手教程

简单 3 步,即可部署本项目,拥有自己的图床

1.Fork 本仓库 :登录自己的GitHub账户,在浏览器中打开本项目(https://github.com/xiaodao2026/Telegraph-Image),
点击导航条中的Fork按钮,拉取到自己的GitHub下。

2.打开 Cloudflare Dashboard,进入 Pages 管理页面,选择创建项目,选择连接到 Git 提供程序
1

  1. 按照页面提示输入项目名称,选择需要连接的 git 仓库,点击部署站点即可完成部署

  2. 配置图片管理

1)支持图片管理功能,默认是关闭的,如需开启请部署完成后前往后台依次点击设置->函数->KV 命名空间绑定->编辑绑定->变量名称填写:img_url KV 命名空间 选择你提前创建好的 KV 储存空间,开启后访问 http(s)://你的域名/admin 即可打开后台管理页面

变量名称 KV 命名空间
img_url 选择提前创建好的 KV 储存空间


2) 后台管理页面新增登录验证功能,默认也是关闭的,如需开启请部署完成后前往后台依次点击设置->环境变量->为生产环境定义变量->编辑变量 添加如下表格所示的变量即可开启登录验证

变量名称
BASIC_USER = <后台管理页面登录用户名称>
BASIC_PASS = <后台管理页面登录用户密码>

3) 增加获取的图片的网站域名限制:

变量名称
DOMAIN_LIST = <以英文逗号分隔的域名清单>

域名需要完整登录,如果你的网站xxx.com和sub.xxx.com都可以访问,则需要xxx.com和sub.xxx.com都以逗号分隔的方式维护到域名清单中。

4) 参数维护后重新发布项目

针对环境变量所做的更改将在下次部署时生效,如更改了环境变量,针对某项功能进行了开启或关闭,请记得重新部署。

5)绑定自定义域名(可选)

在 pages 的自定义域里面,绑定 cloudflare 中存在的域名,在 cloudflare 托管的域名,自动会修改 dns 记录
2

一些限制:

1.由于图片文件实际存储于 Telegraph,Telegraph 限制上传的图片大小最大为 5MB

2.由于使用 Cloudflare 的网络,图片的加载速度在某些地区可能得不到保证

3.Cloudflare Function 免费版每日限制 100,000 个请求(即上传或是加载图片的总次数不能超过 100,000 次)如超过可能需要选择购买 Cloudflare Function 的付费套餐,如开启图片管理功能还会存在 KV 操作数量的限制,如超过需购买付费套餐

感谢

@cf-pages 提供Telegraph-Image功能,在我vps空间不足的时候帮我解决图片存储的问题。

-----之前的操作,2024年4月12日已经修改-----------

1.Fork 本仓库 (注意:必须使用 Git 或者 Wrangler 命令行工具部署后才能正常使用,文档)

2.打开 Cloudflare Dashboard,进入 Pages 管理页面,选择创建项目,选择连接到 Git 提供程序

1

按照页面提示输入项目名称,选择需要连接的 git 仓库,点击部署站点即可完成部署

原版可能存在的滥用问题

尽管安装过程顺利,但我发现原版的图床没有密码限制,任何人都可以上传文件,和随意使用。这就可能导致恶意用户上传违规内容,构成一些安全隐患。
2

为了解决这个问题,我参考论坛上一个网友的建议,并在我的GitHub仓库中进行了代码修改。主要的改动是增加了访问控制,确保只有授权的用户才能上传和查看图片。这样做大大降低了安全风险。

代码修改步骤

  1. 找到需要修改的文件:位置在Telegraph-Image/functions/file/
  2. 修改配置文件:目录下的js文件进行。在文件中添加以下代码,确保只有拥有正确链接的用户才能访问图片。同时,将数组中的域名修改为你自己的域名,这一步是必要的以确保只有来自特定来源的请求被允许:
//在原来代码的12行的位置添加下面的内容
const allowedDomains = ["你的域名", "你的域名"];

// Extract the Referer header or use a placeholder if not present
const Referer = request.headers.get('Referer') || "Referer";

// Create a URL object from the Referer to extract the hostname
let refererUrl;
try {
refererUrl = new URL(Referer);
} catch (error) {
return Response.redirect("https://你的域名", 302);
}

// Check if the hostname of the Referer is in the list of allowed domains
if (!allowedDomains.includes(refererUrl.hostname)) {
return Response.redirect("https://你的域名", 302);
}

// Existing code for handling requests continues here...
const url = new URL(request.url);

通过上述步骤,你不仅可以优化你的VPS存储空间,还能确保图床服务的安全性和可靠性。图床图床图床是什么

2024年适合在中国使用的海外电话卡介绍(主流卡选择)

从我2022年介绍第一期海外电话卡已经两年的时间了,在这两年时间里海外电话卡出现了两个比较大的变化,其一就是越来越多的海外运营商推出了esim手机卡,无接触,全线上办理,大大的降低了国内购买和使用的门槛。另外一个变化就是因为淘宝、闲鱼的销售限制,如果我们已经不能像之前一样方便的购买到实体的海外电话卡了。

下面我们就按照短信接收、网络上网、国际通话这三个国内使用场景来逐一介绍,帮助你选择最适合你需要的海外电话卡,还是那句话,电话卡没有好坏之分,只有适合你还是不适合你。

按照惯例,我们还是来聊聊我们需要一个海外的电话卡的几个场景。

第一个就是有保证的短信接收,因为各种反诈和安全管理要求,国内运营商对短信有越来越多的拦截策略的,特别是针对海外落地的短信执行的更加严格。我们在注册网络服务、海外银行短信时,短信能无障碍顺利接收是我们使用海外服务非常重要的一点。

第二个是对于隐私的保护,中国大陆的网络数据分析能力无所不在,可以根据你的手机接受过那些平台的验证码短信,判断出是否在这些平台有账户。使用海外电话卡以后,就能最好的保护好我们的这个隐私。

第三个就是海外更加开放的通信服务提供了物美价廉的服务,在海外存在多年,但是在国内迟迟无法商用的wifi-calling可以通过网络实现语音通话的全球落地,实现国际语音和短信非常低廉的价格,例如red pocket近乎无限量的短信语音使用量。

最后提一下的就是安全,这里的安全是从合规性而言。以访问海外流量而言,搭建代理翻墙是不符合国内法规的,但是正常购买海外电话卡后,手机中也不需要安装翻墙软件,由运营商按照国际电信交换规则将网络路由到海外运营商,是符合现有的网络规范要求的,这点对于国内的一些人群也是需要考虑的。

在了解了海外电话卡可以帮助我们解决什么问题以后,我们就分短信接收、网络上网、国际通话这三个场景展开介绍,你根据自己的需要参考我介绍的主流电话卡:

第一个场景就是仅仅需要短信接收:

相信短信接收应该已经覆盖了80%的海外电话卡的使用诉求,针对这一点我们需要关注的就是便宜、稳定、可以长期使用:

这种情况下,首推giffgaff电话卡,这个电话卡在2022年的视频中我就做过重点推荐

优点包括:首先是低廉保号价格(发短信 0.3 英镑 /条,2.7元人民币)

广泛的使用范围:因为号码为标准的移动号码,一般的网络服务都可以正常的注册。

支持国内发行的信用卡进行费用支付:解决支付问题就可以长期使用。

安全性保障:在网站的服务商网站中可以非常便捷的找到挂失的功能菜单,如果我们遇到海外手机卡丢失,如果不能立刻关闭手机卡,会给我们带来信息和资产的隐患,具有线上关闭功能对于我们是非常有帮助的。

giffgaff不但可以使用实体的sim卡同时支持esim,无论我们使用的是国行手机还是海外版手机都可以无障碍的使用。

除了单独使用giffgaff外,介绍下我比较推荐的一个组合方式,就是 Google voice + giffgaff的方式。

我在使用一般的海外软件和网站使用Google voice,遇到不支持gv的网站则选择giffgaff。一方面就是Google voice的短信通过网络直达,只要哪个小工具好用(你懂的)信息接收速度非常快,解决了短信内容由海外运营商交换到国内的电信运营商再发送到你手机卡中可能的延迟问题,此外Google voice不需要占用一个卡槽就能通过app软件实现短信接收。通过这个组合可以实现普通服务便捷快速的接收,而像银行、注册TikTok这种要求高、频率低的情况下的使用短信服务稳定接收,使用体验非常不错。

giffgaff的购买比较简单,在淘宝闲鱼上购买就可以了。如果你有朋友在英国留学让他在线免费申请一个sim卡假期回国的时候带回,那就是零成本的获取方式了。拿到实体卡后就可以在官网上充值,支持国内发行的visa、万事达信用卡,还是非常的方便的。

Google voice之前的获取成本也就10元钱,如今价格上涨而且来源不明容易封号,这个就需要大家好好的淘一下了,最近有网友采用试用Google FI到期转Google voice的方式稳定获得,我还没有具体研究,有需要的朋友可以关注下。

除了giffgaff之外,有esim手机卡的朋友,推荐一个备选就是simyo。这个手机卡的可用性还是挺高的,我在注册乌克兰Google账号的时候,可以用这个手机卡通过验证但是用乌克兰自己的小蜜蜂居然不可以。

这个卡的持有成本很低:每六个月使用一次,或者每六个月充值一次都是可以的。使用我视频下方的链接,可能得到5元的奖励,支付5欧元,最终获得7.5+5=12.5欧元,每半年发送一次短信,可以持续很长时间。

这里顺便介绍下,这个卡开卡支持国内发行的visa和万事达卡,但是充值不可以的,也就是说这个卡除非有欧洲的银行卡否则几乎无法充值。好在卡片几乎不需要二次充值,如果万一需要充值,这里提供一个变通的办法,开卡后用自己的推荐链接再注册账户开一张卡,你给新卡支付的5欧,会以奖励的方式充值到老账户中,老账户可以继续用很长时间,新的卡号送人或者转卖掉都是可以的。

第二个场景是海外电话的漫游上网

对于国内使用海外电话卡直接上网,我一直没有找到什么情况下需要这样。直到我遇到一位使用华为手机的朋友。他们要求使用华为手机,可以安装海外的炒股软件,但是安装小火箭类是绝对不行的,但是没有一个特殊的网络环境像firstrade这种炒股软件总是超时无法打开。

除此之外,更多见的是经常出国的朋友找到一个多国漫游便宜的手机卡,国内收收短信,在需要出国的时候打开流量享受相对低廉的价格、无顾虑的使用流量,这是一个挺不错的选择:

对于国内上网,我首推的是马来西亚的celcom手机卡,不但可以通过购买漫游流量包的方式在国内无限流量,免翻墙上网,而且可以用优惠的价格来购买苹果的Apple one服务,享受苹果的音乐、TV、云存储等服务。如果你确实需要这些服务,通过马来西亚区域购买的地区价格差可以弥补电话卡的使用支出。

celcom电话支持马来西亚的原生IP,可以直接观看Netflix的自制剧和非自制剧。

之前的视频中有朋友留言,说部分网站打不开。是的,马来西亚的穆斯林性质决定,你想看的那种(别问我怎么知道的)直接访问时打不开的,确实是无法直接打开的,但是他们的阻断措施就是dns域名解析阻断,自己修改一下dns的地址服务就可以了,比起国内的防火墙差远了。

能漫游到中国国内使用网络服务的手机卡的价格都不便宜,使用这个电话卡在中国及57个国家流量使用的价格是98马来西亚元,折合人民币150元左右,相比较而言还算是性价比可以的了。

经常出国的朋友准备一个这个卡也是挺不错的选择,这个卡的到第三国的国际漫游价格比一些国内和香港的价格还要便宜:

这个电话卡目前可以在淘宝上购买实体卡,在官方的app上进行实名认证和套餐选择就可以了。关于这个电话卡的详细内容可以参考我之前视频的介绍。

可能有朋友会问,要说国内上网的话香港电话卡有不少的选择,为什么不选择。因为香港的服务限制越来越大,使用香港的电话卡如今已经不能使用TikTok了,甚至chatgpt的账号不小心在香港登录都会增加被封掉的风险。所以无论是短信、语音和网络我都没有推荐香港的电话卡。

除了celcom其它的电话卡要么价格昂贵要么不能长期在国内使用,如果仅仅是短暂使用,而且你还有一部支持esim的手机,我更推荐的是在app商店中下载使用那种提供全球流量的app的服务,例如DENT和airalo。临时用下,用完就结束了,也不占用卡槽,不用惦记续费、保号这些事情。

第三个场景就是国际通话

这里推荐两款电话卡分别是ultra电话和red pocket卡,这两个电话卡都支持一定额度的套内免费短信和语音

显而易见的是redpocket更加便宜一些,但是从使用的便利度上而言,ultra要好很多。

在获取方面,ultra可以在国内的淘宝闲鱼上购买,支持国内发行的visa和万事达信用卡支付费用。而redpocket只支持美国信用卡,sim卡或者包年的激活卡都需要转寄到中国地区。

通话方面ultra在没有网络环境的情况下,可以通过国际漫游收发短信和接打电话,虽然价格会高不少,但是让使用更加稳定,不会出现因为没有网络就无法使用的问题。redpocket虽然不支持通过国内三家移动运营商提供的漫游服务,但是如果使用的是双卡手机,还是可以在没有Wi-Fi的情况下可以使用主卡的流量通过mobile data实现网络通话,不过流量上网稳定性比较差。

还有一点差别我也记忆深刻,ultra可以直接在手机中开启Wi-Fi calling,但是redpocket不可以,需要在线与线上的客服人员沟通,提供地址有客服后台设置。而且我使用的过程中发现,Wi-Fi calling服务是绑定手机的,如果更换手机需要重新沟通重新开通。除了繁琐,关键是提供住址的时候心里没底,毕竟自己清楚提供的地址是从哪里来的。

所以如果没有非美国本土之外的通话需求的话,建议还是开一个ultra mobile就好了,起码具备获取简单、最少的人工交互、充值时对银行卡的限制最少等优点。

本期视频中介绍的都是目前适合在中国使用的主流的海外电话卡,获取的门槛不是很高,所有的手机卡都是我自己使用过的,希望从一个使用者的角度给你有价值的参考,能够覆盖绝大多数的使用需要。

完全免费的部署一个私人ai服务。

之前作为chatgpt的深度使用者,很少关注其它的ai服务,但是刚刚发生的chatgpt plus账号被封,让我开始转而寻求更多的选择。近期网络界的良心企业cloudflare发布了workers ai服务,并且提供免费api。下面就把我今天通过开源的cloudflare-ai-web搭建一个完全免费、不需要考虑ip被封问题的私人的ai页面服务。

这是搭建以后的样子,采用Vercel部署方式,不需要任何的网络服务设备,甚至没有域名都是可以的。

下面我来开始这个部署的过程:

打开开源的项目地址,可以在Google中搜索cloudflare ai web,或者点击我视频下方的项目地址。打开后点击作者特别标注的一键部署按钮。

点击后来到部署页面的开始提示,我们点击页面右上方的login,当然如果你没有账号就点击sign up新建一个账号。

我是使用的GitHub账号的授权登录,也建议你采用这个方式,GitHub+vercel可以白嫖不少的服务,关联起来以后使用比较方便。

如果登录后没有启动部署,而是进入了vercel的项目列表,没有关系,我们重新回到GitHub的开源的项目地址,重新点击一次deploy。

因为前面已经完成登录,第二次点击部署就没有问题可以直接进入配置界面了。

第一步:给项目起一个名字,起好以后点击创建。创建完成以后来到参数配置页面。

前面的两个参数需要到cloudflare中获取,先看第一个:CF的token。这个参数的获取需要到cloudflare的控制页面。

登录cloudflare网站后,点击页面右上角的小人头像,选择第一项个人资料,来到个人资料的设置页面。

在我的个人资料页面选择左侧的api令牌,这里我已经建立了一个,我们重新演示建立一个新的。点击页面右侧的创建令牌。

选择workers ai,点击使用模版创建。在这里其它的项目都不需要修改,只需要找到账户资源这个地方:

在账户资源中将你的账户选择上,然后最下方的“继续以显示摘要”。

继续点击创建令牌,一个token就创建好了。我们将获取到的token粘贴到vercel的参数配置页面中。

下一步配置并填写第二个参数,cf的gateway。回到cloudflare的主页面,点击左上角的网站logo,来到首页。

点击左侧导航页面的AI,选择AI Gateway。在页面的右边点击添加新的AI Gateway。

在弹出的页面中给网关选择一个名字点击创建。

创建完成后就会看到一个gateway开头的cloudflare地址,如果没有显示,可以再回到AI gateway的这个页面点击加号下方的项目的API Endpoints信息。

将https的连接地址复制后填写到vercel中。两个参数复制完毕后点击vercel页面参数填写下方的Deploy进行项目部署,大约1到2分钟后部署完成,就可以使用了。

点击vercel的二级域名就可以正常的使用自己的服务了。到这里一个完全免费的aiweb服务就部署完毕了。

下面简单的介绍下,基础部署以后可以增强的几个方面:

第一项是:绑定自己的域名。这里非常简单,把需要绑定的域名输入,点击添加,按照vercel给出的验证信息,到自己的域名商的dns管理面板中首先完成域名验证,验证通过后再按照vercel给出的提示ai.*****.com域名的绑定就可以了。

第二项是增加访问密码,增加PASSWORD参数,变量是自己设定的密码。

此外这个开源软件支持openai的api、Google ai的api,如果你有也可以通过变量的方式添加,分别是OPENAI_API_KEY和G_API_KEY。添加上去以后就可以完整使用页面的服务了。

否则就安安稳稳的使用cloudflare的workers ai能力吧。

好的,今天就是我操作这个开源的ai web服务的记录,没有特别的深的内容,按照作者的介绍操作而已。我用一点时间给把我配置的过程记录下来,提供给那些不知道如何操作的朋友一个参考。

补充说明下:

cloudflare的免费workers ai目前提供的Qwen1.5 是阿里云开发的大语言模型系列 Qwen 的改进版本。网站介绍是:AWQ 是一种高效、准确、快速的低位权量化方法,目前支持 4 位量化。

随着越来越多的网络服务商提供ai能力,还有网友提供这些开源方案,让我们每个人使用ai能力越来越方便,这次是更大意义。致敬!

土耳其区的dashlane大幅涨价,选择哪一个替代品。

一直一来我都在使用土耳其Google 商店中的dashlane作为我的密码管理软件,土区的价格非常的便宜,家庭组每年的费用只有102.99土耳其里拉,折合20多元人民币,而且每年赠送一个vpn的服务软件。

虽然这类vpn在中国国内直接使用的效果不好,但是通过套娃在一些需要多个国家落地的时候还是不错的选择。

如今价格从103猛增到3500土耳其里拉,折合770元人民币,再继续使用就变得非常不合算了。

如果高级版套餐不续费以后,是否可以继续使用这款软件的免费版本,通过上表的比较可以看见免费版本只支持25个密码,对于我们是完全不够的,所以由奢入俭到免费版的方案就放弃到了。

在放弃dashlane的password管理服务后,我选择哪一个替代品,经过比较我最终选择的是bitware。

Bitwarden 是唯一提供免费层级的密码管理器,在免费的情况下就需要比较下这款软件的安全性和功能了。

查询了几个网站的对比,虽然免费但是综合评价并不低。

 

打开dashlane的设置页面,选择导出数据:

将dashlane的原有密码导出为csv。bitwarden支持批量密码导入,支持从任何密码管理器轻松迁移你的密码,将数据大量导入到此密码库,过程相当快速,省却手动重新输入所有密码的时间。

至此伴随着dashlane的涨价,一个付费用户终于投入到了开源的bitwarden用户群体中。

chatgpt plus账号被封后如何退费

常在河边走怎能不湿鞋,开了一年的chatgpt plus被封号了。

去年开通chatgpt plus一来,虽然经常满世界的网络落地,但是账号一直使用正常,直到周五上午突然发现账号无法登录了。

在网上搜索一番,才知道账号被封,看了网上的各种申诉攻略,但是成功申请下来的没有看到一个,估计我遇到的这种账号被封申诉开通几无可能。

既然这样,也就不打算尝试了,只是感觉26日刚刚扣了19.99美元的费用,29日就把账号封了,这个月不把钱找回来心有不甘。

网上有一些和openai后台客服沟通的帖子,看着繁琐的沟通过程,基本决定放弃了。

突然想到苹果商店每次扣费后都给一个扣费通知,而且是有”报告问题”的异议申请链接,找到了当时的扣费通知邮件,点击这个“报告问题”

登录apple id以后来到申诉页面,申请过程简单到极致,只有两个选择:第一个选择我需要:请求退款,二级菜单中选择“我购买的项目无法正常使用”。点击下一步就可以了。没有与openai在线客服沟通中需要的上传证据之类的东西。

我是在3月28日下午提交了退款申请。第二天绑定苹果商店的PayPal就发送了收到退款的通知。

这个事情的总结:

虽然chatgpt虐了我,但是我还是需要chatgpt plus。万能应变战术,注册新的账号重新开通。

乱七八糟的网络代理不能乱用,老老实实的用一个vps落地,起码ip我要控制是一个国家的区域内。

再次购买的时候,在chatgpt不支持PayPal的情况下,必须选择Google 商店或者苹果商店订阅支付的方式,万一不能用的时候起码能顺利的收回咱们的费用。

从一个帖子说起,聊聊手机中的海外电话卡是否会被发现

晚上浏览新闻看到一个帖子,说到在国内的手机中放入gg电话卡,应该说的就是英国giffgaff电话之后后,就接到了反诈中心96110的问询电话。

看到帖子的以后第一反应就是当事人描述的这个事情是存疑的,之所以不太可信不是说技术上实现不了,而是性价比太差。

实现这个事情的成本换来只是找到一个手机里放海外电话卡的人,即使处罚也没有多少严重。

如今经济形势不好,这些部门的经费不宽裕,需要做的是集中“人财物”办“大案子”,这才是冲业绩拼KPI的关键。

今天简单聊聊到底哪些途径会被发现你的手机中有一个海外的电话卡:

最值得关注的就是app识别,包括“反诈app”,通过app实现对sim卡的识别是最容易的方式。无论是android还是ios都提供了读取sim卡归属信息的服务接口。

将这个功能用到让人深恶痛绝的就是TikTok了,在国内如果手机中没有放一个海外电话卡让它识别,这个软件就始终黑屏不允许使用。因为识别比较容易,如果不想被检测到海外电话卡,能不装的软件一定不要安装。

第二就是手机厂商,我们将自己的信息全部交给了手机,手机操作系统完全可以检测到sim卡来自哪里。手机防盗中的换卡告警,就是手机操作系统对sim的监控。不过这里还是成本的问题,现阶段手机厂商不会去关注sim卡槽里是不是放进一个英国电话卡。另外从利益出发,手机厂商考虑不只是信息收集成本,而且还有对品牌、销售量的影响。

第三运营商通过信息比对也是可以搜索到的。在我之前的视频中做过类似的介绍,除了只支持Wi-Fi calling的电话卡外,海外电话卡在国内使用,都要借助国内运营商服务,你的信息对运营商也就是可见的。

有两个信息非常重要,一个是imsi。根据imsi可以知道sim卡是那一个国家的哪一个运营商的。另外一个信息数据是imei编码,也就是手机串码,imei是分配给手机制造商用、不同手机型号上,通过imei能定位到具体的一部手机,而且知道是一部iPhone 14 还是一部三星23手机。

一部手机的一个卡槽里如果只放海外电话卡是没有人能找到你的,但是如果有一天你想换个国内电话卡用一下。在开机的时候,通过这部手机的imei就知道了当前的国内电话号码和哪一个海外号码公用了一部手机。

我还是那个观点,往往保护我们的不是技术,而是“普通”,如同沙滩中的一粒沙子,不会有人想在你的身上耗费精力。

简单方便的使用Google one 的vpn服务:便宜-人人可以拥有,简单-小白可以配置,方便-全服务覆盖。

Google One的VPN有很明显的优点,其中最突出的一点就是其IP地址非常干净。这使得在需要解锁和收看流媒体视频,或者注册一些网络服务时,Google One可以为您创造一个非常干净的网络环境。但是,它也有一些缺点,最主要的是使用不太方便,因为Google One不支持中国大陆地区。如果您想使用它的VPN服务,必须安装一个前置代理,例如使用一个软路由,需要两层使用才能完成操作,这大大限制了我们的使用环境。

首先是目前已经开通的国家:

Google one vpn可以支持的平台包括安卓手机、ios苹果手机或者平板、Windows操作系统、mac电脑,看到其中是不包括我们网络环境中经常用到的Linux系统的。

上面两个条件决定,如果我们需要拓展使用范围就需要具备一个条件,就是在上述已经开通服务的国家中有一台windows操作系统的vps主机。

对于Windows的vps主机,需要补充一下,建议选择平台就支持预装Windows的vps,这种是比较简便的方法。当然如果你有linux的主机也可以通过dd windows的方法后台将系统更新为windows的方法,这种方法网上有一键安装的脚本,一条命令就可以搞定,不过这种方法存在被平台发现并关闭服务的风险,所以如果采取这种方法,需要注意两点:1是在Google中搜索一下dd windows 服务商的名字 看看是不是对这种操作严控,另外就是务必只在月付的机器上搞这种操作。

我们需要按照以下几步操作:

1、安装windows 版本的翻墙服务。

https://github.com/v2ray/v2ray-core

我之前下载的是下面的版本

V2Ray 4.28.2 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.15.2 windows/amd64)
A unified platform for anti-censorship.
2024/03/24 02:31:04 Using default config: C:\v2ray\config.json

2、配置config文件

我这里用的基本上就是默认样例中的格式,需要将id修改为自己的,修改一下端口,另外一定记得在Windows的防火墙中开放这个端口的访问。

// Config file of V2Ray. This file follows standard JSON format, with comments support.
// Uncomment entries below to satisfy your needs. Also read our manual for more detail at
// https://www.v2ray.com/
{
  "log": {
    // By default, V2Ray writes access log to stdout.
    // "access": "/path/to/access/log/file",

    // By default, V2Ray write error log to stdout.
    // "error": "/path/to/error/log/file",

    // Log level, one of "debug", "info", "warning", "error", "none"
    "loglevel": "warning"
  },
  // List of inbound proxy configurations.
  "inbounds": [{
    // Port to listen on. You may need root access if the value is less than 1024.
    "port": 80,

    // IP address to listen on. Change to "0.0.0.0" to listen on all network interfaces.
    "listen": "0.0.0.0",

    // Tag of the inbound proxy. May be used for routing.
    "tag": "socks-inbound",

    // Protocol name of inbound proxy.
    "protocol": "vmess",

    // Settings of the protocol. Varies based on protocol.
    "settings": {
      "clients": [
        {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
      ]
    },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
        "path": "/livecam"
        }
      },
    // Enable sniffing on TCP connection.
    "sniffing": {
      "enabled": true,
      // Target domain will be overriden to the one carried by the connection, if the connection is HTTP or HTTPS.
      "destOverride": ["http", "tls"]
    }
  }],
  // List of outbound proxy configurations.
  "outbounds": [
    {
      "tag":"IP4_out",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag":"IP6_out",
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "UseIPv6" 
      }
    }
  ],

  // Transport is for global transport settings. If you have multiple transports with same settings
  // (say mKCP), you may put it here, instead of in each individual inbound/outbounds.
  //"transport": {},

  // Routing controls how traffic from inbounds are sent to outbounds.
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "IP6_out",
        "network": "udp,tcp"
      }
    ]
  },

  // Dns settings for domain resolution.
  "dns": {
    // Static hosts, similar to hosts file.
    "hosts": {
      // Match v2ray.com to another domain on CloudFlare. This domain will be used when querying IPs for v2ray.com.
      "domain:v2ray.com": "www.vicemc.net",

      // The following settings help to eliminate DNS poisoning in mainland China.
      // It is safe to comment these out if this is not the case for you.
      "domain:github.io": "pages.github.com",
      "domain:wikipedia.org": "www.wikimedia.org",
      "domain:shadowsocks.org": "electronicsrealm.com"
    },
    "servers": [
      "1.1.1.1",
      {
        "address": "114.114.114.114",
        "port": 53,
        // List of domains that use this DNS first.
        "domains": [
          "geosite:cn"
        ]
      },
      "8.8.8.8",
      "localhost"
    ]
  },

  // Policy controls some internal behavior of how V2Ray handles connections.
  // It may be on connection level by user levels in 'levels', or global settings in 'system.'
  "policy": {
    // Connection policys by user levels
    "levels": {
      "0": {
        "uplinkOnly": 0,
        "downlinkOnly": 0
      }
    },
    "system": {
      "statsInboundUplink": false,
      "statsInboundDownlink": false,
      "statsOutboundUplink": false,
      "statsOutboundDownlink": false
    }
  },

  // Stats enables internal stats counter.
  // This setting can be used together with Policy and Api. 
  //"stats":{},

  // Api enables gRPC APIs for external programs to communicate with V2Ray instance.
  //"api": {
    //"tag": "api",
    //"services": [
    //  "HandlerService",
    //  "LoggerService",
    //  "StatsService"
    //]
  //},

  // You may add other entries to the configuration, but they will not be recognized by V2Ray.
  "other": {}
}

在目录中点击v2ray.exe执行就可以了。

这个方式解决的问题:获取了一个干净的ip地址,可以使用更多的服务。

还可以改良的地方:按照默认的配置,从vps下行到我的终端不是直达,也是通过Google one服务的,可能会增加延迟,后续考虑在路由上进行优化。

让一个vps随心所欲瞬移全球

背景

类似expressvpn、purevpn、nordvpn提供了网络防护的作用,由于vpn协议的特征已经被防火墙识别,这些软件在特定的网络环境(例如中国大陆地区)存在经常无法使用的问题。
在安全防护的功能之外,这些软件可以提供丰富的网络落地支撑,如何发挥这些服务的落地能力,特别是提升我们的vps的功能,实现随心所欲的的切换服务所在地区。

目的

将原有vps上部署的x-ui的xray的固定地址落地,通过expressvpn(其它的vpn软件类似)可以灵活的通过修改配置文件实现落地地址的自有切换。
需要条件:
1、有一台海外的VPS主机
2、有一款支持openvpn的软件服务,包括expressvpn、nordvpn,以及非常便宜的shieldvpn。

部署过程-1配置文件准备:

1.点击expressvpn网站的我的账户,获取配置文件和账号密码

2.登陆后点击更多,获取详细的服务配置列表

3.在列表的下放点击手工配置按钮

4.保存账号密码(1)选择要落地地区的配置文件下载(2)

部署过程-2 服务器部署:

将下载的配置文件放入到vps的特定目录中,新建一个文本文件放入前面复制的账号密码,并将pass.txt添加到前面下载的配置文件中。
这些准备工作都做完以后就可以执行这个docker命令:

docker run -d --restart=always --device=/dev/net/tun --cap-add=NET_ADMIN \
--name openvpn-expressvpn_new \
--volume /root/expressvpn/:/etc/openvpn/:ro -p 8300:1080 \
kizzx2/openvpn-client-socks

端口8300可以根据自己的需要修改,这里要记下,需要和后面的配置文件一致起来。
一般很快就有可以安装完毕,如果报错一般是vps系统中没有安装docker,找到对应自己系统的docker安装命令安装上去就可以了,这里还是推荐Ubuntu系统,安装比较简单。

安装完成后可以通过命令docker container ls 确认下docker是否已经正常运行:

如果需要进一步查看,可以使用docker logs + docker id号,查看是否正常获取到了落地IP地址

到这里,服务端的安装过程就完成。下面我们再来和我们之前用的x-ui做一个关联,提升原来服务的能力。

进行x-ui的xray的配置

打开x-ui配置界面

将下面的配置信息更新原有的配置内容:

{
  "api": {
    "services": [
      "HandlerService",
      "LoggerService",
      "StatsService"
    ],
    "tag": "api"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 62789,
      "protocol": "dokodemo-door",
      "settings": {
        "address": "127.0.0.1"
      },
      "tag": "api"
    }
  ],
  "outbounds": [
  {
    "protocol": "socks",
    "settings": {
      "servers": [
        {
          "address": "127.0.0.1",
          "port": 8300
        }
      ]
    }
  },    
  {
      "protocol": "freedom",
      "settings": {}
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "policy": {
    "system": {
      "statsInboundDownlink": true,
      "statsInboundUplink": true
    }
  },
  "routing": {
    "rules": [
      {
        "inboundTag": [
          "api"
        ],
        "outboundTag": "api",
        "type": "field"
      },
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "blocked",
        "type": "field"
      },
      {
        "outboundTag": "blocked",
        "protocol": [
          "bittorrent"
        ],
        "type": "field"
      }
    ]
  },
  "stats": {}
}

更新后分别保存和更新服务即可完成前后端的对接

大功告成

到这里全部配置完成,尽情享受服务吧。

Netflix跨区账号被永久封禁,无邮件通知也不支持退款

流媒体视频网站奈飞最近几天开始对大量跨区账号进行封停,所谓跨区账号指的是用户人和IP在A国家,但开通的账号在B国家,然后又使用A国家IP地址登录。奈飞的封禁方式也很猛,当系统检测到账号出现异常时,安全系统会直接封停该账号,不会向账户注册邮件发送任何通知,同时用户也不能登录账号申请退款,更有甚者可以打开并登录奈飞,但点开任何视频都会提示账号无效,请重新注册。也有网友就此问题联系奈飞客服进行对线,不过奈飞客服明确说明无法操作退款,这波封停账号应该牵涉了大量跨区和合租的账号。

我的网站提供自动Netflix的价格更新,欢迎选择自己的区域:https://nf.mcetf.com