需要的下面四个工具最好都采用yum安装,不要采用编译安装的方法,因为编译安装会导致某些依赖关系丢失。
nginx 作为HTTP和反向代理,处理静态页面,动态服务交由nodejs服务。
nodejs作为处理动态事件的服务器。
mysql是数据库。
memcahed是一个数据缓存系统,为mysql提供缓存功能
首先你需要会使用linux的命令行操作,然后你至少需要简单理解js语言,还要熟悉mysql的基本操作;
系统环境
系统环境是centos6.5,yum源可能需要更新,为了下载更快,可以更换国内源,taobao源或者163源,具体操作自行百度,这里我直接采用默认源。
使用下面的命令更新yum源
1 |
yum update |
安装nginx
命令如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#安装nginx的rpm包,如果yum能找到对应的包,可以不做这一步 yum install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install nginx #安装nginx chkconfig nginx on #设置nginx开机自启 /etc/init.d/nginx start # 启动Nginx服务 或者使用 service nginx start #start 或者 stop 或者 restart /etc/init.d/nginx stop # 停止Nginx服务 chkconfig --list|grep nginx #查看nginx的启动权限,这条命令的功能搜一搜就好 #可以通过nginx -v 查看安装版本 #启动服务后,可以通过在浏览器访问http://losthost 看到默认的nginx服务器页面 |
其中,/etc/nginx/nginx.conf 是 Nginx默认安装配置文件位置,后面会用到
安装nodejs
1 2 3 4 5 6 7 |
#安装epel源,否则yum上找不到nodejs yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm #安装nodejs 和 npm ,npm是nodejs的一个包管理器之类的软件。 yum install nodejs npm #可以通过node -v 查看安装版本 |
express是nodejs的一个框架软件,很好很方便
1 2 3 4 5 6 |
#安装express, -g 是代表全局安装,d是同时安装依赖关系,这一步骤可以跳过,直接安装express命令行工具。 npm install express -gd #安完后如果命令行中没有express命令,执行下面这条安装指令,一般都是要安装的,express 4.x版本都需要安装这个命令行工具 npm install -g express-generator #可以通过express -v 查看安装版本(也许是-V,就是这俩) |
安装mysql和memcached
安装mysql
1 2 3 4 5 |
#安装mysql yum install mysql yum install mysql-server yum install mysql-devel #mysql查看是否安装成功,进入mysql命令行输exit退出来 |
使用mysql
1 2 3 |
mysqladmin -u root password root #第一个root是root账户,第二个root是需要设置的密码,这里以“root”为例 mysql -u root -p #以root用户登录mysql,会要求你输入密码,就输入刚刚设置的密码 #接下来就是基本的数据库操作,这里不再赘述 |
下面设置mysqld开机自启动,mysql的服务叫做mysqld
1 2 |
service nginx start #启动mysqld服务,这里类似上述的nginx服务 chkconfig mysqld on #设置nginx开机自启 |
安装 memcached
1 2 3 4 5 6 7 8 |
#安装memcached yum install memcached #查看是否安装成功 memcached -h #启动服务,默认会在11211端口启动,其他参数自行百度 service memcached start #依然是设置开机自启 Chkconfig memcached on |
架设服务器
环境配置好了,就可以架设服务器了
- 通过nginx建立nodejs服务器的反向代理
12345678910#用express创建一个nodejs项目express a_node #a_node是我随意起的项目名#cd 进入你刚刚创建的项目文件夹,进行相应的module安装npm install #可以通过修改package.json来选择安装哪些包,express会默认帮你设定一些必要的包,你还可以自己添加,可以搜索学习一下package.json的参数。这一步之后,基本的nodejs项目已经可以运行,但因为还要连接mysql和memcache所以下面继续安装包#这时在命令行中cd进项目目录, npm start 可以启动nodejs的服务器,默认在localhost:3000开启#访问localhost:3000可以看到express的页面npm install mysql #mysql的包安装npm install memcached #memcached的包安装 - /etc/nginx/nginx.conf 这个文件就是调用conf.d中所有配置文件的配置文件,想添加自己的配置文件最好不要修改/nginx.conf和default.conf了,自己在conf.d中建立一个.conf文件
- cd /etc/nginx/conf.d 可以看到default.conf 这是默认的配置文件,可以通过修改它使nginx支持php等操作(默认支持php页面的代码被注释掉了,可以取消注释来建立)
- /etc/nginx/conf.d 中建一个支持反向代理的.conf文件
1234567891011upstream nodejs{server 127.0.0.1:3000; #3000是你刚刚nodejs建立的服务器端口号}server {listen 8080; #8080是你的nginx代理端口server_name localhost;location / {proxy_pass http://nodejs; #调用upstream的那个端口}}
- 接下来重启nginx服务
1service nginx restart
这时访问localhost:8080应该能看到localhost:3000的对应页面,如果出现502错误可以去/var/log/nginx里的err.log看看错误日志,比如权限问题,可以
12#关闭selinux服务,解决connect() to 127.0.0.1:8080 failed(13: Permission denied)setbool -P httpd_can_network_connect 1
- 以上基本的nodejs服务器和nginx代理服务器都算建立了,可以修改nginx.conf配置文件来确定哪些页面请求使用代理,哪些页面请求直接处理
附一篇nodejs通过memcached查询mysql的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
//这个文件命名为sel.js,放在nodejs项目中的routes文件夹里 var express = require('express'); var URL = require("url"); var mysql = require("mysql"); var cache = require('memcached'); var router = express.Router(); router.get('/', function(req, res, next) { var memcached = new cache('localhost:11211');//新建cache连接 memcached.get(URL.parse(req.url,true).query.name,function(err,rows){ if(err) console.log(err); if (rows) { //如果mmecache查到了 res.send(rows); console.log("find in cache"); //显示查询结果 } else{ //否则新建mysql连接 console.log("not find in cache"); var con = mysql.createConnection({ host:'localhost', user:'root', password:'root', database:'nodetest', port:3306 }); con.connect(); //连接查询 console.log("connect the mysql"); con.query('select id from peo where name =?',[URL.parse(req.url,true).query.name], function(err0,rows1) { if (err0) console.log(err0); if (rows1 != "") { //MYSQL中存在记录,将记录写回memcache,同时送给前台 console.log("find in mysql"); res.send(rows1); memcached.set(URL.parse(req.url,true).query.name,rows1,10000,function(err0,rows1){ if(err0) console.log(err0); console.log("save into cache"); }); } else{ //mysql中不存在记录,输出不存在 console.log("no record"); res.send("no record"); }; }); con.end(); console.log("end line of mysql"); }; memcached.end(); console.log("end line of cache"); }); }); module.exports = router; |
1 2 3 4 5 6 7 8 9 10 11 |
//修改nodejs项目文件夹中的app.js文件 app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/users', users); app.use('/sel', require('./routes/sel')); //这里是刚刚建立的sel路由文件,上下文对照代码自己找 // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); |
当然,你还可以在app.js中增加路由调用,然后在routes文件夹中写更多自己的模块,那就需要你深入的学习nodejs了。
yum…………