寶塔 Linux 面板生成阿里云 OSS 綁定域名 HTTPS 證書

背景

阿里云上面的【數字證書管理服務】在個人測試證書由之前無限量,改為20個上限,根本不夠用。然后產品升級,產品改為:個人測試證書(免費版)、個人測試證書(pro)。

對比項目個人測試證書(免費版)個人測試證書(pro)
費用免費68 元/張
證書服務周期僅支持3個月(即證書的有效期是3個月,過期后必須重新申請和安裝證書,運維管理成本高)SSL簽發后有效期為12個月,且提供托管服務(在證書即將過期時,自動提交新證書的申請),支持最長3年的服務周期
支持的證書類型DVDV
人工客服支持不支持支持
支持保護的網站域名類型僅支持保護一個單域名。不支持后綴為特殊詞的域名申請免費證書。僅支持保護一個單域名。不支持后綴為特殊詞的域名申請免費證書。

免費用完了,換個思路,既然再用寶塔在維護網站,也支持生成SSL證書,開整。

方案流程

涉及到4個產品:

  1. 寶塔Linux面板、
  2. 阿里云云解析DNS(其他也行)
  3. 阿里云對象存儲 OSS
  4. 阿里云數字證書管理服務

一、生成寶塔Linux面板生成SSL證書

  1. DNS:增加目標域名。如:s1.webclown.net,A記錄,值為服務器IP。
  2. 寶塔:網站-創建新站點(PHP類型)
  3. 寶塔:網站-站點列表-新站點-設置-SSL-申請證書
  4. 寶塔:申請證書,成功之后不部署,下載證書。

二、把證書綁定到阿里云對象存儲 OSS

  1. 寶塔:暫停站點
  2. DNS:把剛剛新增的A記錄暫停解析。
  3. 阿里云:數字證書管理服務 – SSL證書管理 – 上傳證書 – 選擇剛剛下載的證書
  4. 阿里云:對象存儲OSS – 選擇對應的Bucket – Bucket設置 – 域名管理 – 新增域名
  5. 阿里云:對象存儲OSS – 新增域名
    • 阿里云云解析
      • 輸入域名,綁定
      • 開啟自動添加CNAME解析即可
    • 其他服務商
      • 增加對應的TXT記錄即可
  6. 阿里云:對象存儲OSS – 域名列表 – 證書托管 – 選擇對應的證書即可。

至此配置成功。

總結

免費是昂貴的,這些折騰下來幾個小時過去了。這只是記錄一個方案,如果你恰好想要用這種方案,也是可以的。

BTW,也可以把這套整成一個解決方案,變成一個Flow。

使用Rclone把阿里云ECS文件同步到阿里云對象存儲OSS

背景

需要把大約 25G 的圖片、視頻文件同步到阿里云對象存儲OSS。

解決方案

1、安裝 Rclone

> curl https://rclone.org/install.sh | sudo bash

2、配置 Rclone

> rclone config

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Enter name for new remote.
name> webclown-net

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)
 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, ArvanCloud, Ceph, ChinaMobile, Cloudflare, DigitalOcean, Dreamhost, GCS, HuaweiOBS, IBMCOS, IDrive, IONOS, LyveCloud, Leviia, Liara, Linode, Magalu, Minio, Netease, Outscale, Petabox, RackCorp, Rclone, Scaleway, SeaweedFS, Selectel, StackPath, Storj, Synology, TencentCOS, Wasabi, Qiniu and others
   \ (s3)
 5 / Backblaze B2
....
Storage> 4

Option provider.
Choose your S3 provider.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / Amazon Web Services (AWS) S3
   \ (AWS)
 2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun
   \ (Alibaba)
 3 / Arvan Cloud Object Storage (AOS)
   \ (ArvanCloud)
 4 / Ceph Object Storage
   \ (Ceph)
...
provider> 2

Option env_auth.
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
Only applies if access_key_id and secret_access_key is blank.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (false).
 1 / Enter AWS credentials in the next step.
   \ (false)
 2 / Get AWS credentials from the environment (env vars or IAM).
   \ (true)
env_auth> 1

Option access_key_id.
AWS Access Key ID.
Leave blank for anonymous access or runtime credentials.
Enter a value. Press Enter to leave empty.
access_key_id> 8888888888888

Option secret_access_key.
AWS Secret Access Key (password).
Leave blank for anonymous access or runtime credentials.
Enter a value. Press Enter to leave empty.
secret_access_key> Xxxxxxxxxxxxxxxxxxxx

