1、nodejs 安装
1、登录服务器
mac下首先打开终端,然后输入sudo su - 回车进入根目录然后输入:ssh -p 端口号 服务器用户名@ip (例如ssh -p 22 userkunyu@119.29.37.XX)回车,到这会让你输入yes或者no来确认是否连接,输入yes回车然后输入在服务器上的用户密码回车到此进入的是你在服务器上的账户的目录,即为连接成功复制代码
先更新一下(第一次使用服务器先更新下)
yum update -y复制代码
2、下载nodejs
从nodejs官网获取下载对应操作系统的连接
wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz复制代码
wget命令下载Node.js安装包。 下载完成后可以看到服务器目录下有了nodejs的安装包。
解压该安装包
tar xvf node-v8.10.0-linux-x64.tar.xz复制代码
在服务器目录可以看到解压后的文件
node默认安装在/root/node-v8.10.0-linux-x64/目录下, 将node安装到其他目录(如:/opt/node/)下,
拓展:
mkdir -p /opt/node/mv /root/node-v8.10.0-linux-x64/* /opt/node/复制代码
删除/root/node-v8.10.0-linux-x64/安装包
rm -rf /root/node-v8.10.0-linux-x64/复制代码
该安装包是编译好的文件,解压之后,在bin文件夹中就已存在node和npm,无需重复编译。
3.创建软链接,使node和npm命令全局有效。通过创建软链接的方法,使得在任意目录下都可以直接使用node和npm命令:
ln -s /opt/node/bin/node /usr/local/bin/nodeln -s /opt/node/bin/npm /usr/local/bin/npm复制代码
4、安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org 复制代码
配置环境变量,全局命令
ln -s /opt/node/bin/cnpm /usr/local/bin/cnpm复制代码
这时 输入 node -v 就会看到版本信息了
2、安装pm2
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载。
我们在本地运行node项目,只是node serve.js 就可以跑起来了,但是如果关掉,项目就不能运行了,pm2解决了这一问题,使进程常驻。
安装pm2
npm install pm2@latest -g复制代码
创建软链接,使pm2命令全局有效
ln -s /opt/node/bin/pm2 /usr/local/bin/pm2复制代码
输入 pm2 -v 可以看到版本信息了
3、安装mongodb
1、下载mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz复制代码
2、解压下载的包
tar -zxvf mongodb-linux-x86_64-3.6.3.tgz复制代码
3、重命名mongodb-linux-x86_64-3.6.3
mv mongodb-linux-x86_64-3.6.3 mongodb3.6.3复制代码
4、在/usr/local下创建mongodb目录
mkdir -p mongodb复制代码
5、将 mongodb3.6.3移动到 /usr/local/mongodb 目录中:
mv /mongodb3.6.3/ /usr/local/mongodb复制代码
6、在 /usr/local/mongodb/mongodb3.6.3/ 目录中创建一个存放数据与日志的目录:
mkdir -p data/koa2-blog/dbmkdir -p data/koa2-blog/log复制代码
7、在 /usr/local/mongodb/mongodb3.6.3/conf 目录中创建配置文件 mongodb.conf:
mkdir -p confvim mongodb.conf复制代码
mongodb.conf
# 设置端口号(默认的端口号是 27017)port = 27018#远程连接要指定ip 不然无法连接。0.0.0.0不限制ip访问,并开启对应端口bind_ip=0.0.0.0# 设置数据文件的存放目录dbpath = /usr/local/mongodb/mongodb3.6.3/data/koa2-blog/db# 设置日志文件的存放目录及其日志文件名logpath = /usr/local/mongodb/mongodb3.6.3/data/koa2-blog2/log/mongodb.log# 设置每个数据库将被保存在一个单独的目录directoryperdb = true# 设置为以守护进程的方式运行,即在后台运行fork = true# 日志追加logappend=true# 访问权限auth=false复制代码
参数解释:
参数解释: --dbpath 数据库路径(数据文件)--logpath 日志文件路径--master 指定为主机器--slave 指定为从机器--source 指定主机器的IP地址--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。--logappend 日志文件末尾添加,即使用追加的方式写日志--journal 启用日志--port 启用端口号--fork 在后台运行--only 指定只复制哪一个数据库--slavedelay 指从复制检测的时间间隔--auth 是否需要验证权限登录(用户名和密码)--syncdelay 数据写入硬盘的时间(秒),0是不等待,直接写入--notablescan 不允许表扫描--maxConns 最大的并发连接数,默认2000 --pidfilepath 指定进程文件,不指定则不产生进程文件--bind_ip 绑定IP,绑定后只能绑定的IP访问服务复制代码
8、自定义服务
在/lib/systemd/system/目录下新建mongodb.service文件,内容如下
[Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target[Service] Type=forking ExecStart=/usr/local/mongodb/mongodb3.6.3/bin/mongod -f /usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/usr/local/mongodb/mongodb3.6.3/bin/mongod --shutdown -f /usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf PrivateTmp=true[Install] WantedBy=multi-user.target复制代码
9、设置权限
chmod 754 mongodb.service 复制代码
10、启动关闭服务,设置开机启动
#启动服务 systemctl start mongodb.service #关闭服务 systemctl stop mongodb.service #开机启动 systemctl enable mongodb.service # 查看状态systemctl status mongodb.service# 如果mongodb.service配置错误 在更改后记得重新加载文件systemctl daemon-reload复制代码
11、设置mongo,mongod命令为全局有效
ln -s /usr/local/mongodb/mongodb3.6.3/bin/mongo /usr/local/bin/mongoln -s /usr/local/mongodb/mongodb3.6.3/bin/mongod /usr/local/bin/mongod复制代码
连接数据库成功
[root@VM_0_11_centos ~]# mongo --port=27018MongoDB shell version v3.6.3connecting to: mongodb://127.0.0.1:27018/MongoDB server version: 3.6.3Server has startup warnings: 2018-03-27T13:14:24.748+0800 I STORAGE [initandlisten] 2018-03-27T13:14:24.748+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine2018-03-27T13:14:24.748+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] 2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] 2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] 2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'2018-03-27T13:14:27.801+0800 I CONTROL [initandlisten]>复制代码
12、设置数据库访问权限
步骤一:进入admin表
use admin复制代码
步骤二:创建一个超级管理账户
db.createUser({user:"admin",pwd:"wz123",roles:[{role:"userAdminAnyDatabase", db: "admin"}]})Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}复制代码
步骤三:开启权限验证 在/usr/local/mongodb/mongodb3.6.3/conf/mongodb.conf中设置
# 访问权限auth=true复制代码
重启mongodb服务后再连接数据库,show users 查看所有用户,可以看到出错了,需要验证管理员的权限。
[root@VM_0_11_centos ~]# mongo --port=27018MongoDB shell version v3.6.3connecting to: mongodb://127.0.0.1:27018/MongoDB server version: 3.6.3> use adminswitched to db admin> show users2018-03-27T14:10:38.323+0800 E QUERY [thread1] Error: not authorized on admin to execute command { usersInfo: 1.0, $db: "admin" } :_getErrorWithCode@src/mongo/shell/utils.js:25:13DB.prototype.getUsers@src/mongo/shell/db.js:1686:1shellHelper.show@src/mongo/shell/utils.js:799:9shellHelper@src/mongo/shell/utils.js:706:15@(shellhelp2):1:1> 复制代码
权限验证后,可以查看用户users了
> db.auth('admin','wz123')1> show users{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]}复制代码
这里对admin 创建的 admin 用户,仅仅只有特权去管理用户和角色, 如果你试图执行其他任何操作,例如在test数据库中的foo集合中去读数据,mongodb将返回错误。
你创建用户的数据库(这里就是test数据库)是该用户认证数据库。尽管用户认证是这个数据库,用户依然可以有其他数据库的角色。即用户认证数据库不限制用户权限。
权限角色有以下几种:
内建的角色 数据库用户角色:read、readWrite; 数据库管理角色:dbAdmin、dbOwner、userAdmin; 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 备份恢复角色:backup、restore; 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 内部角色:__system 角色说明: Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限复制代码
步骤四:创建数据库,并给此数据库设置访问权限
给数据库koa2 设置读写的权限
[root@VM_0_11_centos ~]# mongo --port=27018MongoDB shell version v3.6.3connecting to: mongodb://127.0.0.1:27018/MongoDB server version: 3.6.3> use adminswitched to db admin> db.auth('admin','wz123')1> use koa2switched to db koa2> db.createUser({user:'wz',pwd:'wz123',roles:[{role:'readWrite',db:'koa2'}]})Successfully added user: { "user" : "wz", "roles" : [ { "role" : "readWrite", "db" : "koa2" } ]}> 复制代码
步骤五
写测试数据,Robo 3T连接数据库,向koa2数据库中写入一个test 集合
db.test.insert({title:'测试',name:'大王',age:12})复制代码
打开RoBo 3T连接数据库,可以看到集合collection有test
4、安装Nginx
yum install nginx复制代码
修改/etc/nginx下的配置nginx.conf 删除所有写入
## 工作模式与连接数上限events { ## 单个进程的最大连接数 worker_connections 1024;}## 设置http 服务器http { include /etc/nginx/conf.d/*.conf;}复制代码
在/etc/nginx/conf.d 下新建 koa2-blog-8081.conf
server{ listen 80; server_name 118.25.6.XXX; ## 配置前端文件 location / { root /home/koa2-blog/build/; index index.html index.htm; } ## 配置后端接口 location /api { 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_set_header Connection ""; proxy_set_header Cookie $http_cookie; proxy_pass http://127.0.0.1:8081; }}复制代码
之后重启Nginx
systemctl restart nginx.service复制代码
命令:
#启动nginx服务systemctl start nginx.service#停止nginx服务systemctl stop nginx.service#重启nginx服务systemctl restart nginx.service#重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)systemctl reload nginx.service复制代码
5、项目上传到服务器
后端传到/home/koa2-blog/目录下 前端react项目也build后,传到此目录下
--koa2-blog --build --server --node_modules --package.json复制代码
pm2运行server.js
pm2 start server.js复制代码
在浏览器中打开前端项目,就开看到网站可以访问了