【轉】用樹莓派搭建web服務器


本文將詳細介紹如何在樹莓派上配置服務器,和《教你在Xubuntu上搭建LAMP服務器》有些類似,多了一些介紹在樹莓派上的不同步驟的地方。

這種服務器的配置被稱為LAMP,是最流行的服務器配置之一,LAMP的含義是:

  • Linux - 操作系統
  • Apache - 網絡服務器(HTTP)軟件
  • mysql - 數據庫服務
  • PHP or perl - 編程語言

這種配置對於大多數樹莓派用戶來說,可能過於重量級了,但是大多數用戶能學到服務器的配置過程,是一種學習配置服務器的好方法。我可能會在以后寫一篇輕量級服務器的配置文章。

所有的配置都在命令行下完成。這可能會比點鼠標難一些,但是也會有很多優勢,例如可以遠程管理、配置服務,CPU時間可以用在提供網頁服務上,而不是用來渲染圖形界面,畢竟網絡服務器的唯一目的就是網頁服務。

為什么要用樹莓派?

除了極客式的回答“因為我能這么做”之外,我認為還有其他一些很好的理由。

raspberry-pi-1

可以學習Linux 本站的主要目的是傳授Linux技巧。學Linux最好的方式是用Linux做些什么。搭建服務器是一個好的起點。

學習網絡編程 樹梅派基金會的目標是教孩子編程。網絡編程是非常有用的技能。雖然對於先學桌面編程好,還是先學網絡編程好,一直以來是有爭議的,但是毫無疑問網絡編程非常實用。

作為一個接口 樹莓派適合從各種感應器中收集數據,可以搭建一個服務器,來訪問這些數據。

專用網絡設備 可以做成一個家中使用的專用網絡設備,例如流媒體設備等。

當作測試或開發服務器 開發web應用的時候,有一個專用的測試用服務器比較好。理想狀態下,測試服務器的軟硬件應該和生產環境下一致,但如果不現實,可以用樹莓派來代替,開銷很低。

當作生產環境的服務器 最初我會說,把樹莓派當作生產環境服務器是很傻的事。但我回憶了下,我最初的個人博客的服務器的配置也不比樹莓派強多少,那是在2007年之前的事情。那台服務器的內存比樹莓派多一點,就可以跑一個完整的WordPress站點,以及其它一些CGI腳本。現在的網站動態內容更多,站點上的文件也更大,但是如果是個人網站,用樹莓派也夠用了。

Debian Linux

服務器的配置基於樹莓派下載頁上的Debian樹莓派鏡像。

本文需要樹莓派能連接到外網,下文假設樹莓派是用網線連接到家用路由器上的。

安全性

首先要讓樹莓派的安全等級更高一些。這個鏡像中的系統有默認的用戶名和密碼,連上外網后,任何人都可以登陸,然后隨意使用這個樹莓派。

要更改密碼,在登陸后輸入

passwd

然后在之后出現的提示符后輸入新密碼。

你可能想要添加一個帳戶。我在下文中用的賬戶名是user1,通常來說,賬戶名應該是個人名。如果你不想添加帳戶,可以跳過這一部分,直接去看 性能/網絡那一步。
下面的命令可以添加一個新帳戶,並且設定密碼。

sudo useradd -m user1 sudo passwd user1

這是本文中第一次用sudo命令,在余下的部分中還會用很多次。使用sudo命令,用戶可以以管理員的身份來執行一個命令,就像上面的例子里一樣。如果不使用sudo,命令就會運行失敗,因為普通用戶不可以創建其它帳戶。這是一個防止系統被盜用的安全特性,也可以防止用戶誤用某些命令破壞系統(雖然說前面加上sudo就不能防止誤用了)。

新帳戶必須被加入到特定的用戶組中,才能有pi帳戶的某些權限。

你可以用usermod命令添加用戶組,也可以直接更改配置文件。我在下面會直接改配置文件,這樣你就能看一下配置文件了(一般來說,如果要做好幾個改動,直接改配置文件會快一些)。請注意,如果在編輯配置文件的時候出錯,有可能這個帳戶會不能登陸。