Option endpoint.
Endpoint for OSS API.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
1 / Global Accelerate
   \ (oss-accelerate.aliyuncs.com)
 2 / Global Accelerate (outside mainland China)
   \ (oss-accelerate-overseas.aliyuncs.com)
 3 / East China 1 (Hangzhou)
   \ (oss-cn-hangzhou.aliyuncs.com)
 4 / East China 2 (Shanghai)
   \ (oss-cn-shanghai.aliyuncs.com)
 5 / North China 1 (Qingdao)
   \ (oss-cn-qingdao.aliyuncs.com)
 6 / North China 2 (Beijing)
   \ (oss-cn-beijing.aliyuncs.com)
...
endpoint> 6

Option acl.
Canned ACL used when creating buckets and storing or copying objects.
This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too.
For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
Note that this ACL is applied when server-side copying objects as S3
doesn't copy the ACL from the source but rather writes a fresh one.
If the acl is an empty string then no X-Amz-Acl: header is added and
the default (private) will be used.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
   / Owner gets FULL_CONTROL.
 1 | No one else has access rights (default).
....
acl>

Option storage_class.
The storage class to use when storing new objects in OSS.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / Default
   \ ()
 2 / Standard storage class
   \ (STANDARD)
 3 / Archive storage mode
   \ (GLACIER)
 4 / Infrequent access storage mode
   \ (STANDARD_IA)
storage_class>

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Configuration complete.
Options:
- type: s3
- provider: Alibaba
- access_key_id: 8888888888888
- secret_access_key: Xxxxxxxxxxxxxxxxxxxx
- endpoint: oss-cn-beijing.aliyuncs.com
Keep this "webclown-net" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Current remotes:

Name                 Type
====                 ====
webclown-net        s3

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Done。接下來是同步命令:

> rclone sync /www/wwwroot/www.webclown.net/uploadfile/202201 webclown-net:webclown-net/uploadfile/202202 --progress --transfers=1
  • –progress:顯示進度。
  • –transfers:使用線程上傳,根據服務器帶寬來配置。

其他:阿里云官方工具ossutil

使用的是「命令行工具ossutil 2.0(預覽版)」,同步速度有點慢,均速在 600 kb/s 左右。傳到猴年馬月了。所以嘗試Rclone。

同步命令:

> ossutil cp -r /www/wwwroot/www.webclown.net/uploadfile/202201 oss://webclown-net/uploadfile/202201

鏈接

  1. Rclone
  2. 阿里云OSS:命令行工具ossutil 2.0(預覽版)

導出/備份 iPhone/iPad 照片到電腦

蘋果電腦

  1. 打開「 照片.app 」;
  2. 選擇照片;
  3. 菜單欄:文件 – 導出 – 導出 n 張照片;
    • 導出照片
  4. 選擇導出照片配置
    • 照片
      • 照片種類:HEIC
      • 顏色描述文件:原始狀態
      • 大小:實際到小
    • 信息
      • 包括:標題、關鍵詞和說明及位置信息
    • 文件命名
      • 文件名稱:使用文件名稱
      • 子文件夾格式:無
    • 選擇導出照片配置
  5. 導出到指定文件夾
  6. 查看導出進度
    • 導出進度

Windows

可以是用 iTunes 導出。

下載 Windows 版 iTunes – 官方 Apple 支持 (中國)

其他平臺(通用方法)

  1. 使用網頁端登錄
  2. 找到 「照片」,選擇照片下載(每次最多可下載1000項,圖片為:JPG,視頻為:MOV)
    • iCloud 導出圖片

HBuilderX – 發布App錯誤集合

[Error] Provisioning profile doesn’t support the Associated Domains

[Info] begin copyFile files to ipa…
[Info] begin replace files to ipa…
[Info] begin update mobileprovision to ipa…
[Info] begin outPut t_entitlements_full plist file…
[Info] begin outPut outPutEntitlements plist file…
[Info] begin verifyPlistFiles
[Error] Provisioning profile doesn’t support the Associated Domains
[Error] Provisioning profile doesn’t include the com.apple.developer.associated-domains
[Error] verifyPlistFiles failed
[Info] Package make result:Failed. Reason:

錯誤原因:《Apple Developer Program 許可協議》已更新

登錄 App Store Connect 同意《Apple Developer Program 許可協議》,即可

為什么 中文 不 需要 空格

這篇文章探討了為什么中文不需要空格的原因。主要觀點如下:

中文是一種典型的表意書寫系統,每個漢字表示一個音節或語素。中文文本由連續的漢字組成,不同的詞之間沒有用空格分隔。大多數中文詞可以用一到兩個漢字表示,詞長較短且變化較小。因此,中文讀者在閱讀時容易預測詞的長度,從而更快識別詞的開始和結束位置,即中文詞邊界位置的不確定性較小。

中文詞邊界位置的不確定性較小,無需空格來標記詞邊界。

