服务器环境搭建

565 阅读5分钟

网站运行机制

nginx.png

nginx2.png

服务器部署流程

Mac直接用终端,windows用git bash(windows命令行工具无法直接管理linux系统)

1. 本地连接远程服务器

# 万网或腾讯购买域名后配置*+@主机记录(子域名前缀)
nslookup 域名 #查看域名&ip是否已经绑定
# 远程连接命令
ssh root[服务器用户名]@[域名|ipv4] 
# 退出到自己的系统
exit
# 配置免密登录 将本地公钥配置在远程服务器的白名单
# 1. 在自己的电脑上 生成本地 密钥对
ssh-keygen -t rsa # 一路yes 生成文件位置 mac:~/.ssh || windows:C:\user\用户名\.ssh 
# 2. 远程连接并创建文件 mkdir .ssh -> cd .ssh -> touch authorized_keys 
# 3. 把自己电脑上的id_rsa.pub文件中的内容放到authorized_keys文件
echo "[id_rsa.pub]" >> authorized_keys
#4. 测试exit -> ssh root@ip 不用输入密码直接登录远程服务器

```mermaid
graph TD
Start --> Stop
## 2. linux服务器常见命令()
```bash
pwd #获取当前路径
vim/vi 文件路径 #编辑文件
scp 本地文件路径 root@域名:远程路径 #传输文件
unzip # 解压文件
touch #创建文件
echo ['content字符串加""'] >> 文件路径 #追加内容到文件 
cat 文件路径 # 查看文件内容
nslookup [域名|ip] #从DNS服务器查询域名,ip记录信息
mv fileName fileName2 #文件重命名
mv dir dir1 # 文件夹重命名
mv fileName dir #移动文件到目录
cp 文件路径1 文件路径2 # 将1中的内容复制到2文件
rm fileName # 删除文件
rm -f filename # 强制删除文件
rm -rf dir #recursive #递归删除文件夹及其内容
clear 清理控制台
# 配置linux命令别名
vi ~/.bashrc -> alias 别名="原命令" ->:wq -> source ~/.bashrc

3. 配置linux开发环境

# 一键安装CentOS开发人员相关包
yum groupinstall 'Development tools' #yum linux自动化软件包管理工具(~like npm) gi=打包的方式安装

4. 安装nginx

# 1. 告诉yum ngin下载的源 并安装
sudo yum install epel-release -> sudo yum install nginx
# 2. 启动nginx 启动完成后网页无法打开 服务器防火墙[nginx保护层]默认只允许22端口访问nginx,http默认80端口,https默认端口是443,会被防火墙拦截无法访问nginx
sudo systemctl start nginx 
# 配置防火墙规则
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
# 打开http/s域名 出现nginx默认欢迎页面

5. 安装Node.js

# 获取nodejs源
curl --silent --location https://rpm:nodesource.com/setup_14.x | bash -
# 安装Nodejs 
yum install -y nodejs
# 查看node安装版本
node -v
# 安装pm2(node.js程序管理工具)
npm i pm2 -g
# 使用pm2 启动node.js项目
pm2 start 文件名
# 停止
pm2 stop [文件名或者id]
# 从pm2的管理列表中删除
pm2 delete [文件名或者id]

6. 安装MySQL

# 1. 下载并安装MySQL源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum localinstall mysal80-community-release-el7-3.noarch.rpm
# 2. 安装
sudo yum install mysql-community-server -y
# 如果上一步报错 执行下面的语句之后 再次执行一下上面的安装语句
sudo yum module disable mysql
# 3. 启动MySQL
sudo systemctl start mysqld
# 4. 找到默认密码
grep 'temporary password' /var/log/mysqld.log
# 5. 连接到MySQL数据库
mysql -uroot -p # 密码输入上句打印的MySQL默认密码
ALTER USER 'root'@'localhost' IDENTITY BY [新密码] #修改MySql密码
# 6. 退出MySQL 
quit

7. 上传用户端网站资源

用scp命令或者安装FTP(vsftpd)工具

# 1. 项目打包压缩dist.zip
# 2. 上传压缩包
scp 本地文件 root@域名:远程路径
mkdir /home/nginx/
mv ./dist.zip /home/nginx/
cd /home/nginx
unzip ./dist.zip
mv dist proj1 #修改项目文件夹名称
# 配置nginx
cd /etc/nginx/conf.d
touch proj1.conf
vim proj.conf # i :wq
server{
    listen 80;
    server_name 域名
    location /{
        root: /home/nginx/proj1 #dist文件路径
        index index.html index.htm
    }
}
systemctl stop nginx
nginx #重启 不用加start
#打开域名 nginx欢迎页替换为用户端首页 接口报404

8. 上传node后端项目

# 1. 修改node项目config文件夹,修改数据库配置的MySQL密码
# 2. 把项目压缩成zip包 上传到服务器
scp ./proj1admin.zip root@[域名|ip]:~/ #上传到根目录
mv proj1.zip /home/nginx/ #移动到nginx项目目录下
cd /home/nginx
unzip proj1.zip
rm -rf _MACOSX/
rm -rf proj1
cd proj1
npm i
# 3. 连接数据库 
mysql -uroot -p -> 密码
# 4. 修改密码规则,降低版本(解决mysql版本不兼容的问题)
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY '[MySQL密码]' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '[MySQL密码]'
# 查看是否修改成功
select user,host,plugin from user where user='root'
# 5. 创建数据库
create database proj1sql
quit
# 6. 用进程管理工具运行
pm2 start index.js # pm2 stop index.js restart
# 7. 配置nginx反向代理 转发/api到node 不用反向代理会出现跨域安全性问题
cd /etc/nginx/conf.d/ #nginx.conf会执行conf.d里面的文件
ls #打开项目的conf文件
vi XX.conf #esc+:wq
location ^~ /api/{# ^~匹配开头 |: = 只匹配
    rewrite ^/api/(.*)$/$1 break; # 去除/api/前缀
    ptoxy_pass http://127.0.0.1:3000 # 反向代理到本地的3000端口(express.js默认监听3000)
}
nginx -s reload #配置文件修改之后要重启
#再次打开域名接口就不会报404了 能正常访问

9. 管理端项目在node后端项目中

cd etc/nginx/conf.d/
ls 
cp proj1.conf proj1admin.conf
vi proj1admin.conf
server {
    listen 80;
    server_name admin.域名[proj1.com]
    location /{ #完全交给node处理
        proxy_pass http://127.0.0.1:3000
    }
}
nginx -s reload
# 打开http://admin.域名 可以看到后台项目了
前后端不分离的项目views-.ejs模板代码 ajax请求/api/vi/ 前端没有publicPath