今天先来写一下关于 koa2 网站运行部署以及 https 配置。
目前网站的大致结构是: koa2 的应用跑在 1113 端口,然后 nginx 反向代理到 443 (https) 端口, 同时 nginx 将 80 (http) 端口转发到 443 (https) 端口。

pm2 配置

pm2 是开源的基于Nodejs的进程管理器,包括守护进程,监控,日志的一整套完整的功能,基本是Nodejs应用程序不二的守护进程选择,事实上它并不仅仅可以启动Nodejs的程序,只要是一般的脚本的程序它同样可以胜任。

pm2 是一个带有负载均衡功能的 Node 应用的进程管理器。使用 pm2 可以保持我们的node应用进程永远运行在后台。此外 pm2 还有个非常强大的deploy功能,可以从本地直接部署线上网站。下面我来说一下具体的操作

1: 服务端安装软件

在服务端需要安装的有 git 、node 、pm2 、nginx 等。
安装完这些之后需要在服务端生成 ssh key ,然后将生成的 pub key 添加到相应的 git 仓库里的 setting 里的 Deploy Keys 里。

2: 本地安装软件

本地需要安装的有 git 、node 、pm2 等。

3: pm2 deploy 配置

使用 pm2 ecosystem 生成配置示例文件,然后打开配置生成的配置文件,下面是生成的示例配置文件。

