在Linux系統(tǒng)的日常管理和服務(wù)器運(yùn)維中,掌握手動(dòng)命令安裝軟件以及搭建基礎(chǔ)服務(wù)環(huán)境是核心技能之一。與圖形界面或包管理器(如apt、yum)相比,手動(dòng)安裝提供了更高的靈活性和對(duì)軟件版本、配置的深度控制。本講將系統(tǒng)性地介紹從源碼編譯安裝軟件的通用流程,并演示如何搭建一個(gè)包含Web服務(wù)、數(shù)據(jù)庫和運(yùn)行環(huán)境的基本服務(wù)器。
一、手動(dòng)從源碼編譯安裝軟件
手動(dòng)安裝通常指獲取軟件的源代碼(Source Code),在本地編譯(Compile)并安裝(Install)。這種方式適用于獲取最新版本、特定版本或進(jìn)行自定義配置。
通用步驟(以安裝Nginx為例):
1. 準(zhǔn)備編譯環(huán)境:安裝編譯器(如gcc)和依賴庫。
`bash
# 對(duì)于基于Debian/Ubuntu的系統(tǒng)
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y
對(duì)于基于RHEL/CentOS的系統(tǒng)
sudo yum groupinstall "Development Tools"
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
`
2. 獲取源代碼:從官方網(wǎng)站或鏡像下載源碼壓縮包。
`bash
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
`
3. 配置(Configure):運(yùn)行configure腳本檢查系統(tǒng)環(huán)境并生成編譯規(guī)則(Makefile)。可以在此指定安裝路徑、啟用或禁用模塊。
`bash
./configure --prefix=/usr/local/nginx \
--with-httpsslmodule \
--with-httpv2module
`
--prefix參數(shù)定義了軟件的安裝根目錄。
4. 編譯(Make):根據(jù)生成的Makefile將源代碼編譯成可執(zhí)行二進(jìn)制文件。
`bash
make
`
5. 安裝(Make Install):將編譯好的文件復(fù)制到--prefix指定的系統(tǒng)目錄中。
`bash
sudo make install
`
6. 驗(yàn)證與配置:
`bash
# 啟動(dòng)Nginx
sudo /usr/local/nginx/sbin/nginx
# 檢查進(jìn)程和端口
ps aux | grep nginx
ss -tlnp | grep :80
`
優(yōu)勢(shì)與注意事項(xiàng):
- 優(yōu)勢(shì):版本控制靈活,優(yōu)化編譯參數(shù),深度定制功能模塊。
- 注意事項(xiàng):依賴管理需手動(dòng)解決;更新和卸載不如包管理器方便;通常需要手動(dòng)配置服務(wù)管理(如Systemd)。
二、服務(wù)器基本環(huán)境搭建實(shí)踐
一個(gè)典型的Web應(yīng)用服務(wù)器基礎(chǔ)環(huán)境通常被稱為“LAMP”或“LNMP”棧。這里我們以“LNMP”(Linux, Nginx, MySQL, PHP)為例,結(jié)合手動(dòng)與包管理安裝。
環(huán)境目標(biāo):在全新Linux服務(wù)器上,搭建支持動(dòng)態(tài)網(wǎng)站的LNMP環(huán)境。
步驟簡(jiǎn)述:
- 操作系統(tǒng):確保使用CentOS 8+或Ubuntu 20.04+等現(xiàn)代發(fā)行版。
2. 安裝Nginx(作為Web服務(wù)器):
- 可以采用上述源碼編譯方式安裝,或使用包管理器快速安裝:
`bash
# Ubuntu/Debian
sudo apt install nginx -y
# CentOS/RHEL (需先啟用EPEL倉庫)
sudo yum install nginx -y
`
- 啟動(dòng)并設(shè)置開機(jī)自啟:
`bash
sudo systemctl start nginx
sudo systemctl enable nginx
`
- 防火墻放行HTTP/HTTPS端口:
`bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# 或使用ufw (Ubuntu): sudo ufw allow 'Nginx Full'
`
3. 安裝MySQL(作為數(shù)據(jù)庫服務(wù)器):
- 推薦使用官方倉庫或發(fā)行版?zhèn)}庫安裝。
`bash
# Ubuntu/Debian
sudo apt install mysql-server -y
# CentOS/RHEL
sudo yum install mysql-server -y
`
- 啟動(dòng)服務(wù),運(yùn)行安全初始化腳本:
`bash
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo mysqlsecureinstallation
# 根據(jù)提示設(shè)置root密碼、移除匿名用戶、禁止遠(yuǎn)程root登錄等。
`
4. 安裝PHP(作為動(dòng)態(tài)腳本處理引擎):
- 安裝PHP核心及與Nginx、MySQL通信所需的擴(kuò)展。
`bash
# Ubuntu/Debian
sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring -y
# CentOS/RHEL (可能需要啟用EPEL和Remi倉庫)
sudo yum install php-fpm php-mysqlnd php-opcache php-gd php-xml php-mbstring -y
`
- 啟動(dòng)PHP-FPM服務(wù):
`bash
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
`
5. 配置Nginx與PHP-FPM協(xié)同工作:
- 編輯Nginx的站點(diǎn)配置文件(如/etc/nginx/conf.d/default.conf或新建一個(gè)),確保對(duì).php文件的請(qǐng)求被轉(zhuǎn)發(fā)給PHP-FPM處理。
`nginx
server {
listen 80;
servername yourserveripor_domain;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgipass unix:/run/php/php-fpm.sock; # 或 127.0.0.1:9000
fastcgiindex index.php;
fastcgiparam SCRIPTFILENAME $documentroot$fastcgiscriptname;
include fastcgiparams;
}
}
`
- 測(cè)試配置并重載Nginx:
`bash
sudo nginx -t
sudo systemctl reload nginx
`
6. 環(huán)境驗(yàn)證:
- 在Web根目錄(如/var/www/html)創(chuàng)建測(cè)試文件info.php:
`php
`
- 瀏覽器訪問
http://your<em>server</em>ip/info.php,應(yīng)顯示PHP信息頁面。
- 創(chuàng)建測(cè)試MySQL連接的PHP腳本,驗(yàn)證數(shù)據(jù)庫訪問是否正常。
三、基礎(chǔ)服務(wù)管理要點(diǎn)
- 服務(wù)管理:熟練使用
systemctl(start, stop, restart, status, enable, disable)管理服務(wù)生命周期。 - 日志查看:使用
journalctl -u service_name或查看/var/log/下的日志文件(如nginx的/var/log/nginx/)進(jìn)行故障排查。 - 權(quán)限與安全:確保服務(wù)進(jìn)程以非root用戶運(yùn)行;正確設(shè)置Web目錄(如
/var/www/html)的文件所有權(quán)和權(quán)限(如755/644)。 - 防火墻與SELinux:理解并配置好防火墻規(guī)則;在生產(chǎn)環(huán)境中,需正確處理SELinux上下文或?qū)⑵渲糜趯捜菽J竭M(jìn)行測(cè)試。
###
通過手動(dòng)編譯安裝,你能夠深入理解軟件與操作系統(tǒng)的交互細(xì)節(jié),并在需要時(shí)進(jìn)行精準(zhǔn)定制。而結(jié)合包管理器快速部署基礎(chǔ)服務(wù)棧(如LNMP),則能高效構(gòu)建穩(wěn)定可靠的服務(wù)器環(huán)境。將兩種方式結(jié)合運(yùn)用,并根據(jù)實(shí)際場(chǎng)景選擇最合適的方案,是成為一名高效Linux系統(tǒng)管理員或DevOps工程師的關(guān)鍵。后續(xù)可以進(jìn)一步探索配置負(fù)載均衡、緩存、容器化部署等更高級(jí)的主題。