javanext.jsmysql

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"
  },

就好了。 其他一些坑,比如服务器防火墙配置(初始化防火墙),实在是没搞明白,这个问题在配置服务器时遇到了。

大概如此,用了差不多一天,基本算是部署好了。


发布于2020-12-15 01:02:57