Normal view

There are new articles available, click to refresh the page.
Before yesterdayDigital Immigrants

肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录

By: Orchestr
14 December 2023 at 10:27

万物之源

肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录

这一切事情的起因,都只是因为我想找一个稳定的途径给 OpenAI, ChatGPT 付款开始的,虽说当时已经有了 nobepay, depay, ... 等可以直接消费数字货币的虚拟卡,但是出于对国内搞这个的不信任,还是希望拥有一张来自国外银行签发的正经卡片,美国地址多久我就注册了德国的 N26 数字银行,使用它付款完全没有任何问题。

本来事情到这里已经可以结束了,但是我加入了一个 tg 上的神秘群组,里面的老哥各个都在交流如何肉身国内云开户国外银行,每日受到他们的熏陶,不知不觉我也变成了一个集邮党。

本来一张 N26 可以解决的事情,结果我现在已经集邮了 N26, Wise, Zen, Wirex, Amex DE, Monzo, Barclays, Monese, HSBC AU, Amex US

何为 Global Transfer

大致介绍一下 Global Transfer ,如果你拥有某个地区的 Amex 信用卡,然后因为某些原因需要前往另外一个地区,Global Transfer 可以让另一地区的 Amex 获得你之前所用到的 Amex 卡片的信用记录,以便快速发卡,大概就是这样的一个东西,更加具体的内容与教程大家可以自行搜索,不再赘述。

申请的前提条件:持有其他地区 Amex 直接发行的信用卡超过三个月,拥有三期账单,拥有一个可以接收信件的美国地址,可以证明你居住地址的文件例如 Bank Statement, Utility Bills 等。

正文开始,申请之路

获得 Amex DE 德国运通信用卡以及等待

前情提要:Amex de 申请成功,等待寄卡,记录下进度。 到本周为止 Amex DE 距离批卡已过三个月,也有了三期账单,符合了 Global Transfer 的条件,便开始着手准备 GT 到 US ,毕竟 AMEX DE 不刷欧元的话固定 3% FTF 还是比较蛋疼的。

申请流程

  1. 打开你所拥有的 Amex 卡片地区的官网,对我来说是 Amex DE ,点击登录,输入账号密码后进行登录。
  2. 确认登陆成功后将网页拉至最后,在右下角有一个切换国家的选项,我们在这里选择 US 。
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 此时我们就可以进入美国官网,选择 Personal Cards ,根据个人需求选择合适的卡片,本人选择的是 Hilton Honors ,免年费,免 FTF 。
  2. 选择 Apply ,然后就会出现这样的窗口询问你是否同意 AMEX US 访问其他地区的 Amex 以便来获取你的过往信用记录,选择 YES 。
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 这时如果 Amex US 可以获取你在其他地区的信用记录,便会出现如下界面,你的姓名、生日等个人信息已经被正确填写且无法更改,这时记得勾选红框内容以便可以使用护照号码而不是 SSN 或者 ITIN 进行申请,如下图:
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 然后根据网页提示继续填写剩余内容最后点击 Agree And Submit 即可。

第一次申请

  1. 提交申请后便收到了来自 Amex 的邮件。
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 然后随即拨打了 Amex US 的客服电话,客服告知他们无法处理我的申请,需要将我转接到负责 GT 的部分。
  2. 转接过去后,对面感觉是个带有起床气的客服代表(毕竟那会美国时间才刚刚八点,也合理),再次验证完个人信息后,告知需要 Proof of Address ,如下图所示:
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 作为一个云用户,自然是提交不了这种必须去 local branch 才能开具的文件,询问客服其他文件行不行,被客服告知有且仅有这个文件可以,说了句谢谢便挂断了电话。
  2. 第二天再次致电 Amex ,但是这次直接致电 GT 部门而非转接,被本次客服告知,已经有其他人做出了需要 additional information 的需求,他们无法二次更改,作罢。

如上所示,第一次申请没有进行到 Review 的步骤,便拨打客服电话 Cancel 了这一次申请。

第二次申请

看到其他人有说可以进行二次申请,不同的客服会要求不同的文件,于是当晚便有了第二次申请:

  1. 步骤与第一次申请相同,不做赘述。这次在收到申请邮件过了大约二十分钟左右,收到了第二封邮件:
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 随即点开 View Decision ,这时以为是被拒或通过的结果,但是点开网页发现需要 SSN 才能进行下一步,这个东西当然是提供不了的。
  2. 再次致电 Amex US GT 部门,告知对方收到邮件以及无法在网页进行下一步,与客服人员再一次确认完个人信息后,此客服询问了我 Amex DE 卡片的四位安全码。
  3. 然后告知他们已经可以成功访问我在德国的用卡记录,我只需要提供地址证明即可,这次的选项较多,Bank Statement, Utility Bills 都可。
  4. 随即上传了 HSBC 的 Bank Statement ,收到了来自 Amex 的文件上传确认邮件。此时已到了午夜,选择睡觉。
  5. 早上一觉醒来,便看到了来自 Amex US 的 Approve 邮件,然后便根据邮件内的提示创建了 Online Account ,邮件如图:
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录
  1. 设置好一切后手机登陆,额度 10,000 USD ,也算合理,毕竟云居民。
肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录

结语

到此为止,便完成了这一次的 Amex DE GT Amex US 过程,现在便等待美国代收收到实体卡片,扫描后我进行激活,然后锁卡(还是有点怕盗刷),不选择将原来的卡片转运回国(几十刀的邮费属实扛不住),等待几天后联系 Amex US 进行卡片 Replace ,并由 AMEX US 负责将卡片寄送回国。

肉身国内通过 Global Transfer 获得 Amex US 信用卡的一次记录

智能家居之第三方监控接入 HomeKit

