Linux服务器 前后端web项目部署
服务器及系统选择
服务器上学生党推荐使用阿里云ECS服务器,学生可以白嫖俩个月的服务器用,后面听说还可以免费续费,操作系统主要有Windows和Linux两个操作系统,根据自己的需求选择相对应的系统,本次操作中我使用的镜像是CentOS 7.3 64位。
关于两个系统在阿里云上的特点,大概如下:
Windows系统:
- window系统内含正版激活,可支持SQLServer等数据库(需自行安装)。
- 可以使用远程桌面对服务器进行操作。
- SQLServer数据库操作(需自行安装)。
Linux系统:
- 是当前最流行的操作系统,有强大的安全性和稳定性。
- 免费且开源,轻松建立和编译源代码。
- 通过SSH方式远程访问您的云服务器。
- 一般用于高性能web等服务器应用,支持常见的PHP/Python等编程语言,支持MySQL等数据库(需自行安装)。
一、连接服务器
因为我当前操作的系统是window,要连接Linux系统就要借助xshell和xftp工具。xshell可以在windows界面下来访问远程终端不同系统下的服务器,可有达到远程控制终端的目的。xftp可以跟服务器进行连接,安全有效的进行数据的传输。
关于xshell和xftp的使用,百度一下就会了
- 登陆阿里云官网 > 控制台 > 云服务器 > ECS > 实例 可以看到自己所购买的服务器
- 重置实例密码,随便打一个自己记得住的就好了(这个密码连接要用!!!!!!)
注:远程连接是web端的连接,输入密码就好
- 配置安全组规则,进入安全组之后点击列表 - 操作 - 配置规则,再点击上方添加安全组规则
(1) 协议类型:自定义TCP
(2) 端口:默认 22/22
(3) 优先级: 100
(4) 授权类型: IPv4
(5) 授权对象:0.0.0.0/0
- xshell新建会话,name随便起一个,协议Linux系统为 SSh ,主机就是上图实例中的IP地址,端口没有修改过的话就是默认的22端口
5.用户身份验证,用户名root,密码就是你的实例密码。
6.页面上出现:Welcome to Alibaba Cloud Elastic Compute Service 就是连上服务了
xftp的连接方法一致,协议为SFTP
二、安装配置环境
xshell常用命令-参考学习
本次我部署的项目:前端vue.js + 后端Node.js + 数据库mysql8.0 + nginx
首先下载yum,在linux中经常使用yum来进行软件的安装、更新与卸载。
1. 下载nodejs
- 在xshell命令行里输入:
yum install xz.x86_64
- 打开 nodejs 官网查看最新版本的下载,本次系统在
CentOS 64位
上安装,所以我们选择的是64位二进制安装文件(Linux Binaries x86/x64),复制链接地址
- 在
xshell
中输入以下命令:wget https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
- 安装完成后,输入下面命令,进行解压缩:
tar xvf node-v8.9.1-linux-x64.tar.xz
- 修改文件名:
mv node-v8.9.1-linux-x64 nodejs
- 验证:
cd nodejs/bin
=> 然后./node -v
> 返回根目录cd/,node和npm设置软连接
> ln -s /root/nodejs/bin/node /usr/bin/
> ln -s /root/nodejs/bin/npm /usr/bin/
- 打开文件:
vim /etc/profile
- 在文件末尾加三行语句:
加完按export NODE_HOME=/usr/local/node export PATH=$PATH:$NODE_HOME/bin export NODE_PATH=$NODE_HOME/lib/node_modules
ESC
键和输入保存:wq
- 执行:
source /etc/profile
,立即加载资源- 检测 node 和 npm ( node 检测如上)
2. 下载mysql 8.0
Linux 安装 MySQL 数据库
可能找不到初始密码,输入vi /etc/my.cnf
,在[mysqld]下添加skip-grant-tables
,再次输入mysql -u root -p,直接回车就可以进入mysql服务,此时就可以修改密码。修改密码完成后记得删掉刚刚添加的skip-grant-tables
,记得重启mysql服务。
3.下载nginx
- 安装依赖包:
# 安装过即可省略 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
- 创建文件夹nginx下载并解压安装
cd /usr/local mkdir nginx
nginx下载地址点击下载
下载之后用xftp传到nginx文件夹,然后cd到nginx文件夹下,解压
tar xvf nginx压缩包名.tar.xz
- cd到解压后的文件夹里,输入一下代码
./configure make make install
- 以上步骤完成后,cd到nginx对应的sbin文件夹下,输入启动命令
./nginx
(1) nginx默认配置是80端口,输入对应域名如有出现nginx页面,则配置成功。配置失败可能是防火墙开启,并未给防火墙开启80端口
(2) 防火墙添加端口命令:firewall-cmd --permanent --zone=public --add-port=80/tcp
(3)查看防火墙是否开启端口命令:firewall-cmd --query-port=80/tcp
(4)操作完成后重启防火墙服务:systemctl restart firewalld.service
我是直接关闭防火墙的,省略这些操作
- nginx常用命令:
# ./nginx #启动 # ./nginx -s stop #停止 # ./nginx -s quit #退出 # ./nginx -s reload #重启
6.nginx开启自启动
vim /etc/rc.d/rc.local
加一句/usr/local/nginx/sbin/nginx(即sbin路径)
三、部署web项目
1. 前端部署
-
使用 webpack 打包 vue 项目
npm run build
-
打包后的 dist 文件夹上传至服务器,我比较喜欢直接放在安装nginx的文件夹里,所以使用 xftp 把文件夹拉到刚刚下载nginx的路径下,即:
/usr/local/nginx
(忘记目录可用
ps -ef | grep nginx
查看) -
输入
vi /usr/local/nginx/conf/nginx.conf
或者在xftp进入对应路径直接改(只看server)
server {
listen 80;
# 默认localhost
server_name localhost;
location / {
root dist; // 获取文件的根目录
index index.html index.htm; // 接上一行
}
...
}
- 重启生效:
nginx -s reload
- 在阿里云实例 安全组规则 根据你的配置添加端口规则
2. 后端部署
后端我项目使用的是nodejs
开发,打包即把除了 node_modules 的文件使用xftp放到 Linux 服务器上,我依旧喜欢放在nginx隔壁,随便 mkdir 一个文件夹起个名字放到里面,然后使用 xshell 输入命令cd 到对应的文件夹里,输入命令npm install
or cnpm install
安装依赖包完成之后 输入 npm start
运行后端,假若运行报错,很可能是依赖包装的不好,建议删了再装,又或者是后端代码code问题,可以使用 cat ‘文件name/log’
这个命令查看日志中的报错,也可以在xftp中打开查看
1. 前后端项目的 ip 要和服务器的ip对上!!!!!!
2. 后端启动设置的端口不能和前端一致,设置端口记得netstat -ntlp
查看一下端口是否被占用,占用选择换端口或者kill
端口
四、成功展示
补充:项目中mysql操作中如果出错查询group by 的错误,是因为mysql 8.0 新版本出现group by 语句不兼容问题,mysql5.7及以后的版本 select查询字段未出现在group by 中是会报错的
解决方法:
- 修改my.cnf配置文件,找到 mysql8 的安装位置,找到my.cnf,忘了一样
which mysqld
查找路径,mysqld 的路径 --verbose --help |grep -A 1 'Default options'
出来的路径就是my.cnf的路径- 输入
vim my.cnf
- 在打开的my.cnf配置文件中添加
# sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- 保存重启mysql