使用 Restic 加密增量备份到网盘

转载声明:
本文很大程度上参考了 KnightHart 发布的贴文 restic-全平台nas的加密增量快照备份神器.
但是在原文基础上有增添和修改, 若有侵权, 请联系 [email protected] 删除文章.

前言

搭建家庭 NAS 的前前后后我曾经格盘格过两次, 尽管每次都抢救回来了, 但是自那以后我一直在盘算着备份的主意. 和 KnightHart 的历程大致相同, 我尝试过:

  • 简单的 git 备份 (本地 .git 文件夹不断增大而且大文件有限制)
  • syncthing (是个好东西但是只支持在自己的设备间同步, 占磁盘) 
  • 百度网盘 (不安全、下载限速)
  • rclone + 白嫖的 Google Teamdrive (无法加密, 不支持增量)

解释一下 Google Teamdrive 为什么要加密吼. 前阵子网上出现了很多 Cloudflare Workers 脚本允许 User 给自己分配一个空间无限的, 挂在某大学名下的团队盘, 可以随便往里面扔、取文件, 而且一般 Google Personal Drive 的功能它都有哦. 但是唯一的问题是, 提供脚本的人是可以看到你网盘里的文件, 而且是可以任意上传下载的; 那这不就隐私性全没了吗? 所以如果要备份, 一定要加密的. 另外, Google Teamdrive 有传输速率限制, 所以备份如果不是增量的, 也会很麻烦.

閱讀全文 使用 Restic 加密增量备份到网盘

CentOS/Debian 安裝 BOINC 受控端簡明教程

因為最近一直在折騰 VPS, 然後一直都覺得 VPS 閒置時就是在浪費錢. 當然我也嘗試過用 CPU 挖礦, 不過當看到礦池顯示 “距離收益還有 2147483646 年” 的時候, 我徹底怒了: 我 TM 還不如去做公益!

於是我就安裝了 BOINC…

轉載聲明:
本文轉載自「闪星空间」, 遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议.
本文在原文基礎上有輕微修改, 主要是新增了 CentOS 的部分.

BOINC 全称 Berkeley Open Infrastructure for Network Computing,即伯克利开放式网络计算平台,是由美国加州大学伯克利分校电脑学系发展出的分布式计算平台,目前已成为世界上主流分布式计算平台之一。希望用户利用空余的算力,帮助进行包括数学、医学、物理和气象学等学科的学术研究。

閱讀全文 CentOS/Debian 安裝 BOINC 受控端簡明教程

Man Page: 如何使用以及小貼士

這是什麼

Man Page ( Manual Page ) 是 Unix 系統標配的在線系統手冊, 主要用來查詢命令. 在使用包管理器安裝程序的時候基本總是可以看到 configurating man-db... 的輸出, 是程序將自己的手冊加入到系統手冊當中.

儘管 Man Page 聲稱是在線手冊 ( 其本身也支持在線查詢 ), 但是大多數手冊都以 troff 格式存儲在本地.

包含的章節

章節描述
1命令
2System calls (Linux 內核函數)
3庫函數. (收錄了部分 C 語言函數)
4特殊檔案 (比方說 /dev 下的文件) 和驅動
5檔案格式與協定 (e.g /etc/passwd )
6遊戲和屏保
7雜項
8管理員指令

在手冊的開頭和結尾都可以看到 名稱(數字) 形式的字串, 括弧中的數字就是說明這個條目隸屬的章節. 一個條目可以隸屬于多個章節, 比如 passwd 是一個命令的同時也是一個檔案, 所以它同時隸屬于第一和第五章.

閱讀全文 Man Page: 如何使用以及小貼士

Linux 將運行中的任務轉後台並在會話關閉後繼續運行

假如我想要在服務器上把文件從一個硬盤考到另一個硬盤, 就要用到 cp/dd/rsync 命令對吧, 我想要讓服務器去運行這個命令, 我可以直接把終端關掉, 這時候第一個想起來就是 nohup [命令] &. nohup 意思是讓終端掛掉時進程不結束, & 的意思讓進程在後台執行.

但是如果我在拷貝之前沒想這麼多, 開始了之後才發現要運行好久, 這個時候應當怎麼辦呢? 我在中文互聯網上並沒有找到相關的問題/答案. 反倒是在 Stack Overflow 上找到了.

