阿里云轻量应用服务器环境搭建-Docker部署Spring Boot项目
阿里云轻量应用服务器环境搭建-Docker部署Spring Boot项目
前言(啰嗦一些话)
- 这是一个Spring Boot + Vue的前后端分离项目,现在将其分别部署到服务器,第一次步骤还是比较多的,自己是踩了几天的坑,第一次完成了,后面就很快了。
- 这次的笔记先记录、总结一下把一个Spring Boot项目部署到Docker中的过程。
- 借助IDEA中的Docker插件,来部署项目到Docker中是比较方便的,写一次配置文件,之后再部署就很快了。
- 一个关键问题:跨域问题,对于前后端分离项目,这是必须要面对的。我这个项目是在后端解决的跨域问题,所以在部署之前要记得改一下代码中跨域配置所允许的域。另外,推荐两种跨域的方式:开发环境:
cors+proxy
,生产环境:cors+nginx
(webpack的proxy在生产环境是不能用的,要改成nginx来配置代理)。 - 一些环境:
- 云服务器Ubuntu18.04
- Docker 19.03(Ubuntu安装Docker参考链接:https://blog.csdn.net/xu_benjamin/article/details/107102801),注意:这篇笔记中是Ubuntu16。如果输入命令报错,就把命令中的http改为https试试。
- jdk1.8(安装参考链接:https://blog.csdn.net/xu_benjamin/article/details/107103363),注意,我这里是直接安装的jre,没有另外装jdk。另外本地开发和服务器端的java环境都是1.8,建议保持一致。
- MySQL 8.0 (安装参考链接:https://blog.csdn.net/xu_benjamin/article/details/107103469),注意,我这的MySQL是安装Docker中的,不是直接装在Ubuntu上的。另外本地开发和服务器端的MySQL都是8.0,建议保持一致。
- 本地需要另外的Maven环境,这个不多说了,后面使用Maven打包的时候可能会报个错说
settings.xml
的格式不对啥的,这里给个我的settings.xml
(在本机C盘用户目录下的.m2
目录下)<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
- 之所以啰嗦上面这么多,是因为在这上面都踩过坑,搞来搞去都是因为服务器的环境和本地开发的环境不一样,本地运行的好好的,一部署上去就各种报错。如果大家也遇到了莫名其妙的错误,可以考虑检查一下是不是环境问题。
准备工作
1. 配置docker远程连接端口
方便IDEA连接到远程Docker
- 首先找到
docker.service
的位置
systemctl status docker.service
- 找到 ExecStart,在最后面添加
-H tcp://0.0.0.0:2375
,如下图所示
cd /lib/systemd/system # 根据自己上一步找的位置输入
vi docker.service
- 重启docker
systemctl daemon-reload
systemctl start docker
- 阿里云安全组开放2375端口
重要!!!:记得再用IDEA完成部署之后要删除阿里云安全组中开放的2375端口,否则容易中木马。
2. IDEA连接远程Docker
-
IDEA安装docker插件(旧版IDEA需要手动安装,新版自带)
-
IDEA连接远程docker
-
在工程页面,下面的service栏中也可以连接docker,连接成功后会显示已安装的容器和镜像。
在MySQL中新建数据库和表
由于本项目使用了MySQL数据库,所以在服务器端需要新建数据库和表。Spring Boot项目部署后连接的就是Docker中的MySQL,只需要改一下Spring Boot项目的
.yml
配置配置文件中连接mysql的语句即可,把localhost
改成服务器的IP地址即可。
docker exec -it mysql /bin/bash # 进入mysql容器
mysql -u root -p # 登录mysql
... # 输入密码
# mysql 命令那一套,建库建表即可
create databases ...
在Spring Boot项目的pom.xml
中添加一些配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
-
在
src/main
目录下创建docker
目录,并创建Dockerfile
文件(关键)FROM openjdk:8-jdk-alpine ADD *.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
配置Docker
-
Maven打包,双击install
-
运行docker的配置(如果失败了,关闭IDEA,以管理员身份运行IDEA,上述的配置应该还在,重新Maven打包一下,再进行这一步试试)
-
阿里云服务器打开
8990端口
(8990是我这个Spring Boot项目运行的端口,请根据自己的项目打开对用的端口)
-
浏览器访问:http://ip:8990/hello (ip为自己服务器的IP地址,8990为项目运行的端口,/hello为controller中写的返回json对象的get请求。)
-
下次修改代码或改动了什么要重新部署的话,直接Maven重新install一下,然后运行Dockerfile就可以了。(但先保证IDEA能成功连接远程Docker)
创作不易,喜欢的话加个关注,点个赞,谢谢谢谢!