這篇的教學有個前置作業要做,就是要先去申請AWS帳號,以及建立一個AWS虛擬伺服器,能夠進行SSH登入,這樣才能開始我們的Ktor專案的Jar部署喔!
可以參考我寫的這篇: https://link.medium.com/d5WAcMS42ab
軟體安裝
第一步:先把內建軟體都更新到最新版
sudo apt update
sudo apt upgrade
第二步:安裝常用工具(vim, curl, wget, git, zip, unzip, software-properties-common)
sudo apt install vim curl wget git zip unzip software-properties-common
第三步:安裝SDK(java, gradle, kotlin)
//先安裝sdkman
curl -s https://get.sdkman.io | bash
source ~/.sdkman/bin/sdkman-init.sh//再安裝sdk
sdk install java
sdk install gradle
sdk install kotlin//查詢sdk的版本
java --version
gradle --version
第四步:安裝Nginx
sudo apt-add-repository ppa:nginx/development -y
sudo apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages nginx
在你的本機電腦上傳Fat Jar檔案到你的AWS伺服器
scp -i yunghsin.pem yaya_app-1.0.1-all.jar ubuntu@xxxxxxxx:/home/ubuntu/ktor
然後登入你的AWS伺服器,到/home/ubuntu/ktor底下看檔案有沒有傳成功
再來執行試試看能不能跑起來,若沒錯誤就能準備下一步設定變成Service
java -jar /home/ubuntu/ktor/yaya_app-1.0.1-all.jar
建立系統Service
第一步:編輯service檔案
sudo vim /etc/systemd/system/ktor.service
第二步:加入設定值
[Unit]Description=Ktor AppAfter=syslog.target[Service]ExecStart=/home/ubuntu/.sdkman/candidates/java/current/bin/java -jar /home/ubuntu/ktor/yaya_app-1.0.1-all.jarRestart=alwaysStandardOutput=syslogStandardError=syslog[Install]WantedBy=multi-user.target
第三步:設定開機自動啟動
systemctl daemon-reload
systemctl start ktor
systemctl enable ktor
systemctl status ktor
建立Nginx站台
第一步:編輯Ngnix設定檔案
sudo vim /etc/nginx/sites-available/default
第二步:加入設定
server { listen 80 default_server; listen [::]:80 default_server; server_name ktor; location / { proxy_pass http://localhost:8080/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
}
第三步:啟動Nginx站台
nginx -tsystemctl restart nginx
第四步:測試連線
(1)在AWS伺服器打指令測試有沒有Hello World!
curl http://0.0.0.0:8080
(2) 用AWS提供的公有 IPv4 DNS來連連看來測試有沒有出現Hello World!
注意! 如果發現用http連不進去,那是因為AWS需要去把http 80 port打開,這時你要去儀表板找到你的執行個體的安全群組,去編輯傳入規則,把http的80 port打開,這樣就可以連線成功囉!
(SSL 連線就等下次有空弄再說了…)
參考來源:
本次教學是參考Ktor練功場#6代班講師聖佑的教學投影片做出來的,大家也能去參考捧場捧場,因為基本上只要能學會在本機部署,不管是在Google的還是Amazon的還是Azure的都是一樣的概念唷,