Skip to content

Latest commit

 

History

History
555 lines (391 loc) · 19.2 KB

linux.md

File metadata and controls

555 lines (391 loc) · 19.2 KB

部署Node.js项目(CentOS) 文档提供方:上海驻云信息科技有限公司 更新时间:2018-01-15 16:44:00

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效,非常适合运行在分布式设备的数据密集型的实时应用。Node.js 的包管理器 npm,是全球最大的开源库生态系统。典型的应用场景包括:

实时应用:如在线聊天,实时通知推送等等(如socket.io) 分布式应用:通过高效的并行I/O使用已有的数据 工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序 游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架) 利用稳定接口提升Web渲染能力 前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著名的纯Javascript全栈式MEAN架构) 适用对象

本文档介绍如何在阿里云CentOS系统的云服务器ECS实例上,安装Nodejs并部署项目。

准备工作

部署之前,请做如下准备工作:

购买ECS实例 您的实例运行的镜像是CentOS7.2 您的实例可以连接公网 本地已经安装用于连接 Linux 实例的工具,如 PuTTY。 基本流程

使用云服务器ECS安装Nodejs并部署项目的操作步骤如下:

购买ECS实例,并连接实例。 选择以下任一种方法部署Node.js环境: 使用二进制文件。 使用NVM安装多版本。 部署测试项目。 操作步骤

步骤 1:创建ECS实例

创建ECS实例。选择操作系统为公共镜像CentOS7.2。使用root用户登录Linux实例。

步骤2:部署Node.js环境

使用以下任一种方法部署Node.js环境。

使用二进制文件安装

该部署过程使用的安装包是已编译好的二进制文件,解压之后,在bin文件夹中就已存在node和npm,无需手工编译。

安装步骤:

wget命令下载Node.js安装包。该安装包是编译好的文件,解压之后,在bin文件夹中就已存在node和npm,无需重复编译。

wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz 解压文件。

tar xvf node-v6.9.5-linux-x64.tar.xz 创建软链接,使node和npm命令全局有效。通过创建软链接的方法,使得在任意目录下都可以直接使用node和npm命令:

ln -s /root/node-v6.9.5-linux-x64/bin/node /usr/local/bin/node ln -s /root/node-v6.9.5-linux-x64/bin/npm /usr/local/bin/npm 查看node、npm版本。

node -v npm -v 至此,Node.js环境已安装完毕。软件默认安装在/root/node-v6.9.5-linux-x64/目录下。如果需要将该软件安装到其他目录(如:/opt/node/)下,请进行如下操作:

