什么是函數?剛剛考完數學沒多久的我,腦力里立馬想到的是自變量、因變量、函數值,也就是y=f(x)。當然,在計算機里,函數function往往指的是一段被定義好的代碼程序,我們可以通過傳參調用這個定義好的函數,實現我們所需要的功能。那么,今天的函數計算FC又是什么?
云計算時代的當下,容器化技術與各種工具發展的DevOps,已經把開發與運維的工作進行了新的統籌,開發人員在完成代碼的編寫后,無需考慮環境,直接提交到各種流水線就可以完成測試、開發、部署,項目構建微服務,由容器完成環境的封裝。但是往往我們最終還是需要投入精力到業務上線的集群,是私有云環境還是公有云?是裸金屬服務器還是云實例ECS?是自購還是租用?
B站每日自動簽到&傳統單節點網站的 Serverless 上云-1.jpg (12.87 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
當然,DevOps的落地,服務器\集群的運維,這些都是需要投入大量的資源與精力,DevOps是一條捷徑,但不是唯一的出路。因此函數計算FC的出現,帶來了無服務Serverless的架構,讓開發者在開發和部署的時候,不在有部署服務復雜的感覺,對服務器的無感化,可以使開發者真正的關注在自己的代碼上。阿里云Serverless函數式極簡編程可專注于業務創新,無采購和部署成本、提供監控報警等完備的可觀測能力。函數計算是事件驅動的全托管計算服務,真正的無需去考慮服務器的運維管理,只需要完成開發的代碼進行上傳,函數計算會通過角色策略去規劃計算資源,彈性的方式執行函數,最后高效的執行部署。優雅!
B站每日自動簽到&傳統單節點網站的 Serverless 上云-2.jpg (42.99 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
Serverless 將會有那些適用場景?是個人?還是生產?那么這次我將部署兩種不同方向的應用對Serverless進行測評
一、通知系統與Webhook,Trigger觸發與Chat機器人。許多系統中涉及到的push類功能,例如郵件、短信、Webhook。當然Webhook的能力不只是信息通知,不過這里所指的通知功能必然是需要基礎設施也就是服務器來支撐運行,如果將這些功能直接由Serverless來操作,我們便無需支付運維一臺服務器,節省了大量的工作與費用。同樣,我們可以利用Serverless事件驅動模型實現定時自動觸發任務,自動簽到自動發送。
二、其次當然是Web類的應用。基于各類Web框架的應用部署,構建基于Java、Python、PHP等語言的站點,Serverless很容易實現如wordpress這樣的博客應用的上線。配合其他云產品,Codeup、OSS、RDS等,更能實現高可用高性能的Web應用,如官方提供的Kod云盤系統。
一、使用Serverless實現B站每日登陸簽到
作為一個老b站用戶,b站等級無疑是妥妥的"名片",當然我早已是六級大佬的一員了。b站升級所需的經驗值是關鍵,登陸、投幣、觀看都會積累經驗。為了可以快速升級,這次我將使用阿里云Serverless,實現每日b站的登陸經驗Get,觀看視頻經驗Get,觀看直播銀瓜子Get(白嫖的直播送禮道具),并且配合釘釘機器人,實現Webhook的消息推送。
1.創建Serverless服務及函數
進入函數計算FC控制臺,選擇【服務及函數】,點擊【創建服務】
B站每日自動簽到&傳統單節點網站的 Serverless 上云-3.jpg (28.97 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
在【創建服務】的頁面中,輸入服務名稱,并選擇啟用日志功能,日志更能可以幫助我們更好的排查錯誤
這里我當然需要標注服務的功能,即實現bilibili的日常登陸簽到。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-4.jpg (87.84 KB, 下載次數: 12)
下載附件
2024-10-21 10:49 上傳
進入【創建函數】頁面,選擇【使用標準Runtime從零創建】
配置函數名稱,選擇運行環境為Python3,并且選擇從文件夾上傳代碼。
注意,這里如果有依賴包需要提前下載到代碼包下,我這里需要用到requests包 ,在本地需要執行 pip install -t . <模塊名稱>。不過后續也可以在控制臺處執行下載命令
這里的Python功能實現的腳本是定時觸發類的,因此我們選擇請求處理程序類型為【處理事件請求】
B站每日自動簽到&傳統單節點網站的 Serverless 上云-5.jpg (24.39 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
下方配置觸發器,選擇定時觸發器,輸入名稱,選擇【指定時間】,我這里選擇的是每日的23點進行腳本的運行
B站每日自動簽到&傳統單節點網站的 Serverless 上云-6.jpg (31.86 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
Python腳本內容
# -*- coding: utf8 -*-import requests import jsonimport timeimport reimport sysimport codecsfrom bs4 import BeautifulSoupfrom json.decoder import JSONDecodeError# B站登陸Cookiecookie = ""# Webhook地址webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxx"# 自動觀看的BV號,杰倫新專-最偉大的作品bid = 'BV1ua411p7iA' uid=re.match('(?<=DedeUserID=).*?(?=;)',cookie)sid=re.match('(?<=sid=).*?(?=;)',cookie)csrf=re.match('(?<=bili_jct=).*',cookie)# 部分編碼問題sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())# bv轉為avdef bv_to_av(bv): headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', } r = requests.get('https://api.bilibili.com/x/web-interface/view', {'bvid': bv}, headers=headers) response = decode_json(r) try: return str(response['data']['aid']) except (KeyError, TypeError): return '883409884'# json解析def decode_json(r): try: response = r.json() except JSONDecodeError: return -1 else: return response# 自定義釘釘機器人推送def pushinfo(info,specific):# 定義推送內容,格式參考https://open.dingtalk.com/document/group/message-types-and-data-format# 注意機器人的關鍵詞 data = { "msgtype": "text", "text": { "title":"Taoreset", "content": "【Taoreset-Serverless推送】\n"+info+specific } } headers = {'content-type': 'application/json'} # 請求頭 r = requests.post(webhook, headers=headers, data=json.dumps(data)) r.encoding = 'utf-8' print (r.text)# 阿b登錄,得登陸經驗def login(): headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', 'Cookie':cookie } response = requests.session().get('http://api.bilibili.com/x/space/myinfo',headers=headers) rejson = json.loads(response.text) code = rejson['code'] msg = rejson['message'] if code == 0: print('登錄成功') return True else: print('登錄失敗:'+msg) return False# 獲取用戶信息def get_user_info(): headers = { 'Cookie':cookie } response = requests.session().get('http://api.bilibili.com/x/space/myinfo?jsonp=jsonp',headers=headers) rejson = json.loads(response.text) code = rejson['code'] msg = rejson['message'] if code == 0: userInfo=['賬號:'+str(rejson['data']['silence']), '硬幣:'+str(rejson['data']['coins']), '經驗:'+str(rejson['data']['level_exp']['current_exp'])+"/"+str(rejson['data']['level_exp']['next_exp']), '等級:'+str(rejson['data']['level']), '昵稱:'+str(rejson['data']['name']) ] print(userInfo[0]) print (userInfo[1]) print(userInfo[2]) print(userInfo[3]) print(userInfo[4]) return userInfo else: print("用戶信息獲取失敗:"+msg) return "用戶信息獲取失敗:"+msg# 直播簽到,賺銀瓜子兒def do_sign(): headers = { 'Cookie':cookie } response = requests.session().get('https://api.live.bilibili.com/sign/doSign',headers=headers) rejson = json.loads(response.text) code = rejson['code'] msg = rejson['message'] if code == 0: print('直播簽到成功!') return True else: print("直播簽到失敗:"+msg) return False# 看BV號視頻,得觀看經驗def watch(): aid=bv_to_av(bid) headers = { 'Cookie':cookie } response = requests.session().get('http://api.bilibili.com/x/web-interface/view?aid='+str(aid),headers=headers) rejson = json.loads(response.text) code = rejson['code'] #print(response.text) if code == 0: cid = rejson['data']['cid'] duration = rejson['data']['duration'] else: print('視頻信息解析失敗') return False payload = { 'aid': aid, 'cid': cid, 'jsonp': "jsonp", 'mid': uid, 'csrf': csrf, 'played_time': 0, 'pause': False, 'realtime': duration, 'dt': 7, 'play_type': 1, 'start_ts': int(time.time()), } response = requests.session().post('http://api.bilibili.com/x/report/web/heartbeat',data=payload,headers=headers) rejson = json.loads(response.text) code = rejson['code'] if code == 0: time.sleep(5) payload['played_time'] = duration - 1 payload['play_type'] = 0 payload['start_ts'] = int(time.time()) response = requests.session().post('http://api.bilibili.com/x/report/web/heartbeat',data=payload,headers=headers) rejson = json.loads(response.text) code = rejson['code'] if code == 0: print(f"av{aid}觀看成功") return True print(f"av{aid}觀看失敗 {response}") return Falsedef main(*args): if login(): ui = get_user_info() desp='直播簽到:'+str(do_sign())+'\n\n'+'觀看視頻:'+str(watch())+'\n\n'+ui[0]+'\n\n'+ui[1]+'\n\n'+ui[2]+'\n\n'+ui[3]+'\n\n'+ui[4]+'\n\n' pushinfo('嗶哩嗶哩簽到成功',desp) else: pushinfo('嗶哩嗶哩簽到失敗','') if __name__ == '__main__': main()2.修改函數配置
完成函數的創建后就進入了函數管理的界面。函數代碼這里就顯示了我們上傳的代碼文件,所有代碼執行的本地路徑都在/code目錄下。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-7.jpg (18.93 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
如果有依賴模塊提示沒有,在下方的控制臺終端輸入命令也可以完成模塊安裝下載,所有工作目錄下的代碼修改,完成后都需要點擊部署代碼進行部署上傳。
pip install -t . requests bs4
B站每日自動簽到&傳統單節點網站的 Serverless 上云-8.jpg (24.56 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
其余需要修改一下函數的配置,點擊【函數配置】,找到【環境信息】編輯,修改【請求處理程序】,修改函數入口為<要執行的代碼文件名.執行的函數名>,我這里腳本的文件名為bilibiliSignin.py,代碼里的主函數為main,因此函數入口就為<bilibiliSignin.main>
B站每日自動簽到&傳統單節點網站的 Serverless 上云-9.jpg (13.38 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
3.完成函數功能測試
選擇【測試函數】,即可立即對函數進行觸發,點擊測試函數進行測試
B站每日自動簽到&傳統單節點網站的 Serverless 上云-10.jpg (45.33 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
完成測試后下方就會顯示日志輸出內容,方便查看結果和排錯
B站每日自動簽到&傳統單節點網站的 Serverless 上云-11.jpg (28.96 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
完成效果,定時觸發23點準時完成簽到,并由釘釘的機器人推送消息
B站每日自動簽到&傳統單節點網站的 Serverless 上云-12.jpg (38.36 KB, 下載次數: 23)
下載附件
2024-10-21 10:49 上傳
欸嘿,大伙一起吧Serverless腳本跑起來,早日迎接B站六級會員!!!
B站每日自動簽到&傳統單節點網站的 Serverless 上云-13.jpg (45.78 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
腳本參考Github ,by sanshuifeibing
二、Serverless農產品電商網站上云改造
這里我拿隔壁軟件專業(俺是網絡技術的)的一個大作業項目作為部署的案例。項目是非常簡單并且功能單一的,但是也是非常經典的前后端分離項目,由于我開發不太會,項目具體技術就不獻丑了。之前據說是有什么版權的,我就不放源代碼了hhhh
在改造之前,我相信是很多中小型公司業務的經典AllinOne結構,把業務涉及到的所有服務中間件運行在一臺服務器/虛擬機上,雖然現在看可能完完全全是實驗室環境,但是實際看到的依然有很多項目是這么做的。壞處也不用多提,部署運維難、難以進行資源的擴容、后續改造復雜、性能差沒有應用高可用技術等等。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-14.jpg (16.81 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
Serverless的農產品電商平臺上云,項目比較簡單,規劃就在同一地域了。主要是將前端HTML頁面與后端Jar包運行分別由兩個單獨的Serverless函數完成運行計算。其余支撐服務上云,分別用對應的云產品實現,這里Redis服務由于我自己ECS上有運行redis服務,就不再單獨購買云數據庫Redis版了,當然推薦使用阿里云的Redis云數據庫產品。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-15.jpg (20.77 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
1.Serverless服務創建
進入函數計算控制臺,選擇【服務及函數】,點擊【創建服務】
輸入創建服務的名稱與描述,開啟日志功能,點擊確定,完成服務的創建
B站每日自動簽到&傳統單節點網站的 Serverless 上云-16.jpg (13.62 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
服務創建完成后,進入【服務詳情】,找到【網絡配置】,點擊【編輯】
選擇允許訪問VPC,選擇自定義配置,選擇VPC、vSwitch、安全組,這里需要和后續其他支撐的云產品(數據庫等)保持在同一VPC下。因此需要做好云上網絡的規劃,也要看一下產品是否在地域下有沒有庫存。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-17.jpg (44.51 KB, 下載次數: 12)
下載附件
2024-10-21 10:49 上傳
2.前端頁面Serverless函數創建
完成服務創建后,點擊【創建函數】,進入函數的創建頁面
選擇【使用自定義運行時平滑遷移WebServer】,輸入函數名稱,選擇運行環境為【Nginx】,上傳前端html代碼與nginx的配置文件,選擇監聽端口為80,即為原nginx中間件的服務端口。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-18.jpg (25.71 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
完成函數創建后,進入到函數詳情界面,可以在函數代碼中對代碼進行編輯修改,代碼改動后需要點擊部署代碼重新上傳。上述也提到了,這里需要將Nginx服務配置一同上傳,其中需要拷貝一份/etc/nginx/mime.types文件到當下目錄,避免mime文件類型映射錯誤。
這里放nginx關鍵配置,根據自己的業務情況修改,注意配置中端口監聽需要與函數創建監聽端口保持一致,同時網頁代碼的路徑設置為/code
http { include mime.types; #注意引入此文件 keepalive_timeout 900; server { listen 80; server_name localhost; location / { root /code; index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /users { proxy_pass http://serverless.后端函數訪問地址.run; #Nginx反代傳給后端的函數,地址在后續后端函數創建完可以拷貝 } location /items { proxy_pass http://serverless.后端函數訪問地址.run; #Nginx反代傳給后端的函數,地址在后續后端函數創建完可以拷貝 }
B站每日自動簽到&傳統單節點網站的 Serverless 上云-19.jpg (22.53 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
可以在調用日志查詢相關日志
B站每日自動簽到&傳統單節點網站的 Serverless 上云-20.jpg (13.96 KB, 下載次數: 13)
下載附件
2024-10-21 10:49 上傳
當函數觸發運行,Serverless將會根據訪問請求自動起實例,在這里可以手動登陸實例,去進行中間件服務的日志、運行環境的一些查看與排錯。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-21.jpg (22.24 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
3.后端Serverless函數創建
回到函數服務界面,再次點擊【創建函數】,進入函數的創建頁面
選擇【使用自定義運行時平滑遷移WebServer】,輸入函數名稱,選擇運行環境為【Java】,上傳打包好的Jar包文件。
根據具體業務修改【啟動命令】與【監聽端口】。我這里需要監聽業務端口為8080,并且需要在運行時傳入數據庫連接的參數,這里所配置的數據庫源用戶名密碼連接地址,在后續的云數據庫RDS中會進行相關設置。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-22.jpg (28 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
后端函數創建完成后進入函數詳情界面,其余功能與上述前端函數相同,不再復述
B站每日自動簽到&傳統單節點網站的 Serverless 上云-23.jpg (16.85 KB, 下載次數: 13)
下載附件
2024-10-21 10:49 上傳
點擊【觸發器管理】,此處HTTP觸發器提供了公網與內網訪問地址,我們拷貝內網地址在前端中間件反代配置處填入此域名,實現訪問前端觸發后端函數
B站每日自動簽到&傳統單節點網站的 Serverless 上云-24.jpg (14.7 KB, 下載次數: 21)
下載附件
2024-10-21 10:49 上傳
4.云數據庫RDS MySQL Serverless創建與遷移導入
原有Allinone架構中沒有做到數據庫服務的獨立與高可用,在此次云化部署,我們將選用阿里云公測中的云數據庫Serverless版本。RDS MySQL Serverless提供了CPU、內存的實時彈性能力,具有資源用量低、簡單易用、彈性靈活和價格低廉等優點,合理優化使用成本,進一步降本增效。
RDS MySQL Serverless實例創建
進入云數據庫RDS控制臺,點擊【創建實例】,開始創建實例的流程,在【基礎資源】設置界面,選擇Serverless版,其余根據實際進行選擇
B站每日自動簽到&傳統單節點網站的 Serverless 上云-25.jpg (13.54 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
Serverless RDS創建時【實例配置】需要注意網絡VPC的設置,要與Serverless服務所設定的VPC一致,實現內網數據互通。確定訂單后,等待實例創建完成即可
B站每日自動簽到&傳統單節點網站的 Serverless 上云-26.jpg (15.32 KB, 下載次數: 10)
下載附件
2024-10-21 10:49 上傳
RDS數據庫用戶設置
完成實例創建,選擇管理實例。在左側任務欄選擇【賬號管理】,點擊【創建賬號】創建數據庫賬戶供電商平臺后端進行連接。
輸入賬戶名、密碼,選擇為普通賬戶,點擊確定完成用戶創建
B站每日自動簽到&傳統單節點網站的 Serverless 上云-27.jpg (50.3 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
RDS 業務數據庫創建
選擇左側欄中【數據庫管理】,選擇【創建數據庫】
輸入農產品電商業務所需的庫名,并且授權賬戶給前一步設置的用戶,點擊創建完成庫的設置。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-28.jpg (13.89 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
RDS 服務連接地址
我們的Serverless函數中所需要連接庫的地址,在rds實例中【數據庫】連接處可以查到,不過需要提前設定白名單。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-29.jpg (13.41 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
我們將內網地址進行拷貝,并且也完成了連接用戶、密碼、庫的配置,就可以配置到Serverless函數或者是后端代碼中了
B站每日自動簽到&傳統單節點網站的 Serverless 上云-30.jpg (32.61 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
RDS 業務數據庫的導入恢復
數據庫的上云關鍵是數據內容的遷移,這次部署的業務數據庫很少又很小,因此使用簡單的備份SQL腳本文件作為遷移的方式。MySQL/Mariadb的數據導出有多種方式,可以根據實際需求進行備份導出,當然大型業務庫有專用的備份遷移工具,這里不細說了。
進入DMS數據管理服務,選擇【數據庫開發】,在【數據變更】下點擊【數據導入】。
根據具體備份方式導入數據庫,我這里選擇上傳備份的sql腳本,提交申請開始導入數據
B站每日自動簽到&傳統單節點網站的 Serverless 上云-31.jpg (19.83 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
數據導入完成,數據遷移完成
B站每日自動簽到&傳統單節點網站的 Serverless 上云-32.jpg (20.23 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
5.Redis服務上云與靜態資源CDN
Redis服務上云,前文也提到了,這里Redis服務由于我自己ECS上有運行redis服務,就不再單獨購買云數據庫Redis版了,ECS也處于同一VPC之下,可以實現內網互通。當然推薦使用阿里云的Redis云數據庫產品。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-33.jpg (116.95 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
靜態資源的CDN,包括css\js\圖片的加速,原有架構中已經存放在阿里的CDN服務上了,我這里就不多做改動了。
6.公網業務訪問域名配置
最后一步,用戶最終訪問的是前端Serverless函數,如同阿里云給出的提示,訪問默認的公網地址不會做任何中間件解析,而是直接下載首頁html靜態文件,因此我們需要自己配置訪問域名。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-34.jpg (29.42 KB, 下載次數: 13)
下載附件
2024-10-21 10:49 上傳
回到函數計算控制臺,選擇【域名管理】,點擊【添加自定義域名】
輸入自定的域名,配置路由,選擇對應函數的服務名稱、函數名稱、版本號LATEST(最新)
將需要解析的CNAME值,拷貝
B站每日自動簽到&傳統單節點網站的 Serverless 上云-35.jpg (19.53 KB, 下載次數: 19)
下載附件
2024-10-21 10:49 上傳
拷貝CNAME記錄值,點擊【云解析DNS控制臺】,進入解析設置,點擊【添加記錄】
選擇記錄類型【CNAME】,輸入主機頭,填入拷貝的記錄值,確認完成添加
B站每日自動簽到&傳統單節點網站的 Serverless 上云-36.jpg (29.43 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
7.農產品電商項目Serverless上云效果
首頁,訪問效果,前端函數無誤
B站每日自動簽到&傳統單節點網站的 Serverless 上云-37.jpg (44.26 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
農產品詳情頁訪問
B站每日自動簽到&傳統單節點網站的 Serverless 上云-38.jpg (28.99 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
用戶注冊功能測試,數據庫連接與寫入無誤
B站每日自動簽到&傳統單節點網站的 Serverless 上云-39.jpg (57.99 KB, 下載次數: 28)
下載附件
2024-10-21 10:49 上傳
RDS中數據已成功寫入
B站每日自動簽到&傳統單節點網站的 Serverless 上云-40.jpg (44.58 KB, 下載次數: 23)
下載附件
2024-10-21 10:49 上傳
用戶登陸測試
B站每日自動簽到&傳統單節點網站的 Serverless 上云-41.jpg (35.49 KB, 下載次數: 10)
下載附件
2024-10-21 10:49 上傳
訂單提交測試,后端函數無誤
B站每日自動簽到&傳統單節點網站的 Serverless 上云-42.jpg (14.04 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
三、使用Serverless應用模板快速構建litemall電商應用系統
1.基于官方模板創建應用
Serverless應用提供了大量的官方應用模板,我們可以根據給出的模板來修改自己的業務,因此熟悉模板的部署也很重要。
進入到函數計算FC的控制臺頁面,點擊【應用】,選擇【通過模板創建應用】,選擇【商城案例】
B站每日自動簽到&傳統單節點網站的 Serverless 上云-43.jpg (13.39 KB, 下載次數: 13)
下載附件
2024-10-21 10:49 上傳
通過詳情查看部署模板的信息,以及查詢源代碼,點擊立即創建可以快速體驗Serverless應用的創建,本地部署可以通過ServerlessDev工具進行部署
B站每日自動簽到&傳統單節點網站的 Serverless 上云-44.jpg (14.71 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
2.對創建應用進行配置
點擊立即創建后,我們進行應用的初始化配置。
部署類型有兩種:1.通過第三方代碼倉庫部署,2.直接部署
兩者區別就是使用自己的倉庫代碼后續可以通過push更新項目發布,而直接部署需要手動配置。
這里就可以看到,我們的交付觸發也是以Git倉庫push提交為主,每次提交會自動觸發部署。
如是自己配置應用,需要根據業務配置s.yaml文件,參考:https://www.serverless-devs.com/fc/yaml/readme
這里我選擇Gitee倉庫進行部署,但是需要進行倉庫第三方應用的授權
B站每日自動簽到&傳統單節點網站的 Serverless 上云-45.jpg (6 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
點擊前往授權,跳轉到gitee的站點進行OAuth授權請求,點擊同意授權
B站每日自動簽到&傳統單節點網站的 Serverless 上云-46.jpg (39.13 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
阿里用戶在第一次使用FC函數計算時,需要對角色策略進行添加的,我這里已經使用過FC了,若提示需要添加策略,按照提示點擊添加即可。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-47.jpg (15.79 KB, 下載次數: 11)
下載附件
2024-10-21 10:49 上傳
其他高級配置,需要根據業務進行修改,這里注意地域的選定,后續的其他彈性資源都會在此地域下,我這里選擇本地杭州。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-48.jpg (17.15 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
完成配置后點擊創建,代碼已經新建上傳到我的Gitee倉庫了。這里提供的s.yaml可以作為配置的參考,后續根據所部署的業務去修改yaml
B站每日自動簽到&傳統單節點網站的 Serverless 上云-49.jpg (22.23 KB, 下載次數: 12)
下載附件
2024-10-21 10:49 上傳
3.應用部署上線
B站每日自動簽到&傳統單節點網站的 Serverless 上云-50.jpg (14.1 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
應用創建完成,首次自動進行部署,這里部署狀態可以看到正在部署
B站每日自動簽到&傳統單節點網站的 Serverless 上云-51.jpg (11.84 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
查看部署日志,如果部署出現錯誤也可以從日志信息中查詢報錯。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-52.jpg (22.23 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
部署經歷了前置環境、資源同步、資源檢查、執行部署這四個步驟后,我們的電商應用就完成了部署
B站每日自動簽到&傳統單節點網站的 Serverless 上云-53.jpg (36.89 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
首次部署完成,也是最新latest的一次部署版本,可以通過部署歷史自由的進行回滾
B站每日自動簽到&傳統單節點網站的 Serverless 上云-54.jpg (37.63 KB, 下載次數: 20)
下載附件
2024-10-21 10:49 上傳
4.訪問部署上線的電商應用
訪問測試的域名,就可以看到我們上線的litemall電商系統,進入電商應用的后臺管理
B站每日自動簽到&傳統單節點網站的 Serverless 上云-55.jpg (43.79 KB, 下載次數: 17)
下載附件
2024-10-21 10:49 上傳
litemall電商系統是一個開源的前后端分離帶微信小程序的電商系統,具有電商平臺基礎的會員管理、商城管理、商品管理、推廣管理、系統管理、配置管理、統計報表。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-56.jpg (23.52 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
litemall電商系統,需要配置最小開發環境有以下:
MySQL
JDK1.8或以上
Maven
Nodejs
B站每日自動簽到&傳統單節點網站的 Serverless 上云-57.jpg (28.67 KB, 下載次數: 20)
下載附件
2024-10-21 10:49 上傳
5.更換業務域名訪問
同樣,當我們正常上線了FC的業務時,Serverless用的是默認訪問地址
函數計算上線提供的域名是以..http://fc.aliyuncs.com//proxy///[action?queries]為默認的,若是正常業務訪問我們必然要修改訪問的域名。
B站每日自動簽到&傳統單節點網站的 Serverless 上云-58.jpg (54.92 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
進入到函數計算FC的首頁,點擊高級功能下的域名管理,這里可以看到我們上線電商應用時的默認域名已經路由信息
我們選擇添加自定義域名
B站每日自動簽到&傳統單節點網站的 Serverless 上云-59.jpg (14.54 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
輸入域名的名稱,也就是購買備案的域名下的自定義二級域名
點擊路由配置,選擇服務名稱,這里是我們部署的電商系統litemall,選擇函數名稱與版本
拷貝公網CNAME地址,后續在DNS域名管理處添加解析
B站每日自動簽到&傳統單節點網站的 Serverless 上云-60.jpg (17.02 KB, 下載次數: 14)
下載附件
2024-10-21 10:49 上傳
進入到域名管理下,添加一條記錄,記錄類型選擇CNAME,輸入主機記錄,將剛剛拷貝的公網CNAME地址粘到記錄值,點擊添加即可
B站每日自動簽到&傳統單節點網站的 Serverless 上云-61.jpg (30.9 KB, 下載次數: 15)
下載附件
2024-10-21 10:49 上傳
回到函數計算FC,在最后點擊創建即可,回到主頁看到我們新綁定的域名
B站每日自動簽到&傳統單節點網站的 Serverless 上云-62.jpg (29.66 KB, 下載次數: 16)
下載附件
2024-10-21 10:49 上傳
最后,拿手機訪問我自定義配置的公網地址
電商服務正常上線,公網地址正常訪問主頁
B站每日自動簽到&傳統單節點網站的 Serverless 上云-63.jpg (71.03 KB, 下載次數: 20)
下載附件
2024-10-21 10:49 上傳
商品的詳情購買頁面
B站每日自動簽到&傳統單節點網站的 Serverless 上云-64.jpg (52.49 KB, 下載次數: 18)
下載附件
2024-10-21 10:49 上傳
最后
Serverless相對其他方案來說,也是非常容易上手并高效的技術方案。上面的部署測試,其實還有很多需要改進的地方,例如第二個農產品電商上云項目,真正可靠的云上業務還需要負載均衡、高可用多地容災、安全等其他云產品的引入,我想把案例的重點放在Serverless服務器無感化上,本人也使用過不少阿里云的技術產品,深知對底層基礎設施運維難度。
雖然這幾個月學習生活比較繁忙,但是還是對社區的各種活動非常感興趣,也想做一些更好的測試。這次的Serverless無論是對個人用戶,還是企業用戶。都是一種非常不錯的選擇,彈性資源與按需付費,更加節省資源與Money,更加優雅!
原文鏈接:http://click.aliyun.com/m/1000350415/
本文為阿里云原創內容,未經允許不得轉載。 |
|