从服务器搭建Node.js+Express/Koa2+Knex+Mysql环境到Apache2部署

从服务器搭建Node.js+Express/Koa2+Knex+Mysql环境到Apache2部署

前言

此篇文章用于记录我在为写毕设而搭建服务器环境到Apache2部署中的步骤,及遇到的问题,避免以后用到的时候又要使劲百度谷歌,打开一堆页面看着难受死了(窗口密集恐惧症了解一下哈哈哈哈哈哈。本文内容仅供参考,有什么差错或者问题,请轻喷,或者给我点意见,提出问题也行~~咧咯咧咯咧咯咧咯咧咯….

环境介绍

  • 系统:Ubuntu 16.04

  • 后端:Node.js + Express + Knex

  • Web服务器:Apache

  • 前端框架:Vue.js

目录

安装Node.js环境

实际上安装Node.js环境非常简单,只需要两条命令。
然而我一开始百度到的,非常复杂,要输入好几条命令,还要指定Nodejs版本巴拉巴拉的,然后各种错误,删了又装了又删….最后发现只需要这两条命令….(可能我太蠢了,哭唧唧

为了保证获取的Node.js和npm是最新版本,首先刷新一下本地包索引

1
2
$ sudo apt-get update
$ sudo apt-get upgrade

然后就是安装这俩玩意儿了

1
2
$ sudo apt-get install nodejs
$ sudo apt-get install npm

最后检查一下是否安装成功:

1
2
$ node --version
$ npm -v

如果有版本号输出,且没有错误的话就表示安装成功了

附:

如果要删除npm或者Node.js,可以执行以下命令:

1
2
$ sudo apt-get remove nodejs
$ sudo apt-get remove npm

注意:有个坑!~不要用autoremove,可能会把还需要的软件也被卸掉!

更新Node.js

今天发现一个问题…根据上面的方法安装的Node不是最新版!!于是找了下更新的方法:

1
2
3
4
5
$ sudo apt update -y
$ sudo apt install -y nodejs nodejs-legacy npm
$ sudo npm config set registry https://registry.npm.taobao.org
$ sudo npm install n -g
$ sudo n stable

#####!!重点踩坑高能!!
刚刚发现更新之后 node -v 查看版本,发现版本还是旧的!
解决办法参考:

https://www.jb51.net/article/98153.htm

附加说明:
n是一个Node工具包,它提供了几个升级命令参数:

n 显示已安装的Node版本
n latest 安装最新版本Node
n stable 安装最新稳定版Node
n lts 安装最新长期维护版(lts)Node
n 根据提供的版本号安装Node

安装Express/Koa框架

安装完Node.js和npm这俩玩意儿之后,我们新建一个文件夹,进入。然后初始化npm,安装依赖库,命令如下:

1
2
3
4
$ sudo mkdir myapp
$ cd myapp
$ sudo npm init
$ sudo npm install

注意:这里npm init一定要sudo,不然有可能会权限不足初始化失败,因为这里初始化时要创建文件的,创建文件需要一定权限。

输入sudo npm init之后,会让你填程序信息,名称、版本、描述、文件入口(默认index.js)、测试指令、git仓库、关键字、作者、版权,如果都选择默认,皆可直接Enter跳过。

接下来就是安装Express框架了:

1
2
$ sudo npm install express --save
$ sudo npm i koa

附:临时安装express,而不添加进依赖列表,则执行以下命令:

1
$ npm install express --no-save

生成Express/Koa应用程序模板

通过应用生成器express-generator/koa-generator可以快速创建一个Express/Koa框架的骨架模板。其中express-generator也包含了express命令行工具(koa同)。

安装express-generator/koa-generator工具:

1
2
3
4
$ sudo npm install express-generator -g
$ sudo npm install -g koa-generator
$ express -h //可查看所有可用命令行参数
$ koa -h

然后我们用其来创建一个叫myapp的Express应用/myapp2的Koa应用,并安装依赖包:

Express:

1
2
3
$ sudo express --view=pug myapp
$ cd myapp
$ npm install

Koa:

1
2
3
$ sudo koa2 myapp2
$ cd myapp2
$ npm install

创建好了之后,我们就可以通过以下命令来启动应用了:

Express:

MacOS/Linux

1
$ DEBUG=myapp:* npm start

Windows

1
> set DEBUG=myapp:* & npm start

之后在终端窗口会出现一个端口

然后输入在浏览器输入你的服务器ip:port

接下来看到浏览器页面显示以下内容,即表示模板创建并运行成功。

Express
Welcome to Express

Koa:

1
$ npm start

项目启动后,默认端口号是3000。

接下来看到浏览器页面显示以下内容,即表示模板创建并运行成功。

Hello Koa 2!
Welcome to Hello Koa 2!

安装Mysql

同样的,为了保证版本最新,首先刷新本地包索引

1
2
$ sudo apt-get update
$ sudo apt-get upgrade

然后输入以下三条命令,安装数据库:

1
2
3
$ sudo apt-get install mysql-server
$ apt-get isntall mysql-client
$ sudo apt-get install libmysqlclient-dev

安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:

1
sudo netstat -tap | grep mysql

通过上述命令检查之后,如果看到有mysql的socket处于listen状态则表示安装成功。

登陆mysql数据库可以通过如下命令:

1
$ mysql -uroot -p

-u 表示选择登陆的用户名,-p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。其中以上root为用户名,如果是其他用户名,可更改。

若想直接进入某个数据库,则:

1
$ mysql -uroot -p [sqlname]

操作结束可输入以下命令退出mysql:

1
mysql> exit

Mysql创建新数据库及其建表

以上登入mysql后,输入以下mysql命令,可更改用户权限:

1
mysql> GRANT ALL ON  *.* TO [username]@localhost IDENTIFIED BY '123456';

参考自:https://www.linuxidc.com/Linux/2016-12/138081.htm

创建新数据库:

1
mysql> CREATE DATABASE [sqlname];

若提示 Query OK… 则表示创建成功。

进入指定数据库:

1
mysql> use project

建立一个名为unit的表:

1
2
3
4
5
6
mysql> create table unit(
   > id int(11) not null auto_increment,
   > unit_name varchar(80) not null,
   > primary key(id)
   > ) ENGINE=InnoDB DEFAULT
   > CHARSET=gb2312;

若提示 Query OK… 则表示创建成功。

插入数据行:

1
2
3
mysql> insert into unit(id,unit_name) values('1','西安电子科技大学');
mysql> insert into unit(id,unit_name) values('2','西北工业大学');
mysql> insert into unit(id,unit_name) values('3','西安交通大学');

查看表内容:

1
mysql> select * from unit;

注意:每次输入sql语句的时候,必须在后面加上分号’;’,否则不会执行(忘记输入分后,可以按 Ctrl + c + Enter 退出输入)。

参考自:https://www.linuxidc.com/Linux/2016-12/138081.htm

安装Knex.js

在刚才的Express/Koa2应用程序根目录下,输入:

1
2
$ sudo npm install mysql
$ sudo npm install knex --save

Knex使用相关说明可参考:

https://blog.csdn.net/liuyueyi1995/article/details/53782047?locationNum=3&fps=1

以下是一篇关于一个基于Knex的ORM库Bookshelf的文章:

https://www.jianshu.com/p/0a6dd4be9438

使用Knex连接数据库

新建一个js文件

1
$ sudo vi test.js

创建并进入编辑文件,按一次键盘的Insert键,输入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
var mysql = require('knex')({
client: 'mysql',
connection: {
host : 'localhost',
user : 'root',
password : 'a123456',
database : 'test'
}
});
mysql('unit').select().then(function(res){
console.log('result:');
console.log(res);
});

输入完后,按ESC,退出插入模式,输入:wq,保存并退出。
执行该js文件:

1
$ sudo node test

即可看到刚才创建的表的内容。

安装Apache

同样的,为了保证版本最新,首先刷新本地包索引

1
2
$ sudo apt-get update
$ sudo apt-get upgrade

然后输入以下指令即可安装:

1
$ sudo apt-get install apache2

安装完了之后,在浏览器输入服务器的ip(这里不用输入端口了),看到Apache版本页面,即表示安装成功。

若要停止服务,可输入:

1
$ sudo /etc/init.d/apache2 stop

Apache的默认(页面)文档根目录是在Ubuntu上的/var/www目录 ,配置文件是/ etc/apache2/apache2.conf。配置存储在的子目录在/etc/apache2目录。

参考自:https://blog.csdn.net/StepTimeNatural/article/details/78153740

Vue.js打包

在自己的电脑中,通过vue-cli创建模板:https://macrazds.cn/2018/11/13/vueclicourse/

对页面进行编写之后,对其进行打包:

1
> npm run build

然后在项目根目录可见到生成了dist文件夹,这个文件夹里面的东西就是要部署到服务器的内容了。

本地文件上传至服务器——WinSCP

相关使用说明自己百度吧,还是比较简单的,就不多说了。

唯一踩到的坑是,本地文件是拉不进服务器linux的根目录的,会提示 Permission denied ,只能拉到 /home/[username]/ 里面,解决办法没仔细找,我只是将dist拉到 /home/[username]/ 里面,然后移动到/var/www目录的:

1
$ sudo mv ./dist/* ../../var/www/html

注:当前目录为 /home/[username]/

移动过去之后,输入你的服务器ip(不用端口),就能成功看到页面了!!!

WinSCP下载地址:https://winscp.net/eng/download.php

总结

emmmm…然后就到这里结束了。其他待补充的东西,以后再加,因为目前确实就只做到这一步了~希望能给各位多多少少一丢丢帮助。