近一段時(shí)間在搞 swift 后端基于 Vapor ,開發(fā)倒是不難,不過在部署這方面經(jīng)驗(yàn)完全是空白,所以先從最基本的開始,能部署成功就是目標(biāo)。
系統(tǒng)環(huán)境
系統(tǒng)是白嫖騰訊云的 Ubuntu 18.04 .
Vapor 、Swift 5 、 Nginx 、 supervisor 、yarn
(因?yàn)?Vapor 的最新版還是 Swift 4.2,所以必須單獨(dú)安裝 Swift 5)
前后端介紹
本項(xiàng)目(Git 地址在文末)前端用的是 React ,后端用的 Swift, 是屬于前后端分離的項(xiàng)目,因?yàn)橘Y源有限,決定部署到同一個(gè)服務(wù)器上,并且都基于 Nginx(還不會(huì)搞 Docker)。
依賴的安裝
不做過多介紹,首先要把項(xiàng)目所依賴的工具或者庫安裝好。
//yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
// vapor
eval "$(curl -sL https://apt.vapor.sh)"
sudo apt-get install vapor
// nginx
sudo apt-get install nginx
// supervisor
sudo apt-get install -y supervisor
是不是發(fā)現(xiàn)少了一個(gè) swift 5 的安裝,我相信隨著時(shí)間的推移 vapor 肯定會(huì)適配到 swift 5,但是現(xiàn)階段還沒有,所以 swift 5 的安裝請(qǐng)參考我另一篇文章 Ubuntu 安裝 swift 5 。
拉取代碼
(這里就暴漏了 git 地址,不過我們公司的所有代碼都是開源的,所以歡迎提 PR ,issue ,更歡迎 star ,是不是太不要臉了。
git clone https://github.com/nervosnetwork/ckb-testnet-faucet.git
安裝依賴包并 Build
其中faucet-ui 文件夾是前端靜態(tài)界面,faucet-server 是后端代碼。
cd ckb-testnet-fauce/faucet-ui
yarn
yarn build
cd cd ckb-testnet-fauce/faucet-server
vapor build
配置 Nginx
刪除 default 配置文件主要是因?yàn)橄胧褂梅?wù)器默認(rèn)80端口。
cd /etc/nginx/sites-enabled
sudo rm default
新建 faucet-ui 填入如下內(nèi)容并且wq退出
sudo vim faucet-ui
server {
listen 80;
listen [::]:80;
server_name _;
root /home/ubuntu/ckb-testnet-faucet/faucet-ui/build;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
新建 faucet-server 填入如下內(nèi)容并wq退出
sudo vim faucet-server
server {
listen 3000 default_server;
listen [::]:3000 default_server;
try_files $uri @proxy;
location @proxy {
proxy_pass http://127.0.0.1:2000; // 這是應(yīng)該是設(shè)置反向代理的端口為 2000
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Server;
proxy_connect_timeout 3s;
proxy_read_timeout 10s;
}
}
都配置好之后最后重新啟動(dòng) Nginx
sudo systemctl restart nginx
在這之后呢,已經(jīng)可以通過 服務(wù)器地址:80 來訪問前端界面了,80 可以省略。
配置 supervisor
Q: 為什么要用 supervisor , 我直接 vapor run 不照樣可以?
A: 可以是可以,但是你這樣之后終端就無法進(jìn)行其他操作,而且感覺非常江硬。使用 supervisor 之后可以讓服務(wù)端后臺(tái)自動(dòng)運(yùn)行。個(gè)人感覺非常好用
在 /etc/supervisor/conf.d/ 文件夾下新建一個(gè) faucet-server.conf 文件,寫入如下配置并且 wq 退出。
[program:faucet-server]
command=/home/ubuntu/ckb-testnet-faucet/faucet-server/.build/debug/Run serve --env=dev --port 2000
directory=/home/ubuntu/ckb-testnet-faucet/faucet-server
user=ubuntu // 這里是 User
stdout_logfile=/var/log/supervisor/%(program_name)-stdout.log
stderr_logfile=/var/log/supervisor/%(program_name)-stderr.log
然后分別執(zhí)行
sudo supervisorctl reread
sudo supervisorctl add faucet-server
sudo supervisorctl start faucet-server
在這之后就前端項(xiàng)目就可以訪問后臺(tái)服務(wù)器了,這個(gè)項(xiàng)目也就可以正常跑起來了,可以說部署成功了,但是有一些細(xì)節(jié)我是忽略掉的,就是前端項(xiàng)目的 API 是要在部署前后自己去修改一下的,不然API地址不對(duì)干啥都不行對(duì)吧?還有就是本項(xiàng)目中一些服務(wù)器端的參數(shù)(從項(xiàng)目代碼和配置文件中可以看出來),我并沒有去說明,這個(gè)涉及到具體項(xiàng)目具體分析,能夠做到按需分配即可。
最后放上這個(gè)項(xiàng)目的 Git 地址 ,點(diǎn)擊這里。
還有我以前參與開發(fā)的幾個(gè)其他類別的項(xiàng)目,一并貼出(不要臉)。
Cyton-iOS
cita-sdk-swift
Neuron 參與工作極少并且目前項(xiàng)目未完成
謝謝!