from Pixabayfrom Pixabay

2023/12/25:新增「有了 yadm 的環境設定流程」章節。

最近為了升級 Ubuntu 版本,重建了工作上的 Linux VM(直接升級會怕),所以又得重新設定一次開發環境。

軟體界有一句名言叫「吃自己的狗糧」,通常指的是自己開發的工具,自己先使用。而每次重設 Linux 開發環境時,我也都在吃自己的狗糧——看自己寫的教學文章。

不誇張,就是一篇篇看,把指令複製貼上,一步一步將環境設定到位。

做了好幾次以後,這次不禁想到:「咦?我乾脆整理成一篇就好了啊!


本文主旨

沒錯!本篇講述的是:當我拿到一個全新的 Linux VM,為了開發方便,一定會安裝、設定的工具——主要基於「Python 後端」角度。

內容參考自以往數篇文章,且只關注在建立開發環境的必要步驟,並適時給出一些額外的提醒與建議。

如此一來,我們就不必在文章間穿梭,力求節省時間、一步到位!

本文是以 Ubuntu 20.04 實作,如果你用的是別的 Linux 發行版,肯定會有一些差別,這部分還請留意。

用 yadm 管理 dotfiles

Dofiles 是指「設定檔」,例如 .zshrc.vimrc.gitconfig 等等。

使用 zinit、Powerlevel10k、pyenv 之前,都要先設定.zshrc

如果你有使用工具來管理你的 dotfiles(包括.zshrc.zprofile),那麼以下所有關於.zshrc內容的新增、修改,都可以跳過——直接透過工具同步即可。

如果你還沒接觸過任何 dotfiles 管理工具,那麼我推薦 yadm,可參考文章:


有了 yadm 的環境設定流程

2023/12/25新增。

透過 yadm 與你的 dotfiles 遠端倉庫,整個流程略有不同粗體字部分):

  1. 設定 VM 與 GitHub 連線。
  2. 安裝 yadm。
  3. yadm clone <遠端 dofiles 倉庫>此時所有同步的 dotfile 都會有了——且已經是設定好的內容。
  4. 一樣安裝設定 zsh,但不必安裝 zinit。
  5. 重新 ssh 連線或重啟 shell,就會開始依.zshrc安裝 zinit + zsh 套件。
  6. 安裝 pyenv,但不必修改.zshrc
  7. 安裝 Poetry,但不必修改.zshrc

整體而言,使用 yadm,可以相當程度簡化設定流程


前言到此,讓我們開始吧!

一、設定 SSH 連線

這部分我並沒有寫成文章,因為網路上的資訊已經足夠多,而且步驟也不算太複雜。

對我而言,主要為 VM 設定下面兩種 SSH 連線:

  1. 本機電腦與遠端 VM 的連線。
  2. 遠端 VM 與 GitHub 的連線。(或其它 Git 服務)

至於具體要怎麼做,還請自行 Google。

二、設定 zsh、zinit、Powerlevel10k

參考原文:

安裝 zsh

1
2
3
sudo apt-get update;
sudo apt-get upgrade -y;
sudo apt-get install -y zsh;

將 zsh 設為登入時的「預設」shell

1
sudo usermod -s /bin/zsh $USER

提醒:請務必先確認 zsh 本身的安裝、設定沒問題,可以正常使用。否則登入後可能直接卡住,需要透過別的 admin 帳號來處理。

新增.zshrc.zprofile

2023/12/25更新:有安裝 yadm 且在遠端已經有自己的 dotfiles 倉庫的話,直接yadm clone <你的倉庫>即可。clone 完成後,所有同步的檔案就會自動出現在你的家目錄下。不必再新增、設定.zshrc.zprofile

1
2
touch .zshrc
touch .zprofile

安裝 zinit 套件管理器

有 yadm 同步可以跳過,不必安裝。

1
bash -c "$(curl --fail --show-error --silent --location https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"

設定 zinit 套件

安裝完後,zinit 已經自動在.zshrc新增部分內容,請接著繼續新增下列內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# zsh 套件四天王
zinit light zsh-users/zsh-completions
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-history-substring-search
zinit light zdharma-continuum/fast-syntax-highlighting

# Oh My Zsh 功能
zinit snippet OMZ::lib/completion.zsh
zinit snippet OMZ::lib/history.zsh
zinit snippet OMZ::lib/key-bindings.zsh
zinit snippet OMZ::lib/theme-and-appearance.zsh

# key binding
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey ',' autosuggest-accept

# 其他
zinit load djui/alias-tips

存檔後,重啟 shell。(如果要一併安裝 Powerlevel10k,可先不用重啟。)

安裝 Powerlevel10k 佈景主題

非常簡單,只要在 zinit 的設定內容後面,再加上這行即可:

1
2
# Powerlevel10k
zinit ice depth=1; zinit light romkatv/powerlevel10k

存檔,重啟 shell,此時就會開始安裝 Powerlevel10k,隨即會進入「外觀樣式選擇與設定」畫面。(有 yadm 同步.p10k.zsh可以跳過,不必設定。

之後如果要重新設定,可使用指令p10k configure


三、設定 pyenv

參考原文:Ubuntu 安裝使用 pyenv + pyenv-virtualenv

安裝 dependency

1
2
sudo apt-get update;
sudo apt-get install -y --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

安裝 pyenv

1
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

設定 pyenv

這裡直接採用 pyenv 2.3.0 以後的設定方式,已大幅簡化操作——變得更加無腦、易用!——且 zsh 或 bash 在設定上不再有差別

一律在.zshrc.bashrc中,新增下列內容:(有 yadm 同步可以跳過)

1
2
3
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

pyenv 安裝 Python 3.10.10 並設為全域

1
pyenv install 3.10.10

通常需要等待好一段時間,安裝才會完成。🐸

接著透過 pyenv,將系統全域的 Python 設定為 3.10.10(或其他版本):

1
pyenv global 3.10.10

不安裝 pyenv-virtualenv

因為 Poetry 自帶了虛擬環境管理功能,容易和 pyenv-virtualenv 疊床架屋,徒增管理上的混淆,所以我現在一律只用 Poetry + venv 來管理 Python 虛擬環境

這也是我目前覺得最簡潔的做法。

相關文章:Poetry + pyenv 教學:常用指令與注意事項


四、設定 Poetry

參考原文:Python 套件管理器——Poetry 完全入門指南

安裝 Poetry

1
curl -sSL https://install.python-poetry.org | python3 -

新增poetry指令至 PATH

.zshrc新增以下內容:(有 yadm 同步可以跳過)

1
export PATH=$PATH:$HOME/.local/bin

修改config,改用.venv虛擬環境

預設為false,Poetry 會在獨立目錄下建立虛擬環境,而名稱很冗長!改成true以後,則直接在專案中建立虛擬環境,且名稱固定為.venv

1
poetry config virtualenvs.in-project true

五、安裝 Docker

安裝細節常常隨著 Docker 版本的更新而有所變動,建議直接看官方文件即可。

安裝完成後,為了不必每次都要sudo才能執行 Docker 相關指令,要把當前使用者加入 Docker 群組:

1
sudo usermod -aG docker $USER

附帶一提,新版的docker compose改以 plugin 的形式安裝,變成 Docker client 的子命令,而不再採用舊版的docker-compose