原問題及回答:

https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

  1. 按 Ctrl + Z 暫停程序
  2. 輸入 bg 讓暫停的程序在後台執行
  3. 輸入 jobs 查看程序 id (如果之前沒有執行類似操作過就是 1)
  4. 輸入 disown -h [id] 從 shell 的作業列表移除指令

Thumbnail: Sea Shell by Shyam B
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them immediately.

WordPress Docker 優化: 添加 PhpRedis、Memcached 支持

環境:
Docker + WordPress, 用官方默認的 Apache 驅動, 不是 fpm.

因為 PhpRedis 不屬於 PHP 內置的模塊, 而 PHP 內置了一個 Predis 又太慢太蛋疼, 所以要重新構建 Docker Image 為 PHP 添加 Redis 模塊支持.

為了添加這個 Redis 模塊, 我特別做了一些搜索, 發現網上清一色的全部是 本教程只適合 fpm 版本云云. 我個人認為這是一種迷思啊, 因為不論是用 php-fpm 還是 apache + php-mod 應該都和 php 的插件沒有太多關係吧. 所以雖然上面環境說的是 wordpress-apache , 用 wordpress-fpm 的朋友照著這個教程做也沒差.

構建 Docker Image

mkdir /tmp/build
cd /tmp/build
# 添加 Memcached 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN apt-get update
RUN apt-get install -y libz-dev libmemcached-dev && \
    pecl install memcached && \ 
    docker-php-ext-enable memcached && \
RUN rm -rf /tmp/pear && \
    apt-get clean
EOF
# 添加 Redis 支持
cat > /tmp/build/Dockerfile << EOF
FROM wordpress:latest
RUN pecl install -o -f redis && \
    docker-php-ext-enable redis
RUN rm -rf /tmp/pear
EOF

關於 Memcached vs Redis… 這個網上都可以搜到吧. 我的意見是, 兩者都能給一個 WordPress 小博客提供相當不錯的 Object Cache. 效能的話, Redis 略勝一籌, 但是要求專門開一個 Redis 容器. 而 Memcached 安裝好之後直接用就可以了. 所以還是根據服務器的配置來選吧.

docker build -t wordpress_extended .
閱讀全文 WordPress Docker 優化: 添加 PhpRedis、Memcached 支持

WordPress + Cloudflared + V2ray 異地組網並隱藏流量

目標

  • 異地組網, 遠程訪問家中環境
  • 結合海外 VPS 翻牆 ( 不在此篇討論 )
  • 使用 V2Ray TLS 加密流量
  • 將 TLS 流量隱藏在正常的 HTTPS 流量中達到混淆目的
  • 使用 Cloudflare 的內網穿透服務, 達到防探測目的 ( 服務器直接和 CF 溝通, 沒有端口暴露 )
  • 使用 Cloudflare 的 CDN 服務, 達到防牆、加速作用

如果你並不是想要做異地組網, 而是想要在 VPS 上跑 (Nginx/Caddy/Apache) + WP + V2Ray, 那麼你其實用不著這麼複雜. 你只需要看這篇文章就可以了.

(這篇博文主要是討論一個沒多少人做過的方案的可行性, 所以你會看到後面還有一大通廢話; 作為教程本文是不合格的, 如果想要尋找教程請出門右轉谷歌搜索. )

網絡拓墣示意圖
閱讀全文 WordPress + Cloudflared + V2ray 異地組網並隱藏流量

Docker 無縫切換鏡像

警告: 我只是一個正在學習 Docker 的中學生,
一切在生產環境嘗試本文所述技巧所導致的損失都是自作自受.

有的時候, Docker 鏡像更新了, 但是容器並沒有更新, 你想要用更新過後的鏡像來部署容器; 奈何你並沒有像 Portainer 這樣的 GUI 介面, 你早就不記得當初部署容器時執行的指令了, 碰到這種情況應該怎麼辦?

下文便以更新 Portainer 為例來演示簡單的無縫切換鏡像.

Pull 来的镜像

第一步當然是要先拉取更新的鏡像.

docker pull portainer/portainer-ce:latest

接著, 使用 rekcod 這個工具來獲取部署容器時輸入的命令.

$ docker run --rm -i -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

