Springboot+Next.js应用部署至云服务器踩坑记录
从前一天晚上买好域名和服务器到第二天晚上(凌晨)基本部署完成踩了太多坑,期间一直陷于面向搜索引擎🔍编程,还好其中99%的问题都可以找到解决方案,在这里记录一下以备不时之需,具体内容分为4部分:
- springboot
- mysql
- linux命令
- next.js
后端 springboot + mysql
后端的问题主要在于配置mysql部分,其实现在也不太明白最后为什么配置好了
首先在服务器配置mysql允许来自某个IP的远程连接
mysql -u root -p
use mysql # 下面开始创建用户分配访问权限
如果是最新的mysql版本,输入下面这条命令,会报错:You have an error in your SQL syntax 提示语法有问题
GRANT ALL PRIVILEGES ON *.* TO 'root'@'x.x.x.x' BY 'password' WITH GRANT OPTION;
# root表示用户名,‘x.x.x.x’表示要给远程权限的用户IP(建议填自己本地💻的IP,方便后端开发时访问),‘password’设置秘密
最新的mysql应该分3两步配置:先创建用户,再分配权限,最后刷新权限
create user 'root'@'x.x.x.x' identified by 'password';
grant all privileges on *.* to 'root'@'x.x.x.x';
flush privileges;
这样就可以在本地访问服务器上的mysql数据库了,然后在IDEA(打开springboot项目)里测试并连接到数据库,可能要在application.properties配置一下数据库的相关参数(一开始没在IDEA连接服务器的数据库而是本地的数据库,结果访问的是本地数据库,很怪)
用IDEA打包springboot项目,把项目目录target文件夹下生成的.jar文件传输到服务器(服务器配置好java web环境就行,不用安装tomcat), 在服务器端允许这个.jar文件,直接java -jar运行会在ctrl+c后关闭,为了保持后台允许,应该运行
nohup java -jar XXX.jar >/dev/null 2>&1 &
后面一串乱七八糟的不懂是啥,反之如果直接nohup java -jar XXX.jar &也会报错提示nohup后面字符串格式问题。
运行之后,后端就部署好了✅
前端 Next.js
运行npm run build打包,将next.config.js➕package.json➕.next(生成的文件夹)传到服务器上,传送文件夹时scp后多一个-r,在包含这3个文件的目录运行npm install下载项目需要的包,再运行
nohup npm start &
保持后台挂起
端口
端口问题主要是端口会被占用
# 查看占用端口的进程
lsof -i:端口号
# 关闭进程
kill -9 PID(进程号)
服务器默认端口问题
服务器默认监听的端口是80,也就是说除80端口可以直接用服务器IP地址或域名访问外,其他端口都需要IP(或域名):端口号。而Next.js的默认端口是3000,这就导致访问该网站时需要访问域名:3000,所以简便的方法是修改Next.js的启动端口为80:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start -p 80"
},
就好了。 其他一些坑,比如服务器防火墙配置(初始化防火墙),实在是没搞明白,这个问题在配置服务器时遇到了。
大概如此,用了差不多一天,基本算是部署好了。