Fat Jar部署到AWS伺服器

YungHsin
Nov 1, 2020

--

這篇的教學有個前置作業要做,就是要先去申請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的都是一樣的概念唷,

https://www.slideshare.net/shengyou/ktor-deployment-in-action-the-fat-jar-way/?fbclid=IwAR3JQhvQ5CT_bo-PUWdhnEhGRIHFLS6lPQqA6K8Uxfb5fuZ4So1ABIaoGTI

--

--

YungHsin
YungHsin

No responses yet