mkdir -p /opt/node/ mv /app/node-v6.9.5-linux-x64/* /opt/node/ rm -f /usr/local/bin/node rm -f /usr/local/bin/npm ln -s /opt/node/bin/node /usr/local/bin/node ln -s /opt/node/bin/npm /usr/local/bin/npm 使用NVM安装多版本

NVM(Node version manager)是Node.js的版本管理软件,使用户可以轻松在Node.js各个版本间进行切换。适用于长期做 node 开发的人员或有快速更新node版本、快速切换node版本这一需求的用户。

安装步骤:

直接使用git将源码克隆到本地的~/.nvm目录下,并检查最新版本。

yum install git git clone https://github.com/cnpm/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev=0 --tags 激活NVM。

echo ". ~/.nvm/nvm.sh" >> /etc/profile source /etc/profile 列出Node.js的所有版本。

nvm list-remote 安装多个Node.js版本。

nvm install v6.9.5 nvm install v7.4.0 运行 nvm ls 查看已安装Node.js版本,当前使用的版本为v6.9.5。返回结果如下所示。

[root@iZXXXXZ .nvm]# nvm ls v6.9.5 -> v7.4.0 system stable -> 7.4 (-> v7.4.0) (default) unstable -> 6.9 (-> v6.9.5) (default) 运行 nvm use v7.4.0 切换Node.js版本至v7.4.0。返回结果如下所示。

[root@iZXXXXZ .nvm]# nvm use v7.4.0 Now using node v7.4.0 NVM的更多操作请参考帮助文档:

nvm help 步骤3:部署测试项目

新建项目文件example.js。 cd ~ touch example.js 使用vim编辑器打开项目文件example.js。

yum install vim vim example.js 输入 i,进入编辑模式,将以下项目文件内容粘贴到文件中。使用Esc按钮,退出编辑模式,输入:wq,回车,保存文件内容并退出。 项目文件内容:

const http = require('http'); const hostname = '0.0.0.0'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(Server running at http://${hostname}:${port}/); }); 注意: 项目文件内容中的3000为端口号,可以自行定义。 运行项目。

node ~/example.js 注意: 可以使用命令 node ~/example.js & 将项目置于后台运行。 使用命令查看项目端口是否存在。

netstat -tpln 登录ECS管理控制台,并在安全组中 添加安全组规则 放行端口(如本示例中为TCP 3000端口)。

(可选)如果您的实例中开启了防火墙,必须添加端口的入站规则(如本示例中为TCP 3000端口)。

在本地机器的浏览器中输入 http://实例公网IP地址:端口号 访问项目。 通过浏览器访问项目

配置JDK

在终端,通过:

yum list java* 1 查看阿里云有的java包

可以看到有很多,并且有java1.8.0,所以我们愉快的安装就可以了

通过如下命令安装jdk:

yum install java-1.8.0-openjdk* 1 安装完成之后,我们可以通过

java -version 1 查看java安装是否成功 这里写图片描述

通过这种方式不需要你自己配置java环境变量,也是一个比较方便的方式。

配置mysql

我当时也不知道为什么脑抽就选择了安装mysql5.7,因为最新版本的很多改动比较大,除了错误网上很多都搜索不到,是通过查看mysql的参考文档解决的。

其实这也挺好的,你走在别人前头的感觉还是挺不错的。

首先,这里并没有通过yum方式安装,因为aliyun的mysql版本比较低,所以可以直接到mysql网站下载:

这里是最新版本下载方式,在服务器终端输入如下命令下载:

wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar 1 然后将其添加到yum库中进行安装即可。安装方式同上。

以下介绍自己遇到的坑点:

首先,我安装过程中,好像没让我输入过密码,但是安装完成后,我通过mysql -u root或者mysql都无法登陆,所以只能通过强制更改密码方式: 参考这篇文章修改密码。 http://www.centoscn.com/mysql/2014/0603/3081.html 第一个槽点:修改密码指令mysql数据库中没有了password字段,改为了authentication_string字段,所以修改密码需要将命令中的password替换为authentication_string

修改完成后,确实可以登录进入mysql了,但是坑爹的是什么指令都执行不了,提示请用alter user方式更改密码后再执行命令。。。更改密码,发现不能改,提示密码不符合要求,好嘛,查了一下,5.7版本要求大小写字母,数字,特殊符号一个都不能少,改了密码之后终于可以正常使用了!

具体更改密码指令参见参考文档: http://dev.mysql.com/doc/refman/5.7/en/preface.html

这里我们就可以把之前穿好的sql文件导入到服务器的mysql中了,首先在msyql中建立相同名字的数据库。例如:users

然后使用该数据库执行

source users.sql 1 就可以成功导入了。


1、下载 jdk1.8,我下载的jdk-8u121-linux-x64.tar.gz,使用FileZilla上传至/home/ftp,在/usr/lib/jvm创建目录

sudo mkdir /usr/lib/jvm 1 解压/home/ftp到刚才创建目录/usr/lib/jvm

sudo tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/lib/jvm 1 2、配置java环境变量

vi ~/.bashrc 1 移至光标到文件末尾,添加以下内容

#set oracle jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121 ##这里要换成自己解压的jvm目录 export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
1 2 3 4 5 使变量生效

source ~/.bashrc 1 3、命令端输入java -version

java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)


卸载yum安装 [root@iZ2zeimh1usrjdbas8qoncZ app]# rpm -qa|grep mysql [root@iZ2zeimh1usrjdbas8qoncZ app]# rpm -qa|grep mysql [root@iZ2zeimh1usrjdbas8qoncZ app]# rpm -qa|grep java python-javapackages-3.4.1-11.el7.noarch tzdata-java-2018e-3.el7.noarch javapackages-tools-3.4.1-11.el7.noarch java-1.8.0-openjdk-headless-1.8.0.171-8.b10.el7_5.x86_64 java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 [root@iZ2zeimh1usrjdbas8qoncZ app]# mysql rpm -e --nodeps java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 -bash: mysql: command not found [root@iZ2zeimh1usrjdbas8qoncZ app]# mysql rpm -e --nodeps java -bash: mysql: command not found [root@iZ2zeimh1usrjdbas8qoncZ app]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 [root@iZ2zeimh1usrjdbas8qoncZ app]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.171-8.b10.el7_5.x86_64 [root@iZ2zeimh1usrjdbas8qoncZ app]# java -bash: /usr/bin/java: No such file or directory


:ffi;qK=X3>Y

Yasin@mysql Yasin@ccy 卸载MariaDB

CentOS7默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包。因为MariaDB和MySQL可能会冲突,故先卸载MariaDB。

1、安装新版mysql之前,我们需要将系统自带的mariadb-lib卸载

[root@linuxidc home]# rpm -qa | grep -i mariadb mariadb-libs-5.5.52-1.el7.x86_64 [root@linuxidc home]# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64 2、到mysql的官网下载最新版mysql的rpm集合包:mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar

3、上传mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar到linux服务器,并解压tar包

[root@linuxidc home]# mkdir mysql [root@linuxidc home]# tar -xf mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar -C mysql [root@linuxidc home]# cd mysql [root@linuxidc mysql]# ll total 459492 -rw-r--r-- 1 7155 31415 23618836 Mar 20 17:40 mysql-community-client-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 335496 Mar 20 17:40 mysql-community-common-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 3747352 Mar 20 17:40 mysql-community-devel-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 39086508 Mar 20 17:40 mysql-community-embedded-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 135869292 Mar 20 17:40 mysql-community-embedded-devel-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 2177064 Mar 20 17:40 mysql-community-libs-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 1723180 Mar 20 17:40 mysql-community-libs-compat-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 159060212 Mar 20 17:41 mysql-community-server-5.7.18-1.el6.x86_64.rpm -rw-r--r-- 1 7155 31415 104881084 Mar 20 17:41 mysql-community-test-5.7.18-1.el6.x86_64.rpm 4、使用rpm -ivh命令进行安装

[root@linuxidc mysql]# rpm -ivh mysql-community-common-5.7.18-1.el6.x86_64.rpm warning: mysql-community-common-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-common-5.7.18-1.e################################# [100%] [root@linuxidc mysql]# rpm -ivh mysql-community-libs-5.7.18-1.el6.x86_64.rpm warning: mysql-community-libs-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-libs-5.7.18-1.el6################################# [100%] [root@linuxidc mysql]# rpm -ivh mysql-community-client-5.7.18-1.el6.x86_64.rpm warning: mysql-community-client-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-client-5.7.18-1.e################################# [100%] [root@linuxidc mysql]# rpm -ivh mysql-community-server-5.7.18-1.el6.x86_64.rpm warning: mysql-community-server-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-server-5.7.18-1.e################################# [100%] [root@linuxidc mysql]# 上面几个包有依赖关系,执行有先后。

使用rpm安装方式安装mysql,安装的路径如下:

a 数据库目录 /var/lib/mysql/ b 配置文件 /usr/share/mysql(mysql.server命令及配置文件) c 相关命令 /usr/bin(mysqladmin mysqldump等命令) d 启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录)

e /etc/my.conf

5、 数据库初始化

为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你的linux系统是以 root 身份运行 mysql 服务,需要执行下面的命令初始化

[root@linuxidc mysql]# mysqld --initialize --user=mysql 如果是以 mysql 身份登录运行,则可以去掉 --user 选项。

另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码,

而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。

这里演示使用的 --initialize 初始化的,会生成一个 root 账户密码,密码在log文件里,红色区域的就是自动生成的密码

[root@linuxidc mysql]# cat /var/log/mysqld.log 2017-06-05T14:30:52.709474Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2017-06-05T14:30:55.590590Z 0 [Warning] InnoDB: New log files created, LSN=45790 2017-06-05T14:30:56.000269Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2017-06-05T14:30:56.109868Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 960c533e-49fb-11e7-91f2-00163e089fd2. 2017-06-05T14:30:56.116186Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2017-06-05T14:30:56.116777Z 1 [Note] A temporary password is generated for root@localhost: :Wu?2QQutQwj 现在启动mysql数据库systemctl start mysqld.service(Centos7特有的启动方式)

[root@linuxidc mysql]# systemctl start mysqld.service 可以使用下面两个命令对mysql进行停止,启动和重启:

启动:

使用 service 启动:service mysqld start 使用 mysqld 脚本启动:/etc/inint.d/mysqld start 使用 safe_mysqld 启动:safe_mysqld& 停止:

使用 service 启动:service mysqld stop 使用 mysqld 脚本启动:/etc/inint.d/mysqld stop mysqladmin shutdown 重启:

使用 service 启动:service mysqld restart 使用 mysqld 脚本启动:/etc/inint.d/mysqld restart 连接数据库

[root@linuxidc mysql]# mysql -u root -p Enter password: 密码输入: :Wu?2QQutQwj

修改密码:

set password = password('你的密码'); 设置远程访问

grant all privileges on . to 'root' @'%' identified by '123456'; flush privileges; 设置mysql开机启动

加入到系统服务: chkconfig --add mysql 自动启动: chkconfig mysql on 查询列表: chkconfig

说明:都没关闭(off)时是没有自动启动。

linux mysql添加用户,删除用户,以及用户权限 一些主要的命令:

登录:

mysql -u username -p

显示全部的数据库:

show databases;

使用某一个数据库:

use databasename;

显示一个数据库的全部表:

show tables;

退出:

quit;

删除数据库和数据表

mysql>drop database 数据库名;

mysql>drop table 数据表名; 用户相关:

查看全部的用户:

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

新建用户:

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';

为用户授权:

格式: grant 权限 on 数据库.* to username@登录主机 identified by "password"; 演示样例: grant all privileges on testDB.* to test@localhost identified by '1234'; 然后须要运行刷新权限的命令: flush privileges;

为用户授予部分权限:

grant select,update on testDB.* to test@localhost identified by '1234';

授予一个用户全部数据库的某些权限:

grant select,delete,update,create,drop on . to test@"%" identified by "1234";

删除用户:

Delete FROM user Where User='test' and Host='localhost'; 然后刷新权限;

删除账户及权限:>drop user username@'%';

        >drop user username@ localhost;

改动指定用户password

使用root登录: mysql -u root -p 运行命令: update mysql.user set password=password('新密码') where User="test" and Host="localhost"; 刷新权限: flush privileges;


Linux系统下我的/etc/sysconfig/路径下无iptables文件 2017年09月25日 11:46:11 阅读数:3850 虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下:

因为默认使用的是firewall作为防火墙,把他停掉装个iptable

systemctl stop firewalld systemctl mask firewalld

yum install -y iptables yum install iptables-services

然后就有iptables文件,就可以作配置

开启服务 systemctl start iptables.service

systemctl restart iptables.service // 重启防火墙使配置生效 systemctl enable iptables.service // 设置防火墙开机启动

其他命令: 检查是否安装了iptables service iptables status 安装iptables yum install -y iptables 升级iptables yum update iptables 安装iptables-services yum install iptables-services

systemctl disable iptables #禁止iptables服务 systemctl stop iptables #暂停服务 systemctl enable iptables #解除禁止iptables systemctl start iptables #开启服务


mysql 授权

mysql> grant select,insert,update,delete on ccy.* to ccy@"%" identified by "Yasin@ccy"; Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

mysql> ^C mysql> grant select,insert,update,delete on litemall.* to test@"%" identified by "Yasin@test"; Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> revoke all on . from 'test'@"%"; Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

mysql> grant select,insert,update,delete on litemall.* to test@"%" identified by "Yasin@test"; Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)


/etc/java/jdk1.8.0_171 [root@iZ2zeimh1usrjdbas8qoncZ jdk1.8.0_171]# vi /etc/profile

JAVA_HOME=/etc/java/jdk1.8.0_171 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH

[root@iZ2zeimh1usrjdbas8qoncZ jdk1.8.0_171]# source /etc/profile