CentOS 7.4 从0到1部署node项目

一直以来对Linux都不是很熟悉,只是通过w3c之类的一些网站看过介绍,敲过几行命令,仅此而已。总是对Linux有些逃避,偶尔看到那些建站教程,一堆看不懂的命令,倍感头大。虽说自己是个前端,平时只要懂得写页面写交互就好,最多也就是写一下后台,但是最终还是会接触到网站部署的,熟悉整一个建站的流程,对前端一些优化也会有更深的认识。这不刚好领导给了个服务器我练练手,让我学学怎么部署维护网站。所以就有了此文,记录下我这个Linux小白建站全过程。

首先就是有一台服务器,然后用xshell或者别的远程连接

系统版本说明

1
2
# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

更新服务器系统以及软件,安装常用工具

一般来说,云服务器或者 vps 安装的系统镜像都不是最新的,所以我们连接上服务器之后,必须尽快更新服务器的系统以及软件,这样可以更好的保障我们的服务器系统安全

服务器系统以及软件升级命令

1
# yum -y update

CentOS 系列的服务器系统有一个毛病,就是官方自带的源的软件比较古老,并且很多的软件都没有。因为他们的首要任务是保证服务器的稳定,而不是追求最新。但是太过于保守了,一般来说,我们会给服务器添加一个 epel-release 这个源。这个源里包含了例如 nginx 之类的我们需要的软件,使用起来比较方便。

安装 epel-release

1
# yum install epel-release -y

通过上面的命令进行安装。确认是否安装成功,可以用下面的命令检测一下

1
# yum search nginx

如果搜索的结果包含下面的这行内容,就表示安装成功了,然后我们就能愉快的安装我们需要的软件了。

1
nginx.x86_64 : A high performance web server and reverse proxy server

我在配置的时候发现不能搜索出来,但是确实是安装上了。后来检查了一下 /etc/yum.repos.d/epel.repo 文件,发现里面配置不对,修改了一下就好。

主要是 epel 段落中的 enabled 值默认设置为 0 了,我们将值改成 1 就可以了。

PS:你应该没这个问题。如果遇到了问题,可以看下这里。如果是其他问题,请自行搜索解决。

安装服务器常用软件

前面我们登录上服务器之后,第一件事情就是安装 vim 编辑器。

安装vim详细过程:

https://blog.csdn.net/u013233097/article/details/52355256

但我们在工作中,可能会需要各种各样的软件,例如我经常使用的如下:

wget 下载工具

1
# yum install wget

统一各种格式压缩文件的工具

1
# yum install atool

tmux 好用的终端工具(如何使用请自行搜索)

1
# yum install tmux

zsh 最好用的终端

1
# yum install zsh

替代 top 命令的好工具

1
# yum install htop

git 代码版本管理工具

1
# yum install git

上面这些常用软件可以根据你自己的需求进行选择安装。不是都必须安装的。

什么 zsh 之类的配置,可以使用 oh-my-zsh 这个配置工具,具体搜索一下。网上教程很多。不是必须的。

配置 lnmp 服务器环境

好,准备工作差不多了,下面正式开始。

安装 nginx

如果你是直接跳到这段看的,请确保你已经运行过下面的命令安装过 epel-release 。如果不是,请跳过这条命令。

1
# yum install epel-release -y

开始安装:

安装 nginx

1
# yum install nginx -y

启动 nginx

1
# systemctl start nginx

将 nginx 设置为开机启动

1
# systemctl enable nginx

好,通过上面三条命令执行之后,应该可以在浏览器中直接用服务器IP可以访问到 nginx 默认的首页了。

注意:安装成功后,在浏览器输入IP地址,打不开默认欢迎页面。

原因:CentOS 7版本之后对防火墙进行加强,不再使用原来的iptables,启用firewall防火墙默认不开放任何端口,所以Nginx默认的80端口也没有被放开,故而无法访问。

解决:这里,采用让firewall放开80端口,具体操作如下:

1)查看当前已经开放的端口

1
# firewall-cmd --list-ports

2)开启80端口

1
2
# firewall-cmd --zone=public --add-port=80/tcp --permanent
success

3)重启防火墙

1
2
# firewall-cmd --reload
success

4)查看当前已经开放的端口

1
2
# firewall-cmd --list-ports
80/tcp

此时,在浏览器直接输入IP地址访问Nginx默认欢迎页面,正常。

安装 php

nginx 安装好之后,我们就需要来安装我们的 php 环境了。

安装 php

执行下面的命令,安装 PHP 已经它的常用的库

1
# yum install php php-mysql php-fpm php-gd php-imap php-ldap php-mbstring php-odbc php-pear php-xml php-xmlrpc -y

