前言

早在很多年前, 我就已经掌握了Linux、Nginx、NodeJS等热门技术的单词拼写. (⊙_⊙)

但是从来没入门过, 最近因为要部署个人项目, 于是买了台服务器尝试着去简单部署. 可我啥也不会, 就一点一点百度, 弄坏了就重置服务器. 像我这样记性非常差的菜鸡, 过几天就又不记得这个过程了, 为防止在未来再次需要独立部署, 记录下这个过程.

约定

假设我们已经写好了前后端代码并进行打包, 现已生成两个dist文件夹, 只需要部署即可.




centos查看进程的父进程 centos 进程查询_nginx


购买服务器

服务器可以选择阿里云、腾讯云、华为云等, 随你喜欢. 我选择用华为云做演示. 这些云厂商有大量的产品, 有专门用来存图片的(OSS), 有专门用来存数据库的(RDS), 有专门用来做负载均衡的(SLB), 我们选择『弹性云服务器ECS』


centos查看进程的父进程 centos 进程查询_nginx_02


需要注意的是镜像需要选CentOS,版本随意. 公网IP一定要有, 这一点官方给出了详细的解释.


centos查看进程的父进程 centos 进程查询_nginx_03


至于其他配置, 如果自己玩玩的买1H2G即可. 或者咨询官方客服, 告知需求会给你匹配相应的配置. 这里列出我购买的这台服务器仅供参考. (个人玩的话, 这个配置挺贵的了, 年费大概是2000不到一点)


centos查看进程的父进程 centos 进程查询_nginx_04


登录服务器

登录服务器有很多种方式,云厂商后台都可以登录, 但是每次打开浏览器太麻烦了. 这里我习惯使用PuTTY这款工具. 在下面这个链接可以下载.

Download PuTTY: latest release (0.73)www.chiark.greenend.org.uk

下载完毕后我们填充参数然后点击Open


centos查看进程的父进程 centos 进程查询_mysql_05


初次登录会弹一些警告窗, 不用在意, 点击yes即可


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_06


然后输入账号密码进行登录.


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_07


当你看到'Welcome to xxx'(不同服务器厂商欢迎标语不同)时就代表登录成功了.

安装MySQL

在官网下载适合你的版本 https://dev.mysql.com/downloads/repo/yum/ 点击Download


centos查看进程的父进程 centos 进程查询_nginx_08


直接复制下载链接


centos查看进程的父进程 centos 进程查询_mysql_09


先使用wget下载安装包


wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm


centos查看进程的父进程 centos 进程查询_服务器_10


复制安装包名称进行安装


rpm -ivh mysql80-community-release-el7-3.noarch.rpm


centos查看进程的父进程 centos 进程查询_nginx_11


更新数据源


yum makecache


centos查看进程的父进程 centos 进程查询_nginx_12


查看MySQL可安装包


yum list | grep mysql-com


centos查看进程的父进程 centos 进程查询_mysql_13


安装server版


yum install mysql-community-server.x86_64


centos查看进程的父进程 centos 进程查询_mysql_14


若安装失败如下图所示, 可以参课这篇博文

解决 Requires: libc.so.6(GLIBC_2.14)(64bit)blog.csdn.net

centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_15


进入mysql目录并初始化, 数据库初始化之后会生成一个随机密码, 我们用命令查看


cd /var/lib/mysql
systemctl start mysqld
grep 'password' /var/log/mysqld.log


centos查看进程的父进程 centos 进程查询_mysql_16


登录数据库, 密码是刚刚生成的临时密码


mysql -u root -p


centos查看进程的父进程 centos 进程查询_mysql_17


这样的密码太难记, 我们可以设置一个自己喜欢的密码(实际上, 如果你不修改密码数据库不允许你进行任何操作)


ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';


centos查看进程的父进程 centos 进程查询_服务器_18


大概率你是修改失败的. 因为数据库密码有自己的安全策略, 太简单的密码是不允许的, 那么我们就设置一个非常复杂的密码, 然后再去修改安全策略, 再次修改简单密码即可.


ALTER USER 'root'@'localhost' IDENTIFIED BY 'aabbCCDD1234!';
set global validate_password.policy=LOW;
set global validate_password.length=6;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';


centos查看进程的父进程 centos 进程查询_nginx_19


创建数据库


create database myblog;


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_20


输入quit可退出数据库, 之后启动数据库服务


quit
service mysqld start


centos查看进程的父进程 centos 进程查询_mysql_21


安装Node

建议使用NVM(Node Version Manager)来管理Node版本, NVM是个node版本管理工具, 简单来说, 他允许你下载不同版本的node, 随时进行切换.

