前言
早在很多年前, 我就已经掌握了Linux、Nginx、NodeJS等热门技术的单词拼写. (⊙_⊙)
但是从来没入门过, 最近因为要部署个人项目, 于是买了台服务器尝试着去简单部署. 可我啥也不会, 就一点一点百度, 弄坏了就重置服务器. 像我这样记性非常差的菜鸡, 过几天就又不记得这个过程了, 为防止在未来再次需要独立部署, 记录下这个过程.
约定
假设我们已经写好了前后端代码并进行打包, 现已生成两个dist文件夹, 只需要部署即可.
购买服务器
服务器可以选择阿里云、腾讯云、华为云等, 随你喜欢. 我选择用华为云做演示. 这些云厂商有大量的产品, 有专门用来存图片的(OSS), 有专门用来存数据库的(RDS), 有专门用来做负载均衡的(SLB), 我们选择『弹性云服务器ECS』
需要注意的是镜像需要选CentOS,版本随意. 公网IP一定要有, 这一点官方给出了详细的解释.
至于其他配置, 如果自己玩玩的买1H2G即可. 或者咨询官方客服, 告知需求会给你匹配相应的配置. 这里列出我购买的这台服务器仅供参考. (个人玩的话, 这个配置挺贵的了, 年费大概是2000不到一点)
登录服务器
登录服务器有很多种方式,云厂商后台都可以登录, 但是每次打开浏览器太麻烦了. 这里我习惯使用PuTTY这款工具. 在下面这个链接可以下载.
Download PuTTY: latest release (0.73)www.chiark.greenend.org.uk
下载完毕后我们填充参数然后点击Open
初次登录会弹一些警告窗, 不用在意, 点击yes即可
然后输入账号密码进行登录.
当你看到'Welcome to xxx'(不同服务器厂商欢迎标语不同)时就代表登录成功了.
安装MySQL
在官网下载适合你的版本 https://dev.mysql.com/downloads/repo/yum/ 点击Download
直接复制下载链接
先使用wget下载安装包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
复制安装包名称进行安装
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
更新数据源
yum makecache
查看MySQL可安装包
yum list | grep mysql-com
安装server版
yum install mysql-community-server.x86_64
若安装失败如下图所示, 可以参课这篇博文
解决 Requires: libc.so.6(GLIBC_2.14)(64bit)blog.csdn.net
进入mysql目录并初始化, 数据库初始化之后会生成一个随机密码, 我们用命令查看
cd /var/lib/mysql
systemctl start mysqld
grep 'password' /var/log/mysqld.log
登录数据库, 密码是刚刚生成的临时密码
mysql -u root -p
这样的密码太难记, 我们可以设置一个自己喜欢的密码(实际上, 如果你不修改密码数据库不允许你进行任何操作)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
大概率你是修改失败的. 因为数据库密码有自己的安全策略, 太简单的密码是不允许的, 那么我们就设置一个非常复杂的密码, 然后再去修改安全策略, 再次修改简单密码即可.
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';
创建数据库
create database myblog;
输入quit可退出数据库, 之后启动数据库服务
quit
service mysqld start
安装Node
建议使用NVM(Node Version Manager)来管理Node版本, NVM是个node版本管理工具, 简单来说, 他允许你下载不同版本的node, 随时进行切换.
下载NVM
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
更新配置文件并安装你想要的node版本
source ~/.bashrc
nvm install v10.16.1
查看node版本
node -v
上传文件到服务器
如何将自己电脑上的两个dist放到服务器上呢?
这里我推荐一款客户端软件WinSCP, 在下面这个链接可以下载.
WinSCPwinscp.net
下载完毕后我们填充参数然后点击Login
初次登录会弹一些警告窗, 不用在意, 点击Add即可
登录之后可以看到本地文件和服务器文件的列表
在右侧新建文件夹(我自己的项目名叫oreo), 然后将2个dist文件夹复制进去, 在命令行界面可以看到我们的确已经把文件上传到了服务器.
部署后端
在前文我们已经把后端代码放在服务器上了, 理论上我只需要node dist/main.js即可部署该应用. 现在我们尝试部署.
'无法连接数据库', node应用很有可能会遇到这个问题, 这个问题是因为认证协议的不同, 具体原因可以参考
MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL clientstackoverflow.com
我们只需运行如下命令即可解决. 这里的密码是全新的密码, 可以覆盖之前的. 但是同样这个地方有安全策略, 我们之前改的策略在这里不生效, 所以可以临时用一个复杂的密码先解决这个认证协议的问题.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'aabbCCDD1234!';
你会发现覆盖之后又因为安全策略的问题无法修改密码了...没事, 我们故技重施即可.
然后再次尝试部署我们的Node项目, 满屏绿! 程序员真的太爱这个颜色了.
但是问题又来了, 直接node运行虽然可以部署, 但是命令行是无法再执行别的任务了. 而且一旦关闭界面, 也就关闭了该进程. 因此, 我们需要借助一款叫forever的工具, 他可以持久运行node程序.
全局安装forever
npm install forever -g
运行node程序, 查看当前forever运行的所有进程
forever start dist/main.js
forever list
安装Nginx
下载一些必要的依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
下载Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
移动安装包并解压
mv nginx-1.16.1.tar.gz /usr/local/
tar -zxvf nginx-1.16.1.tar.gz
这时候通过ls命令可以看到产生了一个nginx-1.16.1的文件夹, 进入这个文件夹进行配置
cd /usr/local
./configure --prefix=/usr/local/nginx
执行安装
make
进入sbin后, 启动Nginx
cd /usr/local/nginx/sbin
./nginx
之后在浏览器里直接输入你的公网IP.
如果你是华为云, 理论上应该是不能出现这个界面的... 因为华为云的防火墙默认并没有开启80端口. 进入华为云控制台,进入『安全组』
入方向和出方向都需要添加80端口, 点击『快速添加规则』, 选中80和443即可(443用于HTTPS的, +不+都行).
之后需要重启华为云服务器. 再次启动Nginx应该就可以成功了.
配置Nginx
编辑Nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
重启Nginx(要在/usr/local/nginx/sbin下执行)
./nginx -s reload
结语
到此, 部署的全过程就结束了. 本文内容都是经过新服务器实践的. 不太了解运维相关知识, 如有误笔还请在评论区指出~