近一段时间在搞 swift 后端基于 Vapor ,开发倒是不难,不过在部署这方面经验完全是空白,所以先从最基本的开始,能部署成功就是目标。
系统环境
系统是白嫖腾讯云的 Ubuntu 18.04 .
Vapor 、Swift 5 、 Nginx 、 supervisor 、yarn
(因为 Vapor 的最新版还是 Swift 4.2,所以必须单独安装 Swift 5)
前后端介绍
本项目(Git 地址在文末)前端用的是 React ,后端用的 Swift, 是属于前后端分离的项目,因为资源有限,决定部署到同一个服务器上,并且都基于 Nginx(还不会搞 Docker)。
依赖的安装
不做过多介绍,首先要把项目所依赖的工具或者库安装好。
//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
是不是发现少了一个 swift 5 的安装,我相信随着时间的推移 vapor 肯定会适配到 swift 5,但是现阶段还没有,所以 swift 5 的安装请参考我另一篇文章 Ubuntu 安装 swift 5 。
拉取代码
(这里就暴漏了 git 地址,不过我们公司的所有代码都是开源的,所以欢迎提 PR ,issue ,更欢迎 star ,是不是太不要脸了。
git clone https://github.com/nervosnetwork/ckb-testnet-faucet.git
安装依赖包并 Build
其中faucet-ui
文件夹是前端静态界面,faucet-server
是后端代码。
cd ckb-testnet-fauce/faucet-ui
yarn
yarn build
cd cd ckb-testnet-fauce/faucet-server
vapor build
配置 Nginx
删除 default
配置文件主要是因为想使用服务器默认80
端口。
cd /etc/nginx/sites-enabled
sudo rm default
新建 faucet-ui 填入如下内容并且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 填入如下内容并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; // 这是应该是设置反向代理的端口为 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;
}
}
都配置好之后最后重新启动 Nginx
sudo systemctl restart nginx
在这之后呢,已经可以通过 服务器地址:80
来访问前端界面了,80
可以省略。
配置 supervisor
Q: 为什么要用 supervisor , 我直接 vapor run
不照样可以?
A: 可以是可以,但是你这样之后终端就无法进行其他操作,而且感觉非常江硬。使用 supervisor 之后可以让服务端后台自动运行。个人感觉非常好用
在 /etc/supervisor/conf.d/
文件夹下新建一个 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
然后分别执行
sudo supervisorctl reread
sudo supervisorctl add faucet-server
sudo supervisorctl start faucet-server
在这之后就前端项目就可以访问后台服务器了,这个项目也就可以正常跑起来了,可以说部署成功了,但是有一些细节我是忽略掉的,就是前端项目的 API
是要在部署前后自己去修改一下的,不然API
地址不对干啥都不行对吧?还有就是本项目中一些服务器端的参数(从项目代码和配置文件中可以看出来),我并没有去说明,这个涉及到具体项目具体分析,能够做到按需分配即可。
最后放上这个项目的 Git 地址 ,点击这里。
还有我以前参与开发的几个其他类别的项目,一并贴出(不要脸)。
Cyton-iOS
cita-sdk-swift
Neuron 参与工作极少并且目前项目未完成
谢谢!