這是一張有關標題為 Ubuntu Server 24.04 安裝與設定指南 的圖片

Ubuntu Server 24.04 安裝與設定指南

學習如何安裝 Ubuntu,磁碟分割、網路設定與相關軟體安裝。

引言

最近伺服器出現一些硬體異常就順便剛好重灌 Linux 伺服器,本篇文章將介紹如何安裝 Ubuntu 作為自己的工作伺服器。

擁有一台 Linux 伺服器可以做很多事情,例如:

  • DNS 伺服器:用來阻擋廣告等相關應用。
  • 遠端開發:可隨時在信任的電腦上連線進行不中斷的開發。
  • 網頁伺服器:使用 Nginx 或 Apache 架設網站,並搭配資料庫服務。
  • 代理伺服器:實現翻牆或 NAT 穿透等行為。
  • 簡易檔案伺服器:不建議作為標準 NAS,資料維護成本高,建議使用現成的 NAS 方案。

根據個人需求來決定伺服器性能。例如,若要架設網站伺服器,需考慮防火牆等安全性因素。

市面上有一些現成的虛擬主機方案,通常相關服務都已經建立好,使用者只須要把檔案上傳即可。大多都是透過網頁端已經撰寫好的程式進行設定,操作起來非常輕鬆。會更傾向於完全不懂系統的新手。

需要進階一點的話,更多是虛擬私有伺服器(virtual private server,VPS),即放在一些信任的第三方供應商下的主機,這些主機上可能安裝了 Linux 或是 Windows,使用者可以透過 SSH 進行遠端連線、架設服務、或是遠端重置等操作。

常見的第三方供應商有:

  • 亞馬遜雲服務(Amazon Web Services,AWS)
  • Google 雲端平台(Google Cloud Platform,GCP)
  • 微軟 Azure(Microsoft Azure)
  • DigitalOcean
  • Vultr
  • Linode

這些服務依照使用量或按月度進行計費。費用大約為每小時 USD $0.15 或每月 USD $30。

選擇 Linux 發行版

由於我主要用於進行服務、網頁等架設與開發,因此選擇了 Ubuntu Server 24.04 進行安裝。然而,有些 SDK 要求開發環境使用 Ubuntu 18.04。在選擇發行版時,應根據個人的開發需求和環境來決定。

對比於不同的發行版,有像是 Ubuntu, Debian, Fedora, CentOS 等,以下是它們的特點:

發行版特點
Ubuntu適合新手,提供直觀的安裝過程和預設配置。
Ubuntu Server專為伺服器設計,無圖形界面,包含伺服器相關工具,支持遠程管理。
Debian穩定且安全,適合需要高度穩定性的工作環境。
Fedora前沿技術,適合希望體驗最新軟體的開發者。
CentOS企業級發行版,適合企業環境中的伺服器部署。

使用 Ubuntu 的主要原因是它對新手友好,可以避免遇到許多僅專業人士才會遇到的困難。此外,大多數工作在任何發行版上基本上都能正常進行開發。因此,在選擇發行版時,不需要過於糾結,只需選擇自己喜歡的即可。

當前文章為 2024/6,如果要開發 NVIDIA Optimized Deep Learning Framework,官方僅支援 Ubuntu 22.04,所以一定要確認想開發的框架是否支援你預期的 Linux 發行版本。

安裝 Ubuntu Server 24.04 時的磁碟分割

在安裝 Ubuntu Server 24.04 的過程中,介面主要依靠鍵盤進行互動,因此操作相對簡單。

安裝過程會遇到硬碟的磁碟分割,可以參考 Ubuntu 磁碟空間建議與策略