相比之下,英語單詞往往由多個字母組成,且詞長的變化較大,這使得英語讀者較難預測每個單詞的開始和結束位置,即英語詞邊界位置的不確定性較大。因此,英語傾向于使用空格以減少詞切分的認知負擔。

英語詞邊界位置的不確定性較大,需要空格來標記詞邊界。


總之,中文和英語采用不同的詞邊界標記方式,都是為了實現更經濟高效的閱讀。

原文:為什么 中文 不 需要 空格

ERROR [nuxt] [request error] [unhandled] [500] fetch failed

ERROR [nuxt] [request error] [unhandled] [500] fetch failed

 ERROR  [nuxt] [request error] [unhandled] [500] fetch failed
  at Object.fetch (node:internal/deps/undici/undici:11118:11)  
  at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
  at async sendProxy (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1157:20)  
  at async ./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1962:19  
  at async Object.callAsync (./node_modules/.pnpm/unctx@2.3.1/node_modules/unctx/dist/index.mjs:72:16)  
  at async Server.toNodeHandle (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:2249:7)

觸發此錯誤代碼

demo.vue

async foo() {
  const resData = await useFetch(`/api/good/1`, {
    method: 'DELETE',
  });
}

nuxt.config.ts

export default defineNuxtConfig({
  nitro: {
    routeRules: {
      "/api/**": {
        proxy: `${env.NUXT_API_URL}api/**`,
      },
  }
}

臨時解決方案

把請求方式改為 POST 請求。

async foo() {
  const resData = await useFetch(`/api/good/1`, {
    method: 'POST',
  });
}

網上有說是這些情況:

  1. 代理域名 httphttps 的問題,測試過不是這個問題,和域名無關。
    1. 排查域名請求日志,出現此問題時,請求日志沒有記錄,說明請求沒有到達后端,是前端請求問題。
    2. 嘗試改下請求方式,發現 POST 請求正常,DELETE 請求報錯,也許是請求方式問題,但是不確定,先臨時解決一下。
  2. 降級 h3@1.9.0 版本,降級后,問題依然存在。
  3. 降級 nuxt@3.10.3 版本,降級后,問題依然存在。

參考

  1. 基于nitro的Nuxt3服務端無法請求https,難道是我寫錯了?
  2. [nuxt] [request error] [unhandled] [500] using proxyRequest or sendProxy · Issue #376 · unjs/h3
  3. Nuxt v3.11.0 proxyRequest in server api routes makes nitro crash if proxy server is down · Issue #26318 · nuxt/nuxt

印象筆記導出Markdown

解決方案

  1. 確認印象筆記版本 9.5.10

  2. 導出筆記:

    1. 方式一:全選筆記導出為 .enex 格式。
    2. 方式二:選擇筆記本導出為 .enex 格式。
  3. .enex 格式轉換為 .md 格式

    方式一:

    使用 evernote2md 工具將 .enex 格式轉換為 .md 格式。

    evernote2md 我的筆記.enex ./output
    

    方式二:yarle

  4. done。

獲取印象筆記 9.5.10 版本安裝包:

鏈接:https://pan.quark.cn/s/dc30a92ff0c6

提取碼:jVuH

背景

已經不在使用印象筆記有幾年,打算把筆記導出來,以備后用(會嗎?)。

印象筆記為國內版,國際版為 Evernote。國內版的筆記從 9.5.10 版本之后是無法導出為 .enex 格式的,只能導出 .notes.html 格式,.notes 還是加密的(encoding="base64:aes"),國際版可以正常導出 .enex 格式。 evernote2md 可以將 .notes 格式轉換為 .md 格式。

  • 方案1:.notes + evernote2md ??
  • 方案2:.html + evernote_move ??
  • 方案3:.enex + evernote2md ?
  • 方案4:.enex + yarle ?

方案4 yarle 優點,支持導出多種軟件使用的Markdown格式(更多),如:

  • Obsidian
  • LogSeq
  • Tana
  • Heptabase

參考

  1. wormi4ok/evernote2md – Github
  2. akosbalasko/yarle – Github
  3. 印象筆記導出格式更新,enex變為notes,惡心行為+1
  4. 印象筆記導出HTML再轉markdown的方法_印象筆記導出markdown-CSDN博客

在prettier3項目中替代pretty-quick

解決方案

.husky/pre-commit 中添加以下內容

# 獲取暫存區的文件列表
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g')
[ -z "$FILES" ] && exit 0

# 美化所有暫存區的文件
echo "$FILES" | xargs ./node_modules/.bin/prettier --ignore-unknown --write

# 將修改/美化的文件添加回暫存
echo "$FILES" | xargs git add

背景

在 prettier v3.x 版本的項目中,使用 pretty-quick 會報錯:

.../isSupportedExtension.js:12
  ..._prettier.resolveConfig.sync(file, {
                             ^
TypeError: _prettier.resolveConfig.sync is not a function

可以降低 prettier 版本到 2.x 來解決這個問題,但是項目里面額外使用了 tailwindcss,而 tailwindcss 依賴的 postcss 依賴的 prettier 版本是 3.x,所以降低 prettier 版本不是一個好的解決方案。

參考

  1. Pre-commit Hook · Prettier
  2. pretty-quick will break with prettier v3 · Issue #164 · azz/pretty-quick
  3. Editor Setup – Tailwind CSS
  4. tailwindlabs/prettier-plugin-tailwindcss: A Prettier plugin for Tailwind CSS that automatically sorts classes based on our recommended class order.

我使用的快捷指令(iOS,iPadOS,macOS)

平常有用到的一些常用的快捷指令,可以在 快捷指令.app 中打開,并使用。

iOS

iPadOS

macOS

圖片、視頻

徠卡水印

https://www.icloud.com/shortcuts/3446145a0980480caef78e8a641d49c5

standby快捷指令二維碼
徠卡水印

哈蘇水印

https://www.icloud.com/shortcuts/cfc0151ba78343e1ab5477cd894c59c9

哈蘇水印快捷指令二維碼
哈蘇水印

Apple水印

https://www.icloud.com/shortcuts/ea6e897570504b28a8f1fb8a3b9306b4

Apple水印快捷指令二維碼
Apple水印

阿萊水印

https://www.icloud.com/shortcuts/f89ac598fa9e4483b95e00c5483cf277

阿萊水印快捷指令二維碼
阿萊水印

Lumix水印

https://www.icloud.com/shortcuts/6a3b9a3e6e9443c5bde872f62d2a3d97

Lumix水印快捷指令二維碼
Lumix水印

蔡司水印

https://www.icloud.com/shortcuts/0d678d51c5f2464c8ca485edafa075ec

蔡司水印快捷指令二維碼
蔡司水印

富士水印

https://www.icloud.com/shortcuts/24a69e95508e4ea18f77a1f04106125a

富士水印快捷指令二維碼
富士水印

索尼水印

https://www.icloud.com/shortcuts/a38e70a622c14d9abc69afca1a3f6f1b

索尼水印快捷指令二維碼
索尼水印

佳能水印

https://www.icloud.com/shortcuts/67801f45a15346fab6674a63012e0900

佳能水印快捷指令二維碼
佳能水印

尼康水印

https://www.icloud.com/shortcuts/1a8314cadb874550877cf0caf80b7d0a

尼康水印快捷指令二維碼
尼康水印

iPhone水印

https://www.icloud.com/shortcuts/aa0a3c6f879b4a239efed7da72825655

iPhone水印快捷指令二維碼
iPhone水印

視頻到 GIF

https://www.icloud.com/shortcuts/22693aae57ba4f57af5d1db80ae632a0

視頻到GIF快捷指令二維碼

 

Bing Wallpaper

獲取 bing.com 的壁紙,儲存到相冊,然后設置為桌面壁紙,結合自動化,實現每日自動更換壁紙

https://www.icloud.com/shortcuts/68ee2f995d9e416e8d8564bbd2f1d331

BingWallpaper快捷指令二維碼

壓縮圖片

https://www.icloud.com/shortcuts/417c2eee095a4ba299b026ffd76eacae

壓縮圖片快捷指令二維碼

截屏

  • macOS 儲存到桌面
  • iOS、iPadOS 儲存到相冊

https://www.icloud.com/shortcuts/73bf300bb15b42da97eaf690c231aa15

截屏快捷指令二維碼

 

 

 

 

 

 

最開始是在 mac 上使用,想要截取APP切換界面,電腦上出現這個界面之后就沒辦法再去按截屏鍵,然后想通過Siri語音觸發這個快捷指令,然后實現了截屏

macOs Sonoma command + tab 無法切換窗口

其他

掃一掃

https://www.icloud.com/shortcuts/6558c55151a147f0923072a1db3202c8

掃一掃快捷指令二維碼

 

定位解析

https://www.icloud.com/shortcuts/44516645ba2340709b6851100fef103c

??? 時間:2023年10月26日 18:53:10
?? 位置:北京市xxx路

?? 坐標:北緯 39°00′00.00″ 東經 116°00′00.00″
?? 海拔:40.939米

定位解析快捷指令二維碼

 

手電筒閃爍

https://www.icloud.com/shortcuts/b422552335774500bdac786c8db605ba

手電筒閃爍快捷指令二維碼

standby

https://www.icloud.com/shortcuts/09f757ff0c1a4dc98728d87b25ca9605

結合自動化,實現定時息屏

standby快捷指令二維碼

 

更多推薦