這篇文章的配置過程不是最詳細的,但可能是最全的。
由于原服務器到期,所以索性租了一個新的云服務器,用了兩天時間,終于完成服務器的配置與網站數據的遷移。第一次自己獨立進行服務器的配置,踩了不少坑,簡單記錄配置過程,以備后用。
原文地址: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.1
或localhost
檢查是否正常安裝及工作。若看到“It works!”即表示Apache已經正常安裝及運行。
Apache的默認安裝,會在/var
下建立一個路徑為www/html/
的目錄,這個就是Web目錄了,所有要能過瀏覽器訪問的Web文件都要放到這個目錄里。
?? 由于使用遠程連接,無法通過訪問
127.0.0.1
或localhost
進行驗證,可以使用本地的瀏覽器訪問遠程服務器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.1
或localhost
檢查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.com
或https://{IPAddress}
,檢查配置是否正確。
?? 由于阿里云ECS服務器默認沒有放行HTTPS(443)端口,所以需要先在阿里云控制臺配置安全組以通過瀏覽器正常訪問服務器,詳見本文阿里云安全組配置。
301跳轉配置
使用301跳轉,需開啟Apache2的rewrite模塊:
a2enmod rewrite
執行完畢后會提示重啟Apache。
同時,需要修改Apache的配置文件/etc/apache2/apache2.conf
,找到如下記錄并修改AllowOverride
原值None
為All
以開啟重寫功能:
<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>
對所有的一級域名訪問添加“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配置即可。
……
在遷移過程中,難免遇見大大小小的問題,有的可能容易解決,有的可能意想不到,當沒有頭緒的時候,不如換換思維,做點別的事情,說不定哪個“恍然間”問題就解決了:)