# 樹莓派玩家
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm

# 為該命令設別名
# alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod:3.0.0arm"

短暫刪除舊的容器, 然後部署上新的.

$ docker stop <container>
$ docker rm <container>
$ <執行 rekcod 得到的結果>

至此, 新的容器就部署好了, 而當機時間不會超過幾秒鐘👌

最後別忘了刪除掉舊的鏡像喔.

自 Build 的鏡像

假設當初用來 Build 鏡像的 Dockerfile 已經遺失, 可以用 dfimage 這個神器來從鏡像中提取 Dockerfile 用於構建.

$ docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage  <image>

# 為該命令設別名
# alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage "

恢復出來後就可以愉快的繼續玩耍啦~ 但是要注意, 很多時候不是恢復出來就可以用的, 因為涉及到 Reverse Engineering, 恢復出來的文件基本是和原來的 Dockerfile 不一樣的. 因此還是建議好好保存 Dockerfile.

Android5 – Termux

我有一支舊手機, 華為 TAG-AL00; 目前閒置無事可幹, 於是我便動起歪腦筋想要將其改造成一台服務器.
如果你的手機已 root, 你大可以安裝 Linux Deploy, 通過 chroot 技術來部署 Linux, 安裝更快也運行更高效.

下載 Termux

首先不得不提的是, 作為有中國社會主義特色的流氓企業, 華為早就 Ban 掉了大部分手機刷機的渠道. 而華為自己的系統又太坑爹, 而且根本沒有系統更新, 導致我想給他刷一個 LineageOS 的嘗試直接打水漂. 所以接下來的一切都是在蛋疼的 Android5 上完成的.

Termux 早在 2020.01.01 就宣布不再支持 Android5/6. 因為是安卓5的緣故, 我們只能下載古老一點的版本. 經過我實測, 不僅是 20 年年初的版本無法安裝, 19 年年末的幾個版本 (如 0.75) 也裝不起來. 所以我只好選擇了更加古老的 Termux 0.70, 可以在這個鏈接下載到.

基礎配置

首先得配置好軟件源, 倒不是翻牆的問題, 而是這個版本 Termux 自帶的軟件源已經失效. 沒有軟件源其他一切都是扯淡. 複製以下命令到手機中執行:

( 如果執行完出錯, 請清除數據或重裝, 然後僅執行 apt update, 便可挑過此步. )

sed -i '[email protected]^\(deb.*stable main\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable [email protected]' $PREFIX/etc/apt/sources.list
sed -i '[email protected]^\(deb.*games stable\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games [email protected]' $PREFIX/etc/apt/sources.list.d/game.list
sed -i '[email protected]^\(deb.*science stable\)[email protected]#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science [email protected]' $PREFIX/etc/apt/sources.list.d/science.list
pkg update -y

接下來的問題就是我不想要再在巴掌大的玻璃上戳來戳去了. 配置 SSH.

# 在手機上執行
apt install openssh -y
sshd # 開放 8022 端口
vi ~/.ssh/authorized_keys # 複製公鑰進去
ipconfig -a # 查看 ip 信息

# 在電腦上執行
ssh 192.168.10.116 -p 8022

安裝 Debian

使用 Debian 主要的原因, 除了它比較人性化且持續被維護, 是它的佔用非常之小, 完全可以運行在 “嵌入式設備上”. 在這一個老舊的手機上運行完全沒問題. 另外一個類似的嵌入式系統 Alpine 我不熟, 因此不想安裝.

# 資源來自 AnLinux
cd ~
apt install wget openssl-tool proot -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Debian/debian.sh
bash debian.sh

執行這個命令花費的時間不多, 所以不要被嚇到.
安裝完成之後, 只要輸入 ./debian-start.sh 便可以啟動 Debian 了!

定期批量刪除图片 EXIF

EXIF 元信息是一種圖片的附加信息, 一般在拍攝的時候就已經寫進圖片, 而圖片被上傳到 WordPress 之後也會留在裡面.我剛剛看完幾篇關於網絡安全的文章, 於是去查詢了一下維基百科看一看 EXIF 到底有沒有這麽恐怖. 很不幸, 確實有.

圖片可以暴露拍攝的時間和地點, 精確到 GPS 坐標