By: Orchestr
30 November 2023 at 15:20
智能家居之第三方监控接入 HomeKit

相信很多和我一样的有宠家庭,都会为了掌握宠物的行踪或拆家的进展而购买了监控摄像头,通过互联网掌握藏在家中猫猫狗狗的踪迹,抑或是其他的为了家庭安全而购买摄像头起安保作用的家庭,都会面临相同的几个问题:我们真的需要云存储吗?我们真的信任摄像头厂商吗?我回家以后需要关掉摄像头吗?

智能家居之第三方监控接入 HomeKit

猫猫和我一样表示怀疑,以及各个厂商的云存储价格,打消了我的想法。我一开始的方案是将监控接入了群晖的 Surveillance Station,打开了群晖的动态提醒,但随之而来的便是每天无数的提醒,监控视野内但凡有一点点风吹草动,便会让我手机震动不停。

智能家居之第三方监控接入 HomeKit

直到我后来看到一篇关于 iCloud 安防摄像头的文档,为何不接入 HomeKit 白嫖无限 iCloud 存储呢?苹果还是相当良心的,摄像头存储的录像并不占用原有的 iCloud 空间。50 GB 方案:可添加一个摄像头。200 GB 方案:最多可添加五个摄像头。2 TB 及更高方案:不限制摄像头数量。作为高贵的美区 Apple One 超大杯车主,理论上是可以添加无数个摄像头的。具体的内容大家可以看下面的文档。

在 iCloud 中使用 HomeKit 安全视频储存加密安保摄像头录制的视频
了解如何在 iCloud 中使用 HomeKit 安全视频储存安保摄像头的视频。
智能家居之第三方监控接入 HomeKitApple Support
智能家居之第三方监控接入 HomeKit

话不多说,那就准备开搞!以往来说,其他的设备加入 HomeKit 我会选择通过 Home Assistant 进行中转,但是因为 HA 接入的摄像头好像并不支持 动态监测、人脸识别等 HomeKit 安防高级功能,所以我们这里会使用一个新的工具。

GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
Scrypted is a high performance home video integration and automation platform - GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
智能家居之第三方监控接入 HomeKitGitHubkoush
智能家居之第三方监控接入 HomeKit

Scrypted Docker 安装

Scrypted 本身是支持 Home Assistant Add On 的,所以不是通过 Container 安装 Home Assistant 可以方便的跟随这里的文档进行安装:

Home Assistant | Scrypted Docs
Video Integration Platform
智能家居之第三方监控接入 HomeKitScrypted Docs
智能家居之第三方监控接入 HomeKit

因为我的 Home Assistant 是通过 Docker 安装的 HA Core,不支持 Add On,所以这里需要通过 Docker 来进行安装,之前提到过,我的 Home Server 运行的是 NixOS,所以可以很方便的配置 Docker,具体的配置项如下,将其改为 Docker Compose 也很方便,所以这里不再提供。

{ config, pkgs, ... }: {
  virtualisation.oci-containers.containers."scrypted" = {
    autoStart = true;
    image = "koush/scrypted:latest";
    volumes = [ "/orchestr/static/docker/scrypted:/server/volume" ];
    extraOptions = [ "--network=host" ];
    environment = { TZ = "Asia/Shanghai"; };
  };
}

Scrypted 配置

安装完成后,我们便可以在浏览器内进入 scrypted 后台,注意这里的 https 不可省略,具体的网址为:

https://your-host-ip:10443

按照网页提示设置账号密码进入主界面选择 Management Console 即可。

scrypted 插件安装

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

点击左侧栏内 Plugins,然后点击 Install 进入以下界面:

智能家居之第三方监控接入 HomeKit

安装以下插件:

  • HomeKit
  • Onvif Camera Plugin 或 RTSP Camera Plugin
  • OpenCV Motion Detection
  • Snapshot Plugin
  • Video Analysis Plugin
  • WebRTC Plugin

注意,安装完 HomeKit 插件后切勿着急配置,继续看完下文。

Scrypted Server Address 设置

注意,此步不可省略,不然会出现摄像头无画面的情况。依次点击左侧边栏 SettingsGeneral ,即可看到界面设置。

智能家居之第三方监控接入 HomeKit

scrypted 摄像头配置

这里以 Onvif 协议举例,RTSP 配置过程基本一致,点击 Onvif Camera Plugin 进入插件配置,点击 Add New,进入以下界面:

智能家居之第三方监控接入 HomeKit

输入摄像头相关参数,点击 Create ,进入摄像头配置界面,这时,应当能看到摄像头的 SnapShot ,因为我这里已经配置过一遍了,所以界面可能略有不同。点击右侧的 Extensions ,将以下的插件勾选后点击 Save

智能家居之第三方监控接入 HomeKit

Scrypted 插件功能

一般情况下如果使用没有异常,尽可能保留默认配置即可。

Stream

智能家居之第三方监控接入 HomeKit

一般的家用摄像头都会有两个视频流,一般其中一个为高画质,一个为低画质,大家可以根据自己的需求选择相应的视频流,比如在家时适用高画质,出门适用低画质等。

SnapShot

智能家居之第三方监控接入 HomeKit

可以选择一些视频预览画面的选项,比如从哪个视频流截取画面等。

Motion Detection

智能家居之第三方监控接入 HomeKit

这里需要说明的是 Built In Motion Sensor 选项,Assist 为使用摄像头默认内置的动态监测算法,Replace 为使用 OpenCV 进行替代,如果你的摄像头没有内建相应功能的话,建议选择 Replace

Homekit 配置

