Ktor 从入门到放弃(七) 部署到生产环境
《Ktor 从入门到放弃》整个系列中,这是最后一篇了,相信也是最关键的一篇,不论如何,开发好的东西你绝对不想让它只能在 gradle 命令行里运行,必然要部署到生产环境去面对大众的。
在第一篇(点击进入)时 ,就一直在说 tomcat 了,然而事实是,gradle 里的环境 ,还是与开发环境绑定较为紧密的,而真实的环境往往不是那样。下面我们就来讲一下,如何部署到真实的环境里。
为了简单起见,将环境设定为 Ubuntu 18.04
和通过 apt
安装的 tomcat8
。这个设定可以满足一部分的需求,并且它也是较为常见的。
由于 tomcat
默认的端口号是 8080
,而我们通常使用 80
端口,因此需要进行修改,改法挺简单的,将 /etc/tomcat8/server.xml
内的 <Connector port="8080" redirectPort="8443"
这一段里的 port
改为 80
,把 redirectPort
改为 443
。
别急着重启服务,因为那不会有用。在 tomcat7
以后,要使用 1024
以下的端口,必须修改别处(我好像写了什么不得了的东西)。
修改 /etc/default/tomcat8
,在这个文件的末尾增加一句 AUTHBIND=yes
。
然后依然不要先重启服务,我们现在来完成对于项目的部署。对于之前的项目,我们以上一篇的 WebSocket 聊天室 为例,在项目内执行以下代码,即可打出一个 war
包:
$ gradle clean build
然后我们就可以直接用一个脚本来完成部署,为了方便起见,不深入搜索目录,这里采用 link 的方法来进行部署:
$ mkdir -p ~/Deploy/ChatSample
$ chmod 777 Deploy
$ cp ktor-chat-sample.war ~/Deploy/ChatSample/
$ cd ~/Deploy/ChatSample
$ unzip ktor-chat-sample.war
$ rm ktor-chat-sample.war
$ cd /var/lib/tomcat8/webapps
$ sudo rm -fr ROOT
$ sudo ln -s ~/Deploy/ChatSample ROOT
$ sudo service tomcat8 restart
好了,现在就可以访问你的站点了,在部分情况下,在部署完成后执行 restart
并不能够很好的释放原先占用的 8080
端口,也无法绑定 80
端口,这个时候就需要重启服务器了。
另外,还有一种情况,比如说我们租用的云服务器,有很多服务器在登录时就是 root
权限的,在此情况下将 Deploy
目录权限设为 777
依然不可写入,这是由于用户组所引起的问题。
对于这样的服务器,需要做以下修改:
将 /etc/default/tomcat8
内的 TOMCAT8_USER
和 TOMCAT8_GROUP
均改成 root
,然后重启服务器即可,切记,是重启服务器,而不是重启 tomcat 服务!
好了,现在我们也可以访问部署在云服务器上的 Ktor
服务了。到这里为止,这个系列就完结了(撒花),大家都放弃了吗?顺便说一句,我的新项目已经选型用 Ktor
了,代码量也已经超过 1 万行,它真的很棒!
下一篇预告:完结了就木有新的预告啦!