雖然我的網站並不是非常 Secure, 而我使用密碼的習慣也並不是非常 Solid, 但是修復已經注意到的漏洞, 減少攻擊面總是一件好事. 所以我就設置了一個 Cron, 定時刪除 WordPress 中儲存的所有圖片元信息.

怎麼做到

首先安裝 ExifTool, 一個以 Perl 寫成的開源圖片 EXIF 信息處理工具. 樹莓派是基於 Debian, 所以直接 apt 就可以了

apt update && apt install exiftool

然後定位到 /mnt/data/wordpress/ , 這裡是 WordPress 的根目錄. 我先執行一次清除試一下:

( 方法來自 這個討論串 )

$ find -type f -iname '*.jpg' -exec exiftool -all= {} \;

1 image files updated
1 image files updated
...

然而, 除了修改文件以外, 這個工具還產生了 *.jpg_original 格式的備份, 這些備份我並不需要.

find . -name "*.jpg_original" | xargs rm -rf   

寫進 Cron

明確了作法之後, 就可以將任務寫進 Cron 了.

touch /etc/cron.daily/rm_exif
cat > /etc/cron.daily/rm_exif <<EOF
#!/bin/sh
find /mnt/data/wordpress -type f -iname '*.jpg' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.jpg_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.jpeg' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.jpeg_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.png' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.png_original" | xargs rm -rf
find /mnt/data/wordpress -type f -iname '*.gif' -exec exiftool -all= {} \;
find /mnt/data/wordpress -name "*.gif_original" | xargs rm -rf
EOF
chmod +x /etc/cron.daily/rm_exif

完成了!

Cloudflare Tunnel Self WebHosting

由於不習慣用 Hugo 管理內容, 且文章漸漸多了起來, 我在家中的樹莓派上跑起了一個 WordPress. 一切都進行的很順利, 直到我發現發佈這個網站並不是我想像中的那麼容易.

這篇文章是一篇踩坑文, 就是說我會把我在設置中遇到的一切困難完整的紀錄在文章中, 因此你不應當將其當作教程來看. 如果需要教程的話, 我推薦 官方文檔 , 或者 土豆不好吃 的教程.

前言

失敗的嘗試

首先, 我的樹莓派跑在內網, 我需要在路由器上配置一個端口轉發. 借助 Openwrt 的圖像介面, 我輕鬆的完成了轉發.

其次, 我還需要一個公網 IP. 撥打了電信的電話, 我成功的要到了公網 IP.

因為 “維穩” 需求, 電信是封殺 80, 443, 等常見的端口的. 因此我將 443 端口轉發到了 2053 端口上. ( HTTPS 證書是 Cloudflare 的原站證書 ) 2053 端口確定可以訪問.

在然後, 每次撥號的時候 IP 都會改變, 我需要配置一個 DDNS. 為了解決這個問題, 我找到了一個 Cloudflare DDNS 腳本跑在 Openwrt 裡來動態更新我的 IP.

一個類似 ip.justin.education:2053 的地址為免有些太過不友好, 於是我使用 CF-Workers 反向代理網站到 proxy.justin-zhang.workers , 再將其 CNAME 到 justin.education.

如果是靜態頁面這個時候已經可以訪問了, 但是 WordPress 並不支持多個域名, 一直在執著的 301 重定向. 我不能配置其地址為 justin.education, 因為那樣我就沒辦法登錄後台: CF 反代不支持保存 Cookies.

我於是在 Openwrt 上用 Docker 跑了一個 Nginx 來反代網站, 放棄了簡單的端口轉發的方案. 這次成功了, 不過我遇到了一些圖片和CSS不能加載的問題. 安裝插件之後我配置了替換 Header 的規則, 總算是可以看了.

但是由於 CF Workers 的緣故, 評論還是不工作. 而且攻擊者只要知道了我的端口是 2053, 他可以全網搜索 ip.justin.education:2053 的證書來找到我的真是 ip; 這顯然太冒險.

這個方案失敗之後, 還剩下的就是使用 frp 內網穿透的方案. 然而我並不想用我的翻牆服務器來代理網站, 我經常換 ip, 而且不安全, 而且效率太低.

看起來我已經被逼到絕路了.

閱讀全文 Cloudflare Tunnel Self WebHosting