您的位置:首页 > 数据库 > MySQL

debian7搭建生产环境的linux+nodejs+express+mysql的web服务器

2018-07-31 23:36 651 查看

注:Windows使用ssh可以下载Putty,请自行百度搜索

 打开https://billing.virmach.com/register.php,注册账号

登录账号来到主界面,点击Serveces、View Available Addons,网址:https://billing.virmach.com/clientarea.php

选择自己想要购买的主机套餐 

这里我用debian7 

加入购物车 

付款成功后,点击My Services 

这时你会看到购买的主机状态是Active,否则你要找客服(找客服请点击右下角Live Support)

点击进入主机管理页面,找到IP

在终端输入以下命令远程登录服务器(Windows用putty)

[code]ssh root@你的IP

 

 

终端提示要输入登录密码时,点击如图叹号将密码输入

输入密码回车,登录成功

 

 远程登录成功后,首先输入以下命令更新apt-get

[code]apt-get update

以下命令可以查看Linux系统是32位还是64位 

[code]getconf LONG_BIT

下载Nodejs,64位系统下载64位包,这里我们用wget下载

以下是wget安装命令,因为这个debian系统自带wget所以无需安装 

[code]apt-get install wget

打开http://nodejs.cn/download

右键选择复制链接地址 

在终端输入以下命令下载nodejs

[code]wget https://npm.taobao.org/mirrors/node/v10.7.0/node-v10.7.0-linux-x64.tar.xz

下载若发现以下问题

 

用以下命令安装便可 

[code]wget --no-check-certificate https://npm.taobao.org/mirrors/node/v8.11.2/node-v8.11.2-linux-x64.tar.xz

[code]wget --no-check-certificate https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz

下载成功后终端输入ls查看该文件 

 

输入以下命令解压nodejs压缩包,命令名字要与上图红线标识包名一致

[code]tar xvJf node-v8.11.2-linux-x64.tar.xz

 以下命令将node-v8.11.2-linux-x64文件夹改名为node-v8.11.2

[code]mv node-v8.11.2-linux-x64 node-v8.11.2

 

设置软连接

[code]ln -s /root/node-v8.11.2/bin/node /usr/local/bin/node
ln -s /root/node-v8.11.2/bin/npm /usr/local/bin/npm

输入以下命令 

[code]node -v
npm -v

出现以下结果,表明Nodejs环境安装成功

 

将你的代码上传到服务器,比如我的代码(打开https://github.com/SemperChen/bookmark/archive/master.zip下载)

[code]scp -r /Users/Semper/Documents/projects/bookmark root@107.173.35.226:root

windows可以使用WinSCP上传文件,下载地址:https://excellmedia.dl.sourceforge.net/project/winscp/WinSCP/5.13.3/WinSCP-5.13.3-Setup.exe

上传成功后在终端用ls查看 

安装pm2

[code]npm install -g pm2

安装bookmark项目依赖库,cd是回到当前用户目录,也就是root

[code]cd
cd bookmark
npm install

pwd可查询当前路径 

[code]pwd

 以下是ecosystem.config.js文件代码

[code]module.exports = {
apps : [
{
//general
name      : 'bookmark',
script    : 'server.js', //启动执行的初始脚本

//advanced
watch     : ['appsback','routes','ecosystem.config.js','server.js'],//监听文件变化
ignore_watch: ['node_modules','apps','static'],//忽略监听的文件夹
max_memory_restart: '500M',//内存达到多少会自动restart
env: {
COMMON_VARIABLE: 'true'
},
env_production : {
NODE_ENV: 'production'
},

//log file
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',//日志格式

//control
min_uptime: 3000,
listen_timeout: 3000,
kill_timeout: 5000,
max_restarts: 5,
}
]
};

安装MySQL 

[code]apt-get install mysql-server mysql-client

MySQL差不多安装完成时,会提示输入新密码,需输入两次

 以下命令登录MySQL

[code]mysql -uroot -p

 

 创建数据库test

[code]CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

使用test数据库 

[code]use test

 创建表users

[code]create table users(
id INT(5) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(18),
password VARCHAR(50),
bookmark TEXT
);

 建表成功

在bookmark目录下,启动pm2

[code]pm2 start ecosystem.config.js --env production

开机启动 

[code]pm2 startup

 

启动成功后:

注册账号测试http://107.173.35.226:8000/register?username=张三&password=123456&bookmark=[1,2,3] 

登录账号测试http://107.173.35.226:8000/login?username=张三&password=123456

如果无法访问尝试开放8000端口 

[code]iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

server.js代码:

[code]let express = require('express');
let url = require('url');
let app = express();
let mysql  = require('mysql');

let connection = mysql.createConnection({
host     : 'localhost',
user     : 'root',
password : '123456',
port: '3306',
database: 'test',
});

connection.connect();
app.get('/login', function (req, res) {
// res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
// userDao.updateUser(connection,'菜鸟工具21','111111book2123123');
let params = url.parse(req.url, true).query;
login(params,res)

})
function login(params,res) {
let  sql = 'SELECT * FROM users WHERE username="'+params.username+'"';
//查
connection.query(sql,function (err, result) {
if(err){
// console.log('[SELECT ERROR] - ',err.message);
// return;
}
// console.log('result',result,'err',err,);
if(result.length===1&&result[0].username===params.username&&result[0].password===params.password){
res.send({isLogin:true,msc:'登录成功!',user:result[0]});
}else {
res.send({isLogin:false,msc:'登录失败!用户名或密码错误'});
}

});
}
app.get('/register', function (req, res) {
let params = url.parse(req.url, true).query;
register(params,res)

})
function register(params,res) {
let  sql = 'SELECT * FROM users WHERE username="'+params.username+'"';
//查
connection.query(sql,function (err, result) {
if(err){
// console.log('[SELECT ERROR] - ',err.message);
// return;
}
// console.log('result',result,'err',err,);
if(result.length===0){
let  addSql = 'INSERT INTO users(username,password,bookmark) VALUES(?,?,?)';
let  addSqlParams = [params.username, params.password, params.bookmark];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
login(params,res)
});
}else {
res.send({isRegisterSuccess:false,msc:'注册失败,用户名已存在!'});
}

});
}
function saveBookmark(params,res) {
let  sql = 'SELECT * FROM users WHERE username="'+params.username+'"';
//查
connection.query(sql,function (err, result) {
if(err){
// console.log('[SELECT ERROR] - ',err.message);
// return;
}
// console.log('result',result[0],'err',err,);
if(result.length===1&&result[0].username===params.username&&result[0].password===params.password){
let modSql = 'UPDATE users SET bookmark = ? WHERE username = ?';
let modSqlParams = [params.bookmark,params.username];
//改
connection.query(modSql,modSqlParams,function (err, result) {
if(err){
// console.log('[UPDATE ERROR] - ',err.message);
// return;
}
res.send({isSavedBookmark:true,isLogin:true,msc:'已同步到云书架!',user:params});
});
}else {
res.send({isSavedBookmark:true,msc:'保存失败!'});
}

});
}
app.get('/save', function (req, res) {
let params = url.parse(req.url, true).query;
saveBookmark(params,res)

})

// connection.end();
let server = app.listen(8000, function () {
let host = server.address().address;
let port = server.address().port;

// console.log("应用实例,访问地址为 http://%s:%s", host, port)

})

 package.json:

[code]{
"name": "bookmark",
"version": "0.0.0",
"private": true,
"scripts": {},
"dependencies": {
"express": "^4.16.2",
"mysql": "^2.15.0"
}
}

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: