阿里雲伺服器又漲價了,感覺已經負擔不起了,但是又想擁有一臺自己的私人伺服器。某天,突然發現了樹莓派,價格便宜、高可用。心血來潮!!說搞就搞!!
準備工作
- 首先當然是有一臺樹莓派3代B型,淘寶價格¥190 + 周邊 = ¥216 可以搞定(兩個半月的阿里雲ECS,還是蠻實惠的)
- 支援埠對映的路由器(基本現在市面上的路由器都支援埠對映),我用的是小米路由器
- 買一個屬於自己的域名,如:www.uthinks.com
- 具有公網ip的寬頻,我家使用的聯通20M寬頻,很幸運有一個公網的IP。如果沒有公網IP,需要藉助花生殼來做內網穿透,不僅麻煩還有流量限制。
樹莓派裝機
系統安裝
下載樹莓派系統映象(www.raspberrypi.org/downloads/)
接著就是把映象燒入SD卡,windows下需要下載win32diskimager
(download.csdn.net/detail/long…解壓映象和win32diskimager(綠色版開啟即可使用),插入SD卡 --> 開啟win32diskimager --> 新增映象 --> 確認SD卡後點選燒寫即可
燒寫結束後,在windows下SD卡會顯示只有不到100M,不用擔心,因為這個分割槽只是Linux 的boot分割槽,而其他內容作為Linux 的檔案系統被掛載為ext4 檔案系統,Windows 下識別不了而已
把燒好的SD卡直接插入樹莓派SD卡槽中,接上電源等待系統安裝完成
系統配置
系統配置過程還是碰到很多坑,大家有什麼問題可以直接聯絡我,我會補充出來
- ssh無法登陸的問題
由於樹莓派預設沒有開啟sshd,所以我用HDMI連線上顯示器,執行命令sudo raspi-config
找到ssh然後enable後重啟就ok了
動態域名解析(DDNS)
家裡辦理的聯通寬頻有公網IP,決定好好利用,但是公網IP不固定,需要動態修改域名解析。
註冊域名
在阿里雲上購買自己喜歡的域名(抓緊時間備案,不然網站會被封)
(wanwang.aliyun.com/domain/com?…)如果有公網IP配置一條A記錄,如果你使用的是花生殼配置一條CNAME記錄
如何實現動態域名解析
下面給出的是python主要的核心程式碼,如果需要完整的環境程式碼請留言聯絡我。樹莓派系統映象中自帶Python,還是很方便的
獲取自己的公網出口IP
import urllib2 def getIp(): try: ip = visit("http://www.ip138.com/ip2city.asp") except: ip = "failed to get internet ip" return ip def visit(url): req = urllib2.Request(url) opener = urllib2.urlopen(req) result = opener.read() return result[result.find('[') + 1: result.find(']')]複製程式碼
下載alidns python SDK
(develop.aliyun.com/sdk/java?sp…)解壓安裝
sudo python setup.py install安裝alidns python SDK
pip install aliyun-python-sdk-alidns第1步獲取到自己的公網IP後,呼叫API設定DNS解析
import json from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest,DescribeDomainRecordsRequest, \ DescribeDomainRecordInfoRequest, AddDomainRecordRequest from aliyunsdkcore import client # 更新域名解析 def updateDns(accessKey, accessKeySecret, hostRecord, dnsType, dnsValue, dnsRecordid, dnsTtl, returnFormat): print hostRecord, dnsType, dnsValue, dnsRecordid, dnsTtl, returnFormat clt = client.AcsClient(accessKey, accessKeySecret, 'cn-hangzhou') request = UpdateDomainRecordRequest.UpdateDomainRecordRequest() request.set_RR(hostRecord) request.set_Type(dnsType) request.set_Value(dnsValue) request.set_RecordId(dnsRecordid) request.set_TTL(dnsTtl) request.set_accept_format(returnFormat) result = clt.do_action(request) return result # 獲取當前的解析IP def getDnsIp(accessKey, accessKeySecret, dnsRecordid, returnFormat): clt = client.AcsClient(accessKey, accessKeySecret, 'cn-hangzhou') request = DescribeDomainRecordInfoRequest.DescribeDomainRecordInfoRequest() request.set_accept_format(returnFormat) request.set_RecordId(dnsRecordid) result = clt.do_action(request) result = json.JSONDecoder().decode(result) result = result['Value'] return result複製程式碼
路由器埠對映,配置完成記得點選儲存並且生效
附:
accessKey、accessKeySecret如何獲取
登入阿里雲控制檯(ak-console.aliyun.com/#/accesskey)域名解析RecoreId如何獲取
# dns_domain 域名 如uthinks.com def check_records(dnsDomain): clt = client.AcsClient(accessKeyId, accessKeySecret, 'cn-hangzhou') request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(dnsDomain) request.set_accept_format('json') result = clt.do_action(request) print result return result 返回值: { "PageNumber": 1, "TotalCount": 2, "PageSize": 20, "RequestId": "***", "DomainRecords": { "Record": [ { "RR": "*", "Status": "ENABLE", "Value": "****", "RecordId": "****", "Type": "A", "DomainName": "uthinks.com", "Locked": false, "Line": "default", "TTL": "600" }, ] } }複製程式碼
如果我的文章對你有幫助,或者有什麼疑問。歡迎在下方留言,一起交流討論
注:
- 本文轉自友想,作者主頁:友想部落格
- 原文地址:樹莓派搭建私人伺服器