node.js项目部署
1.引言
? 本次node.js本来寒假断断续续学了20多天,本来没有实战,心里觉得有点虚,刚好返校之后遇到了实习,纠结了很久才决定暂缓复习考研,node.js简直比thinkphp6还容易上手,项目接口非常清晰,主要是需要记录一下特殊的第三方依赖。如果把这个写完,我可能觉得成就感其实是不足的,于是我决定试试node.js项目的部署,因为node.js直接挂ip实在是太丑了。
2.niginx配置
? 首先,在宝塔面板和阿里云上面开端口,阿里云上面配置二级域名,获取niginx证书就跳过,关键就是下面这个域名的配置,以前是thinkphp,那种都是直接的网站,直接新建网站把项目放进去就完事了,但是现在不一样,如果开网站必须使用端口,然而node项目其实自己有自己的端口。于是只能建文件夹,将node项目放到里面去。利用比较常用的pm2部署工具(可以同时部署多个node项目)指定如下指令:
pm2 start app.js --name nightowl(项目别名)
pm2 stop app.js (关闭项目)
pm2 list (查看当前项目名称)
经过不断搜寻,最终找到了可用的配置方案:
(1)通过之前查看nginx里面的配置文件,会发现里面有一个include引入了其他文件的配置文件,这个文件就是收集各种证书配置的文件;通过路径进一步找到配置文件位置;
(2)参考配置文件里面pem和key文件的放置位置,新建对应的文件夹,模仿着创建路径,方便以后管理;
(3)然后在/www/server/panel/vhost/nginx/visualization.admin.nightowl.top.conf文件中写入如下配置信息:
server {
listen 80;
listen 443 ssl; #https
server_name visualization.admin.nightowl.top;
ssl_certificate /www/server/panel/vhost/cert/visualization.admin.nightowl.top/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/visualization.admin.nightowl.top/privkey.key;
location /{
proxy_pass http://8.136.14.176:8848;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}
(4)配置完成之后重载nginx,然后使用https访问即可(这种配置也将更加原始,将能够用于其他语言项目部署参考);
3.crontab定时任务的配置
? 最开始我就想着,这些数据库里面的数据都是我爬取的,加上项目对于实时性的依赖比较强,不写动态爬取就没意思了。为什么不每次请求别人的呢,那不就实时了?这样不现实,因为别人搭建的接口网站,使用者很多,和容易产生并发拿不到数据,更严重的是长期多次请求被别人发现导致封ip,这就很凉了。解决方法,利用mongoDB凌乱的数据存储优点,将爬取到的数据存放在自己的服务器上面,每次请求之请求自己的数据库,简介相当于复制了别人的数据库。然而,实时性怎么保证呢?解决方法只能是定时刷新我们的数据库,做一个刷数据库的功能,在用户使用低峰期刷新。当时是凌晨3-4点比较现实,总不能自己定个闹钟爬起来刷新数据库吧。于是搜索发现到了crontab 能够在Linux服务器上面配置sh定时执行脚本。关键是还能发送get和post请求!
? 这东西比较新奇,配了半天才搞好,基本使用方法如下:
crontab -uroot -e
systemctl restart crond.service
tail -f /var/log/cron
给出使用例子:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * /mnt/test1.sh >> /data/nightowl/text.log 2>&1
最后说明:crontab查看日志默认现实10条,crontab执行速度最快1s每条指令。
|