可能是最全的LAMP環境配置記錄 - 記第一次配置服務器環境

這篇文章的配置過程不是最詳細的,但可能是最全的。
由于原服務器到期,所以索性租了一個新的云服務器,用了兩天時間,終于完成服務器的配置與網站數據的遷移。第一次自己獨立進行服務器的配置,踩了不少坑,簡單記錄配置過程,以備后用。

原文地址:https://www.zlucy.com/archives/281/

服務器環境配置

新的服務器是阿里云的ECS云服務器,全程使用遠程連接進行配置。

macOS下,使用終端命令即可進行連接:

ssh root@{IPAddress}

新的云服務器使用的是Ubuntu 16.04的系統,網站運行在Apache+MySQL+Php(AMP)環境下,所以需要手動搭建環境。

安裝Apache2

apt install apache2

?? 由于配置時使用root賬戶,所以本文章所有命令均是以管理員身份執行,非管理員賬戶請在命令前加sudo以管理員身份執行命令。

命令執行期間會詢問(y/n)輸入y回車即可。

命令執行完畢后,Apache服務已經自動啟動,可通過服務器的瀏覽器訪問127.0.0.1localhost檢查是否正常安裝及工作。若看到“It works!”即表示Apache已經正常安裝及運行。

Apache的默認安裝,會在/var下建立一個路徑為www/html/的目錄,這個就是Web目錄了,所有要能過瀏覽器訪問的Web文件都要放到這個目錄里。

?? 由于使用遠程連接,無法通過訪問127.0.0.1localhost進行驗證,可以使用本地的瀏覽器訪問遠程服務器IP地址檢查Apache2是否正常安裝及工作。

?? 由于阿里云ECS服務器默認沒有放行80端口,所以需要先在阿里云控制臺配置安全組以通過瀏覽器正常訪問服務器,詳見本文阿里云安全組配置

Apache重啟:

/etc/init.d/apache2 restart

service apache2 restart

安裝MySQL

apt install mysql-server

在安裝期間,會要求設置mysql數據庫的root賬戶密碼,兩次輸入密碼后,完成安裝。安裝完成之后可以使用如下命令來檢查是否安裝成功:

netstat -tap | grep mysql

通過上述命令檢查之后,如果看到有mysql 的socket處于 listen 狀態則表示安裝成功。

登陸mysql數據庫可以通過如下命令:

mysql -u root -p

-u:登陸的用戶名;

-p:登陸的用戶密碼。

上面命令輸入之后會提示輸入密碼,輸入密碼就可以登錄到mysql。

然后通過show databases;就可以查看當前所有的數據庫,exit退出mysql。

安裝PHP(7.0)

apt install php

安裝PHP-mysql擴展

apt install php-mysql

安裝Apache-PHP擴展

apt install libapache2-mod-php

重啟Apache。

在Apache2的Web服務根目錄(var/www/html)中,寫入index.php文件:

<?php
    phpinfo();
?>

刪除目錄中原有的index.html

通過服務器的瀏覽器訪問127.0.0.1localhost檢查PHP是否正常安裝。同樣,在本地使用http://{IPAddress}進行訪問。

安裝phpMyAdmin

通過終端操作數據庫終究不是那么方便,可以使用數據庫客戶端遠程連接數據庫進行操作或使用phpMyAdmin進行數據庫管理。

apt install phpmyadmin

在安裝過程中會要求選擇Web server:apache2或lighttpd,使用空格鍵選定apache2,按tab鍵然后確定。接下來會要求輸入Mysql數據庫的管理員密碼。

接下來,將phpMyAdmin與Apache的Web服務目錄進行軟連接:

ln -s /usr/share/phpmyadmin /var/www/html

通過瀏覽器訪問http://localhost/phpmyadmin就可以使用phpMyAdmin進行數據庫管理了。同樣,在本地使用http://{IPAddress}/phpmyadmin進行訪問。

至此,LAMP的基本組件就安裝完畢了。

