在 Linux(Ubuntu 18.04) 下用 Nginx 部署 swift 后端服務(wù)器

近一段時(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)目未完成

謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容