配置 php

安装完成之后,我们需要对它进行一些配置。首先,我们打开配置文件:

1
2
# vim /etc/php.ini
(至于vi/vim的使用,自行查阅吧,最基本的i、esc、:wq、:q!会了就好)

打开文件后,我们找到 cgi.fix_pathinfo(大概在 763 行) 并把它的值设置为 0

配置好 php.ini 文件之后,我们来配置 /etc/php-fpm.d/www.conf 文件

1
# vim /etc/php-fpm.d/www.conf

第一处修改,将 listen = 127.0.0.1:9000 修改为如下:

1
listen = /var/run/php-fpm/php-fpm.sock

然后找到下面两行,删掉前面的 ; 分号,取消注释。

1
2
listen.owner = nobody
listen.group = nobody

最后,我们找到下面两行

1
2
user = apache
group = apache

apache 换成 nginx,如下所示:

1
2
user = nginx
group = nginx

好,这样,我们就已经安装并且配置好了。下面我们可以启动了。

启动PHP

1
# systemctl start php-fpm

将它设置为开机启动

1
# systemctl enable php-fpm

配置 nginx 使其支持 php

好,我们在安装好 nginxphp 之后,他们还不能协同作战,我们需要对 nginx 进行一些配置才可以。

首先,我们打开 nginx 的配置文件

1
# vim /etc/nginx/nginx.conf

然后找到 server 这一段,添加如下内容,如图所示:

1
2
3
4
5
6
7
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

另外,还需要配置默认的首页文件,添加 index.php ,如图所示:

1
index index.php index.html index.htm;

image.png

好,经过这样的简单配置,我们的任务就已经完成了。

重启 nginx 服务

1
# systemctl restart nginx

安装 MySQL(问题很多,建议跳到下一章安装MariaDB)

从CentOS 7.0发布以来,yum源中开始使用mariadb来代替MySQL的安装。即使你输入的是yum install mysql , 显示的也是mariadb的安装内容。

image.png

输入yum install mysql-server,提示yum没有可用的安装包。

image.png

因此,如果使用yum安装MySQL的话,就需要去下载官方指定的yum源。

网址为: https://dev.mysql.com/downloads/repo/yum/

先卸载mariadb。

检查mariadb是否已安装

1
2
# yum list installed | grep mariadb
mariadb-libs.x86_64 1:5.5.56-2.el7 @anaconda

全部卸载

1
# yum -y remove mariadb*

下面进行MySQL的安装。

一、下载安装官方提供的yum rpm包

打开网页:https://dev.mysql.com/downloads/repo/yum/

点击Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package后面的download,进入新的页面点击No thanks, just start my download.就可以看到下载源地址了,复制下来。

进入如下目录

1
# cd /usr/local/src/

下载rpm包:

1
# wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

安装rpm包:

1
# rpm -ivh mysql80-community-release-el7-1.noarch.rpm

检查mysql的yum源是否安装成功:

1
2
3
4
# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community 45
mysql-tools-community/x86_64 MySQL Tools Community 57
mysql57-community/x86_64 MySQL 5.7 Community Server 247

看到如上,表示安装成功。

再次使用yum来安装mysql-server,就不会提示没有可用软件包。

二、使用yum install mysql-server安装

1
# yum install mysql-server

查看版本信息:

1
# rpm -qi mysql-community-server

三、启动mysql-server

1
# service mysqld start

四、使用初始密码登陆

1
2
# cat /var/log/mysqld.log|grep 'A temporary password'
2018-02-11T06:47:54.773267Z 1 [Note] A temporary password is generated for root@localhost: 3=v/i;z/Y;P>

最后一行冒号后面的部分3=v/i;z/Y;P>就是初始密码。 使用此密码登录MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

正常登陆后发现一个问题:

1
2
mysql> show databases; 
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

解决方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> alter user 'root'@'localhost' identified by 'yourpassword';  
Query OK, 0 rows affected (0.00 sec)

mysql> set password=password("yourpassword");
Query OK, 0 rows affected, 1 warning (0.00 sec)

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

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

mysql>

常用的命令:

1
2
3
4
5
systemctl start mysqld    #启动mysqld
systemctl stop mysqld #停止mysqld
systemctl restart mysqld #重启mysqld
systemctl enable mysqld #设置开机启动
systemctl status mysqld #查看 MySQL Server 状态

mysql会遇到各种各样的问题,超烦的,反正我是找了很多解决方案都不成功,后来完全卸载了装MariaDB,轻松多了.虽然最后还是没能成功启动mysql,但是在解决错误的过程中还是学会很多,这个经验是难能可贵的

