专栏首页代码散人Vapor奇幻之旅(02部署)

Vapor奇幻之旅(02部署)

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

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

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

安装配置Nginx

$ sudo apt-get update
$ sudo apt-get install nginx

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

防火墙配置如下:

$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw status

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

systemctl status nginx

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

image.png

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

安装Vapor

$ eval "$(curl -sL https://apt.vapor.sh)"
$ sudo apt-get install swift vapor
$ eval "$(curl -sL check.vapor.sh)"

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

vapor new HelloVapor

配置Nginx

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

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

sudo systemctl restart nginx

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

cd ~/HelloVapor
vapor build
vapor run

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

{"hello":"world"}

安装配置Supervisor

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

  • 安装Supervisor
sudo apt-get update
sudo apt-get install supervisor
  • 配置Supervisor

1、进入/etc/supervisor/conf.d目录 2、使用vim创建HelloVapor.conf的配置文件

vim HelloVapor.conf
  • 插入以下内容:
[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
只需要修改这一行
"port": "$PORT"  

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

  • 加载刚刚的配置:
sudo supervisorctl reread
sudo supervisorctl add hello
sudo supervisorctl start hello

注意,如果运行到reread这里报错ERROR (spawn error) 请检查.conf写的是否正确,配置完之后一定要reread。 如果有必要可以执行

sudo supervisorctl reload

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

以下命令查看supervisor的状态:

supervisorctl status

显示

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 条评论
登录 后参与评论

相关文章

  • Vapor奇幻之旅(03上手)

    在Vapor奇幻之旅(02部署)一篇中,我介绍了如何在ubuntu上部署并运行vapor项目,这篇文章我来讲讲怎么样来上手开发Vapor项目。

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

    首先付上官网的安装教程:安装mongodb,这个是社区版,由于企业版是收费的,就先来个社区版以供测试使用。

    Leacode
  • 如何使用Swift Package Manager那么,让我门开始吧

    Swift Package Manager 是苹果推出的用于创建使用swift的库和可执行程序的工具。

    Leacode
  • 反向代理为什么叫“反向”代理?

    关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术

    ayqy贾杰
  • systemd的作用

    早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理; 一、systemd的诞生...

    233333
  • 资本“寒冬”真的来了吗?智能硬件创业者又该如何“过冬”呢?

    镁客网
  • Nexus 使用 nginx 代理支持 HTTPS 协议

    公司全部网站需要支持 HTTPS 协议,在阿里云负载均衡配置 SSL 证书后,导致 Nexus 的 HTTPS 访问出错。

    叨叨软件测试
  • 一些SAP CRM和C4C顾问应聘的面试题

    We have checked your resume and most of your project experience are based SAP co...

    Jerry Wang
  • 本地新闻应用程序news Break募集1.15亿美元

    新闻稿称,这一轮的新闻稿使“2021年第一批新独角兽之一”,但这家初创公司拒绝透露其实际估值。

    用户8054111
  • 通过映射CT和锥束CT图像对气胸变形进行统计建模(CS)

    在这项研究中,我们介绍了使用成对的锥形束计算机断层扫描(CT)图像进行气胸变形的统计建模方法。我们设计了一个可变形的网格配准框架,用于涉及非线性变形和肺旋转的形...

    用户8078865

扫码关注云+社区

领取腾讯云代金券