設置Ubuntu文件執行讀寫權限

由于Linux系統的安全性原則,改系統目錄下的文件讀寫權限是只允許root用戶操作的,所以我們不能在Apache的Web服務目錄中新建php文件,也不能修改和刪除,所以必須要先修改/var/www/html目錄的讀寫權限。

chmod -R 777 /var/www/html

-R:同時修改所有子目錄及文件的權限;

777:所有用戶均可讀寫執行。

使用Git進行代碼管理及網站部署

搭建Git服務

安裝Git

apt install git

新建Git用戶組

groupadd git

新建git用戶

useradd git -m -s /sbin/nologin -d /home/git -g git

-m, --create-home:創建Home目錄;

-s, —shell:指定一個shell,下面是不能登錄的;

-d, --home-dir:指定具體Home目錄在哪;

-g, --gid GROUP:指定組名或組的ID。

修改git用戶的密碼

passwd git

創建空倉庫(可使用cd命令進入倉庫存放的目錄)

git init --bare yourweb.git  

--bare:空倉庫。

修改倉庫權限

chown -R git:git yourweb.git

為避免以后每次操作需要輸入密碼,生成本地公鑰,添加公鑰至服務器

ssh-keygen

?? 此操作是在本地終端進行,并非連接到遠程服務端下操作。可通過終端命令前的標識可區分本地還是遠端。

macOS下生成的公鑰在/Users/{Username}/.ssh/目錄下,id_rsa.pub即為公鑰,使用文本編輯工具打開,完整復制內容,寫入遠端git用戶的Home目錄下/home/git/.ssh/authorized_keys,每行一個公鑰。authorized_keys文件不存在就按照路徑創建。

Git本地(客戶端)克隆測試

git clone git@{IPAddress}:/具體目錄/yourweb.git

如:git clone git@39.121.33.34:/home/git/test.git

同步更新網站文件

創建hook任務

進入遠端yourweb.git目錄,在/hooks/目錄下創建post-receive文件。

post-receive中加入如下代碼:

git --work-tree=/var/www/html/yourweb checkout -f

--work-tree:工作目錄

checkout:檢出

-f:強制執行

修改post-receive文件執行權限

chmod +x post-receive

+x:增加執行權限

為增加git用戶增加修改Web 目錄的權限

chown -R git:git /var/www/html/yourweb

現在可以在本地修改index.php文件,或者添加一個新文件,提交到遠程倉庫,然后在/var/www/html/yourweb下面,看看有沒有剛才提交的文件。

至此,一個使用Git進行自動部署的Web服務器就搭建完成了。

網站配置

接下來只需要通過Git提交網站文件及綁定域名,就可以通過域名訪問網站了。域名綁定及設置詳見本文域名解析配置

本次是網站遷移,所以后續還有一些東西要配置。

這個網站使用的是Typecho。由于網站已經配置過,需要進行手動修改配置文件或刪除網站根目錄下的config.inc.php文件重新進入引導。主要就是數據庫的配置。

數據庫配置及數據遷移

在修改網站配置文件前,需要手動在服務器的mysql數據庫中添加用戶及數據庫,這里使用phpMyAdmin。

在瀏覽器中打開http://{IPAddress}/phpmyadmin,輸入數據庫賬戶及密碼,進入數據庫。

這里可以新建一個用戶及數據庫,或者直接使用root用戶僅新建一個數據庫。

新建數據庫用戶:點擊“用戶賬戶”選項卡—“新增賬戶用戶“,設置登錄信息,勾選“創建與用戶同名的數據庫并授予所有權限。”,點擊“執行”,賬戶及數據庫就創建成功了。

在左側數據庫列表中,就可以看到一個與用戶名同名的數據庫了。

數據遷移

在原數據庫中,導出數據,導出時注意編碼方式。

在新數據庫中導入對應的數據庫。

網站配置

手動修改的方式:

打開網站的config.inc.php文件,找到最后幾行:

