热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

博客网站项目部署问题汇总

最近在使用koa2+mysql+nodejs+weback+vue+redis技术搭建了一个博客网站,奈何遇到了种种问题,现在一一总结一番:问题1.使用 ecosystem.jso

最近在使用koa2+mysql+nodejs+weback+vue+redis技术搭建了一个博客网站,奈何遇到了种种问题,现在一一总结一番:

问题1. 使用 ecosystem.json 配置文件部署项目, "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production", //项目发布到服务器上执行的命令 

技术图片

发现按照教程或者网络给出的配置文件,无法访问网站,网站报nginx代理问题,或者直接502 Bad Gateway;

技术图片 

打印 pm2 的日志:

技术图片

 发现服务貌似一直被 killed 然后在唤起,然后在killed。。。。。

问题2.于是修改配置文件,怀疑是执行命令的问题:

"post-deploy" : "npm install &&npm run prd &&pm2 startOrRestart ecosystem.json --env production", //项目发布到服务器上执行的命令

注意这里多了 npm run prd,对应的package.json 文件中的命令:

"prd": "cross-env NODE_ENV=production pm2 start bin/www --watch",

即让服务启动的命令,然后页面就能访问了,但是会有几个问题:

  问题:在服务端使用pm2 ls 会发现在原来myblog进程上多了一个www的进程:

技术图片

类似如上图所示,当然这个是正确之后的图,实际上这里会多一行 name为www的进程,实际上这个进程就是执行 npm run prd 后起的进程。

类似的在服务器端的 www/website/myblog/current文件夹中执行npm run prd 同样会起这个服务,然后进程也是www;

好了,即使我们使用npm run prd唤起了服务,但是仍有以下问题:

  问题1:网站引用的js、css等静态资源无法缓存;

  问题2: 每次执行部署代码命令  pm2 deploy ecosystem.json production ,都会提示服务器正在运行该进程【即npm run prd】,每次都要在服务器关闭该进程再执行该命令,或者加上-f命令,却导致进程数过多。

  问题3:最为致命的是,网站在运行半天之后,只能访问静态css、js等资源,koa脚手架搭建的api接口全部不能访问了!!!!!

------------

那么问题究竟在哪里呢?

折腾了很久,对pm2配置文件各种修改尝试,还有nginx的配置文件,甚至重新格式化磁盘,重新搭建环境,都不行。。。。。

直到在一次服务器又不能访问api接口后,我打印pm2日志看了一下:

技术图片

 纳尼???报了一个错误:loveNum未定义,然后在看下面的日志:

技术图片

 因错误太多,导致服务器挂了。。。。挂了。。。。。。

终于明白了,原来是本身逻辑有问题,代码无法获取到loveNum的值,刚开始还可以运行,但是时间过长之后,越来越多的错误导致服务卡死,于是表现为每每运行半天左右,接口就挂了。

好了,直到原因后,排查业务逻辑代码,修改loveNum的bug,然后在ecosystem.json 配置文件中,删掉npm run prd;并且修改 "script": "./bin/www",//启动的入口脚本,最终ecosystem.json 配置文件如下:

{
  "apps":[{
    "name": "myblog", //部署的应用的名字
    "script": "./bin/www",//启动的入口脚本
    "watch":true,//是否监听文件发生变化
    "env": {
      "COMMON_VARIABLE": "true"//启动时传入的变量
    },
    // Environment variables injected when starting with --env production
    // http://pm2.keymetrics.io/docs/usage/application-declaration/#switching-to-different-environments
    "env_production" : {
      "NODE_ENV": "production" //生产环境的变量
    }
  }],
  // Deployment part
  // Here you describe each environment
  "deploy" : { //部署的任务
    "production" : {
      "user" : "zyl", //服务器上用来发布的用户名
      // Multi host is possible, just by passing IPs/hostname as an array
      "host" : ["39.106.194.136"],//主机ip
    "port":"22",//端口号
// Branch
      "ref"  : "origin/master", //指定主分支master
      // Git repository to clone
      "repo" : "git@github.com:zhenyulei/koa-blog.git", //仓库地址
      // Path of the application on target servers
      "path" : "/home/zyl/www/website/myblog", //把项目部署到服务器的那个目录下
      // Can be used to give options in the format used in the configura-
      // tion file.  This is useful for specifying options for which there
      // is no separate command-line flag, see ‘man ssh‘
      // can be either a single string or an array of strings
      "ssh_options": "StrictHostKeyChecking=no", //把ssh的key校验取消掉
      // To prepare the host by installing required software (eg: git)
      // even before the setup process starts
      // can be multiple commands separated by the character ";"
      // or path to a script on your local machine
      "pre-setup" : "",
      // Commands / path to a script on the host machine
      // This will be executed on the host after cloning the repository
      // eg: placing configurations in the shared dir etc
      "post-setup": "ls -la",
      // Commands to execute locally (on the same machine you deploy things)
      // Can be multiple commands separated by the character ";"
      "pre-deploy-local" : "echo ‘This is a local executed command‘",
      // Commands to be executed on the server after the repo has been cloned
      "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production", //项目发布到服务器上执行的命令
// Environment variables that must be injected in all applications on this env 
      "env" : { "NODE_ENV": "production" } } }
}

再次执行:

pm2 deploy ecosystem.json production setup 

pm2 deploy ecosystem.json production

binggo!!网站终于能够访问了!

不但解决了网站能够访问的问题,而且网站的静态资源也有了缓存,此外再来看pm2的ls

技术图片

在看其日志,已经正常:

技术图片

 终于好了。

---

其他问题,在设置服务器缓存的时候,发现

技术图片

其中conf.d 是设置nginx路由对应关系的文件夹,而nginx.conf是设置nginx中的http的配置文件。

所以设置缓存和压缩应该是放在nginx.conf文件中设置。

此外,加上favicon.icon: 使用webpack打包的单页面项目如何设置favicon.icon文件

最简单的方法是在koa端直接放在public文件夹中,注意名字一定要标准:favicon.icon

upstream myblog {
    server 127.0.0.1:8000;
}
server {
    listen 80;
    server_name www.blog.xiaozhumaopao.com;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header X-Forwarded-Host $server_name;

        proxy_pass http://myblog;
        proxy_redirect off;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt){
      root /home/zyl/www/website/myblog/current/public;
    }

}

博客网站项目部署问题汇总


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
author-avatar
手机用户2502940575
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有