前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vapor奇幻之旅(02部署)

Vapor奇幻之旅(02部署)

作者头像
Leacode
发布2018-08-22 14:13:17
1.2K0
发布2018-08-22 14:13:17
举报
文章被收录于专栏:代码散人代码散人

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装配置Nginx
  • 安装Vapor
  • 配置Nginx
  • 安装配置Supervisor
  • Trouble Shooting
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档