/** 定義數據庫參數 */
$db = new Typecho_Db('Pdo_Mysql', 'typecho_');  //數據庫連接方式,數據庫表前綴
$db->addServer(array (
  'host' => 'localhost',        //數據庫地址
  'user' => 'typecho',          //數據庫用戶名
  'password' => '******',       //數據庫密碼
  'charset' => 'utf8',          //數據庫編碼格式
  'port' => '3306',             //數據庫端口
  'database' => 'typecho',      //數據庫名稱
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

保存文件,提交變更。

使用引導的方式設置:

刪除網站的config.inc.php文件,打開網站,即可進入配置引導。

?? 由于數據庫已經導入了數據,在引導完成時,會提醒是否保留數據,選擇保留!

至此,網站數據遷移完成。

SSL配置

開啟Apache2的SSL模塊

a2enmod ssl

執行完畢后會提示重啟Apache。

上傳證書

這里用的是阿里云的免費證書,在阿里云的控制臺可下載證書相關文件:

214184720410***.key
214184720410***.pem
chain.pem
public.pem

這里可以使用ssh的SFTP服務進行文件上傳,macOS下可使用FileZilla客戶端連接遠端的文件服務。

證書文件分別放置如下位置:

# 214184720410***.key
/etc/ssl/private/214184720410***.key

# chain.pem
/etc/ssl/certs/chain.pem

# public.pem
/etc/ssl/certs/public.pem

修改默認的ssl配置文件default-ssl.conf,文件位于/etc/apache2/site-available目錄下:

ServerName www.yourwebdomain.com
DocumentRoot /var/www/html/yourweb

# 證書公鑰配置
SSLCertificateFile  /etc/ssl/certs/public.pem
# 證書私鑰配置
SSLCertificateKeyFile /etc/ssl/private/214184720410125.key
# 證書鏈配置,如果該屬性開頭有'#'字符,請刪除掉
SSLCertificateChainFile /etc/ssl/certs/chain.pem

保存文件,啟用配置:

a2ensite default-ssl.conf

執行完畢后會提示重新加載Apache:

service apache2 reload

若配置文件出錯,則會重載失敗,請檢查證書文件路徑及文件是否正確。

在本地瀏覽器訪問https://www.yourwebdomain.comhttps://{IPAddress},檢查配置是否正確。

?? 由于阿里云ECS服務器默認沒有放行HTTPS(443)端口,所以需要先在阿里云控制臺配置安全組以通過瀏覽器正常訪問服務器,詳見本文阿里云安全組配置

301跳轉配置

使用301跳轉,需開啟Apache2的rewrite模塊:

a2enmod rewrite

執行完畢后會提示重啟Apache。

同時,需要修改Apache的配置文件/etc/apache2/apache2.conf,找到如下記錄并修改AllowOverride原值NoneAll以開啟重寫功能:

<Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all denied
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

<Directory /var/www/html/yourweb/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

301重定向有兩種實現方式,一種是在網站的根目錄下加入.htaccess文件,寫入跳轉規則;另一種則是在Apache的website配置文件中加入跳轉規則。前者規則配置集中便于管理,后者規則較為分散但針對不同域名有更高的靈活度。本例中使用.htaccess進行配置。

強制HTTPS訪問

如果網站已經配置SSL證書,開啟了HTTPS的訪問,那么網站中HTTP鏈接便會影響網站的安全,而來自HTTP的訪問也無法訪問HTTPS的鏈接,所以需要強制使用HTTPS訪問。

在網站的根目錄下創建.htaccess文件,寫入如下規則:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [L,R=permanent]

</IfModule>

domain.com跳轉www.domain.com

對所有的一級域名訪問添加“www”可以保證網站權重的集中,如果不做跳轉,網站的權重會分散,導致搜索引擎的排名的不理想。

規則如下:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} ^domain.com
    RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=permanent]

</IfModule>

Typecho的偽靜態配置

Typecho提供了偽靜態的選項,這讓網站看起來是一個靜態站,開啟偽靜態對SEO的優化也有很重要的影響。