module.exports = {
  * Application configuration section
  * http://pm2.keymetrics.io/docs/usage/application-declaration/
 apps: [
     // First application
         name: 'API',
         script: 'app.js',
         env: {
             COMMON_VARIABLE: 'true'
         env_production: {
             NODE_ENV: 'production'
     // Second application
         name: 'WEB',
         script: 'web.js'
  * Deployment section
  * http://pm2.keymetrics.io/docs/usage/deployment/
 deploy: {
     production: {
         user: 'node',
         host: '212.83.163.1',
         ref: 'origin/master',
         repo: 'git@github.com:repo.git',
         path: '/var/www/production',
         'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production'
     dev: {
         user: 'node',
         host: '212.83.163.1',
         ref: 'origin/master',
         repo: 'git@github.com:repo.git',
         path: '/var/www/development',
         'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env dev',
         env: {
             NODE_ENV: 'dev'

在 apps 里可以配置多个应用,然后deploy是配置不同的环境所用的配置,有了示例而配置之后,你可以根据自己的真实情况进行相应的修改。

有了配置文件之后执行 pm2 deploy ecosystem.config.js production setup 命令进行初始化设置,运行完成之后,再运行 pm2 deploy ecosystem.config.js production 这个命令,以后更新部署应用都可以通过这个命令。(为了方便可以将这两条命令配置到 package.json 里的 scripts 里)。’

命令运行完之后,如果没出意外,出现 Success 字样就表示部署成功。这时候在浏览器输入相应的服务器 ip以及你设置的端口号就可以打开你部署的网站。同时在服务器上,可以通过 pm2 list 查看当前运行的应用。

nginx 配置

1:配置 http

在服务端安装完nginx之后,打开 /etc/nginx/sites-enabled 目录(默认的配置文件目录)(划掉划掉,经朋友指正,nginx的配置应该放置在/etc/nginx/sites-available 这个目录下,在此目录下可以配置多个站点,然后选择需要开启的网站软链到 sites-enabled 下开启相应的网站),在该目录下新建一个配置文件比如 blog.conf ,然后就可以打开该配置文件进行配置,将已经运行的 node 服务反向代理到 80 端口下。我的配置如下:

server { listen 80; server_name blog.zhaofinger.com zhaofinger.com www.zhaofinger.com; access_log /var/www/log/blog-access.log; error_log /var/www/log/blog-error.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:1113/; proxy_redirect off;

proxy_pass 对应的就是 node 服务所运行的端口。文件写好之后保存退出,然后重启 nginx 服务,service nginx restart,重服务成功(如果错误可以打开 nginx 的日志查看相应的错误)之后就可以打开对应的域名访问网站。

2: 配置 https

配置 https ,首先需要购买 https 证书,我是在阿里云上买的免费的证书,打开网站点击购买证书,然后选择‘免费型DV SSL’,然后点击 ‘立即购买’。购买证书之后打开证书控制台补全信息。
根据提示将两个证书文件下载下来上传到服务器上。然后打开刚才的 blog.conf 进行 https 配置。我的配置如下:

server {
     listen 443;
     server_name blog.zhaofinger.com zhaofinger.com www.zhaofinger.com;
     access_log /var/www/log/blog-access.log;
     error_log  /var/www/log/blog-error.log;
     ssl on;
     ssl_certificate   /etc/nginx/cert/214259593710649.pem;
     ssl_certificate_key /etc/nginx/cert/214259593710649.key;
     ssl_session_timeout 5m;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;
     location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-NginX-Proxy true;
             proxy_pass http://127.0.0.1:1113/;
             proxy_redirect off;

ssl_certificatessl_certificate_key就是刚刚上传的文件的位置。配置完成之后保存配置文件,退出重启 nginx 服务。然后打开https://xxx.com就可以访问到网站。
配置完 https 之后还需要将 80 端口对应的 http 服务转到 https下,增加配置如下:

server {
     listen 80;
     server_name www.zhaofinger.com;
     rewrite ^/(.*) https://$server_name$1 permanent;    #跳转到Https

到这里使用 pm2 + nginx 配置 https 服务就 ok 了。

最后本博客的源码托管在 github,欢迎使用,欢迎star。

文章中如有错误欢迎指正。

轻量级推送服务和实时在线监控平台,同时用于开发即时通信系统,基于node的socket.io,支持web,android,ios客户端,支持移动端离线推送,可进行分布式部署 随着互联网网速的不断提升,即时消息通信的应用场景越来越多。我在参与公司多个产品的研发中,不止一次的遇到需要集成聊天功能的需求。既然是聊天就必须把消息尽快送达目标用户,做的多了就有了一个自己自己的经验和想法,然后借着闲暇时间时间一点点的就写出了这个项目。这个项目灵感实际开发工作,同时又把它应用到自己的工作中。希望它能帮到你,也希望你能给我更多的反馈和改进意见,让它帮助更多的人。 系统概要和功能特性 业务系统通过R 一个轻量级,可伸缩的,基于koa2的敏捷开发Node.js Web框架。 ThinkKoa-轻量级可扩展的敏捷开发Node.js框架,支持ES6 / 7新特性,支持Koa,Express中间件,基于koa2。 基于koa2 ThinkKoa基于著名的Node.js框架koa2进行了薄封装。扩展了Koa的功能,能够Swift的进行Web开发。 支持Koa / Express中间件 通过简单的约机制,ThinkKoa可以很好的支持Koa中间件(包括Koa1及Koa2)。还提供了使用Exp()来使用Express的中间件。大大提升了框架的扩展性和开源模块利用率。 为敏捷开发而生 ThinkKoa是在ThinkKoa团队3年的Node.js项目开发积累中堆积酿造的,以提高团队开发效率,助力敏捷开发为目的。框架通过公司多个互联网产品上线,遍及以及大流量大并发的考验。 支持多种项目结构和多种项目环境 ThinkKoa支持Nginx代理以及pm2部署,适合对稳定性和效率有要求的生产环境。ThinkKoa支持单一模块模式,适合简单快速的项目。 支持灵活的自定义路由 ThinkKoa 查看node的版本:如果没有安装node,可以使用宝塔安装(推荐),进入软件商店,搜索node,选择node.js版本管理器1.8进行安装:安装好后点击设置,点击更新版本列表(列表每24小时与Node.js官网列表同步一次,可点击【更新版本列表】按钮立即与Node.js官网同步版本列表):然后选择需要的node版本进行一键安装,一般推荐14或者18版本。也可以自行下载镜像安装,进入node官网:https://nodejs.org/dist/ 一直以来都想用自己的技术做一些个人项目,之前的是基于hexo hexo ,感觉啥都是别人帮你写好了,于是便决定自己搞一个,断断续续地弄了一部分,也总算是完成了一个简单版本并部署上线。 博客地址: 博客后台: 如果觉得还行的话,欢迎给个star哈。感谢~~ 由于不设计,博客主题是模仿的布局样式,感谢作者的开源分享。 相关技术栈 Vue + Vue路由器+更少+ Axios 节点+ koa2 + koa-router mysql +续集 Nginx + PM2 未来可能加入 网易云音乐 页面数据可视化统计 git clone git@github.com:chenyinkai/cykspace.git cd cykspace npm install npm start # 打开 http://localhost:3000/v1/articles 测试前先在【lib】—>【config.js】配置数据库基本信息 sql文件在sql目录下 互连请求路径可在[routes]->【index.js】下查看 如果在测试期 最近用ghost又搭建了个博客(blog.tonlyshy.cn),想用这个写偏技术的内容,本站就偏生活一点。 期间试过‘全世界最好的语言’的WordPress以及typecho,接着又试了‘2016热门开源项目’的Grav,但是都太复杂了,配置上又有很多问题。ghost跟Spruche都是基于nodejs的,很轻量化。感觉Djiango和它有些类似。这样就有两个站点,穷学生没钱拿两个ECS 注意都是使用 root 用户。 下载 nvm: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash 使用 nvm 安装 nodejs: nvm install node,安... 2020/03/30 周一 #JSON数据转Blob后,怎么还原 在axios请求下载文件接口时,一般设置responseType: ‘blob’,文件返回正常就没问题,但后台如果处理文件或鉴权有问题,接口返回了包含错误信息的json格式数据,那样json数据也转为Blob对象,而前端有必要将错误信息展示的,那怎么将Blob数据转JSON呢?下面来看看 let fileType = res.headers['content-type'] if (fileType.startsWith('applicati 文章目录前言后端配置域名,根据域名申请证书配置nginx,采用pm2启动后端 在我的前一篇文章中,使用nginx配置了https服务,但是发现所有的前端https请求都被阻塞,因此在页面中增加了如下设置: <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 但发现后端没有...