用LAMP棧從零搭建部署基礎(chǔ)個(gè)人網(wǎng)站
時(shí)間:2023-05-31 22:15:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-31 22:15:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
用LAMP棧從零搭建部署基礎(chǔ)個(gè)人網(wǎng)站:
前言
我開(kāi)始的目的是為了找軟件工程工作,決定嘗試通過(guò)把個(gè)人學(xué)校項(xiàng)目搭建在云服務(wù)器端,將其展示給招聘者?,F(xiàn)在完成后決定下一步擴(kuò)建其成個(gè)人博客。這篇文章介紹了從最開(kāi)始的購(gòu)買(mǎi)域名、購(gòu)買(mǎi)云服務(wù)器,到中間的部署LAMP棧到服務(wù)器,到最后的協(xié)議加密安全、CA注冊(cè)。文章的目的是為了幫助記下整個(gè)從0到1搭建部署一個(gè)基礎(chǔ)個(gè)人網(wǎng)站的一種低費(fèi)用方案的技術(shù)過(guò)程,使不只是我自己受益。
內(nèi)容表單
- 所需主要資源
- 費(fèi)用
- 搭建部署過(guò)程
- 注冊(cè)AWS,設(shè)置Amazon EC2服務(wù)
- 發(fā)行一個(gè)instance
- 部署LAMP
- (可選)使用WinSCP通過(guò)GUI進(jìn)行本地和遠(yuǎn)程instance的文件傳輸
- (推薦)給操作系統(tǒng)配置SSL/TLS,實(shí)現(xiàn)加密數(shù)據(jù)傳輸,和獲得安全證書(shū)
- 展示
所需主要資源
- 域名: 有名的域名注冊(cè)商有阿里云,AWS,godaddy。我在namecheap (namecheap.com) 購(gòu)買(mǎi)了一個(gè).io域名。這是一個(gè)國(guó)家地區(qū)頂級(jí)域名 (zh.wikipedia.org/wiki/.io),我不確定在國(guó)內(nèi)相關(guān)系統(tǒng)里有無(wú)備案。
- 云服務(wù)器:有名的有阿里云和AWS。我使用了亞馬遜的網(wǎng)絡(luò)服務(wù) - Amazon EC2 (https://aws.amazon.com/ec2/), 其可以理解為配置操作系統(tǒng)及應(yīng)用(比如LAMP)的界面或平臺(tái)。并在上面配置了一個(gè)Amazon Linux 2 作為AMI (https://aws.amazon.com/amazon-linux-2/),其可以理解為L(zhǎng)inux的一個(gè)發(fā)行的操作系統(tǒng),這是AWS維護(hù)和更新最多的版本。
- LAMP棧相關(guān)應(yīng)用:必要的是AMP架構(gòu):Apache web server,MariaDB (MySQL server),PHP程序語(yǔ)言工具??蛇x的主要有:幫助管理MySQL數(shù)據(jù)庫(kù)系統(tǒng)的GUI - PhpMyAdmin,幫助本地和遠(yuǎn)程(云服務(wù)器)文件傳輸?shù)腉UI管理工具:WinSCP,連接本地到遠(yuǎn)程的SSH Client:Putty等等... 下面搭建過(guò)程都會(huì)介紹。
- 網(wǎng)絡(luò)安全配置(推薦): TLS網(wǎng)絡(luò)數(shù)據(jù)傳輸加密,CA (Certificate Authority)證書(shū)。
費(fèi)用
- 域名:$28/年。
- 云服務(wù)器:暫時(shí)免費(fèi)。取決于選擇的具體服務(wù)器:主要是容量和服務(wù),
- LAMP棧:開(kāi)源應(yīng)用。
- CA證書(shū):免費(fèi)。通常需要費(fèi)用。我使用了Let's Encrypt (letsencrypt.org) 項(xiàng)目作為CA,免費(fèi),并支持自動(dòng)延期。
搭建部署過(guò)程
因?yàn)楹芏噙^(guò)程在Amazon AWS文檔有工整的記錄,大部分過(guò)程我在引用其文檔的基礎(chǔ)上添加注意事項(xiàng)、過(guò)程描述。
1. 注冊(cè)AWS,設(shè)置Amazon EC2服務(wù)
- 建立的Key Pair是為了安全登陸你將在Amazon Linux 2上建立的instance。
- 建立的security group是類(lèi)似防火墻的規(guī)則,用來(lái)控制inbound和outbound訪(fǎng)問(wèn)協(xié)議種類(lèi)。
2. 發(fā)行一個(gè)instance
注意:
- 選擇AMI的時(shí)候,選擇Linux 2,因?yàn)檫@是AWS維護(hù)和更新最多的操作系統(tǒng)版本。
- 選擇Instance Type的時(shí)候,在大多區(qū)域選擇t2.micro會(huì)符合一個(gè)叫做free tier的資格,大概是免費(fèi)試用期(https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)。
- 你不需要進(jìn)行上述文檔的第三部:clean up instance,因?yàn)槟阋^續(xù)完成本文的后續(xù)步驟。
- 在上述文檔里面第二步:連接到instance,注意自己的本地操作系統(tǒng)和連接instance的方式選擇相應(yīng)文檔進(jìn)行步驟,我選的是通過(guò)SSH Client將本地的Windows連接instance:
3. 部署LAMP
從鏈接文檔的步驟里可以了解到,LAMP作為開(kāi)源應(yīng)用被使用者通過(guò)本地連接到Amazon Linux2的EC2 instance作為平臺(tái),部署在基于Amazon Linux 2操作系統(tǒng)的Amazon EC2 instance上,實(shí)現(xiàn)了免費(fèi)的全棧部署。并且當(dāng)instance運(yùn)行的時(shí)候,Apache和MySQL可以配置成自動(dòng)運(yùn)行。
注意:
- 【連接Apache 和 MySQL】當(dāng)Apache server 和 MySQL server需要連接的時(shí)候,你需要知道連接的socket port number 和 host。host是localhost,或 127.0.0.1,我原以為是instance的ip,但這兩個(gè)server應(yīng)該在instance上本地連接;port number 一般是3306,一般通過(guò)在command shell通過(guò)SSH連接到instance后,先準(zhǔn)備進(jìn)入MySQL client,
[ec2-user ~]$mysql -u root -p
root是一般在配置MySQL時(shí)默認(rèn)的用戶(hù)。輸入配置好的密碼后,進(jìn)入MySQL client console, 查看port,
[ec2-user ~] mysql> SHOW VARIABLES WHERE Variable_name = 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port | 3306 |+---------------+-------+1 row in set (0.00 sec)
你能看到MySQL server在哪個(gè)port listening。
- 【(可選)配置Python 3.x】Amazon Linux 2環(huán)境不自帶python3.x的軟件包,只有pyhton2.x,如果你的LAMP項(xiàng)目需要Python3.x使用MySQL,你可以按以下步驟手動(dòng)安裝。
首先下載Python 3.x。到2020年8月,最新的是3.6和3.7,你可以先檢查可以安裝的版本,以3.7為例,先安裝Python 3.7
[ec2-user ~]$ sudo yum install python37
再安裝python package安裝渠道工具pip
[ec2-user ~]$ curl -O https://bootstrap.pypa.io/get-pip.py[ec2-user ~]$ python3 get-pip.py
為了保證pip是最近的版本 (pip可能需要替換成pip3):
[ec2-user ~]$ pip install pip --upgrade
為了把package方便管理,我在ec2-user(默認(rèn)instance username)home directory下面建立一個(gè)virtual environment:(將my_app替換成你的項(xiàng)目名,env替換成你的虛擬環(huán)境名)
[ec2-user ~]$ python3 -m venv my_app/env
然后activate這個(gè)virtual environment:
[ec2-user ~]$ source ~/my_app/env/bin/activate(env) [ec2-user ~]$
在這個(gè)virtual env里面,下載python需要的MySQL相關(guān)包
[ec2-user ~]$ sudo yum install mysql-devel gcc gcc-devel python-devel[ec2-user ~]$ sudo yum install MySQL-python
查看所有開(kāi)發(fā)包
[ec2-user ~]$ sudo yum search python3 | grep devel
看到
python3-cairo-devel.x86_64 : Libraries and headers for python3-cairopython3-devel.x86_64 : Libraries and header files needed for Python 3 : developmentpython34-devel.x86_64 : Libraries and header files needed for Python 3 : development
安裝需要的
[ec2-user ~]$ sudo yum install -y python3-devel.x86_64
到此,你應(yīng)該有一個(gè)虛擬環(huán)境配置能連接MySQL的python 3.7應(yīng)用在instance上。
4. (可選)使用WinSCP通過(guò)GUI進(jìn)行本地和遠(yuǎn)程instance的文件傳輸
注意:
- 在使用WinSCP進(jìn)行同步本地和遠(yuǎn)程、更新遠(yuǎn)程文件操作時(shí)候,為了能夠修改一些本來(lái)沒(méi)有權(quán)限修改的instance上的配置文件,在準(zhǔn)備用配置好的instance登陸的時(shí)候,選擇SFTP protocal,option修改成
sudo /usr/libexec/openssh/sftp-server
參考 How to run SUDO command in WinSCP to transfer files from Windows to linux
5. (推薦)給操作系統(tǒng)配置SSL/TLS,實(shí)現(xiàn)加密數(shù)據(jù)傳輸,和獲得安全證書(shū)。
5.1. 你會(huì)先需要一個(gè)域名。我在namecheap注冊(cè)商購(gòu)買(mǎi)了一個(gè).io。
5.2. 完成下述文檔的第一步、第二步。你不必要完成第三步:強(qiáng)化安全配置。
5.3. 使用Let's Encrypt和Certbot申請(qǐng)CA證書(shū),并設(shè)置自動(dòng)更新,參看:
5.4. 將你的域名“指向”或“連接”instance的公共ip地址。注:你的EC2 console里面設(shè)置elastic IP,目的是固定,無(wú)論如何重啟instance。參考這篇文章。
到此,你便有了一個(gè)數(shù)據(jù)傳輸加密的、擁有安全證書(shū)的、LAMP部署成功、基于Amazon Linux 2操作系統(tǒng)的instance作為你的云服務(wù)器或云主機(jī),整個(gè)過(guò)程完成不超過(guò)2天,并很可能只產(chǎn)生域名的購(gòu)買(mǎi)費(fèi)用。下一步你可以使用WinSCP將你的本地項(xiàng)目或博客部署到遠(yuǎn)程的apache根目錄下,一般是/var/www/html,進(jìn)行你的個(gè)人網(wǎng)站搭建;同時(shí)仔細(xì)閱讀相關(guān)的free tier信息,注意后續(xù)AWS服務(wù)費(fèi)用。
free tier offers from AWS:
https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc展示: hzhaoc.io