現代軟體開發高度依賴穩定的實驗環境。本提供一個建置 Linux 開發實驗室的完整流程,從硬體選型開始,涵蓋網路組態、Proxmox 虛擬環境設定、LAMP 堆積疊佈署、容器化應用與自動化佈署,最後延伸至伺服器管理與 Git 版本控制,旨在協助開發者快速建立一個功能完善且易於管理的開發環境,提升開發效率。中包含實務操作步驟、程式碼範例以及常見問題的解決方案,適合不同經驗程度的開發者參考。
建構現代軟體開發的Linux實驗室:實務
硬體準備:開發Linux實驗室的基礎
在開始建立Linux實驗室之前,首先需要考慮的是硬體的選擇。合適的硬體組態不僅能提供穩定的實驗環境,還能滿足不同軟體開發和測試的需求。
使用新裝置搭建實驗室
選擇新裝置時,需要考慮以下幾個關鍵因素:
- CPU核心數的考量:CPU的核心數量直接影響到虛擬機器的執行效率。建議選擇至少四核心的處理器,以滿足同時執行多個虛擬機器的需求。
- 記憶體考量:足夠的記憶體是確保虛擬機器平穩執行的關鍵。建議至少組態16GB的記憶體,如果需要執行更多的虛擬機器或進行複雜的編譯工作,則建議組態32GB或以上的記憶體。
- 儲存考量:快速且足夠大的儲存空間對於提升系統效能至關重要。建議使用SSD(固態硬碟硬碟)作為主要的儲存裝置,以提高資料讀取和寫入的速度。
利用舊PC和筆電搭建Linux實驗室
除了使用新裝置外,也可以考慮利用舊PC和筆電來搭建Linux實驗室。這不僅節省成本,還能充分利用現有資源。
- 舊PC和筆電可以安裝輕量級的Linux發行版,如Lubuntu或Xubuntu,以提升系統效能。
- 這些裝置可以用於搭建簡單的伺服器、進行網路測試或作為備份節點。
Raspberry Pi與物聯網裝置
Raspberry Pi等單板電腦和物聯網裝置也是搭建Linux實驗室的好選擇。它們體積小、功耗低,非常適合用於學習和實驗各種Linux相關技術。
- Raspberry Pi可以用於搭建Kubernetes叢集、進行容器化實驗或作為IoT裝置的控制中心。
- 這些裝置還可以用於學習嵌入式系統開發和物聯網安全等知識。
網路建設:連線你的Linux實驗室
除了硬體組態外,網路建設也是搭建Linux實驗室的重要一環。一個穩定且高效的網路環境對於進行各種軟體開發和測試工作至關重要。
交換器的選擇:Managed vs. Unmanaged
在選擇交換器時,需要考慮是使用Managed還是Unmanaged交換器。
- Unmanaged交換器簡單易用,適合小型網路環境。它們通常不支援VLAN劃分、QoS等進階功能。
- Managed交換器則提供了更多的組態選項和進階功能,如VLAN劃分、QoS、埠映象等,適合較為複雜的網路環境。
使用ISP路由器
在許多情況下,可以利用ISP提供的路由器作為網路閘道。這樣可以簡化網路組態,並利用路由器內建的防火牆功能來提高網路安全性。
佈署Managed和Unmanaged交換器
根據實際需求,可以混合佈署Managed和Unmanaged交換器。
- Managed交換器可以用於核心網路,實作更精細的流量控制和網路管理。
- Unmanaged交換器則可以用於接入層,簡化終端裝置的連線。
使用網路橋接和繫結提升連線性
為了提升網路連線性和可靠性,可以使用網路橋接和繫結技術。
- 網路橋接可以將多個網路介面虛擬化為一個邏輯介面,實作網路流量的負載平衡和備援。
- 網路繫結則可以將多個實體網路介面繫結在一起,提高網路頻寬並實作容錯移轉。
避免常見硬體問題的技巧
在搭建Linux實驗室的過程中,還需要注意一些常見的硬體問題,以確保實驗室的穩定執行。
- 預留IP位址池:提前規劃好IP位址池,避免日後因IP位址不足而導致的問題。
- 測試和記錄組態:對所有的硬體和網路組態進行充分的測試,並詳細記錄組態過程,以便日後維護和故障排除。
第二章:虛擬環境的設定
關於Proxmox虛擬化環境(PVE)
Proxmox VE(PVE)是一種開源的虛擬化管理平台,能夠集中管理虛擬機器(VM)和容器(LXC)。它根據KVM虛擬化和容器技術,提供了一個根據Web的管理介面,使得佈署和管理虛擬化環境變得更加容易。
設定Proxmox
安裝Proxmox的第一步是下載最新的ISO檔案並建立一個可啟動的USB驅動器。將ISO燒錄到USB後,重啟電腦並從USB啟動,按照安裝精靈的指示完成安裝。
安裝後組態
安裝完成後,需要進行一些基本組態,例如設定網路、管理儲存和建立第一個虛擬機器。
網路設定
對於單網路卡和雙網路卡的設定,PVE都提供了靈活的組態選項。單網路卡設定需要正確組態VLAN-aware,以支援多個VLAN透過單一物理網路卡。雙網路卡設定則可以提供更高的冗餘和負載平衡能力。
單網路卡網路設定:VLAN-Aware
- 編輯
/etc/network/interfaces檔案。 - 新增VLAN-aware組態。
- 重啟網路服務。
雙網路卡網路設定:VLAN-Aware
- 編輯
/etc/network/interfaces檔案。 - 組態網路卡 bond 或 team。
- 設定VLAN-aware。
額外的儲存考慮
選擇適合的儲存解決方案對於虛擬化環境至關重要。PVE支援多種儲存型別,包括本地儲存、NFS、iSCSI等。
虛擬機器佈署
在PVE中佈署虛擬機器非常簡單,可以透過克隆和範本快速複製虛擬機器。
佈署第一個VM
- 登入PVE管理介面。
- 建立新的虛擬機器。
- 組態硬體和作業系統。
使用範本容器
PVE支援LXC容器技術,可以快速佈署應用。
- 下載LXC範本。
- 建立LXC容器。
- 組態網路和儲存。
KVM設定
KVM是Linux內核的一部分,提供硬體虛擬化支援。在AlmaLinux、Fedora和openSUSE上設定KVM涉及安裝必要的套件和組態橋接網路。
檢查虛擬化支援
#### 內容解密:
此命令檢查CPU是否支援虛擬化技術(VT-x 或 AMD-V),輸出結果若包含vmx或svm,則表示支援虛擬化。
egrep -c '(vmx|svm)' /proc/cpuinfo
安裝KVM及相關工具
#### 內容解密:
此命令安裝KVM及其管理工具,適用於根據RPM的系統(如AlmaLinux和Fedora)。
sudo dnf install @virtualization
網路橋接設定
橋接網路允許虛擬機器直接存取外部網路。
在AlmaLinux、Fedora和openSUSE上設定橋接網路
- 編輯網路組態檔案。
- 新增橋接組態。
- 重啟網路服務。
命令列佈署
PVE提供了豐富的命令列工具,如qm命令用於管理虛擬機器,virt-install用於建立新的KVM虛擬機器。
使用Proxmox qm命令
#### 內容解密:
此命令列出所有虛擬機器,方便管理和查詢。
qm list
使用KVM virt-install命令
#### 內容解密:
此命令建立一個新的KVM虛擬機器,指定記憶體、CPU和磁碟大小。
virt-install --name=example --ram=2048 --vcpus=2 --disk size=20
建置 LAMP 堆積疊:Apache 與 PHP
為何選擇 LAMP?
LAMP(Linux、Apache、MySQL、PHP)是一種流行的開源網頁伺服器架構,能夠提供穩定且高效的網頁服務。LAMP 的每個元件都扮演著重要的角色:Linux 提供作業系統基礎,Apache 負責處理 HTTP 請求,MySQL(或其分支 MariaDB)用於資料函式倉管理,而 PHP 則是一種強大的伺服器端指令碼語言。
設定網頁伺服器虛擬機器並安裝必要的套件
首先,我們需要設定一個虛擬機器來執行我們的網頁伺服器,並在其上安裝必要的套件。這包括更新系統、安裝 Apache 和 PHP,以及進行一些基本的安全設定。
# 更新系統
sudo apt update && sudo apt upgrade -y
# 安裝 Apache 和 PHP
sudo apt install apache2 php libapache2-mod-php -y
# 啟動 Apache 服務
sudo systemctl start apache2
# 設定 Apache 開機自動啟動
sudo systemctl enable apache2
內容解密:
sudo apt update && sudo apt upgrade -y:更新系統套件列表並升級所有可升級的套件。sudo apt install apache2 php libapache2-mod-php -y:安裝 Apache 網頁伺服器、PHP 直譯器以及 Apache 的 PHP 模組。sudo systemctl start apache2:啟動 Apache 服務。sudo systemctl enable apache2:設定 Apache 開機自動啟動。
更新 DNS 設定以新增網站
為了讓我們的網站能夠被公開存取,我們需要在 DNS 中新增相應的記錄。這通常涉及到在我們的網域名稱註冊商的管理面板中進行操作。
安裝核心 LAMP 套件
除了 Apache 和 PHP,我們還需要安裝資料函式庫服務。這裡我們選擇 MariaDB 作為 MySQL 的替代品。
# 安裝 MariaDB
sudo apt install mariadb-server -y
# 啟動 MariaDB 服務
sudo systemctl start mariadb
# 設定 MariaDB 開機自動啟動
sudo systemctl enable mariadb
內容解密:
sudo apt install mariadb-server -y:安裝 MariaDB 資料函式庫伺服器。sudo systemctl start mariadb:啟動 MariaDB 服務。sudo systemctl enable mariadb:設定 MariaDB 開機自動啟動。
建立兩個網頁伺服器目錄
為了測試我們的設定,我們將建立兩個不同的網站。
# 建立網站目錄
sudo mkdir -p /var/www/site1 /var/www/site2
# 設定目錄許可權
sudo chown -R www-data:www-data /var/www/site1 /var/www/site2
內容解密:
sudo mkdir -p /var/www/site1 /var/www/site2:建立兩個網站的根目錄。sudo chown -R www-data:www-data /var/www/site1 /var/www/site2:將目錄所有權變更為 Apache 使用者,以便 Apache 可以讀取和寫入這些目錄。
在 Apache 中定義兩個不同的網站
我們需要在 Apache 中建立虛擬主機設定檔來服務多個網站。
# 建立虛擬主機設定檔
sudo nano /etc/apache2/sites-available/site1.conf
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
內容解密:
<VirtualHost *:80>:定義一個虛擬主機,監聽 80 埠。ServerName和ServerAlias:指定網站的主網域名稱和別名。DocumentRoot:指定網站的根目錄。
將 Apache、PHP 和 RainLoop 佈署為 Docker 容器
為了提高可移植性和易於管理,我們可以使用 Docker 將我們的應用佈署為容器。
# 建立 Docker 網路
docker network create lamp-network
# 執行 MariaDB 容器
docker run --name mariadb -e MYSQL_ROOT_PASSWORD=password -d --net lamp-network mariadb
# 執行 Apache/PHP 容器
docker run --name apache-php -v "$PWD"/site1:/var/www/html -p 80:80 --net lamp-network -d php:apache
# 執行 RainLoop 容器
docker run --name rainloop -p 8080:80 -d --net lamp-network rainloop/rainloop
內容解密:
docker network create lamp-network:建立一個 Docker 網路,以便容器之間可以互相通訊。docker run --name mariadb:執行一個 MariaDB 容器。docker run --name apache-php:執行一個包含 Apache 和 PHP 的容器,並將本地的site1目錄掛載到容器的/var/www/html。docker run --name rainloop:執行一個 RainLoop 容器,用於提供網頁郵件服務。
第8章:容器化和自動化佈署
以容器和微服務思維思考
在現代化的軟體開發和佈署中,容器化和微服務架構已經成為主流趨勢。容器化技術使得應用程式能夠在不同的環境中保持一致性和可移植性,而微服務架構則允許我們將複雜的應用程式分解成更小、更易於管理的服務。
佈署NGINX容器
NGINX是一個流行的Web伺服器和反向代理伺服器,可以輕鬆地佈署在容器中。以下是一個簡單的NGINX容器佈署範例:
docker run -d --name nginx -p 80:80 nginx:latest
內容解密:
docker run:啟動一個新的容器-d:以分離模式執行容器--name nginx:為容器命名為nginx-p 80:80:將主機的80埠對映到容器的80埠nginx:latest:使用最新的NGINX映象
使用Ansible自動化NGINX佈署
Ansible是一種流行的自動化工具,可以用來自動化NGINX的佈署。以下是一個簡單的Ansible Playbook範例:
---
- name: Install NGINX
hosts: servers
become: yes
tasks:
- name: Install NGINX
apt:
name: nginx
state: present
- name: Start NGINX
service:
name: nginx
state: started
enabled: yes
內容解密:
- `
`:YAML檔案的開始標記
- name: Install NGINX:Playbook的名稱hosts: servers:指定要執行的主機群組become: yes:以提升許可權執行任務tasks:定義要執行的任務列表apt:使用apt模組安裝NGINXservice:使用service模組啟動NGINX
使用Chef自動化NGINX佈署
Chef是另一種流行的自動化工具,可以用來自動化NGINX的佈署。以下是一個簡單的Chef Cookbook範例:
# cookbook/recipes/nginx.rb
package 'nginx' do
action :install
end
service 'nginx' do
action [:start, :enable]
end
內容解密:
package 'nginx':安裝NGINX套件action :install:指定要執行的動作(安裝)service 'nginx':管理NGINX服務action [:start, :enable]:啟動並啟用NGINX服務
第9章:伺服器管理和維護
使用Webmin進行伺服器管理
Webmin是一個流行的伺服器管理工具,可以用來管理和維護伺服器。以下是一個簡單的Webmin安裝範例:
sudo apt-get install webmin
內容解密:
sudo:以提升許可權執行命令apt-get:使用apt-get命令安裝Webmin
使用Chef管理Webmin組態
我們可以使用Chef來管理Webmin的組態。以下是一個簡單的Chef Cookbook範例:
# cookbook/recipes/webmin.rb
package 'webmin' do
action :install
end
template '/etc/webmin/config' do
source 'webmin_config.erb'
mode '0644'
end
內容解密:
package 'webmin':安裝Webmin套件template '/etc/webmin/config':管理Webmin組態檔案
第10章:使用Git擴充套件DevOps能力
Git入門
Git是一個流行的版本控制系統,可以用來管理和跟蹤程式碼的變化。以下是一個簡單的Git入門範例:
git init
git add .
git commit -m "Initial commit"
內容解密:
git init:初始化一個新的Git儲存函式庫git add .:將所有檔案新增到暫存區git commit -m "Initial commit":提交變更並新增提交訊息
使用GitHub分享程式碼
GitHub是一個流行的程式碼託管平台,可以用來分享和協作開發程式碼。以下是一個簡單的GitHub使用範例:
git remote add origin https://github.com/user/repo.git
git push -u origin master
內容解密:
git remote add origin:新增一個新的遠端倉函式庫git push -u origin master:將變更推播到遠端倉函式庫並設定上游追蹤資訊