# Mac mini (M4) LAN server Build Process
## Mac mini advantages

## LAN server materials
本文主要設定為家中伺服器環境,不考慮上到公網,如有此需求可以考慮port forward、DMZ等方式進行,本文希望的是家人能夠在家中有備份照片、檔案、手機雲端備份等需求,並且沒有想要追求極速而是穩定的資料備份的使用,且在這個場景外還可以進行其他日常使用的伺服器

## LAN server architecture
## Implement
### init disk
如果是購買新的硬碟接上後會自動跳出無法識別,直接選取開始初始化即可,跳出畫面後如下圖進行清除並選取APFS作為系統使用

備註:如果想把家中的舊硬碟要拿出來使用的話需要先檢查是否使用到MBR,而不是GPT,記得一定要改成GPT才能用APFS,不然mac會完全讀取不到,可以使用windows先將硬碟初始化為GPT
參考資料:
[Windows GPT](https://learn.microsoft.com/zh-tw/windows-server/storage/disk-management/change-an-mbr-disk-into-a-gpt-disk)
[Apple 官網](https://support.apple.com/zh-tw/guide/disk-utility/dsku365552c7/mac)
### Time machine setup
初始化硬碟過後就可以進到系統設定中找到時光機選項加入硬碟到時光機備份中
(下圖為Sequoia MacOS 15.1進入畫面)

家中如果有多個Macbook等設備,也可以設定多個時光機作為備份硬碟,這邊提供設定方法
1.新增時光機硬碟加入後再將它移除,讓硬碟轉為Time machine

2.再到[一般]->[共享]->開啟檔案共享
3.點擊系統資訊圖

4.加入時光機後對目標目錄右鍵並點擊進階選項

5.勾選作為時光機對象,才能使目標mac讀到時光機

6.選取完成後,就可以到想要備份的mac上加入時光機,使用macmini的帳號密碼(mac使用者名稱 非apple id,系統使用者名稱及密碼)進行登入就可以開始進行備份了
再來就可以設定想要備份的時間點,這邊可以參考下方連結使用TimeMachine editor進行想要的時間排程
**注意事項**
如果有舊有的硬碟要將內容資料進行移動,且格式為macos,這樣要換成APFS會非常麻煩,且內容資料可能無法讓Drive讀到舊有資料,建議做法為將原本的資料保留未來確定沒有重要資料需要保留的話再將它earse掉另作他用,不建議進行資料的移動新的drive並不好讀到
參考資料:
[Apple 官網](https://support.apple.com/zh-tw/104984)
[TimeMachineEditor](https://tclementdev.com/timemachineeditor/)
### How to connect remotely to the server?
架構圖
```
[中華電信光纖線]
│
[H660WM 小烏龜]
│ (PPPoE撥號 #1 → 公網IP A)
│
├── PC(用小烏龜的網路上網)
│
└── [ASUS AX4200]
│(PPPoE撥號 #2 → 公網IP B)
└── 手機 / NAS / 家用設備
```
#### Modem
本文將以中華電信為例並且小烏龜會是DASAN H660WM
帳號密碼網路上可以找得到,我測試有兩種
1. 帳號密碼皆為user,但這個模式能看到的內容有限
2. 帳號cht 密碼60wmXXXX (XXXX代表mac號碼後四碼) 這個可以進去真的工程模式
再來其實主要就去把wifi功能去關閉即可

剩下功能都不需要動,留著pppoe、留著DHCP, 開著也沒有多少占用,除非有很大的占用又高溫再來考慮此事

#### Router
在router上也做PPPoE,輸入帳號密碼,忘記直接打客服問帳號,密碼部分在中華電信官網上可以做設定,我的帳號是XXXXXX@hinet.net (XXXXXX是HN後面的數字)
#### Notes
如果不是追求到極致的人可以考慮參考我這篇的內容,讓小烏龜跟router都做撥號,這樣可以省得後續要排錯方便,另外會需要在Router做撥號的原因是因為不考慮使用固定IP進行上網,所以要在Router做撥號避免雙重NAT,這樣才能夠開啟DDNS搭配動態IP。
#### VPN設定
本文並不考慮使用固定IP做遠端連線,本文選用動態IP+DDNS+VPN的形式,架構如下
```
外網(手機/筆電)
↓
OpenVPN(加密通道)
↓
ASUS AX4200
↓
內網(Server)— SMB
```
所以主要就根據[ASUS官網教學](https://www.asus.com/tw/support/faq/1008713/)去開啟openvpn
再來就是在外網去連線到VPN做測試,也可以參考[ASUS官網教學](https://www.asus.com/tw/support/faq/1004471/)也可以自行查詢openvpn使用方法
#### SMB server
本文會使用APFS作為檔案系統(意即windows無法直接接入),關於smb server設定也可以直接參考[官網](https://support.apple.com/zh-tw/guide/mac-help/mh14107/mac)做設定,本文也不多贅述[參考2](http://mrmad.com.tw/macos-mount-smbfs)
#### Use iphone to test
在openvpn頁面中點擊選定的vpn設定檔

連線完成

再來找到app - 檔案

選擇連線伺服器

輸入smb://

完成連線
以上就完成外網vpn連線進到家裡server的方法,這樣好處就會比起暴露ip在公網上來得更為安全一些,壞處就是還需要經過vpn一層才能回到家中取檔案
### 後記
要將網路放到公網上就會有一定的風險,所以建議檔案都要做備份,最好還是將mac上的硬碟放在A,並使用時光機用硬碟B對硬碟A做備份,這樣就會達到類似RAID1的概念,這樣珍貴的照片也不會被攻擊而消失,也不會因硬碟壞掉而無法讀取,也可以隨時還原,這樣架構上就會算是比較安全一些些,也祝大家折騰得開心~
## Related service
### Terminal setup
用過Linux都知道apt-get,在mac上類似的工具就是brew,指令如下
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
測試是否有安裝成功
```
brew -v
```
如果出現`zsh: command not found: brew`大概率就是環境變數沒設定到
```
echo "export PATH=$PATH:/opt/homebrew/bin" >> ~/.zprofile
```
再測試一次就會出現了
Mac預設terminal應該會是使用zsh,個人喜歡這個加上一些花里胡俏的顯示功能來作為日常敲指令的使用,以下說明一下個人會使用的方法
首先先安裝zplug來部署相關的主題
```
brew install git zplug gawk
```
安裝之後再編寫一下自己的zshrc以下附上我的檔案
```
export ZPLUG_HOME=$(brew --prefix)/opt/zplug
source $ZPLUG_HOME/init.zsh
if [ -f ${HOME}/.zplug/init.zsh ]; then
source ${HOME}/.zplug/init.zsh
fi
export DEFAULT_USER=`whoami`
POWERLEVEL9K_MODE='nerdfont-complete'
POWERLEVEL9K_COLOR_SCHEME='light'
POWERLEVEL9K_TIME_BACKGROUND='springgreen4'
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon virtualenv dir dir_writable vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(time)
zplug "bhilburn/powerlevel9k", use:powerlevel9k.zsh-theme
# 排序安裝
zplug "zsh-users/zsh-syntax-highlighting", defer:2
# 從 Github 安裝
zplug "zsh-users/zsh-history-substring-search"
# 從 on-my-zsh 安裝
zplug "plugins/git", from:oh-my-zsh
# 依作業系統載入
zplug "lib/clipboard", from:oh-my-zsh, if:"[[ $OSTYPE == *darwin* ]]"
#docker compose
zplug "plugins/docker-compose", from:oh-my-zsh
zplug "b4b4r07/enhancd", use:init.sh
zplug "tarrasch/zsh-bd", at:3724233, frozen:1
zplug "jhawthorn/fzy", \
as:command, \
rename-to:fzy, \
hook-build:"
{
make
sudo make install
} &>/dev/null
"
#zplug "junegunn/fzf-bin", as:command, from:gh-r, rename-to:fzf
# ついでに tmux 用の拡張も入れるといい
zplug "junegunn/fzf", as:command, use:bin/fzf-tmux
# 自動補齊
zplug 'zsh-users/zsh-autosuggestions'
#alias
PATH="/usr/local/bin/python3:${PATH}"
export PATH
alias python="python3"
alias g++="g++ -std=c++11"
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
#controls
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
```
簡單說明一下
```
source $ZPLUG_HOME/init.zsh
if [ -f ${HOME}/.zplug/init.zsh ]; then
source ${HOME}/.zplug/init.zsh
fi
```
一定要存在作為啟動zplug的部分
安裝powerlevel9K,個人因為從big sur(intel 晶片時代用到現在已習慣),建議讀者可以使用10K
LEFT、RIGHT PROMPT可以修改成個人喜歡的樣式,個人喜歡如下圖的風格

剩下就是一些補全工具,相關功能相當多可以自行選用
注意沒有辦法顯示圖示的話代表字型沒有下載到[Font](https://formulae.brew.sh/cask/font-sauce-code-pro-nerd-font)再來就到terminal的設定中將字型替換成sauce code front就可以正常顯示了
參考資料:
[Brew](https://brew.sh/zh-tw/)
## System app recommend
### iStatus
可以用這個[Stats](https://github.com/exelban/stats)
```brew install stats```
就可以進行監控整個系統的cpu、ram、disk、network,方便進行系統debug(?
### Multi-user
首先要推薦使用apple官方有touch id 巧控鍵盤,不用打密碼就是...爽!
再來就是在設定中[使用者與群組]選取加入使用者,創建後切換到新創建的使用者就可以進行登入
有touch id 的巧控鍵盤就可以實現不用打密碼並且透過touch id 進行切換使用者了,不過做法會是先將指紋放上後放穩後再按下,不然會變成鎖定畫面,在鎖定畫面下系統無法進行指紋切換,就會變成無法接上,這點要看看後續mac os 升級會不會修改了
### SSH setup
[一般]->[共享]->[遠端登入]選取開啟
按下右方的i,會顯示ssh的系統名稱,用那個作為登入方式即可
### VNC server
[一般]->[共享]->[遠端管理]選取開啟
就可以在別的電腦上使用viewer去看啦