朋友想搭一個境外網站,找我幫忙,希望服務器、域名都在境外。我沒有在境外建站的經歷,只能先嚐試。於是上網搜索了一下境外服務器,大家比較常用的是Digital Ocean和AWS,我索性打開這兩家的官網,打算自己比較一下,後來選擇AWS,是因爲他的官網打開的比Digital Ocean快,就這一點,我義無反顧地選擇了AWS。
簡單介紹一下,AWS即Amazon Web Services,是Amazon提供的建站平臺,在上面可以購買空間、數據庫、雲計算等服務,官網地址https://aws.amazon.com/。要使用它的服務首先要註冊一個賬號,註冊的過程中會需要用到信用卡,還會接到一個電話要求輸入網站上提供的PIN碼用於驗證你填的手機號,跟隨指引,基本上很簡單就能完成。
第一部分 新建EC2例
註冊完成後登錄管理控制檯,控制檯首頁可以看到幾個選項卡:
很好理解,第一個就是構建虛擬機,以我的經驗,建站的空間就在這裏申請。點一下啓動虛擬機,進入如下界面
這是我首次接觸EC2這個概念,搜索了一下,它是指Elastic Compute Cloud,即彈性雲計算,和國內的雲虛擬主機的概念差不多,一個EC2實例就是一個雲虛擬主機。接下來的步驟就是爲這個實例命個名:
然後選擇操作系統,點擊每個操作系統會有簡介,可以根據自己的技術方向選擇,由於我一個都不熟,於是我打算選Amazon的親兒子Amazon Linux AMI,這也是經驗之談,既然是Amazon的主機,用Amazon定製的Linux肯定沒毛病。
然後選擇實例類型,這是一個很人性化的界面,直接放了一個免費的類型,絕不會利用你看不懂就訛你錢,如果你是土豪並且有點文化可以選擇更多選項,像我這種掙扎在溫飽線的直接很HAPPY的選了免費型然後下一步
然後就是創建祕鑰,給這個祕鑰命個名,然後下載祕鑰文件後保存,這個祕鑰文件(*.pem)很重要
下載之後,點擊創建實例,就OK了。
然後返回控制檯首頁,可以看到最近訪問的服務下面有個EC2,直接點擊EC2,就進入到EC2控制面板,然後點擊正在運行的實例
可以看到我們剛纔創建的實例MyFirstInstance。
第二部分 使用PuTTY連接到實例(使用SSH協議)
接下來的工作就是要想辦法連接上這臺主機,方便我們在上面部署網站。右鍵點擊實例,在菜單中選擇連接,會顯示連接方式
這上面介紹了兩種方式,一種是使用SSH客戶端,一種是直接從瀏覽器連接,選擇直接從瀏覽器連接時會提示使用Chrome是不行的,請使用Firefox或者IE9+,並且還要安裝Java。
java我已經很熟悉了實在懶得重複這個工作,而且僅僅爲了連一下虛擬主機在我電腦上裝java我覺得不划算(雖然我還是默默安裝了個firefox),而且SSH客戶端對我而言還是個新事物我比較有好奇心,我毫不猶豫決定選擇SSH客戶端,並且選擇了上面提到的PuTTY客戶端。下面介紹下如何用PuTTY客戶端連接到EC2實例。
首先下載安裝PuTTY的過程就不說了,和一般軟件安裝過程一樣並且這個超級簡單。然後我們要做一些準備工作,在正在運行的實例列表中,選擇剛纔新建的實例,頁面底部可以看到實例的詳細信息,我們要記住的是實例的Public DNS(IPv4)
然後我們要對剛纔創建實例時下載的密鑰文件進行格式轉換,從PEM格式轉成PPK格式才能在PuTTY上使用,PuTTY自帶轉換工具PuTTYgen,安裝PuTTY後在開始菜單很容易找到PuTTYgen工具,啓動它
然後點擊Load,加載剛纔下載的私鑰pem文件,默認情況下選擇文件的界面那裏文件類型是*。ppk,我們要改成ALL FILES才能看到PEM文件
然後Type of key to generate那裏選擇SSH-2 RSA,
然後點擊Save private key,就可保存爲PPK文件了,這個PPK文件就是PuTTY可以用的密鑰文件,在一會兒的連接過程中會用到。
準備工作做完了,接下來啓動PuTTY,在左邊的目錄中選擇Session,一般情況下啓動時默認就是Session界面,在HostName中輸入user_name@public_dns_name
username按之前選的操作系統有幾種不同的值:
-
對於 Amazon Linux AMI,用戶名爲
ec2-user
。 -
對於 RHEL AMI,用戶名稱是
ec2-user
或root
。 -
對於 Ubuntu AMI,用戶名稱是
ubuntu
或root
。 -
對於 Centos AMI,用戶名稱是
centos
。 -
對於 Fedora AMI,用戶名稱是
ec2-user
。 -
對於 SUSE,用戶名稱是
ec2-user
或root
。
public_dns_name就是前面提到的必須要記住的Public DNS
然後Connection type選擇SSH
然後通過左邊的目錄切換到Conncetion——SSH——Auth,在右邊點擊Browse,選擇前面生成的PPK文件,然後切換回Session頁面,點擊Save,可以保存這些配置以供下次直接使用,點擊Open可以連接到EC2
下面是連接成功後的界面,就是Linux系統的命令窗口,在這個窗口通過命令可以執行一切我們希望的操作,部署網站就靠它完成。
第三部分 使用FileZilla連接到實例(使用SFTP協議)
這是一個題外話,但它介紹的內容也在後面的工作中承擔了很重要的作用:從Windows上傳文件到EC2實例中的Linux系統。使用PuTTY自帶的工具PSCP(基於命令的工具),或者WinSCP(基於windows GUI的工具)也可以從windows上傳文件到遠程Linux,爲什麼我選擇了FileZilla?理由很簡單,一是我恰好裝了FileZilla並且用的比較熟練,二是我想試試FileZilla行不行,因爲我以前一直用FTP協議連接遠程服務器,今天突然接觸到SSH協議,然後我就專門查了一下FTP和SSH區別,查的過程中別的沒記住,倒是記住了SFTP這樣一個由二者結合的協議,然後以前用FileZilla的時候有印象在選擇傳輸協議時有SFTP這個選項,所以想試試可不可以通過SFTP協議連接到EC2。
我啓動FileZilla,下面的一切都憑經驗進行
新建站點AWS,主機欄輸入Public DNS,端口輸22,協議選擇SFTP,登錄類型選擇密鑰文件,用戶前面解釋過了填ec2-user,密鑰文件選擇之前轉換成的PPK文件,其它的不管,點擊連接,由於是境外服務器網絡不穩定,經過多次嘗試後終於還是連接成功了,然後我還上傳了一個httpd-2.2.32.tar.gz文件,用於部署apache服務器的。
第四部分 部署Apache服務器
在Linux部署Apache服務器的步驟,常見於LAMP環境搭建的教程裏面。LAMP,即Linux + Apache + MySQL + PHP,有時候M也指MariaDB。搜索amazon ec2、lamp關鍵詞,很容易就能找到在ec2上部署apache的教程,然而我一開始並不知道lamp這個概念,於是一直搜索在linux上部署apache的教程,查出來的教程相當複雜,而且我還各種沒成功。後來總算讓我找到了一篇,原來在ec2上部署apache是一件非常輕鬆的事情,只需要如下幾行代碼:
sudo yum update sudo yum install gcc gcc-c++ make sudo yum install apache mysql php php-mysql mysql-server
上面第一行是更新系統環境,第2行是安裝C++編譯環境,第3行是安裝apache、mysql、php等組件。上述代碼運行完成後apache就成功安裝了。
測試apache是否成功安裝的方法:
apachectl -v
httpd -v
回顯版本號表示已經安裝成功
安裝完apache後,接下來啓動apache web服務:
sudo service httpd start
加sudo是爲了以管理員權限運行該命令,一般情況下這條命令需要有sudo纔會運行成功。
在官方的API文檔裏面看的更清楚:
第五部分 測試Apache服務器
在安裝apache服務器並啓動httpd服務後,接下來需要測試該服務器能否被正常訪問。在瀏覽器中輸入前面提到的Public DNS,應該就可以看到Apache測試頁面了。但一般情況下,只做到這一步的話,還看不到測試頁面,因爲還需設置下安全組規則。在EC2控制面板切到安全組頁面
然後在右邊選中MyFirstInstance實例後,右鍵單擊它,在菜單中選擇“編輯入站規則”:
在“編輯入站規則”中添加下面這樣一條規則:
它的含義是允許任何地方通過HTTP協議80端口訪問本實例,也就是通過網頁方式訪問本實例。這個時候基本上就大功告成了,在瀏覽器輸入Public DNS或者公有IP就能看到Apache測試頁了。
第六部分 關於彈性IP(EIP,Elastic IP)
通常情況下,我們申請的EC2實例在每次重啓之後,Public DNS和公有IP都會改變,如果是要做一個網站,服務器IP經常改變,那域名解析也要跟着變,這是個很麻煩的事情。這時候就需要申請EIP,並將EIP與EC2實例關聯,這個EIP就可以作爲這個實例的永久IP,除非我們手動取消關聯。關聯之後,我們可以在瀏覽器地址欄輸入EIP來訪問EC2實例。
申請EIP的方法:在EC2控制面板找到“彈性IP”頁面
然後在右邊選擇“分配新地址”
按照指引分配好新地址後,回到彈性IP頁面,右鍵點擊我們剛纔申請的EIP,選擇關聯地址,將前面的EC2實例關聯上去
然後就大功告成。
以上是這兩天的學習成果,很少,但學習過程也是十分繁瑣複雜,查了不少資料走了不少彎路浪費了不少時間,所以纔想寫一篇筆記記下來,讓以後少走彎路。後續將繼續學習在ec2上運行php的過程,在amazon申請域名並綁定到ec2實例的過程,逐步將網站建起來,學習過程中的經驗也會拿出來分享。