規則如下(參考:Typecho開啟偽靜態并隱藏index.php):

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,E=PATH_INFO:$1]

</IfModule>

在Typecho網站的后臺,“設置”—“永久鏈接”選項卡下可以開啟并設置偽靜態樣式。

?? 若開啟時提示“重寫功能檢測失敗, 請檢查你的服務器設置”,可勾選“如果你仍然想啟用此功能, 請勾選這里”,以強制開啟偽靜態,但同時要在網站的.htaccess文件中配置好規則,否則會導致所有二級頁面無法訪問。

其他相關

阿里云安全組配置

在阿里云的控制臺中,“云服務器ECS”—“網絡和安全”—“安全組”選項下,可以看到所有的安全組,在需要配置的安全組中,進入“配置規則”。

在“入方向”選項卡下添加以下規則:

授權策略 協議類型 端口范圍 授權類型 授權對象 描述 優先級
允許 自定義TCP 443/443 地址段訪問 0.0.0.0/0 HTTPS端口 1
允許 自定義TCP 21/21 地址段訪問 0.0.0.0/0 FTP端口 1
允許 自定義TCP 3306/3306 地址段訪問 0.0.0.0/0 數據庫端口 1
允許 自定義TCP 80/80 地址段訪問 0.0.0.0/0 HTTP端口 1
允許 自定義TCP 22/22 地址段訪問 0.0.0.0/0 SSH端口 110
允許 自定義TCP 3389/3389 地址段訪問 0.0.0.0/0 遠程桌面端口 110
允許 全部 ICMP -1/-1 地址段訪問 0.0.0.0/0 系統創建規則 110

本例中,并沒有使用到3306、21及3389端口。因為數據庫與Web服務在同一服務器,所以在網站運行中并不需要使用3306端口,如果需要在本地客戶端鏈接遠端數據庫,此端口需要打開。21端口是用于FTP文件服務,在本例中,使用了SSH的SFTP服務,所以也并沒有使用到21端口,而是使用了22端口。22端口是SSH端口,是由系統創建的規則,不需要再進行創建。因為使用SSH遠程連接,所以3389端口也并沒有使用。

對于使用不到的端口,可以刪除規則,或者修改授權策略為不允許,以保證服務器的安全。

可以在遠端通過命令查看服務器使用到那些端口,再添加或修改相應的規則:

netstat -atunlp

在生產環境中,可能會用到更多端口及配置更多規則,詳情查看阿里云官方文檔

CDN配置(阿里云)

CDN(Content Delivery Network):內容分發網絡。可以提高網站的訪問速度,保護服務器源站信息,降低帶寬使用成本等。

在阿里云的控制臺中,“CDN”—“域名管理”下,添加要加速的域名。

根據網站的不同用途,選擇不同的業務類型:圖片小文件、大文件下載、視音頻點播、直播流媒體。

源站可以為IP地址或域名,但要加速的域名,不可與源站域名相同。

端口選擇網站使用的端口,443端口需要添加網站相應的證書,可根據引導添加。

域名添加完成后,可以設置加速規則、訪問控制、性能優化等設置選項,本例著重說明“緩存設置”。

緩存設置是CDN對網站加速的一個重要設置,設置好的緩存規則,可以提高CDN命中率,加快網站訪問速度,及減少源站流量用量:

地址 類型 過期時間 權重
jpg,png 文件后綴名 1月 90
js,css 文件后綴名 30分 80
php 文件后綴名 0年 1
asp 文件后綴名 0年 1
aspx 文件后綴名 0年 1

?? CDN緩存配置支持針對目錄、后綴名的兩種緩存規則設置,暫時還不支持針對于具體文件(URL)的緩存設置。在設置多條緩存策略后選擇對應的配置并通果優先級的向上/向下來調整個配置優先級,遇到具體文件將按照優先級由高至低進行匹配。

當需要設置某個目錄或后綴不緩存,過期時間設置為0秒即可 。