分區容量我的分割
/至少 15 GB30 GB, ext4
/boot250 MB ~ 1 GB500 MB, ext4
/var2 GB2 GB, ext4
swapRAM 的大小8 GB, ext4
/home剩餘硬碟空間151.34 GB, ext4
  1. / 是根分區,官方建議分配至少 15 GB。但由於日誌文件、臨時文件和安裝包等因素,根分區可能會逐漸變滿,導致系統操作出現部分錯誤。為防止此類情況發生,我這邊使用了兩倍的大小以降低錯誤的發生,主要還是建議定期清理根分區的文件,或者在空間不夠時調整根分區的大小。

  2. /boot 大多數的 UEFI 為 500 MB ~ 1 GB。

  3. 一般桌面系統使用時,可以將 /var 分配 1-2 GB 就足夠了。如果是伺服器系統,特別是會產生大量系統日誌(如網頁伺服器),建議 /var 分區分配 5 GB 或更大的空間,以防止日誌文件佔滿根目錄。使用 Docker 時,建議為 /var 分配至少 20 到 50 GB 的磁碟空間。如果一開始規劃的空間過小,可以修改 /etc/docker/daemon.json,將預設路徑 /var/lib/docker/ 更改到其他目錄,或是使用符號連結來解決。

  4. swap 使用與系統 RAM 約 1.5 ~ 2 倍的配置,例如 4 GB 的 RAM,可以將 SWAP 設為 6 GB。或是如果是 8 GB 以上的 RAM,則 SWAP 可以配置 1 倍即可。

  5. 其餘的空間都留給 /home,或者根據需要特別規劃其他分區。

系統設定與安裝

配置網路設定

⚠️ 進入系統沒有網路很難進行遠端操作,所以首要任務先確認網路是否正常。

1
2
# 顯示網路介面的詳細資訊
ip addr show

在輸出結果中,可以看到有線網路的裝置名稱為 enp8s0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.107/24 metric 100 brd 192.168.0.255 scope global dynamic enp8s0
       valid_lft 123456sec preferred_lft 123456sec
    inet6 fd3f:1234:5678:9abc:0011:22ff:fe33:4455/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 1688sec preferred_lft 1688sec
    inet6 fe80::0011:22ff:fe33:4455/64 scope link 
       valid_lft forever preferred_lft forever

從 Ubuntu 17.10 開始,網路管理工具統一使用 netplan。您可以使用 ls /etc/netplan 檢查配置檔,通常檔案名稱為 01-netcfg.yaml50-cloud-init.yaml。其中,01-netcfg.yaml 具有更高的配置優先權,若存在,將優先配置。

我的伺服器上僅有 50-cloud-init.yaml 配置檔案。使用 sudo nano /etc/netplan/50-cloud-init.yaml 來編輯該檔案,填入有線網路的裝置名稱,並設定為自動取得 IP 或固定 IP。在我的配置中,使用動態 IP 並設定 DNS 伺服器。

以下是設定範例,請根據自身網路環境進行配置:

1
2
3
4
5
6
7
8
9
network:
  version: 2
  ethernets:
    enp8s0:  # 需要根據自身的網卡名稱
      dhcp4: true
      nameservers:
        addresses:
          - 1.1.1.1
          - 8.8.8.8

這樣的設定會使網路裝置 enp8s0 透過 DHCP 自動取得 IP,並使用 1.1.1.1 和 8.8.8.8 作為 DNS 伺服器。

如果使用的是固定 IP,可以參照以下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
network:
  version: 2
  ethernets:
    enp0s31f6:  # 需要根據自身的網卡名稱
      dhcp4: no
      addresses:
        - 192.168.66.123/24     # 填入想要的固定 IP
      gateway4: 192.168.88.254  # 填入閘道
      nameservers:
          addresses: [1.1.1.1, 8.8.8.8]

確定配置檔案正確無誤後,執行以下指令應用設定:

1
sudo netplan apply

此指令會使 netplan 重新載入並應用新設定,確保網路配置生效。

接著,可以藉由 ping 指令檢查網路是否正常:

1
ping google.com

輸出如下:

1
2
3
PING google.com (173.194.174.101) 56(84) bytes of data.
64 bytes from td-in-f101.1e100.net (173.194.174.101): icmp_seq=1 ttl=103 time=17.7 ms
64 bytes from td-in-f101.1e100.net (173.194.174.101): icmp_seq=2 ttl=103 time=21.9 ms

透過以上步驟,可以確認網路連線是否正常。

設定系統的時間與日期

更改為 Asia/Taipei

1
sudo timedatectl set-timezone Asia/Taipei

設定中文語系

編輯 locale 語言環境文件

1
sudo nano /etc/default/locale

在裡面新增以下內容後,儲存離開

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
LANG="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"

執行以下指令以更新語言配置:

1
2
3
# 產生繁體中文(台灣)的語言環境文件並更新
sudo locale-gen zh_TW.UTF-8
sudo update-locale

確保系統的軟體和套件都是最新的

1
2
# 更新套件清單後,升級已安裝的套件。
sudo apt update && sudo apt upgrade

安裝 Tailscale

如果有需要在外存取此電腦,強烈建議安裝而不是直接將伺服器暴露於整個網際網路中。

詳細的安裝可以參考:使用 Tailscale 輕鬆建立安全且私密的通道

1
2
3
4
5
# 安裝
curl -fsSL https://tailscale.com/install.sh | sh

# 啟動伺服器
sudo tailscale up

此時會跳出網址,使用手機或是第三方裝置前往該網址並登入。

Linux 就會自動取得 Token,加入 tailnet 個人內網中。

自己在安裝 Tailscale 後有遇到網卡名稱跑掉,或是 DNS 被 Tailscale 搶走而導致 ping 不出去的問題。

安裝 Tailscale 後,務必要重新開機檢查是否能夠正常上網。如果有需要再更新網路配置檔。

配置 SSH

可參考使用SSH 金鑰進行無密碼遠端連線

安裝 Net tools

Net-tools 可以提供一系列網絡管理和故障排除工具,建議安裝。不過部分指令已經被更現代的工具(如 ip 命令)取代。

安裝網絡管理和故障排除工具:

1
sudo apt install net-tools

安裝建置工具包

部分開發工具依賴以下工具,建議安裝以具備基礎的建置環境。

1
sudo apt install build-essential

設定 Ubuntu Pro 安全性

啟動 Ubuntu Pro 可以更加即時修正系統漏洞,提升系統的安全性和穩定性。

首先在 Ubuntu 官網上註冊並獲取一個 Ubuntu Pro 免費訂閱。可以在 Ubuntu Pro 頁面上進行註冊。

註冊後,透過sudo pro attach <YOUR_TOKEN> Ubuntu Pro 訂閱:

1
sudo pro attach YGBDmwR6Y2S

輸出如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Enabling Ubuntu Pro: ESM Apps
Ubuntu Pro: ESM Apps enabled
Enabling Ubuntu Pro: ESM Infra
Ubuntu Pro: ESM Infra enabled
Enabling Livepatch
Livepatch enabled
This machine is now attached to 'Ubuntu Pro - free personal subscription'

SERVICE          ENTITLED  STATUS       DESCRIPTION
anbox-cloud      yes       disabled     Scalable Android in the cloud
esm-apps         yes       enabled      Expanded Security Maintenance for Applications
esm-infra        yes       enabled      Expanded Security Maintenance for Infrastructure
landscape        yes       disabled     Management and administration tool for Ubuntu
livepatch        yes       enabled      Canonical Livepatch service
realtime-kernel* yes       disabled     Ubuntu kernel with PREEMPT_RT patches integrated

 * Service has variants

NOTICES
Operation in progress: pro attach

For a list of all Ubuntu Pro services and variants, run 'pro status --all'
Enable services with: pro enable <service>

     Account: xxxxx@xxx.com
Subscription: Ubuntu Pro - free personal subscription

安裝 ble.sh

ble.sh 是一個為 Bash 提供即時語法高亮和更強大功能(如自動完成等)的腳本。

1
2
3
4
# 透過 git 複製 ble.sh 後,編譯並安裝
git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
make -C ble.sh install PREFIX=~/.local
echo 'source ~/.local/share/blesh/ble.sh' >> ~/.bashrc

安裝 Homebrew

Homebrew 為 macOS 提供了一種更快速的軟體包安裝方式,能夠方便地安裝、更新和管理軟體包。同樣,它也支援 Ubuntu 等 Linux 系統。

1
2
3
4
5
6
7
# 安裝 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# ==> Next steps:
# - Run these two commands in your terminal to add Homebrew to your PATH:
#     (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/使用者/.bashrc
#     eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

安裝後,會要求在執行額外兩行指令,使其 Bash 自動載入 Homebrew 的安裝目錄。

1
2
3
# 設定每次打開 Bash 都會載入 homebrew 的安裝路徑
(echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/使用者/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

安裝 fzf

fzf 是一個命令行模糊查找工具,可以用來高效地從文件、命令歷史、Git 提交記錄等中進行模糊搜索。極大地提高開發者在命令行中的工作效率。

1
2
3
4
5
# 使用 Homebrew 安裝
brew install fzf

# 未來更新可透過
brew update; brew upgrade fzf

安裝 Node.js

JavaScript 執行環境,有需要開發前後端再進行安裝。

官網的安裝教學寫得非常清楚。建議使用 nvm 進行安裝。

1
2
3
4
5
6
7
8
# 安裝 nvm (Node 版本管理器)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/
# 下載並安裝 Node.js(可能需要重新啟動終端)
nvm install 20
# 驗證正確的 Node.js 版本是否在環境中
node -v # 應顯示 `v20.14.0`
# 驗證正確的 NPM 版本是否在環境中
npm -v # 應顯示 `10.7.0`

安裝 tldr

tldr 提供簡明易懂的命令行工具說明和實用範例,比起 Linux 下的 man 指令更加直觀。

1
2
3
4
5
brew install tlrc

# 或是有安裝 Node.js,可以用 npm 進行安裝。
# npm install -g tldr
# tldr --update

使用方法只要 tldr 即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
tldr zip

  zip

  Package and compress (archive) files into a Zip archive.
  See also: unzip.
  More information: https://manned.org/zip.

  - Add files/directories to a specific archive:
    zip -r path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ...

  - Remove files/directories from a specific archive:
    zip --delete path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ...

  - Archive files/directories e[x]cluding specified ones:
    zip path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ... --exclude path/to/excluded_files_or_directories

  - Archive files/directories with a specific compression level (0 - the lowest, 9 - the highest):
    zip -r -0..9 path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ...

  - Create an encrypted archive with a specific password:
    zip -r --encrypt path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ...

  - Archive files/directories to a multi-part [s]plit Zip archive (e.g. 3 GB parts):
    zip -r -s 3g path/to/compressed.zip path/to/file_or_directory1 path/to/file_or_directory2 ...

  - Print a specific archive contents:
    zip -sf path/to/compressed.zip


See also: unzip

更新 Git 到最新版本

Git 不一定要更新到最新版本,部分工具版本太舊,需要配合舊版的 Git,如果安裝最新版的 Git 可能會遇到版本相容的問題。

git-core/ppa 是一個 Personal Package Archive (PPA),由 Git 社區維護,提供 Git 軟體的最新版本。

1
2
3
4
# 新增 PPA
sudo add-apt-repository ppa:git-core/ppa
# Git 更新到最新版本
sudo apt update && sudo apt upgrade

設定 Git 使用者

1
2
git config --global user.name "USER"
git config --global user.email "USER_MAIL"

結論

以上基本環境配置好後就可以快樂的進行遠端開發了🥳。

參考文獻

  1. 什麼是 VPS?
  2. Ubuntu Server documentation
  3. DiskSpace - Community Help Wiki
  4. Ubuntu Bionic: Netplan
  5. ble.sh
  6. fzf
  7. tldr-pages/tldr
  8. 初次設定 Git
  9. Use UFW to lock down an Ubuntu server
主題 Stack 由 Jimmy 設計