这里有一个坑大家需要注意,HomeKit 摄像头的配置不是在 Scrypted 的 HomeKit 插件页面进行配置,而是在摄像头的 Extensions 页面,因为 Homekit 摄像头这里的默认配置是 Accessory 而不是Bridge 。对于摄像头而言我更青睐于配件而非桥接,毕竟一次性桥接一串设备进去,将来如果有什么问题需要单独配置某个设备的话,需要整个桥接的所有设备一起移除重新配置,较为麻烦。

智能家居之第三方监控接入 HomeKit

这里有一个选项,RTP Sender 提供两个选择,FfmpegScrpytedFfmpeg 大家众所周知,不做赘述,Scrpyted 为一个实验性选项,在这里有着更快视频转接速度,即更低的延时。

注意,这里配置完成后可能需要重启 Homekie 或 Scrypted 服务,注意观看网页顶部蓝色框的提示,这里不再截图展示。

接下来点击 Pairing ,打开 Home App,点击添加设备,扫描屏幕上的二维码,可能需要输入下方的 Pairing Code ,完成后即可将摄像头加入家庭。

智能家居之第三方监控接入 HomeKit

Home App 设置

在添加完摄像头,App 内便会引导进行摄像头的配置,比如视频录制选项,在家或外出是是否仅串流或开启录制等,以及动态监测是否监测人,动物,包裹等,如果是室外摄像头,还可以监测汽车等,也可以开启人脸识别,避免自己在家时被 Home App 不停地通知监测到有人进入摄像头。

下面只贴一些完成后的截图吧。

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

结束语

到此为止,将第三方摄像头接入 Homekit 的工作就宣告结束,我们可以在这步完成后便关闭摄像头的联网权限。如果大家在配置过程中遇到什么问题,可以留言,博主将在看到后及时回复。如果你对这里的内容略感兴趣,可尝试订阅本站,点击这里即可

Sign up for Digital Immigrants

Nobody from nowhere, belonging to no one.

Email sent! Check your inbox to complete your signup.

No spam. Unsubscribe anytime.

Hosting Ghost Blog with Docker on NixOS

By: Orchestr
20 August 2023 at 22:44
Hosting Ghost Blog with Docker on NixOS

As previously mentioned, I have successfully deployed NixOS on my Oracle ARM machine. You can find the original post here:

How to Install NixOS on Oracle ARM machine
The steps I undertook to install NixOS on an Oracle ARM machine.
Hosting Ghost Blog with Docker on NixOSDigital ImmigrantsOrchestr
Hosting Ghost Blog with Docker on NixOS

In the past, my blog was hosted on Tencent Cloud using Typecho. Unfortunately, due to unforeseen circumstances, I lost ownership of that machine along with all my previous posts. Consequently, I took a hiatus from blogging, remaining in a state of silence for a few years. However, I now realize the importance of reviving my blog before lethargy engulfs me.

After conducting extensive research and considering various platforms such as Ghost, WordPress, Typecho ,Hugo and some other platforms, I finally settled on Ghost. Its remarkable speed, plethora of customized themes, aesthetically pleasing web user interface, and integrated membership system influenced my decision.

Check out all the cool stuff Ghost has to offer on their website below:

Ghost: The Creator Economy Platform
The world’s most popular modern publishing platform for creating a new media platform. Used by Apple, SkyNews, Buffer, Kickstarter, and thousands more.
Hosting Ghost Blog with Docker on NixOSGhost - The Professional Publishing Platform
Hosting Ghost Blog with Docker on NixOS

Due to the absence of Ghost in the NixOS packages, and the cumbersome nature of adapting it into a NixOS service, Docker has emerged as an excellent solution for hosting Ghost. Here, I have provided a comprehensive breakdown of the steps I followed to set up a blog using Ghost with Docker on NixOS. This can be modified to use on other platforms.

Step 0: Enable Docker on NixOS

Enabling Docker(Podman) on NixOS is a straightforward process, requiring modification of just one configuration file. I personally prefer using the vim editor, but feel free to use your preferred tool such as nano, emacs, or VS Code.

The initial step involves logging into the machine, particularly if it is being used as a server.

ssh ${username}@${server IP}

Then, we can start to modify the configuration file:

sudo vim /etc/nixos/configuration.ni

There are two ways of adding Docker to the NixOS system: for all users:

environment.systemPackages = with pkgs; [
  docker
];

And for one user only:

users.users.${username}.packages = with pkgs; [
  docker
];

You can choose either way based on your needs. The next step is to enable the Docker service.

virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";

Note that we're using oci-containers to control Dockers. If you have chosen to install Podman, remember to modify it accordingly. Some may question why we're not using docker-compose; this is a simple answer – we embrace the capabilities of NixOS, and that suffices.

Last, remember to create a directory for docker to use. Here's my example:

mkdir ~/.docker

Step 1: Set up Docker Network

Using the Docker CLI command docker network will indeed create the network, but it may not be the optimal approach. Since we're operating within the context of NixOS, we can add it as a service. Add the following code snippet to your configuration.nix file, ensuring to customize the name according to your requirements. In my case, I'm utilizing npm as an example since I'm employing nginx-proxy-manager as my Nginx reverse proxy service.

systemd.services.init-docker-ghost-network-and-files = {
  description = "Create the network npm for nginx proxy manager using reverse proxy.";
  after = [ "network.target" ];
  wantedBy = [ "multi-user.target" ];

  serviceConfig.Type = "oneshot";
  script =
    let dockercli = "${config.virtualisation.docker.package}/bin/docker";
    in ''
      # Put a true at the end to prevent getting non-zero return code, which will
      # crash the whole service.
      check=$(${dockercli} network ls | grep "npm" || true)
      if [ -z "$check" ]; then
        ${dockercli} network create npm
      else
        echo "npm already exists in docker"
      fi
    '';
};

Step 2: Set up Mysql for Ghost