有兩個常用的命令行下的文本編輯器,對於新用戶來說nano比較容易使用(所以我在下文用的是nano),但是我強烈推薦學習vi,因為它很有用,並且在所有linux上都是預裝的。如果你會用vi,那么下面使用nano的地方,你都可以用vi。

sudo nano /etc/group

瀏覽整個文件,找到pi所在的那一行,然后把,user1加到行尾。

例如

adm:x:4:pi,user1

編輯完成后,CTRL-O保存文件,CTRL-X退出。

重要的地方在於,如果一個帳戶不在admin那一行,這個帳戶就不能使用sudo,從而不能進行任何系統管理。當然,如果你想要添加一個帳戶,然后不給管理權限,那么就不用改動/etc/group文件。

輸入

exit

注銷,然后用新建的帳戶登陸,檢查一下是否設置正確。

新帳戶默認的Shell是bourne shell。bash是bourne shell的改進版,用戶可以在命令行使用方向鍵自動補全。

為新帳戶設置默認shell,輸入:

chsh -s /bin/bash

如果以后不用pi這個帳戶了,可以刪掉它。

userdel pi

這只是提升Pi的安全級別的第一步。Linux安全還包含其它方面,例如當安全補丁發布后,安裝這些補丁(例如用apt-get update)。

調節系統性能

通常來說,調整服務器性能是之后要做的事情。但是對於樹莓派來說,做一個調整,就能提升系統的性能。我們在這里設置,保存重啟后生效,之后可以省去一次重啟。
樹莓派有256MB(后來的版本是512MB)內存。但這個內存是圖形和主系統共用的。默認情況下64MB分配給圖形系統。對於不准備跑圖形界面,或者很少跑圖形界面的設備,例如服務器這種情況下,64MB內存太多了。將圖形系統的內存減少到32MB,輸入下面的命令。

sudo cp /boot/arm224_start.elf /boot/start.elf, 或者用sudo raspi-config在配置目錄中改動。(你可以用sudo cp /boot/arm192_start.elf /boot/start.elf 來恢復之前的設置)

這個改動需要重啟后生效,我們稍晚時候再重啟,所以現在不用重啟。

設定網絡

下一步要為樹莓派分配一個靜態ip地址。這一步稍微復雜一點,決定於你自己的配置和路由器種類。

默認情況下樹莓派向路由器請求一個動態IP。這種IP可能會變動,不容易連上你的服務器。我們的辦法是給它一個不會變的地址,例如192.168.1.4

注意,這個地址只能在局域網使用,不能在外網用——之后我們會介紹如何配置你的路由器和防火牆,讓外網用戶可以訪問你的服務器。

首先用ifconfig查看DHCP分配給樹莓派的地址——下面是輸出內容的一部分

…
eth0      Link encap:Ethernet  HWaddr b8:27:eb:8a:71:a0
inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
…

這是在說,以太網端口0,地址是192.168.1.110

你還需要知道路由器的地址,使用route命令

$ route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

這是在說,路由器的IP地址(也就是網關)是192.168.1.1,所有的數據都會通過這個路由器接收和發送。

現在,查看路由器IP池的范圍。這取決於你的路由器。下面的例子中用的是一個Belkin無線路由器,在瀏覽器中輸入192.168.1.1,可以看到路由器的管理界面。

LAN設置是下面這個樣子的:

belkin-lansettings-1

這個例子中,局域網有效的IP范圍是從192.168.1.1到192.168.1.254.路由器的地址是192.168.1.1,DHCP分配的地址是從192.168.1.100到192.168.1.150(如果有必要,你可以更改這個范圍)。我給服務器分配的地址是192.168.1.4.

配置靜態IP地址

cd /etc/network
sudo nano interfaces

iface eth0 inet dhcp改成iface eth0 inet static

address 192.168.1.4
netmask 255.255.255.0
gateway 192.168.1.1

你可以看一眼/etc/resolv.conf中的配置,其中有一條記錄(很可能是指向你的默認網關的)

nameserver 192.168.1.1

