Linux實戰:從零搭建基于LNMP+NFS+DNS的WordPress博客系統

前言

在數字化時代,擁有一個個人博客是技術愛好者展示成果、分享經驗的重要方式。本文將帶您從零開始,在Linux環境下通過兩臺服務器協作,搭建一個功能完整的WordPress博客系統。我們將整合LNMP架構、NFS文件共享和DNS域名解析服務,最終實現通過自定義域名訪問博客的目標。本文適合有基礎Linux操作經驗的讀者,所有操作步驟均經過實際驗證,可直接復用。

一、項目概述

1.1 項目目標

通過兩臺Linux服務器構建可通過域名訪問的個人博客系統,具體實現:

  • Server-Web主機:部署LNMP環境,提供Web服務
  • Server-NFS-DNS主機:提供NFS文件共享服務和DNS域名解析服務
  • 最終效果:用戶可通過www.zds.com域名訪問基于WordPress的博客網站

1.2 技術棧

  • 操作系統:Linux
  • Web服務器:Nginx
  • 數據庫:MariaDB
  • 編程語言:PHP
  • 文件共享:NFS
  • 域名解析:DNS
  • 博客程序:WordPress

二、環境說明

2.1 服務器角色分配

主機IP地址主機名主要服務功能描述
192.168.120.128Server-WebNginx、MariaDB、PHP運行博客網站,處理用戶請求
192.168.120.130Server-NFS-DNSNFS、DNS提供文件共享和域名解析服務

2.2 網絡拓撲

用戶 <--> DNS服務(192.168.120.130) <--> Web服務(192.168.120.128) <--> NFS服務(192.168.120.130)

三、基礎環境配置

3.1 恢復快照(可選)

如果使用虛擬機環境,建議先恢復干凈快照,確保環境初始狀態一致:

# 此步驟根據虛擬化平臺操作,無統一命令

3.2 配置靜態IP地址

在Server-Web(192.168.120.128)上操作:

# 修改網絡接口配置
[root@server-web ~]# nmcli c modify ens32 \
ipv4.method manual \
ipv4.addresses '192.168.120.128/24' \
ipv4.gateway '192.168.120.2' \
ipv4.dns '114.114.114.114'# 重新加載并激活網絡連接
[root@server-web ~]# nmcli c reload
[root@server-web ~]# nmcli c up ens32

在Server-NFS-DNS(192.168.120.130)上操作:

# 修改網絡接口配置
[root@server-dns-nfs ~]# nmcli c modify ens32 \
ipv4.method manual \
ipv4.addresses '192.168.120.130/24' \
ipv4.gateway '192.168.120.2' \
ipv4.dns '114.114.114.114'# 重新加載并激活網絡連接
[root@server-dns-nfs ~]# nmcli c reload
[root@server-dns-nfs ~]# nmcli c up ens32

3.3 配置主機名及hosts映射

在Server-Web上操作:

# 設置主機名
[root@web ~]# hostnamectl set-hostname server-web# 配置hosts文件
[root@web ~]# vim /etc/hosts
# 添加以下內容
192.168.120.128         server-web
192.168.120.130         server-dns-nfs# 使配置生效
[root@web ~]# bash

在Server-NFS-DNS上操作:

# 設置主機名
[root@node1 ~]# hostnamectl set-hostname server-dns-nfs# 配置hosts文件
[root@node1 ~]# vim /etc/hosts
# 添加以下內容
192.168.120.128         server-web
192.168.120.130         server-dns-nfs# 使配置生效
[root@node1 ~]# bash

3.4 配置防火墻

兩臺服務器均執行以下操作:

# 啟動防火墻并設置開機自啟
[root@server ~]# systemctl start firewalld
[root@server ~]# systemctl enable firewalld# 查看防火墻狀態
[root@server ~]# systemctl status firewalld

3.5 配置時間同步

兩臺服務器均執行以下操作:

# 編輯chrony配置文件,將阿里時間服務器推薦配置復制其中
[root@server ~]# vim /etc/chrony.conf
# 替換為以下內容
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony# 重啟chronyd服務
[root@server ~]# systemctl restart chronyd# 驗證時間同步狀態(出現*表示同步成功)
[root@server ~]# chronyc sources -v

3.6 配置SSH免密登錄

在Server-Web上操作:

# 生成SSH密鑰對(一路回車即可)
[root@server-web ~]# ssh-keygen -t rsa# 將公鑰發送到Server-NFS-DNS
[root@server-web ~]# ssh-copy-id root@192.168.120.130
# 輸入Server-NFS-DNS的root密碼完成驗證

在Server-NFS-DNS上操作:

# 生成SSH密鑰對(一路回車即可)
[root@server-dns-nfs ~]# ssh-keygen -t rsa# 將公鑰發送到Server-Web
[root@server-dns-nfs ~]# ssh-copy-id root@192.168.120.128
# 輸入Server-Web的root密碼完成驗證

驗證免密登錄:

# 從Server-Web登錄到Server-NFS-DNS
[root@server-web ~]# ssh root@192.168.120.130
# 成功登錄后退出
[root@server-dns-nfs ~]# exit# 從Server-NFS-DNS登錄到Server-Web
[root@server-dns-nfs ~]# ssh root@192.168.120.128
# 成功登錄后退出
[root@server-web ~]# exit

四、部署核心服務

4.1 部署NFS服務(Server-NFS-DNS)

4.1.1 安裝NFS相關軟件
[root@server-dns-nfs ~]# yum install rpcbind nfs-utils -y
4.1.2 準備WordPress文件
[root@server-dns-nfs ~]# cd /
#用xftp上傳代碼壓縮包
[root@server-dns-nfs /]# ls
afs  bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  wordpress-6.1-zh_CN.zip  www
[root@server-dns-nfs /]# unzip wordpress-6.1-zh_CN.zip
[root@server-dns-nfs /]# ls
afs  bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  wordpress  wordpress-6.1-zh_CN.zip  www
# 設置權限
[root@server-dns-nfs /]# chmod -R 777 wordpress
4.1.3 配置NFS共享
# 編輯exports文件
[root@server-dns-nfs /]# vim /etc/exports
# 添加以下內容
/wordpress 192.168.120.128/24(rw,all_squash,sync)# 配置防火墻放行NFS相關服務
[root@server-dns-nfs /]# firewall-cmd --permanent --zone=public --add-service=rpc-bind
[root@server-dns-nfs /]# firewall-cmd --permanent --zone=public --add-service=nfs
[root@server-dns-nfs /]# firewall-cmd --permanent --zone=public --add-service=mountd
[root@server-dns-nfs /]# firewall-cmd --reload
[root@server-dns-nfs /]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32sources: services: dhcpv6-client mdns mountd nfs rpc-bind sshports: protocols: forward: yesmasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: # 啟動NFS服務(注意啟動順序)
[root@server-dns-nfs /]# systemctl start rpcbind
[root@server-dns-nfs /]# systemctl start nfs-server# 設置開機自啟
[root@server-dns-nfs /]# systemctl enable rpcbind
[root@server-dns-nfs /]# systemctl enable nfs-server

4.2 部署Web服務(Server-Web)

4.2.1 安裝LNMP環境
# 安裝Nginx、MariaDB和PHP相關組件
[root@server-web ~]# yum install nginx mariadb-server php* -y# 啟動服務
[root@server-web ~]# systemctl start nginx
[root@server-web ~]# systemctl start mariadb
[root@server-web ~]# systemctl start php-fpm# 設置開機自啟
[root@server-web ~]# systemctl enable nginx
[root@server-web ~]# systemctl enable mariadb
[root@server-web ~]# systemctl enable php-fpm
4.2.2 掛載NFS共享目錄
# 安裝nfs-utils
[root@server-web ~]# yum install nfs-utils -y# 查看NFS服務器共享的目錄
[root@server-web ~]# showmount -e 192.168.120.130
Export list for 192.168.120.130:
/wordpress 192.168.120.128/24# 創建掛載點
[root@server-web ~]# mkdir /wp# 掛載NFS共享目錄
[root@server-web ~]# mount -t nfs 192.168.120.130:/wordpress /wp# 設置開機自動掛載
[root@server-web ~]# echo "192.168.120.130:/wordpress /wp nfs defaults 0 0" >> /etc/fstab# 驗證掛載結果
[root@server-web ~]# df -h | grep /wp
4.2.3 配置Nginx
# 防火墻放行HTTP服務
[root@server-web ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@server-web ~]# firewall-cmd --reload
[root@server-web ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32sources: services: dhcpv6-client http mdns sshports: protocols: forward: yesmasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: # 編輯Nginx配置文件
[root@server-web ~]# vim /etc/nginx/nginx.conf
# 找到root配置項,修改為
root         /wp;# 重啟Nginx服務
[root@server-web ~]# systemctl restart nginx
4.2.4 配置數據庫
# 登錄MariaDB
[root@server-web ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+# 創建數據庫
MariaDB [(none)]> create database wordpress;# 創建數據庫用戶并授權
MariaDB [(none)]> create user 'rch'@'localhost' identified by '123456';
MariaDB [(none)]> grant all privileges on wordpress.* to 'rch'@'localhost';
MariaDB [(none)]> flush privileges;# 退出數據庫
MariaDB [(none)]> exit
4.2.5 配置WordPress
# 復制配置文件模板
[root@server-web ~]# cp /wp/wp-config-sample.php /wp/wp-config.php# 編輯WordPress配置文件
[root@server-web ~]# vim /wp/wp-config.php
# 修改以下內容
define('DB_NAME', 'wordpress');
define('DB_USER', 'rch');
define('DB_PASSWORD', '123456');
define('DB_HOST', 'localhost');# 設置目錄權限
[root@server-web ~]# chmod -R 777 /wp
[root@server-web ~]# chown -R nginx:nginx /wp

4.3 配置DNS服務(Server-NFS-DNS)

4.3.1 安裝DNS服務
[root@server-dns-nfs ~]# yum install bind  -y
4.3.2 配置主配置文件
# 修改以下配置項
[root@server-dns-nfs /]# vim /etc/named.conf 
listen-on port 53 { any; };listen-on-v6 port 53 { ::1; };directory       "/var/named";dump-file       "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";secroots-file   "/var/named/data/named.secroots";recursing-file  "/var/named/data/named.recursing";allow-query     { any; };
4.3.3 配置區域文件
[root@server-dns-nfs /]# vim /etc/named.rfc1912.zones 
zone "zds.com" IN {type master;file "zds.com.zone";allow-update { none; };
};zone "120.168.192.in-addr.arpa" IN {type master;file "192.168.120.arpa";allow-update { none; };
};
4.3.4 創建正向解析文件
# 復制模板文件
[root@server-dns-nfs ~]# cd /var/named
[root@server-dns-nfs named]# cp -a named.localhost zds.com.zone# 編輯正向解析文件
[root@server-dns-nfs named]# vim zds.com.zone
# 修改為以下內容
$TTL 1D
zds.com.        IN SOA  ns.zds.com. 612612.qq.com (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumIN              NS      ns.zds.com.
ns.zds.com.     IN              A       192.168.120.130
www.zds.com.    IN              A       192.168.120.128
4.3.5 創建反向解析文件
# 復制模板文件
[root@server-dns-nfs named]# cp -a named.loopback 192.168.120.arpa# 編輯反向解析文件
[root@server-dns-nfs named]# vim 192.168.120.arpa
# 修改為以下內容
$TTL 1D
@       IN SOA  ns.zds.com. 612612.qq.com. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumIN              NS      ns.zds.com.
ns.zds.com.     IN              A       192.168.120.130
128             IN              PTR     www.zds.com.
4.3.6 啟動DNS服務
# 防火墻放行DNS服務
[root@server-dns-nfs named]# firewall-cmd --permanent --zone=public --add-service=dns
[root@server-dns-nfs named]# firewall-cmd --reload# 啟動named服務并設置開機自啟
[root@server-dns-nfs named]# systemctl start named
[root@server-dns-nfs named]# systemctl enable named

五、測試與驗證

5.1 驗證DNS解析

在Server-Web上驗證:

# 驗證正向解析
[root@server-web ~]# nslookup 192.168.120.128
128.120.168.192.in-addr.arpa	name = www.zds.com.
# 驗證反向解析
[root@server-web ~]# nslookup www.zds.com
Server:		192.168.120.130
Address:	192.168.120.130#53Name:	www.zds.com
Address: 192.168.120.128

5.2 訪問博客網站

測試

  • 在windows端輸入192.168.120.128繼續完成wordpress配置 (郵箱必須設置)
    站點標題:張德帥的博客
    用戶名·:rch
    密碼123456
    郵箱:612612.qq.com(我設置時候沒截圖,只能借用別人的展示)

    我在里面編輯了一篇文章,內容是周杰倫的等你下課

    在這里插入圖片描述
    想要使用window的域名解析服務可以在設置-更改網絡適配器選項,我鏈接的是WiFi,所以只保留以下兩塊網卡
    在這里插入圖片描述
    在這兩塊網卡中各自取消IP v6服務,只保留IP v4服務,且雙擊IP v4協議
    在這里插入圖片描述
    之后瀏覽器輸入www.zds.com
    在這里插入圖片描述

六、總結

本文詳細介紹了如何在Linux環境下通過兩臺服務器搭建一個功能完整的WordPress博客系統,涉及多個關鍵技術點:

  1. 服務器基礎環境配置:包括靜態IP、主機名、防火墻、時間同步和SSH免密登錄
  2. NFS服務:實現了網站資源的集中管理和共享
  3. LNMP架構:搭建了Web服務環境,為WordPress提供運行平臺
  4. DNS服務:配置了域名解析,使博客可以通過域名訪問

通過本項目的實踐,不僅可以掌握Linux服務器的基本配置方法,還能理解多個服務協同工作的原理。在實際生產環境中,還可以進一步優化,如添加SSL證書實現HTTPS訪問、配置數據庫主從復制提高性能、設置定期備份保障數據安全等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91187.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Ignite 的對等類加載(Peer Class Loading, P2P Class Loading)機制

這段內容是關于 Apache Ignite 的“對等類加載”&#xff08;Peer Class Loading, P2P Class Loading&#xff09;機制的詳細說明。這是 Ignite 為了簡化開發而設計的一個非常強大的功能&#xff0c;但同時也存在一些安全和性能上的考量。 下面我將用通俗易懂的語言 結構化解…

預過濾環境光貼圖制作教程:第四階段 - Lambert 無權重預過濾(Stage 3)

在完成高光反射的 GGX 預過濾后,我們還需要處理環境光的漫反射部分。本階段(Stage 3)將基于 Lambert 分布對環境貼圖進行無權重預過濾,生成用于漫反射計算的環境數據。與高光反射的方向性不同,漫反射是光線在粗糙表面的均勻散射,因此需要用更適合均勻分布的 Lambert 模型…

Spring與SpringBoot:從手動擋到自動擋的Java開發進化論

大家好&#xff01;我是程序員良辰&#xff0c;今天我們來聊聊Java開發界的兩位"重量級選手"&#xff1a;Spring 和 SpringBoot。它們之間的關系就像手動擋汽車和自動擋汽車——一個給你完全的控制權但操作復雜&#xff0c;一個讓你輕松上路但保留了切換手動模式的能…

1.4.Vue 的模板事件

Vue 的模板事件1. 最常見和推薦的做法。將復雜的邏輯封裝在 methods 中。<!-- ? 正確&#xff1a;調用 methods 中的方法 --> <button click"handleClick">點擊我</button>new Vue({methods: {handleClick(event) {// 這里可以寫任意語句if (this…

SQLite 子查詢詳解

SQLite 子查詢詳解 引言 SQLite 是一種輕量級的數據庫&#xff0c;以其簡單、易用和跨平臺而著稱。在數據庫查詢中&#xff0c;子查詢是一個非常重要的概念&#xff0c;它允許我們在查詢中使用查詢結果。本文將詳細講解 SQLite 中的子查詢&#xff0c;包括其定義、用法以及在實…

可以組成網絡的服務器 - 華為OD統一考試(JavaScript 題解)

題目描述 在一個機房中,服務器的位置標識在n*m的整數矩陣網格中,1表示單元格上有服務器,0表示沒有。如果兩臺服務器位于同一行或者同一列中緊鄰的位置,則認為它們之間可以組成一個局域網,請你統計機房中最大的局域網包含的服務器個數。 輸入描述 第一行輸入兩個正整數,…

redis,MongoDB等未授權訪問靶場復現

redis未授權訪問在docker中啟動vulhub對應的靶場目錄&#xff1a;cd /vulhub-master/redis/4-unacc在kali上安裝redis程序進行服務連接安裝redis apt-get install redis redis鏈接 redis-cli -h IP -p 端口輸入info可以查看信息接下來我們使用redis-rogue-server來獲取命令執行…

設計模式:代理模式 Proxy

目錄問題解決方案結構代碼代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在將請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f; 舉個例子&#xff1a; 有這樣一…

Linux零基礎Shell教學全集(可用于日常查詢語句,目錄清晰,內容詳細)(自學尚硅谷B站shell課程后的萬字學習筆記,附課程鏈接)

此文章為學習了 尚硅谷B站課程 后的學習筆記 【尚硅谷】Shell腳本從入門到實戰_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1hW41167NW/?spm_id_from333.337.search-card.all.click&vd_source68e0bbe20c8b1102b59ced40f67db628注意&#xff1a;需要先學Linux基礎…

GitLab 中的分支和標簽的定義及操作

&#xff08;一&#xff09;GitLab 中的分支和標簽的定義及操作 1. 分支&#xff08;Branch&#xff09; 定義&#xff1a; 分支是代碼倉庫中的獨立開發路徑&#xff0c;允許你在不影響主線&#xff08;通常是 main 或 master 分支&#xff09;的情況下&#xff0c;進行實驗、開…

第2章 cmd命令基礎:常用基礎命令(3)

Hi~ 我是李小咖&#xff0c;主要從事網絡安全技術開發和研究。 本文取自《李小咖網安技術庫》&#xff0c;歡迎一起交流學習&#x1fae1;&#xff1a;https://imbyter.com 本節介紹的命令有顯示系統信息&#xff08;systeminfo&#xff09;、啟動指定程序&#xff08;start&am…

RabbitMQ 發送方確認的兩大工具 (With Spring Boot)

核心概念解析 發布者確認機制的核心思想是&#xff1a;將消息投遞的可靠性從“盡力而為”提升為“契約保證”。生產者不再是“發后不理”&#xff0c;而是與 Broker 建立一個雙向的溝通渠道。 在 Spring AMQP 的封裝下&#xff0c;這個機制主要由兩個回調接口實現&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API網關&#xff09;時&#xff0c;理解其核心概念是掌握其工作原理的基礎。這些概念既體現了Kong的設計哲學&#xff0c;也決定了它如何適配復雜的API管理場景&#xff08;如微服務、多團隊協作等&#xff09;。本文將系統梳理Kong的核心概…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題 摘要 在開發過程中&#xff0c;我們經常會遇到各種模塊安裝的問題&#xff0c;尤其是在使用PyCharm時&#xff0c;經常會遇到pip install時的…

3 運算符與表達式

運算符&#xff1a;對字面量或者變量進行操作的符號 表達式&#xff1a;用運算符把字面量或者變量連接起來符合java語法的式子就可以稱作表達式不同運算符連接的表達式體現的是不同類型的表達式int a 10; int b 20; int c a b;&#xff1a;運算符&#xff0c;并且是算術運算…

MySQL的單行函數:

目錄 函數的理解&#xff1a; MySQL的內置函數及分類&#xff1a; 單行函數&#xff1a; 數值函數&#xff1a; 基本函數&#xff1a; 角度與弧度互換函數&#xff1a; 三角函數&#xff1a; 指數與對數&#xff1a; 進制轉換&#xff1a; 字符串函數&#xff1a; 日…

設計模式(二十一)行為型:狀態模式詳解

設計模式&#xff08;二十一&#xff09;行為型&#xff1a;狀態模式詳解狀態模式&#xff08;State Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于允許一個對象在其內部狀態改變時改變其行為&#xff0c;使得對象看起來像是修改了它的…

深入理解 Doris Compaction:提升查詢性能的幕后功臣

在 Doris 的數據存儲與查詢體系里&#xff0c;Compaction 是保障查詢效率、優化存儲結構的關鍵機制。如果你好奇 Doris 如何在高頻寫入后仍能高效響應查詢&#xff0c;或是想解決數據版本膨脹帶來的性能問題&#xff0c;這篇關于 Compaction 的深度解析值得收藏 &#x1f447; …

css 實現虛線效果的多種方式

使用邊框實現虛線 通過設置元素的邊框樣式來實現虛線效果。以下為示例代碼: .dashed {border: 1px dashed black; }使用 CSS 偽元素實現虛線 使用偽元素來模擬虛線的效果。以下為示例代碼: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事務:原理、流程與實踐

Apache RocketMQ 是一種分布式消息隊列系統&#xff0c;支持分布式事務消息&#xff0c;以確保在分布式系統中數據的一致性。它通過一種基于兩階段提交(2PC)的機制結合補償邏輯來實現分布式事務的最終一致性。以下是對 RocketMQ 分布式事務的詳細講解&#xff0c;包括其核心概念…