We will now proceed with crafting Docker configurations. The initial step involves creating an external directory for MySQL to store its data, ensuring that we can modify MySQL without accessing the Docker environment directly. At present, this MySQL database is exclusively intended for Ghost; however, you have the freedom to tailor it according to your specific requirements.

mkdir ~/.docker/ghost-blog/mysql -p

Please add the following snippet to your configuration file as well:

virtualisation.oci-containers.containers."ghost-db" = {
  image = "mysql:latest";
  volumes = [ "/home/hua/.docker/ghost-blog/msql:/var/lib/mysql" ];
  environment = {
    MYSQL_ROOT_PASSWORD = "your_mysql_root_password";
    MYSQL_USER = "ghost";
    MYSQL_PASSWORD = "ghostdbpass";
    MYSQL_DATABASE = "ghostdb";
  };
  extraOptions = [ "--network=npm" ];
};

Please note that Ghost no longer supports SQLite and MariaDB as its database options.

Step 3: Set up Ghost Docker

Finally, It's time for Ghost.

Basic Set up Configuarion

Following the previous instructions, we will proceed to create the content folder:

mkdir ~/.docker/ghost-blog/content

Now, let's move on to configuring Ghost:

virtualisation.oci-containers.containers."ghost-blog" = {
  image = "ghost:latest";
  volumes =
    [ "/home/hua/.docker/ghost-blog/content:/var/lib/ghost/content" ];
  dependsOn = [ "ghost-db" ];
  ports = [ 3001:3001 ];
  environment = {
    NODE_ENV = "develop";
    url = "http://${server IP}:3001";
    database__client = "mysql";
    database__connection__host = "ghost-db";
    database__connection__user = "ghost";
    database__connection__password = "ghostdbpass";
    database__connection__database = "ghostdb";
  };
  extraOptions = [ "--network=npm" ];
};

Within this section, we configure the port mapping, environment variables, and volume mapping. Please note that you should customize the MySQL configurations in accordance with your specific setup in the final step.

Mail Server Set Up

Taking Gmail as an example, please note that you can modify this configuration according to your specific needs.

virtualisation.oci-containers.containers."ghost-blog".environment = {
  mail__transport = "SMTP";
  mail__option_service = "Google";
  mail__options__auth__user = "username@gmail.com";
  mail__options__auth__pass = "your google app password";
  mail__options__host = "smtp.gmail.com";
  mail__options__port = "587";
  mail__options__secure = "false";
  mail__from = "username@gmail.com";
  tls__rejectUnauthorized = "true";
}

Please remember that the Google app password mentioned here is different from your actual Google account password. You can generate a Google app password by following the steps outlined in the Sign in with app passwords guide.

By configuring these settings, visitors will be able to sign up and leave comments on our website.

More Custom Options

Please refer to the instructions provided on the Ghost website at the following link:

Configuration - Adapt your publication to suit your needs
Find out how to configure your Ghost publication or override Ghost’s default behaviour with robust config options, including mail, storage, scheduling and more!
Hosting Ghost Blog with Docker on NixOSGhost - The Professional Publishing Platform
Hosting Ghost Blog with Docker on NixOS

Step 4: Set up Nginx Reverse Proxy

There are numerous articles available on the internet that explain how to set up Nginx as a system service or utilize nginx-proxy-manager as a Docker service. For the purpose of this example, I will demonstrate the Docker service approach. Remember to create the necessary folders as well.

virtualisation.oci-containers.containers."nginx-proxy-manager" = {
  image = "jc21/nginx-proxy-manager:latest";
  dependsOn = [ "ghost-blog" "chatgpt-next-web" ];
  volumes = [
    "/home/hua/.docker/nginx-proxy-manager/data:/data",
    "/home/hua/.docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt"
  ];
  ports = [ "80:80", "443:443", "81:81" ];
  extraOptions = [ "--network=npm" ];
};

Step 5: Rebuild System

