如何在Linux上部署Java项目 — 全攻略
? 从零开始,覆盖 Spring Boot、数据库建表、Redis缓存、环境变量、curl测试、安全加固 等核心环节,网民最关心的周边知识都在这。
在 Linux 上跑 Java 项目,对于新手来说实际上挺有意思,但别指望它是那种“一键即好”的魔法。咱们直接上实操,少讲虚的,多讲点门道。先整项目配置,一般启动 Spring Boot 或普通 Java 程序,核心就是把 application.properties 或 application.yml 里的 server.port 改个号,重启就行。比如改成 8080,浏览器搜 127.0.0.1:8080 就能看到了。
这时候还得注意一下 端口冲突,要是服务器上本来已经有个 8080 的进程在跑,你就得改个别的端口,不然别人访问都进不去了。使用 ss -tunap | grep 8080 快速查看。
别看 Java 是对象导向的,但 SQL 还是挺有用的。要是想让数据库在应用出来之前就自动建表,得用一些建表脚本或 MySQL 的坑位表。比如有个项目,里面有个 config 表,先用 Java 代码跑一遍 SQL 建好,然后写入配置文件或环境变量里去。这样下次程序启动,不用每次重启脚本都去敲一遍建表命令,既省事又好管住。
schema.sql 放置建表语句,data.sql 放初始数据。Spring Boot 自动执行。
版本化管理数据库,迁移脚本 记录每一次变更。
spring.sql.init.mode=always 启动时自动执行。
Tomcat 默认的内存缓存有时候确实有点捉襟见肘,特别是 RBAC 这种需求多次请求验证的项目。这时候引入 Redis 或 Druid 是个挺常见的思路。比如在 DDL 语句里加上 set timeout,配合定时任务的触发器,每隔几分钟就把过期数据清空一次。这样既能保证数据一致性,又能防止内存溢出。自然,Caffeine 或 Guava 这种内存缓存库也能够寻思,但 Redis 在分布式场景下还是更有优势。
Spring Boot Starter Data Redis
spring.redis.host=localhost 端口 6379
@Cacheable("users") 自动缓存结果
设置 TTL 如 @CacheEvict 定时清理
网友还关心:Redis 内存淘汰、缓存穿透 怎么解决?布隆过滤器 + 空值缓存。
别看能够用 docker 或 Docker Compose 来托管整个项目,但要是你只想在 Linux 宿主机上跑单机版,那就得搞个 .env 文件了。比如 DB_PASSWORD、DB_HOST 这些敏感信息都放在这儿。启动脚本里写个逻辑:先读取 .env 里的配置,再自动执行对应的初始化 SQL 和监听端口。别看听起来有点繁琐,但在没有 CI/CD 流水线的时候,手动改配置文件是管住力最强的方式。
在 application.properties 中引用:${DB_HOST} 。启动时加上 --env-file .env 或通过 source .env 加载。
网友还关心:docker-compose 与 Kubernetes 的差异,单机用 compose 足够。
使用 systemd 服务单元实现开机自启,守护进程 管理更稳健。
别总依赖 Postman 这种 GUI 工具,命令行工具实际上更硬核。用 curl 和 wget 结合起来,既能看响应体,还能抓包调试。比如我要测试登录接口,curl -v http://localhost:8080/login 就能看到详细的请求头、响应头就连状态码。要是接口回 404,可能是路径不对;回 500,可能是业务逻辑错了。我在测试的时候发现,有时候 application.properties 里的 request.format 没配好,默认就是文本回,那我就得 manually 加个 application/json 让它变成 JSON 格式,不然客户端解析起来就费劲了。
? 网友还关心:curl 超时设置、wget 下载文件、HTTP 状态码 详解。
部署到造环境之前,保险忒关键了。别把 application.properties 直接放进代码库,特别是包含敏感信息的。用环境变量或 .env 文件管理,启动脚本启动前再把这些变量读取进去。IP 白名单 也是个务必做的,只给特定 IP 放行,比如 192.168.1.100 才能访问接口,其他本地机器或公网 IP 直接回绝。还有造环境的数据库密码,绝对不能用硬编码在代码里,环境变量比代码里更保险。
Linux 自带 netstat 或 ss 命令,用来扫描端口贼高效。比如我要确认 8080 端口是否确实在跑应用,ss -tunap | grep 8080 就能扫出来。要是端口不通,大约率是防火墙或端口被占用了。有时候应用自己没监听,但端口号对,这是不是有点玄学?不过要是是用 systemd 或 service 守护进程管理,一般监听点都设置好了,不用忒揪心。
显示所有 TCP/UDP 监听端口及进程 PID。
firewall-cmd --list-all 或 iptables -L
journalctl -u myapp.service 查看启动错误。
网友还关心:tcpdump 抓包分析,ping 与 telnet 测试连通性。
总而言之,在 Linux 上部署 Java 项目,核心就是配置、启动、监控这三步。别看流程比在 Windows 上略微繁琐点,但一旦跑通了,赶明儿就是手痒就改个参数就能启动。关键是养成好习惯,别把乱七八糟的配置文件硬塞进代码,也别把密码直接写在代码里。只要把这些细节抠好,Linux 环境下的 Java 开发体验 实际上是相当流畅的。