MariaDB(mysql替代品):

可以尝试安装MariaDB(从 mysql 发展而来的数据库,完全兼容,除了名字不一样,哪哪就兼容。)

安装 mariadb

1
# yum install mariadb-server mariadb

启动 mariadb

1
# systemctl start mariadb

将 mariadb 设置为开机启动

1
# systemctl enable mariadb

好,默认情况下,数据库的密码为空,我们需要设置一下,运行下面的命令:

1
# mysql_secure_installation

运行这个命令之后,根据提示进行相应的设置。一般情况下,就是不断的回车,以及输入你的密码,确认密码,然后一路回车即可。

常用的命令:

参考mysql命令,就名字不一样而已

以下命令用来开放远程访问权限的:grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;

1
2
3
4
# mysql -u root -p
输入密码
mysql> grant all privileges on *.* to 'root'@'%' identified by 'kk306484328' with grant option;
mysql> flush privileges;

远程连接数据库防火墙还需要开放3306端口

  1. 查看已开放的端口(默认不开放任何端口)

    1
    # firewall-cmd --list-ports
  2. 开启3306端口

    1
    # firewall-cmd --zone=public --add-port=3306/tcp --permanent
  3. 重启防火墙

    1
    # firewall-cmd --reload
  4. 查看当前已经开放的端口

    1
    # firewall-cmd --list-ports

安装Nodejs

使用NVM安装多版本

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

安装步骤:

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

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

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

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

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

    1
    2
    3
    4
    5
    6
    [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)
  6. 运行 nvm use v7.4.0 切换Node.js版本至v7.4.0。返回结果如下所示。

    1
    2
    [root@iZXXXXZ .nvm]# nvm use v7.4.0
    Now using node v7.4.0
  7. 设置默认启动的node版本

    1
    [root@iZXXXXZ .nvm]# nvm alias default stable

NVM的更多操作请输入命令参考帮助文档:nvm help

部署nodejs测试项目

  1. 新建项目文件example.js。

    1
    2
    # cd ~
    # touch example.js
  2. 使用vim编辑器打开项目文件example.js。

    1
    2
    # yum install vim(前面已经装过vim了这句可以省略)
    # vim example.js

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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}/`);
    });
  3. 运行项目.

    1
    # node ~/example.js
  4. 防火墙开放对应端口(实例代码端口号为3000)

    1
    2
    3
    # firewall-cmd --zone=public --add-port=3306/tcp --permanent
    # firewall-cmd --reload
    # firewall-cmd --list-ports
  5. 在本地机器的浏览器中输入 http://实例公网IP地址:端口号 访问项目。

    通过浏览器访问项目

任意目录输入node-v或者npm -v提示找不到的话:

1
2
# ln -s /root/.nvm/versions/node/v8.9.0/bin/node /usr/local/bin/node
# ln -s /root/.nvm/versions/node/v8.9.0/bin/npm /usr/local/bin/npm

部署node-express项目

进入到某文件夹用于存放项目

1
# cd /root

通过git clone 把项目代码拷贝到服务器中

1
# git clone https://github.com/xxx/xxx

安装依赖

1
# npm install

运行express项目

1
node bin/www

现在本地就可以通过ip地址加端口号访问了(记得防火墙要开放对应端口)

xx.xx.xx.xx:3000

安装pm2

1
# npm install -g pm2

此时执行pm2可能会提示找不到pm2命令

通过创建软链接的方法,使得在任意目录下都可以直接使用pm2命令

1
# ln -s /root/.nvm/versions/node/v8.9.0/bin/pm2 /usr/local/bin/pm2

运行

1
2
# cd app/
# pm2 start ./bin/www

PM2使应用随系统启动

1
2
3
4
5
6
7
# cd app/
# pm2 start ./bin/www
# pm2 save
# pm2 startup
# pm2 save
重启服务器检查是否开机自启
# reboot

pm2命令

配置Nginx

修改nginx.conf配置

1
# vim /etc/nginx/nginx.conf

image.png

添加的代码为

1
proxy_pass http://127.0.0.1:8080;

这里就是把8080端口的请求代理到80,这个端口8080按实际项目更改

重启nginx

1
# nginx -s reload

现在直接访问服务器ip地址即可看到项目首页了

整个流程走下来,突然发现其实网站部署也不是很难呀。对Linux的熟悉也更深了一点,不再恐惧不再逃避,起码现在遇到一些远程访问的问题,我第一时间还能想到是不是防火墙没有开放端口?换做是以前,鬼知道是什么原因呀

坚持原创技术分享,您的支持将鼓励我继续创作!
0%