下载NVM


wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_22


更新配置文件并安装你想要的node版本


source ~/.bashrc
nvm install v10.16.1


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_23


查看node版本


node  -v


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_24


上传文件到服务器

如何将自己电脑上的两个dist放到服务器上呢?

这里我推荐一款客户端软件WinSCP, 在下面这个链接可以下载.

WinSCPwinscp.net

centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_25


下载完毕后我们填充参数然后点击Login


centos查看进程的父进程 centos 进程查询_nginx_26


初次登录会弹一些警告窗, 不用在意, 点击Add即可


centos查看进程的父进程 centos 进程查询_服务器_27


登录之后可以看到本地文件和服务器文件的列表


centos查看进程的父进程 centos 进程查询_nginx_28


在右侧新建文件夹(我自己的项目名叫oreo), 然后将2个dist文件夹复制进去, 在命令行界面可以看到我们的确已经把文件上传到了服务器.


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_29


部署后端

在前文我们已经把后端代码放在服务器上了, 理论上我只需要node dist/main.js即可部署该应用. 现在我们尝试部署.


centos查看进程的父进程 centos 进程查询_nginx_30


'无法连接数据库', node应用很有可能会遇到这个问题, 这个问题是因为认证协议的不同, 具体原因可以参考

MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL clientstackoverflow.com

centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_31


我们只需运行如下命令即可解决. 这里的密码是全新的密码, 可以覆盖之前的. 但是同样这个地方有安全策略, 我们之前改的策略在这里不生效, 所以可以临时用一个复杂的密码先解决这个认证协议的问题.


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'aabbCCDD1234!';


centos查看进程的父进程 centos 进程查询_nginx_32


你会发现覆盖之后又因为安全策略的问题无法修改密码了...没事, 我们故技重施即可.


centos查看进程的父进程 centos 进程查询_服务器_33


然后再次尝试部署我们的Node项目, 满屏绿! 程序员真的太爱这个颜色了.


centos查看进程的父进程 centos 进程查询_服务器_34


但是问题又来了, 直接node运行虽然可以部署, 但是命令行是无法再执行别的任务了. 而且一旦关闭界面, 也就关闭了该进程. 因此, 我们需要借助一款叫forever的工具, 他可以持久运行node程序.

全局安装forever


npm install forever -g


centos查看进程的父进程 centos 进程查询_nginx_35


运行node程序, 查看当前forever运行的所有进程


forever start dist/main.js
forever list


centos查看进程的父进程 centos 进程查询_nginx_36


安装Nginx

下载一些必要的依赖包


yum -y install gcc pcre-devel zlib-devel openssl openssl-devel


centos查看进程的父进程 centos 进程查询_服务器_37


下载Nginx


wget http://nginx.org/download/nginx-1.16.1.tar.gz


centos查看进程的父进程 centos 进程查询_nginx_38


移动安装包并解压


mv nginx-1.16.1.tar.gz /usr/local/
tar -zxvf nginx-1.16.1.tar.gz


centos查看进程的父进程 centos 进程查询_服务器_39


这时候通过ls命令可以看到产生了一个nginx-1.16.1的文件夹, 进入这个文件夹进行配置


cd /usr/local
./configure --prefix=/usr/local/nginx


centos查看进程的父进程 centos 进程查询_服务器_40


执行安装


make


centos查看进程的父进程 centos 进程查询_服务器_41


进入sbin后, 启动Nginx


cd /usr/local/nginx/sbin
./nginx


之后在浏览器里直接输入你的公网IP.


centos查看进程的父进程 centos 进程查询_mysql_42


如果你是华为云, 理论上应该是不能出现这个界面的... 因为华为云的防火墙默认并没有开启80端口. 进入华为云控制台,进入『安全组』


centos查看进程的父进程 centos 进程查询_centos查看进程的父进程_43


入方向和出方向都需要添加80端口, 点击『快速添加规则』, 选中80和443即可(443用于HTTPS的, +不+都行).


centos查看进程的父进程 centos 进程查询_nginx_44


之后需要重启华为云服务器. 再次启动Nginx应该就可以成功了.

配置Nginx

编辑Nginx配置文件


vi /usr/local/nginx/conf/nginx.conf


centos查看进程的父进程 centos 进程查询_nginx_45


重启Nginx(要在/usr/local/nginx/sbin下执行)


./nginx -s reload


结语

到此, 部署的全过程就结束了. 本文内容都是经过新服务器实践的. 不太了解运维相关知识, 如有误笔还请在评论区指出~