你也可以把這一項直接指向網絡服務商的DNS服務器地址。雖然可以不重啟,重新連接網絡接口,我建議在這一步重啟,確保配置正確。

sudo reboot

登陸之后,用ifconfig確認服務器有一個靜態ip地址

…
eth0      Link encap:Ethernet  HWaddr b8:27:eb:8a:71:a0
inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
…

開啟ssh

SSH(Secure Shell)是一種網絡協議,你可以用命令行通過這種協議遠程登陸,控制計算機。就像名稱中所說的一樣,這種遠程控制是安全的,因為數據在網絡上傳輸的時候是加密的(所以別人看不到你的密碼之類的信息)。它還提供例如隧道之類的很棒的特性,我們在這里不去深入討論。

ssh服務在默認的鏡像上有,默認也是開啟的。你可以用raspi-config打開或關閉ssh服務。

現在你可以用ssh遠程訪問樹莓派(在同一個網絡下)。如果你有另一台在同一個網絡下,並裝有linux的電腦,就可以在終端運行

ssh 192.168.1.4

然后會以同樣的用戶名登陸。如果想用用戶名不同的帳戶,在ip前輸入用戶名,並且用@來分隔。例如

ssh user1@192.168.1.4

MAC上也有ssh,你可以用同樣的命令登陸。

如果你用Windows,那么有好幾種選擇,我推薦開源軟件Putty。

讓外網可以訪問服務器

然后,我們來設置路由器,讓ssh和網絡數據可以通過防火牆連到樹莓派。

你把pi帳戶的默認密碼改掉了吧?如果沒改掉默認密碼,任何人都可以登陸到你的樹莓派上。

家庭網絡中的ip地址是局域網的地址,局域網是個私有網段,外網是無法訪問的。你的網絡服務商會提供一個動態IP,這個IP是路由器在使用的。為了讓外網可以訪問你的樹莓派,必須把樹莓派的地址轉換為一個外網地址。這個過程叫網絡地址轉換(NAT)。

需要開放的端口號是80(http默認端口),如果你想在外網的計算機上登陸,還需要開放22端口(ssh默認)。

這一步需要查閱路由器的說明書。這個例子中,我的Belkin路由器是在防火牆>虛擬服務器設定中(見下圖),但是Netgear的路由器在高級>安全>IP轉發中。

belkin-virtual-server1

DNS

最后一步是給你路由器的IP綁定一個域名。從我個人的情況而言,寬帶服務商是Virgin Media。雖然他們提供的是動態IP,但是地址通常是不會變的。我在一個域名服務商那里注冊了一個靜態的域名。這個域名大概一年只需要更新一次,或者當Virgin Media進行大規模網絡維護的時候更新一次。

如果你的IP是動態的,而且經常變動,你就要注冊一個動態域名服務。

安裝Apache

Apache服務器可以從Debian的源中下載。可以用apt下載。

首先要更新apt的軟件列表。如果不運行sudo apt-get updata的話,apt軟件就不知道有沒有新的軟件包或者版本更新。

Apache可以用下面的命令來安裝

sudo apt-get install apache2

安裝mysql

mysql在Debian的源中也有,可以用這個命令來安裝

sudo apt-get install mysql-server

安裝過程中,會出現一個提示符讓你輸入一個密碼。

這個密碼是mysql root用戶的密碼。

安裝php

Perl是系統預裝的,所以我這里只寫PHP的安裝。

輸入下面的命令,就可以安裝PHP 5,以及PHP訪問mysql數據庫所需要的庫。

sudo apt-get install php5
sudo apt-get install php5-mysql

配置完成

安裝完成后,可以在瀏覽器中輸入你路由器的IP或域名,就可以訪問你的網站了。

你應該能看到一個頁面顯示“It works”,但是沒有其它內容。

刪掉/var/www/index.html,創建一個/var/www/index.php,內容是這個鏈接內的內容,可以測試服務器和PHP工作是否正常。

注意,這個鏈接的文件擴展名是txt,是為了不讓我的服務器執行這個文件,你應該把下載下來的文件擴展名改為php,讓服務器把它當成PHP腳本來執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM