一、 准备一个服务器
我学习使用,买的腾讯轻量应用服务器¥198 4年
二、 linux环境搭建
- Node (服务器预装了)
- Nginx(服务器预装了)
- git 具体查看linux 安装git教程
- MySql 具体查看Linux 安装 MySQL 详细教程
三、 node部署
- cd /home/node/
- git clone git@github.com:Alie-z/nodejs-koa-blog.git 或者 git clone https://github.com/Alie-z/nodejs-koa-blog.git
- cd nodejs-koa-blog
- npm i || yarn || pnpm i
- mysql -uroot -p xxx 登陆mysql
- 初始化mysql 创建数据库 CREATE DATABASE IF NOT EXISTS boblog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- npm run start
- postman 或者浏览器访问 ip + 端口 发现访问不了,是因为服务器防火墙没有开放对应端口
到服务器后台 防火墙>添加规则 填写自己的端口 确定 (顺便把mysql web要使用的端口也添加)
- 访问一个接口 http://119.91.139.245:9000/api/v1/category
- node部署大功告成
四、 spa静态项目部署
- cd /home/node/nodejs-koa-blog/admin-blog/
- npm i || yarn || pnpm i
- npm run build:prod
- 查看Nginx 配置路径 ps -aux|grep nginx
- cd /usr/local/lighthouse/softwares/nginx/conf
- 新建文件夹 mkdir web
- 新建文件 blob-admin.conf
server {
listen 8081; #端口
server_name 119.91.139.245; #域名或者IP
location / {
root /home/node/nodejs-koa-blog/admin-blog/dist; #静态文件的目录
index index.html index.htm; #入口文件
try_files $uri $uri/ /index.html;
# 首先尝试打开指定path的文件,如果文件不存在,则继续打开下一个文件,如果都打不开则返回500
# 假设请求为http://www.baidu.com/test,则$uri为test
# 访问时查找/$root/test文件没,如果不存在就尝试打开/$root/test/目录,如果还不存在就打开/index.html
}
}
- 编辑nginx.conf 加载web文件夹下的 .conf文件
cd ../
vim nginx.conf
# 在最下面插入
include web/*.conf;
# 保存退出
- 查看配置文件是否正确
nginx -t
- 重启nginx
nginx -s reload
- 访问 http://119.91.139.245:8081/
- spa静态项目部署大功告成
五、 ssr部署
- cd /home/node/nodejs-koa-blog/frontend-boblog/
- npm i || yarn || pnpm i
- npm run build
- npm run start
- cd /usr/local/lighthouse/softwares/nginx/conf/web
- 新建文件 blob.conf
server {
listen 8080;
server_name 119.91.139.245;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
#反向代理到本机的nuxt node服务上
proxy_pass http://localhost:3001/;
}
}
- 查看配置文件是否正确
nginx -t
- 重启nginx
nginx -s reload
- 访问 http://119.91.139.245:8080/
- ssr项目部署大功告成
六、 踩坑
- 使用命令mysql -uroot -p连接mysql数据库报错:error while loading shared libraries: libncurses.so.5: cannot open shared object file
- 没有libncurses.so.5,可能有libncurses.so不同版本的文件,使用命令
find / -name 'libncurses*'
- 查找到/usr/lib/x86_64-linux-gnu/libncurses.so.6.2
- 建立软链接ln -s libncurses.so.6.2 libncurses.so.5
- 如果没有找到的话,使用yum或apt安装即可
- error while loading shared libraries:libtinfo.so.5: cannot open shared object file
同上,先查找有没有其它版本,建立软链接
-
部署后访问不了,一直以为是代码或者部署流程的原因,后来发现是防火墙端口没开启😭
-
部署ssr的时候,因为ssr项目是启一个node服务,配置nginx的时候proxy_pass一直监听的是开发环境的端口,一直访问不了,后端发现端口不对,所以在nuxt.config.js 需要配置server的port、host,建议和开发环境的端口保持一直,减少心智负担😭
export default {
......
server: {
port: '3001',
host: 'localhost'
}
};
- [root@VM-20-6-centos ~]# mysqld --initialize --user=mysql --basedir=/soft/mysql --datadir=/data/mysql/
mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
安装yum install -y libaio 和 yum install -y numactl - 报错
执行pm2 update 还报错就删除node_modules .lock文件 重新install 执行npm run build
后npm run start
看完记得 github点个start