Vapor奇幻之旅(02部署)

2018-08-22 14:13:17 浏览数 (1)

在Vapor奇幻之旅(01开篇) 中我介绍了如何用swift来构建web应用,这篇文章我会介绍如何在ubuntu服务器上部署vapor项目。

我使用的系统环境是 Ubuntu 16.04,这里的教程理论上来说在Ubuntu 14.04和16.10上均适用:

下面是配置服务器的步骤:

安装配置Nginx

代码语言:javascript复制
$ sudo apt-get update
$ sudo apt-get install nginx

安装完Nginx后需要配置防火墙,如果不用防火墙也没有问题,作为练习使用可以关闭防火墙。第一次弄这个的时候我开了防火墙,发现ssh连接不上了,后来想到可能是防火墙阻止了,于是去阿里云网站打开终端关闭了防火墙,这时才能用系统的终端连接ssh。

防火墙配置如下:

代码语言:javascript复制
$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw status

执行以下命令查看Nginx的运行状态:

代码语言:javascript复制
systemctl status nginx

可以看到这时nginx已经运行起来了

image.png

此时输入服务器的ip地址,就可以看到nginx的欢迎页面了。

安装Vapor

代码语言:javascript复制
$ eval "$(curl -sL https://apt.vapor.sh)"
$ sudo apt-get install swift vapor
$ eval "$(curl -sL check.vapor.sh)"

完成安装后可以在服务器上随手创建一个项目以供测试:

代码语言:javascript复制
vapor new HelloVapor

配置Nginx

编辑/etc/nginx/sites-available目录下的default.conf

代码语言:javascript复制
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
try_files $uri @proxy;
location @proxy {
proxy_pass http://127.0.0.1:8080;
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;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
}
}

这时候nginx已经配置好了

重启nginx

代码语言:javascript复制
sudo systemctl restart nginx

编译并运行刚刚创建好的项目

代码语言:javascript复制
cd ~/HelloVapor
vapor build
vapor run

这时候打开浏览器输入地址(http://服务器的ip/HelloVapor)就可以在浏览器看到

代码语言:javascript复制
{"hello":"world"}

安装配置Supervisor

当我们用vapor run在服务器上运行web应用时,我们会发现命令行不能继续进行其他操作,如果使用ctr c退出当前操作或者关闭控制台,则不能继续访问HelloVapor程序,这是因为退出的时候我们的web应用的进程也随着一起关闭了。以前我试过很多方法,但是都并不稳定,直到官方推荐了Supervisor,我才如获至宝,Supervisor是一个进程管控程序,可以让我们很容易的控制vapor程序的启动和停止

  • 安装Supervisor
代码语言:javascript复制
sudo apt-get update
sudo apt-get install supervisor
  • 配置Supervisor

1、进入/etc/supervisor/conf.d目录

2、使用vim创建HelloVapor.conf的配置文件

代码语言:javascript复制
vim HelloVapor.conf
  • 插入以下内容:
代码语言:javascript复制
[program:HelloVapor]
command=/root/HelloVapor/.build/release/Run serve --env=production
directory=/root/HelloVapor
autostart=true
autorestart=true
user=root
stdout_logfile=/var/log/supervisor/%(program_name)-stdout.log
stderr_logfile=/var/log/supervisor/%(program_name)-stderr.log
environment=PORT=8080
  • 修改项目里的Config/production/servers.json
代码语言:javascript复制
只需要修改这一行
"port": "$PORT"  

这样项目就可以使用supervisor配置的端口了

  • 加载刚刚的配置:
代码语言:javascript复制
sudo supervisorctl reread
sudo supervisorctl add hello
sudo supervisorctl start hello

注意,如果运行到reread这里报错ERROR (spawn error)

请检查.conf写的是否正确,配置完之后一定要reread。

如果有必要可以执行

代码语言:javascript复制
sudo supervisorctl reload

有其他报错可以到/var/log/supervisor/目录下查看日志

以下命令查看supervisor的状态:

代码语言:javascript复制
supervisorctl status

显示

代码语言:javascript复制
HelloVapor                            RUNNING   pid 15221, uptime 0:00:16

说明运行成功

这时候我们再访问地址(http://服务器的ip/HelloVapor)就可以看到hello world 的json了。

Trouble Shooting

  • 一步一步调试,运行成功再进行下一步
  • 如果不成功,回滚到可以运行的配置,逐步添加配置来测试
  • 在服务器上使用template创建应用会显示404页面,因为template还没有更新,可以创建纯净版的项目然后在Package.swift里面添加相关依赖,手动构建工程。
  • 如果在配置中有疑问,欢迎在评论区讨论

关于Vapor其他知识,可以参考以下文章:

Vapor奇幻之旅(01开始)

Vapor奇幻之旅(02部署)

Vapor奇幻之旅(03上手)

Vapor奇幻之旅(04Routing)

Vapor奇幻之旅(05 Fluent)

Vapor奇幻之旅(06 PostgreSQL)

Vapor奇幻之旅(07 连接服务端PostgreSQL)

Vapor奇幻之旅(08 连接服务端MongoDB)

Vapor奇幻之旅(09 连接MySQL)

希望你对我的教程能够喜欢,你们的赞是我持续的动力,欢迎加入QQ群参与互动:431296189

0 人点赞