Fork me on GitHub

腾讯云+nginx部署nodejs应用(一)

腾讯云服务器

购买腾讯云服务器,配置基本信息,比如服务器名称,密码。

使用已有秘钥,mac远程ssh登陆连接服务器

创建秘钥中选择使用已有秘钥,如果mac本机没有秘钥,则创建。将cat获取到的秘钥粘贴到云主机表单里。

1
2
$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub

然后就可以连接了。

1
$ ssh 用户名@公网ip

注:腾讯云linux服务器ubuntu系统的在购买的时候默认用户名ubuntu,属于普通用户,以后的登陆都是普通用户登陆,如果想要root用户登陆,需要更改配置,可自行百度。

安装node

1
2
3
4
5
6
7
8
9
10
11
12
13
# 更新系统
sudo apt-get update
# 安装nodejs必要的包
sudo apt-get install python gcc make g++
# 下载资源
wget -c https://nodejs.org/dist/v6.9.0/node-v6.9.0.tar.gz
# 解压
tar zxvf node-v6.9.0.tar.gz
# 进入
cd node-v6.9.0/
# 编译
./configure
make install

安装Nginx

1
2
3
4
wget -c http://nginx.org/download/nginx-1.11.3.tar.gz
tar zxvf nginx-1.11.3.tar.gz
cd nginx-1.11.3/
./configure --with-pcre --with-http_ssl_module --with-http_v2_module

异常处理

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using –without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using –with-pcre= option.

安装PCRE

1
2
3
4
5
6
7
wget -c ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
tar zxvf pcre-8.38.tar.gz
cd pcre-8.38/
pwd
# /home/user/nginx-1.11.3/pcre-8.38
cd ../
./configure --with-pcre=./pcre-8.38 --with-http_ssl_module --with-http_v2_module

异常处理

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using –with-openssl= option.

安装openssh

1
2
3
4
5
6
7
wget -c https://www.openssl.org/source/openssl-1.0.2h.tar.gz
tar zxvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
pwd
# /home/user/nginx-1.11.3/openssl-1.0.2h
cd ../
./configure --with-pcre=./pcre-8.38 --with-openssl=./openssl-1.0.2h --with-http_ssl_module --with-http_v2_module

异常处理

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using –without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using –with-zlib= option.

安装zlib

1
2
3
4
5
6
7
8
wget -c http://zlib.net/zlib-1.2.8.tar.gz
tar zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
pwd
# /home/user/nginx-1.11.3/zlib-1.2.8
./configure --with-pcre=./pcre-8.38 --with-openssl=./openssl-1.0.2h --with-zlib=./zlib-1.2.8 --with-http_ssl_module --with-http_v2_module
# 编译安装
make install

安装nginx完成,启动nginx

1
2
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# -c制定配置文件的路径,不加nginx会自动加载默认路径的配置文件。

打开localhost,远程的话打开公网ip就可以看到nginx页面

部署web项目

https://code.aliyun.com/

code.aliyun上新建代码库,提交本地代码todos到仓库,类似github操作流程。todos的github源码

云服务器上安装git,新建apps目录,clone阿里云code仓库里面的项目todos到本地apps/目录下。
git之前需要添加ssh

1
2
sudo ssh-keygen
cat /home/ubuntu/.ssh/id_rsa.pub

添加上面获取到的服务器公钥到aliyun code个人信息里面的ssh公钥管理里面,

如果报错

Cloning into ‘todos’…
The authenticity of host ‘code.aliyun.com (120.55.150.20)’ can’t be established.
RSA key fingerprint is 69:ab:cb:07:eb:a3:e1:f3:0b:2e:f4:23:b0:c1:c6:9a.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/ubuntu/.ssh/known_hosts).
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

解决方法

1
2
3
4
sudo chown ubuntu: /home/ubuntu/.ssh
sudo chown ubuntu: /home/ubuntu/.ssh/*
sudo chmod 700 /home/ubuntu/.ssh
sudo chmod 600 /home/ubuntu.ssh/*

然后就可以clone代码到云服务器。

https://crp.aliyun.com

crp.aliyun添加新项目todos,创建工作流todos。(这里的图片里面是test,现在改为todos,反正就是个名称,后面都是todos)

crp01

选择刚刚创建的代码库todos的master分支。

crp02

代码检出可以略过,使用默认配置,进入正式部署,选择自动触发,自动完成,异常通知

crp03

部署包来源选择不自动上传,三种包的区别在于这里:说说CRP部署任务中的三种包

先在云服务器上新建文件夹/home/ubuntu/apps, clone好阿里云code仓库里面的项目todos到本地apps/目录下。
对应的正式部署命令:

目标机器:公网ip
部署路径:服务器项目路径/home/ubuntu/apps
部署命令:
cd /home/ubuntu/apps/todos
git checkout .
git fetch
git checkout $CODE_VERSION
npm -d install
npm update
pm2 restart server/babel.js
登陆用户: ubuntu

在这之前需要添加aliyun crp的ssh公钥到云服务器,每一个部署项目都要添加各自的ssh公钥。但是每一个部署项目里的不同流的ssh公钥只需一个,即一个部署项目只需一个sshkey。

保存并立即运行,自动部署成功,这样以后修改代码后,只需一键部署到云主机即可。可以看到部署成功以后服务器的/home/ubuntu/apps文件夹下面就多了个todos文件夹,里面有全部的项目代码和npm包。

可是你会发现,没有static文件夹,那肯定访问不了页面,那是因为没有webpack打包,这里你可以在服务器上手动打包,但是这样会比较慢,耗性能,增加服务器压力,所以我们采取另一种解决方案。请看下一章。

如有错误,欢迎大家提出~~

-------------本文结束感谢您的阅读-------------
如果您觉得受益了,欢迎打赏鼓励。