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

近一段时间在搞 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 参与工作极少并且目前项目未完成

谢谢!

你可能感兴趣的:(在 Linux(Ubuntu 18.04) 下用 Nginx 部署 swift 后端服务器)