sudo nixos-rebuild switch`

Step 6: Start to Use

After rebuilding the system, you can proceed to open the web pages for both Ghost and nginx-proxy-manager.

For information and usage details about Ghost, please visit:

Ghost: The Creator Economy Platform
The world’s most popular modern publishing platform for creating a new media platform. Used by Apple, SkyNews, Buffer, Kickstarter, and thousands more.
Hosting Ghost Blog with Docker on NixOSGhost - The Professional Publishing Platform
Hosting Ghost Blog with Docker on NixOS

To learn more about nginx-proxy-manager, please visit:

Nginx Proxy Manager
Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let’s Encrypt
Hosting Ghost Blog with Docker on NixOS
Hosting Ghost Blog with Docker on NixOS

Please note that once you have set up the nginx reverse proxy for Ghost, it's necessary to modify the Docker configuration for Ghost as follows:

virtualisation.oci-containers.containers."ghost-blog".environment = {
  NODE_ENV = "production";
  url = "https://your-website-address";
}

Please replace your-website-address with the actual address of your website. After making this modification, rebuild the system again.

In conclusion, if you have any further questions, please feel free to leave a comment without hesitation.

全自动化观影之 MoviePilot 安装与使用

By: Orchestr
20 August 2023 at 04:19
根据作者意愿,请勿将本文转载至任何中国社交媒体与平台,包括但不限于小红书、Bilibili、微博、简书、什么值得买等。
全自动化观影之 MoviePilot 安装与使用

相信绝大多数搭建了 NAS 的人都有着一个比较重要的使用途径,即使用 Emby、Plex、Jellyfin 或 Infuse 来搭建专属于自己的家庭影院。在此之前,我一直使用 NasTools 与 Plex 来完成我的家庭影院搭建,可以很好的完成自动化的观影需求,在 NasTools 内订阅某个剧集或者某部电影,便不再关心资源下载等内容,等待 NasTools 自动完成即可,如下图所示。

全自动化观影之 MoviePilot 安装与使用

后续因为一些众所周知的因素,NasTools 的作者不得不停止更新并将 Github Repo 进行了 Archive 处理,尽管最后的版本对我而言仍旧可以保持日常需求,但是有的时候也不得不面对一些问题,比如在搜索资源时耗时越来越长等。但是有一个好消息,NasTools 的原作者最近开了新坑,基于 NasTools 的代码精简化需求,开发了新的影视管理工具 MoviePilot ,看到其他人的描述说新版本的软件运行速度有了相当多的提升。
话不多说,那便开始部署,我也在这里记录下我的安装过程,我在这里使用 Synology 的 Container Manager(原 Docker Manager),以下内容也可稍作修改应用到其他支持 Docker 的平台,就凭各位自行发挥了。

Synology Nas 准备工作

安装 Container Manager

打开 Synology 套件中心搜寻 Container Manager 并进行安装,安装过程根据相应提示即可。

全自动化观影之 MoviePilot 安装与使用

设置 Docker 工作目录

打开 Synology 控制面板,选择共享文件夹,创建新的共享文件夹,文件夹名称根据需求自行选择,我这里就叫做 docker。

全自动化观影之 MoviePilot 安装与使用

接下来,进入 Synology File Station,鼠标右键选择刚刚穿件的目录,进入 属性 菜单,选择 权限 菜单中的 新增,用户与组选项选择 EveryOne ,应用于全部文件夹,给予 读取与写入 权限,如下图:

全自动化观影之 MoviePilot 安装与使用

点击应用后再选择 应用到这个文件夹,子文件夹及文件,如下图,点击保存后即可。

全自动化观影之 MoviePilot 安装与使用

设置项目运行目录开始创建项目

在 File Station 内进入上一步设置的目录,新建文件夹,根据个人喜好选择命名即可,我这里将命名为 theater
设置完成后打开 Container Manager,点击左侧 项目,再选择 新增,根据自己喜好命名,路径选择为上一步设置的目录,来源选择 创建 docker compose,内容留空进入下一步即可,设置完成后如下图所示:

全自动化观影之 MoviePilot 安装与使用

完成后点进 theater 进入项目,选择 YAML 配置,我们的准备工作便已完成。

全自动化观影之 MoviePilot 安装与使用

我这里就继续沿用之前 NasTools 的配置文件了。

MoviePilot 依赖项目准备

CookieCloud 安装

根据 MoviePilot 项目描述,CookieCloud 为本项目的必须依赖,原文如下:

站点信息需要通过 CookieCloud 同步获取,因此需要安装 CookieCloud 插件,将浏览器中的站点 Cookie 数据同步到云端后再同步到 MoviePilot 使用。

服务端 Docker 安装

尽管 MoviePilot 项目中已经包含了公共 CookieCloud 服务器,但是本着能自建即自建的原则,我们也会在这里自行搭建 CookieCloud 服务器,docker compose 代码如下:

version: "3"
services:
  cookie-cloud:
    image: easychen/cookiecloud:latest
    restart: always
    network_mode: bridge
    hostname: cookie-cloud
    ports:
      - 8088:8088

将上面的代码复制粘贴进入 Container Manager,点击保存后选择启动,会看到 Container Manager 正在拉取镜像,如下图:

全自动化观影之 MoviePilot 安装与使用

等这里的代码结束运行后,在浏览器输入 http://${Synology IP}:8088,如果看到如下界面,则表示部署成功:

全自动化观影之 MoviePilot 安装与使用

浏览器插件安装

进入 CookieCloud Release 下载最新的浏览器插件,并进行解压保存。进入 Chrome 插件设置:chrome://extensions/,打开开发者模式,选择 加载已解压的扩展程序,选择刚刚的解压目录,点击选择进行安装,如下图所示:

全自动化观影之 MoviePilot 安装与使用

安装完成后,我们可以打开 CookieCloud 插件进行配置,具体的教程可以移步 官方教程 ,下面以我的配置进行示例:

全自动化观影之 MoviePilot 安装与使用

设置完成后点击下方 保存测试 确保这里配置正确。到此为止,CookieCloud 配置完成。

下载服务器安装(以 QBitTorrent 为例)

根据 MoviePilot 项目文档,其支持 QBitTorrentTranssisson,大家可以根据个人喜好自行选择,我这里便以 QBitTorrent 为例,Transsisson 大家可以自行搜寻相关内容进行安装。

服务端 Docker 安装

第一步我们需要在之前设置的 MovePilot 项目的运行目录内新建一个名为 qbittorrent 的目录,这里的目的是将 QBitTorrent 的部分文件映射出来,以便我们进行后续操作,如忘记密码的修改或者 docker 迁移。如下图所示:

全自动化观影之 MoviePilot 安装与使用

同时,我们需要新建 QBitTorrent 的下载目录,以我个人的设置为例,如下:

全自动化观影之 MoviePilot 安装与使用

我这里设置为 media/movies(seriese)/raw 存储下载的原始媒体文件,media/movies(seriese)/clean 存储经过刮削的媒体文件,downloads 目录存储其他的下载内容。
以上内容准备后,我们便可以开始部署,docker compose 文件如下,你可以根据你的需求进行修改,以下仅为示例:

version: "3"
services:
  qbittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: qbittorrent
    network_mode: host # 可以更改为 bridge,我这里选择 host 仅为方便设置 ipv6
    restart: always
    volumes:
      - ./qbittorrent:/config   # 冒号左边请修改为你想保存配置的路径
      - /volume1/media:/media   # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
      - /volume1/downloads:/downloads
    environment:
      - PUID=1026
      - PGID=100
      - WEBUI_PORT=8999
      - TZ=Asia/Shanghai  # 时区

我们再次进入 Container Manager,选择 停止 项目,并将上文的代码复制粘贴,随后再次点击启动,如下图:

全自动化观影之 MoviePilot 安装与使用

等待弹出窗口内代码运行完成后,浏览器内输入 http:${Synology IP}:8999 便可进入 QBitTorrent WEBUI,如下图:

全自动化观影之 MoviePilot 安装与使用

QBitTorrent WEBUI 配置

上一步后我们需要输入用户名(默认 admin)与密码(默认 adminadmin),便可以进入界面,点击设置图标便可以进入设置,各位根据自己的需求自行调参,可以参考 qBittorrent 参数详细设置教程

全自动化观影之 MoviePilot 安装与使用

媒体服务器安装(以 Plex 为例)

MovilePilot 支持 Emby、Plex 与 JsllyFin,大家可以根据个人需求选择相应的媒体服务器,我个人的体验结论是:

  • Emby 提供了较好的多人分享体验,也提供了多种客户端,如 Android、iOS、macOS、Apple TV等多平台,但其在 Apple TV 端的 APP 体验截止本文书写日期仍旧比较糟糕,如需 Apple TV 使用,一般需要搭配 Infuse 使用。
  • Plex 更加注重个人观影,也提供多平台客户端,Apple TV 客户端较为完善,达到了一般流媒体平台的流畅度与观影体验。
  • JellyFin 没有过多体验,但是可以把它理解为免费开源版的 Emby,手头紧张的朋友可以选择。

服务端 Docker 安装

在上一步中我们新建了媒体目录,在这一步便可以开始应用。同时,我们也需要新建一个目录用于存储 Plex 的配置,与上文中 QBitTorrent 相同,便不再赘述。这里的 docker-compose 文件如下,各位可以根据自己的需求进行修改:

version: "3"
services:
  plex:
    image: linuxserver/plex:latest
    container_name: plex
    network_mode: host
    restart: always
    environment:
      - PUID=1026
      - PGID=100
      - VERSION=docker
      - TZ=Asia/Shanghai  # 时区
    volumes:
      - ./plex:/config
      - /volume1/media:/media

这里步骤如上文相同,复制粘贴重新构建项目即可,这里不再赘述。

Plex WEBUI 配置

经过上文配置,这时便可以打开浏览器输入 http:${Synology IP}:32400,按照文字说明进行配置,可以参考 如何在 FreeNAS 上安装 Plex 媒体服务器,跳过前文的安装,直接从网页配置看起即可。

正文开始之 MoviePilot 安装

建议开始之前首先熟读 MoviePilot 配置文档,熟悉每一项环境变量的命名与含义。

服务端 Docker 安装

基础配置

与上一步相同的,我们需要新建一个目录用于存储 MoviePilot 配置,如图所示:

全自动化观影之 MoviePilot 安装与使用

然后我们便要开始稍显繁琐的 Docker 配置,我们跟随官方文档,开始一步步的编写 docker compose 文件,首先开头还是老几样:

version: "3"
services:
  moviepilot:
    image: jxxghp/moviepilot:latest
    volumes:
      - ./movie-pilot:/moviepilot # 冒号左边请修改为你想保存配置的路径
      - ./movie-pilot/config:/config#  冒号左边请修改为你想保存配置的路径
      - /volume1/media:/media # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
      - ./qbittorrent/qBittorrent/BT_backup:/BT_backup #qb 种子目录,转移和辅钟需要
      - ./nastools/config:/nas-tools/config # nt数据库,用于转移历史记录,如果之前没有安装过 NasTools 的可以忽略删除这一行
    restart: always
    network_mode: bridge
    ports:
      - 3003:3000
    hostname: movie-pilot

以上这一部分为基础配置,接下来才是重头戏。

环境变量设置

要在 compose 文件中设置环境变量,其关键词为 environment,只需要在上文中的代码中继续加入即可,接下来我们来一个个的填入 需要配置的环境变量。

Docker 运行权限管理

首先我们要获取 Synology 用户的 uidgid,这里可以通过 ssh 到 Synology 输入命令来获取,第一步需要打开 Synology 的 ssh 权限,如图所示:

全自动化观影之 MoviePilot 安装与使用

接下来我们可以使用如下命令获取相关内容:

ssh ${username}@${Synology IP}
# 根据提示信任 Host 以及输入密码进行验证
username@SynologyNas:~$ id
uid=1026(username) gid=100(users) groups=100(users),101(administrators)

获取到上述内容之后,我们便可以设置以下内容,关于这里为什么不设置默认值,因为默认值为 0 的话即表明该程序可以获得我们 Synology 的 root 权限,这是不大安全的,具体的大家可以自行搜寻相关资料进行了解,这里不再赘述,这一步我们需要添加的环境变量如下:

    environment: 
      - PUID=1026 # 运行程序用户的 uid,默认 0
      - PGID=100  # 运行程序用户的 gid,默认 0
      - UMASK=022 # 掩码权限,默认 000,可以考虑设置为 022
      - MOVIEPILOT_AUTO_UPDATE=true #重启更新,true/false,默认 true
Docker 网络以及用户管理
    environment: 
      - MOVIEPILOT_CN_UPDATE=false #重启更新是否使用国内加速,true/false,默认false 
      - NGINX_PORT=3000 #WEB服务端口,默认3000,可自行修改,但不能为3001
      - SUPERUSER=admin #超级管理员用户名,默认admin,安装后使用该用户登录后台管理界面
      - SUPERUSER_PASSWORD=password  # 超级管理员初始密码,默认password,建议修改为复杂密码
      - API_TOKEN=moviepilot #API密钥,默认 moviepilot,在媒体服务器 Webhook、微信回调等地址配置中需要加上 ?token= 该值,建议修改为复杂字符串
      - PROXY_HOST=http(s)://ip:port #网络代理(可选),访问 themovied b需要使用代理访问,格式为 http(s)://ip:port
      - TMDB_API_DOMAIN=api.themoviedb.org # TMDB API地址,默认 api.themoviedb.org,也可配置为 api.tmdb.org 或其它中转代理服务地址,能连通即可
MoviePilot 文件下载路径管理
DOWNLOAD_PATH: 下载保存目录,注意:需要将 moviepilot 及下载器的映射路径保持一致,否则会导致下载文件无法转移

这里的这一句话看起来有些绕,但是我们解决的方式其实很简单,我们只需要保持 MoviePilot 与 QBitTorrent 的 Docker 下载目录映射名称一致即可,我们在之前已经将其均设置为 media,所以这里无需过多考虑。

    environment: 
      - DOWNLOAD_PATH=/media #下载保存目录,注意:需要将moviepilot及下载器的映射路径保持一致,否则会导致下载文件无法转移 - 仅供参考
      - DOWNLOAD_MOVIE_PATH=/media/movies/raw #电影下载保存目录,必须是DOWNLOAD_PATH的下级路径,不设置则下载到 DOWNLOAD_PATH
      - DOWNLOAD_TV_PATH=/media/series/raw #电视剧下载保存目录,必须是DOWNLOAD_PATH的下级路径,不设置则下载到 DOWNLOAD_PATH
      - DOWNLOAD_CATEGORY=false #下载二级分类开关,true/false,默认 false,开启后会根据配置 category.yaml 自动在下载目录下建立二级目录分类,因为我不需要这里进行更加详细的分类,电影与剧集两个分类即可,所以可以保持 false,各位可以根据自身需求进行更改
      - DOWNLOAD_SUBTITLE=true #下载站点字幕,true/false,默认true
      - REFRESH_MEDIASERVER=true #入库刷新媒体库,true/false,默认true
      - SCRAP_METADATA=true #刮削入库的媒体文件,true/false,默认true
      - TORRENT_TAG=MOVIEPILOT #种子标签,默认为 MOVIEPILOT,设置后只有 MoviePilot 添加的下载才会处理,留空所有下载器中的任务均会处理
MoviePilot 媒体库文件设置

这里的路径与上文相同,我们只需要保持 MoviePilot 与 Plex 的 Docker 媒体库目录映射名称一致即可。

    environment:
      - LIBRARY_PATH=/media #媒体库目录,多个目录使用,分隔 - 仅供参考
      - LIBRARY_MOVIE_NAME=movies/clean #电影媒体库目录名,默认电影
      - LIBRARY_TV_NAME=series/clean #电视剧媒体库目录名,默认电视剧
      - LIBRARY_CATEGORY=false # 媒体库二级分类开关,true/false,默认 false,开启后会根据配置 category.yaml 自动在媒体库目录下建立二级目录分类,可以根据自身需求进行更改
# 转移方式,支持link/copy/move/softlink
      - TRANSFER_TYPE=link
CookieCloud 配置
    environment:
      - COOKIECLOUD_HOST=http://10.0.0.6:8088  # CookieCloud服务器地址,格式:http://${Synology IP}:port,必须配置,否则无法添加站点
      - COOKIECLOUD_KEY=从 CookieCloud 插件复制
      - COOKIECLOUD_PASSWORD=从 CookieCloud 插件复制
      - COOKIECLOUD_INTERVAL=180  # CookieCloud同步间隔(分钟)
# CookieCloud对应的浏览器UA
      - USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 #CookieCloud 对应的浏览器 UA,可选,设置后可增加连接站点的成功率,同步站点后可以在管理界面中修改
通知器设置

暂时跳过。

下载器配置

以 QBitTorrent 为例,其他的请自行探索。

    environment:
      - DOWNLOADER=qbittorrent #下载器,支持qbittorrent/transmission,QB 版本号要求>= 4.3.9,TR 版本号要求 >= 3.0,同时还需要配置对应渠道的环境变量,非对应渠道的变量可删除,推荐使用 qbittorrent
#qbittorrent设置项
      - QB_HOST=http://10.0.0.6:8999 #qbittorrent地址,格式:http://${Synology IP}:port,https需要添加 https:// 前缀
      - QB_USER=username #qbittorrent用户名
      - QB_PASSWORD=passport #qbittorrent密码
      - DOWNLOADER_MONITOR=true #下载器监控,true/false,默认为true,开启后下载完成时才会自动整理入库
媒体服务器设置

以 Plex 为例,首先我们需要获取 X-Plex-Token,在浏览器中登陆 Plex,F12 进入开发者模式,选择 Network,搜索栏输入关键词进行搜寻,如下图所示:

全自动化观影之 MoviePilot 安装与使用

获取后进行复制粘贴即可。

    environment:
      - MEDIASERVER=plex #媒体服务器,支持emby/jellyfin/plex,同时还需要配置对应媒体服务器的环境变量,非对应媒体服务器的变量可删除,推荐使用emby
      - PLEX_HOST=http://10.0.0.6:32400 # Plex 服务器地址,格式:http://${Synology IP}:port,https 需要添加 https:// 前缀
      - PLEX_TOKEN= # Plex 网页 Url 中的 X-Plex-Token ,通过浏览器F12->网络从请求URL中获取
      - MEDIASERVER_SYNC_INTERVAL=1 #媒体服务器同步间隔(小时),默认 6,留空则不同步
认证站点设置

因为某些原因,MoviePilot 首先需要你时某一些 PT 站点的会员,才可进行使用,尽管这样提高了本项目的使用门槛,但这样可以使得本项目更加长久。详细内容可以参考 Movie Pilot 用户认证
这里以 Audiences 进行举例,我们首先需要获取 uidpasskey,登陆网站后,点击控制面板,即可获得,如下图所示:

全自动化观影之 MoviePilot 安装与使用

获取后进行复制粘贴即可。

    environment:
      - AUTH_SITE=audiences  # 认证站点,支持hhclub/audiences/hddolby/zmpt/freefarm/hdfans/wintersakura/leaves/1ptba/icc2022/iyuu
      - AUDIENCES_UID=uid
      - AUDIENCES_PASSKEY=passkey

部署 MoviePilot

与上文相同的,将最后的完成版复制粘贴加入 Container Manager,重新构建项目即可。

WEBUI 配置

打开 http://${Synology IP}:3003,如果出现登录界面,即表明安装成功,如下图所示:

全自动化观影之 MoviePilot 安装与使用

输入上文中设置的账号密码登录后,即可进入主界面,如下图所示:

全自动化观影之 MoviePilot 安装与使用

接下来便可以由你来进行探索这里的设定了,更加详细的关于 WEBUI 内的配置也会在日后在本文内进行更新。

How to Install NixOS on Oracle ARM machine

By: Orchestr
11 August 2023 at 23:32
How to Install NixOS on Oracle ARM machine

After much persistence, I finally registered for Oracle Cloud's always-free tier and set up a powerful machine. But soon, I faced challenges.

For three years, my work computer has run on NixOS, with its nix flakes feature boosting my productivity, aided by workplace IT support. However, for my home setups, Ubuntu has been the clear choice due to its extensive resources and tutorials. While NixOS offers robust capabilities, its steep learning curve often leads me to devise custom solutions.

Despite the initial hurdles, I'm growing fond of NixOS's efficiency. I'm contemplating transitioning most of my systems to it, especially given the ease of deployment with a single nix flake.

Below, I've detailed the steps I undertook to transition from Ubuntu to NixOS on an Oracle ARM machine.

Step 0: Log in to Ubuntu

When setting up your Oracle server, remember to add your key or download the auto-generated keys. This ensures you can SSH into the machine:

ssh ubuntu@${your oracle machine ip}

Step 1: Install Nix(Not OS, just a command line tool)

Run the following command. When prompted, answer with n, y, y.

sh <(curl -L https://nixos.org/nix/install) --daemon   

After this, you can either log out and log back in or just type bash and press enter. Next, add the NixOS channels (as of this writing, the latest stable channel is 23.05):

nix-channel --add https://nixos.org/channels/nixos-23.05 nixpkgs
nix-channel --update

Step 2: Prepare an In-memory NixOS

Following the NixOS Wiki, use cleverca22's scripts to create the installation system:

git clone https://github.com/cleverca22/nix-tests.git
cd nix-tests/kexec
vim myconfig.nix

Here's an example of myconfig.nix, ensure you include your SSH public key.

{
  imports = [
    ./configuration.nix
  ];

  # Make it use predictable interface names starting with eth0
  boot.kernelParams = [ "net.ifnames=0" ];

  networking.useDHCP = true;

  kexec.autoReboot = false;

  users.users.root.openssh.authorizedKeys.keys = [
    "{your id_rsa.pub file content}"
  ];
}

You can now build a full kexec-capable NixOS system from this configuration. This will produce a tarball.tar.xz file. Once this process completes, you can untar the file and run kexec to initiate the installation. In the meantime, take a break, perhaps brew yourself a cup of coffee, or gaze up at the sky for a moment of reflection. Once the process is finished, you will be automatically logged out from the current terminal session.

nix-build '<nixpkgs/nixos>' -A config.system.build.kexec_tarball -I nixos-config=./myconfig.nix
tar -xf ./result/tarball/nixos-system-aarch64-linux.tar.xz
sudo ./kexec_nixos

Step 3: Installing NixOS to disk

First, remove the old SSH known host since the system has changed, and then SSH in again:

ssh-keygen -R ${your oracle machine ip}
ssh root@${your oracle machine ip}

This will make you the root on an in-memory NixOS system. If you restart now, it reverts to Ubuntu. So, to stick with NixOS, follow the disk setup steps provided.
Once done, initiate the installation with:

# parted
(parted) rm 1
(parted) rm 15
(parted) mkpart
Partition name?  []? boot
File system type?  [ext2]? fat32
Start? 2048s
End? 10GB
(parted) print all
Model: ORACLE BlockVolume (scsi)
Disk /dev/sda: 50.0GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  10.0GB  9999MB  fat32        boot  msftdata


(parted) set 1 boot on
(parted) set 1 esp on
(parted) mkpart
Partition name?  []?
File system type?  [ext2]? ext4
Start? 10GB
End? -1s
Warning: You requested a partition from 10.0GB to 50.0GB (sectors 19531250..97677311).
The closest location we can manage is 10.0GB to 50.0GB (sectors 19531776..97677278).
Is this still acceptable to you?
Yes/No? yes
(parted) quit

We can now make filesystems on our brand new partitions, mount them, and configure NixOS to use them, You want to at least set openssh.enable = true; and add an ssh key for root, like we did in the temporary system above.

mkfs.fat -F 32 /dev/sda1
mkfs.ext4 /dev/sda2
mkdir -p /mnt/boot
mount /dev/sda2 /mnt/
mount /dev/sda1 /mnt/boot/
nixos-generate-config --root /mnt
vim /mnt/etc/nixos/configuration.nix 

Once done, initiate the installation with:

nixos-install

Then, reboot the system.

Step 4: All done

As before, remove the old SSH known host entry and SSH back in:

ssh-keygen -R ${your oracle machine ip}
ssh root@${your oracle machine ip}

Congratulations! Your Oracle machine now runs NixOS. I'll be testing more NixOS features and will organize my findings in a subsequent post.

❌
❌