这段时间空余的时候一直在重新写自己的博客,之前是采用的 hexo 生成的博客然后跑在 git page 上的。这次重写是选择的 koa2 这个框架。
今天先来写一下关于 koa2 网站运行部署以及 https 配置。
目前网站的大致结构是: koa2 的应用跑在 1113
端口,然后 nginx 反向代理到 443
(https) 端口, 同时 nginx 将 80
(http) 端口转发到 443
(https) 端口。
pm2 配置
pm2 是开源的基于Nodejs的进程管理器,包括守护进程,监控,日志的一整套完整的功能,基本是Nodejs应用程序不二的守护进程选择,事实上它并不仅仅可以启动Nodejs的程序,只要是一般的脚本的程序它同样可以胜任。
pm2 是一个带有负载均衡功能的 Node 应用的进程管理器。使用 pm2 可以保持我们的node应用进程永远运行在后台。此外 pm2 还有个非常强大的deploy功能,可以从本地直接部署线上网站。下面我来说一下具体的操作。
-
服务端安装软件
在服务端需要安装的有 git 、node 、pm2 、nginx 等。
安装完这些之后需要在服务端生成 ssh key ,然后将生成的 pub key 添加到相应的 git 仓库里的 setting 里的 Deploy Keys 里。 -
本地安装软件
本地需要安装的有 git 、node 、pm2 等。 -
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 配置
- 配置 http
在服务端安装完nginx之后,打开(划掉划掉,经朋友指正,nginx的配置应该放置在/etc/nginx/sites-enabled
目录(默认的配置文件目录)/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 的日志查看相应的错误)之后就可以打开对应的域名访问网站。
- 配置 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_certificate
与 ssl_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。
文章中如有错误欢迎指正。
感谢您的阅读,本文由 赵的拇指 版权所有。如若转载,请注明出处: https://www.zhaofinger.com/detail/5
网友评论