規則配置好之后,我們需要設置相應的域名解析,以實現加速。在域名管理的列表中,可以查看CName。

域名解析配置(阿里云)

在阿里云的控制臺,“云解析 DNS”—“解析設置”下,進行域名的解析操作。

添加一條解析

記錄類型有A、CNAME、AAAA、NS、MX、SRV、TXT、CAA、顯性URL、隱形URL。

  • A:地址記錄,用來指定域名的IPv4地址,如果需要將域名指向一個IP地址,就需要添加A記錄。
  • CNAME: 如果需要將域名指向另一個域名,再由另一個域名提供ip地址,就需要添加CNAME記錄。
  • AAAA:用來指定主機名(或域名)對應的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)記錄。
  • TXT:在這里可以填寫任何東西,長度限制255。絕大多數的TXT記錄是用來做SPF記錄(反垃圾郵件)。
  • NS:域名服務器記錄,如果需要把子域名交給其他DNS服務商解析,就需要添加NS記錄。
  • MX:如果需要設置郵箱,讓郵箱能收到郵件,就需要添加MX記錄。
  • SRV:記錄了哪臺計算機提供了哪個服務。格式為:服務的名字、點、協議的類型。
  • 顯性URL:從一個地址301重定向到另一個地址的時候,就需要添加顯性URL記錄(注:DNSPod目前只支持301重定向)。
  • 隱性URL:類似于顯性URL,區別在于隱性URL不會改變地址欄中的域名。

主機記錄一般有www、@、*以及其他

  • www:解析后為www.domain.com
  • @:直接解析主域名
  • *:泛解析,除已設置的主機記錄外,均解析到此地址
  • mail:將域名解析為mail.aliyun.com,通常用于解析郵箱服務器。
  • 二級域名:如:abc.aliyun.com,填寫abc。
  • 手機網站:如:m.aliyun.com,填寫m。
  • 顯性URL:不支持泛解析(泛解析:將所有子域名解析到同一地址)

記錄值即為要解析到的地址,或域名,或配置等。

在域名解析設置中,不同的記錄類型主機記錄可能會有沖突,比如在使用了郵件服務的域名下,設置了MX的“@”記錄,則CNAME記錄就不能再使用“@”主機記錄了。

詳細沖突原因可查閱設置解析記錄時提示沖突的原因

設置CDN加速

可設置記錄類型為CNAME,主機記錄為“www”,記錄值為CDN域名列表中相應域名的CNAME值即可。

最后再說幾句

用了兩天時間完成了此次的網站遷移,期間也踩了不少坑:

比如SSL證書配置好之后,無法使用HTTPS訪問,以為是SSL證書配置問題,各種檢查無果,恍然間才發現是ECS的安全組配置沒有放行443端口,規則修改后,即可正常訪問了。

又比如設置Typecho的301重定向,導致所有二級頁面全部404,查閱后,發現需要手動配置.htaccess文件,而之前服務器則不需要手動配置。配置好.htaccess文件后,網站的后臺設置均無法保存,初以為是數據庫權限問題,又重新設置一遍數據庫,但是問題依舊,各種折騰無果,又是恍然間,發現是Typecho偽靜態的301重定向規則不夠完善,僅僅對前臺重定向正確,后臺鏈接重定向錯誤,導致數據不能正常提交,修改.htaccess文件,重寫301重定向規則,問題解決。

又如在未開啟HTTPS訪問前,導致網站所有樣式丟失,檢查后發現是因為原網站的配置文件開啟了HTTPS相關,導致在HTTP下,無法訪問HTTPS資源,所有樣式丟失。關閉HTTPS相關配置,問題解決,配置好SSL后,重新開啟網站HTTPS配置即可。

……

在遷移過程中,難免遇見大大小小的問題,有的可能容易解決,有的可能意想不到,當沒有頭緒的時候,不如換換思維,做點別的事情,說不定哪個“恍然間”問題就解決了:)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容