主頁 > 軟體設計 > 用樹莓派做服務器運行博客網頁

用樹莓派做服務器運行博客網頁

2021-07-27 07:19:12 軟體設計

文章目錄

  • 閱讀本文你將了解的知識點:
  • 樹莓派做服務器運行Hexo博客網頁
    • 1.服務器框架
    • 2.本地Hexo設定
      • 2.1 安裝GIT
      • 2.2 安裝NodeJs
      • 2.3 安裝Hexo
      • 2.4 Hexo生成網頁
    • 3.樹莓派服務器設定
    • 4.內網穿透
    • 5.結語

閱讀本文你將了解的知識點:

  • 了解樹莓派做網頁服務器的流程框架
  • 使用Hexo生成靜態網頁
  • 使用樹莓派做服務器部署靜態網頁
  • 穿透內網從外網訪問部署的網頁

樹莓派做服務器運行Hexo博客網頁

? 手頭有一塊樹莓派4B,為了不讓樹莓派閑著,我用它做一個網頁服務器,掛載自己的個人網頁,分享一下自己的部署程序

樹莓派4B開發板

1.服務器框架

? 配置樹莓派網頁服務器前首先要了解一下整體的框架,然后按照框架的內容進行服務器配置,這里我做了一個框圖方便大家理解搭建樹莓派網頁服務器需要

的步驟

請添加圖片描述

具體框架主要是以下幾個部分:

  • 本地PC端:

    ? 首先要在本地PC端建立一個Git倉庫,安裝Hexo相關依賴,使用Hexo生成靜態網頁代碼,然后通過Git上傳到遠程倉庫

    1. Hexo 是一個基于nodejs 的靜態博客網站生成器,用戶可以借助該工具快速生成網頁

    2. Git是一種分布式的版本管理系統,由Linux的創造者Linus所創建,Git可以幫我們做很多事情,比如代碼版本控制,分支管理等,其主要包含的幾個功能有遠程倉庫,克隆,本地倉庫,分支,提交,拉取,合并,推送等,

  • 樹莓派端:

    ? 在樹莓派端需要建立一個Git遠程倉庫,用于接收網頁資料,同時樹莓派要安裝Nginx,用于將本地網頁映射到內網IP上去

    Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,可以作為一個HTTP服務器進行網站的發布處理,以及作為反向代理進行負載均衡的實作

  • 外網訪問:

    ? 如果只映射到內網IP,那訪問服務器只能在內網訪問,這顯然不是我們所期待的,所以后面的步驟就是將外網的IP通過埠映射,映射到內網IP,之后互聯網的其他用戶就可以通過外網的IP訪問服務器了,但訪問的瀏覽器還是通過地址訪問,安全性比較低,因此我們在加入一個域名決議,將域名決議到外網IP同時加裝SSL證書進行加密保護!

    內網(局域網)和外網(廣域網)的區別:

    1. 范圍大小
      局域網(LAN)相對于廣域網(WAN)而言,主要是指在小范圍內的計算機互聯網路,這個“小范圍”可以是一個家庭,一所學校,一家公司,或者是一個政府部門,BT中常常提到的公網、外網,即廣域網(WAN);BT中常常提到私網、內網,即局域網(LAN),

    2. IP地址
      廣域網上的每一臺電腦(或其他網路設備)都有一個或多個廣域網IP地址(或者說公網、外網IP地址),廣域網IP地址一般要到ISP處交費之后才能申請到,廣域網IP地址不能重復;局域網(LAN)上的每一臺電腦(或其設備)都有一個或多個局域網IP地址(或者說私網、內網IP地址),局域網IP地址是局域網內部分配的,不同局域網的IP地址可以重復,不會相互影響

    SSL協議:

    SSL (Secure Sockets Layer 安全套接字協議)和繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通信提供安全及資料完整性的一種安全協議,TLS與SSL在傳輸層與應用層之間對網路連接進行加密,簡單來說HTTPS中的S就是SSL

2.本地Hexo設定

本地Hexo設定就是下載Hexo開發需要的依賴,下載配置完成后使用Hexo生成一個靜態網頁,具體步驟如下:

2.1 安裝GIT

去官網安裝Git工具,然后安裝,和普通軟體安裝方式相同,打開安裝包后一路回車,直到安裝完成,官網鏈接:Git Windows Download;

安裝完成后在桌面右擊就會出現GitBash控制臺,代表安裝成功

20210724202650

2.2 安裝NodeJs

Hexo框架是基于nodejs撰寫,所以安裝hexo之前需要安裝nodejs,nodejs下載網頁:Node.js,下載LTS版本

下載之后一路安裝,不會的可以百度具體安裝教程,不多說,安裝完成后我們打開剛剛Git的命令列,右擊桌面空白處打開GitBash,輸入如下指令查看hexo和npm的版本

node -v
npm -v

回傳版本資訊就說明安裝成功:

20210724204005

2.3 安裝Hexo

使用nodejs的npm安裝包管理工具安裝hexo,指令如下

  1. 安裝指令
npm install -g hexo-cli
  1. 查看是否安裝成功
hexo -v
  1. 出現版本資訊說明安裝成功

20210724204635

2.4 Hexo生成網頁

兩個工具就緒后我們開始生成靜態網頁:

我們首先創建一個檔案夾,用來存放網頁資料

20210724204843

在檔案夾內右擊打開gitbash,輸入初始化指令 web_blog_name 由用戶自己定義

hexo init web_blog_name

輸入后git會從遠程拉取初始化代碼下來,拉取后Git顯示如下

20210724205423

然后檔案夾就有了Hexo的原始碼了

20210724205443

在Git中改變當前目錄的位置,進入該檔案夾,代碼如下

cd web_blog_name/

20210724205952

使用hexo生成代碼指令

hexo g

然后開啟本地埠訪問

hexo server

在瀏覽器輸入如下內容,就可以本地訪問Hexo生成的網頁代碼了:

localhost:4000

20210724210340

到此網頁的生成就完成了!

除了網頁生成外,我們本地還要生成一個ssh公鑰,用于后期向樹莓派遠程倉庫提交網頁原始碼,git指令如下

ssh-keygen -t rsa -C “郵箱地址”

然后一路回車,直到出現下面的圖案,代表公鑰生成成功,

20210724220616

公鑰(.pub)一般在 C:\Users\用戶名\.ssh 下面,公鑰的作用我寫在了后面,暫時無需管他

20210724220724

到此本地設定基本完成

3.樹莓派服務器設定

有了靜態網頁了,我們下一步就是配置樹莓派了,首先通過SSH連接樹莓派,這里我使用的VSCode的remote - SSH工具來連接樹莓派(VSCode,永遠滴神,不接受反駁!),工具在VSCode內部git安裝:

20210724211512

安裝完成后我們通過樹莓派的IP登錄樹莓派(樹莓派要連接網路,且要獲取對應的IP)

獲取IP方法可以參考這篇文章:查看樹莓派ip地址的幾種方法

獲取IP之后通過Remote遠程登錄(樹莓派和PC要在同一個局域網下):在VSCode打開Remote

20210724214002

添加遠程連接,按照如下格式輸入登入IP和賬號密碼:

ssh + 樹莓派用戶名@樹莓派IP地址

輸入位置如下:

20210724214019

輸入之后會提示在輸入登錄密碼,輸入即可登錄樹莓派,連接后打開終端,如下圖

20210724214506

之后我么就可以輸入shell指令來控制樹莓派了,下面我們開始正式配置樹莓派服務器!

配置步驟:

  • 更新樹莓派源

打開樹莓派鏡像源串列 (此處用的vim編輯器,具體操作可以百度!不習慣可以將vim替換gedit)

sudo vim /etc/apt/sources.list

將內容替換為清華大學源

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

更新源

sudo apt-get update

更新完成

20210724215625

  • 安裝git

安裝指令,sudo指令要輸入一下密碼

sudo apt-get install git

查看版本

git --version

安裝完成:現象和第一次下載不一樣,但只要出現版本基本沒問題

20210724220141

  • 安裝nginx

下載指令

sudo apt-get install nginx

查看當前版本

nginx -v

此處我已經下載好,因為已經下載,所以現象和第一次下載不一樣,但只要出現版本基本沒問題

20210724215811

  • 建立遠程Git倉庫

在樹莓端安裝Git后,我們用Git建立一個遠程倉庫,用來作為本地PC提交網頁原始碼的中間站,這樣如果我們要更新網頁,就不用登錄到樹莓派然后傳檔案這么麻煩的步驟,具體建立步驟如下:

  1. 創建一個新的檔案夾
sudo mkdir /var/repo/	#創建一個檔案夾
sudo chown -R $USER:$USER /var/repo/	#給分到用戶組
sudo chmod -R 755 /var/repo/	#改變檔案夾權限
  1. 檔案夾建立后,改變當前路徑到建立的檔案夾,輸入如下指令建立Git倉庫(web_blog為自定義的名字)
cd /var/repo/
git init --bare web_blog.git
  • 映射倉庫到另外一個檔案夾

Git倉庫創建完成后,我們需要再創建一個檔案夾,用來做Nginx的根目錄

sudo mkdir -p /var/www/hexo

并修改目錄權限

sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

然后在倉庫 web_blog 下創建一個鉤子,將靜態 HTML 檔案傳送到樹莓派服務器的根目錄下,即 /var/www/hexo下面,鉤子代碼如下:

#使用vim在倉庫下創建一個新的鉤子檔案
sudo vim /var/repo/web_blog.git/hooks/post-receive

在檔案下添加如下shell腳本檔案 (因為使用的是Vim編輯器,具體的操作方式需要自行百度了解一下!)

#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/web_blog.git checkout -f

保存退出檔案后,改變檔案權限,讓該檔案變為可執行檔案,

sudo chmod +x /var/repo/web_blog.git/hooks/post-receive
  • Nginx網頁根目錄設定

上一步我們已經創建好網頁根目錄,并且已經做好檔案傳送鉤子,這一步我們配置Nginx的組態檔,開啟Nginx并將根目錄映射到我們創建的目錄下

打開Nginx默認配置項

sudo vim /etc/nginx/sites-available/default

然后找到如下位置,修改root的值為我們設定的根目錄檔案夾

20210725092820

保存退出,重新啟動Nginx

sudo service nginx restart

在和樹莓派同一個局域網下訪問樹莓派的IP地址,訪問如下說明目錄設定成功了,Nginx配置基本完成

20210725093228

  • 添加本地公鑰到遠程Git倉庫

添加公鑰到樹莓派,其實就是添加本地PC到Git的白名單中,之前我們已經在本地生成了公鑰,下一步我們就是上傳公鑰,方法很簡單,在公鑰目錄下面打開Gitbash,按格式輸入如下shell指令

ssh-copy-id -p 埠一般為22+樹莓派用戶名@樹莓派IP地址

安裝完成會有提示,我這個就是已經安裝的提示

20210725094710

  • 配置本地Hexo設定,上傳網頁代碼

在上面都配置完成后,我們在配置一下本地網頁的傳輸代碼,就可以上傳一開始生成的靜態網頁了!

在網頁原始碼位置修改_config.yml檔案

首先修改一下推送地址路徑和推送方式

deploy:
  type:  git
  repo:  pi@自己的IP地址:/var/repo/web_blog
  branch: master

修改后如下:

20210725102514

除此之外還有修改網頁的源地址,按照下圖中的格式修改,添加自己的IP

20210725102620

修改完成后,在原始碼目錄使用GitBash

20210725102157

hexo生成靜態網頁代碼:

hexo g

20210725102957

提交遠程代碼

hexo d

20210725103010

  • 內網訪問博客網頁

代碼提交成功后,就會出現在Nginx的根目錄下,這時我們在內網訪問Nginx的埠就可以訪問剛剛的網頁啦

20210725103948

4.內網穿透

通過以上的步驟,我們現在已經可以通過內網訪問部署在樹莓派服務器上的網頁了,有的朋友可能不滿足于此,想要網頁通過外網也能訪問,下面我分享一下如何做內網穿透,通過外網訪問內網服務器!

首先需要準備一些內容:

  1. 一個云服務器(我的是騰訊云服務器,一年100塊)
  2. 一個域名(在阿里云購買的域名,一年20塊)

云服務器會分配一個公網IP,通過這個IP的埠映射到內網IP埠進行穿透內網,而域名就是我們常說的網址,比如:https://www.csdn.net 就是一個域名,我們準備一個域名然后對他進行決議到服務器IP,就可以通過網址訪問網頁了

我們通過frp來穿透內網,具體的教程參考這一篇CSDN文章:十分鐘教你配置frp實作內網穿透

穿透后我們就可以在外網通過公網IP訪問網頁了(注意使用服務器的公網IP做穿透時一定要記得設定防火墻,讓指定埠通行),此處我穿透到公網IP的8080埠,該埠可以通過外網訪問

20210725172540

為了讓網頁訪問地址更加合規,將購買域名的二級域名決議到80埠后,使用Nginx進行埠轉發到8080,Nginx組態檔修改如下:(主要為紅框的那一段,上邊的代碼是我自己部署在服務器的網頁,不是本節的內容)

20210725175140

到此我們就可以通過網頁的二級域名決議后進行訪問了

20210725174831

5.結語

樹莓派服務器內容就寫到這了,文章大概描述了一下部署網頁到樹莓派服務器的內容,有問題可以在評論區或者私信向我反饋,希望大家給個關注,后期還會持續更新樹莓派有關的DIY

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290231.html

標籤:其他

上一篇:Docker之可視化工具Docker UI

下一篇:如何把其他代碼托管平臺git倉庫遷移到github還保留歷史日志記錄?圖解步驟,值得收藏!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more