前言
本文面向准备将 Web 应用部署到 Ubuntu 服务器的开发者 —— 无论是初次接触运维的全栈开发者,还是希望快速搭建开发环境的团队,都能通过本文按步骤完成一套生产可用的基础环境部署。
典型应用场景:Spring Boot 后端服务 + 前端分离项目,配合 Nginx 反向代理、MySQL 数据库与 S3 兼容的对象存储,完成从代码到线上服务的完整闭环。
完成部署后,你将获得:
- 一个可对外提供 API 服务并托管前端静态资源的 Nginx 服务;
- 一套支持远程访问的 MySQL 数据库;
- Java 运行时环境,可直接运行 Spring Boot 应用;
- Nginx 反向代理与缓存配置,提升访问性能;
- S3 兼容的对象存储,方便管理图片等静态文件。
接下来,我们将从最基础的系统更新开始,逐步搭建这套完整的服务器环境。
1. 环境准备
首先更新系统并安装必要的软件包:
sudo apt update
2. Nginx 安装与基础配置
安装 Nginx:
sudo apt install nginx
安装完成后,编辑 Nginx 主配置文件,设置 Web 根目录:
sudo vi /etc/nginx/nginx.conf
将 root 指向你的 Web 文件目录,例如:
root /var/www/html;
3. MySQL 安装与远程访问
3.1 安装 MySQL
sudo apt install mysql-server
3.2 修改 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
注意:root 用户默认不允许远程连接,请根据安全需求决定是否开启。
3.3 创建远程访问用户
CREATE USER 'dev1'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'dev1'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3.4 修改 MySQL 绑定地址
编辑 MySQL 配置文件:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address 并修改为:
bind-address = 0.0.0.0
然后重启 MySQL:
sudo systemctl restart mysql
4. Java 环境部署
安装 OpenJDK 8 运行环境:
sudo apt install openjdk-8-jre-headless
假设你的应用打包为 app-1.0.jar,启动命令如下(使用了 Spring Boot 的 PropertiesLauncher):
nohup java -cp app-1.0.jar -Dloader.path=./lib org.springframework.boot.loader.PropertiesLauncher --spring.profiles.active=prod &
5. Nginx 反向代理与静态资源
编辑站点配置文件:
sudo vi /etc/nginx/sites-available/default
5.1 API 反向代理
location /api {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
5.2 图片静态资源
代理所有图片请求到本地目录,并添加缓存头:
# 图片请求代理到本地 /var/www/html/images/ 路径
location ~* \.(jpg|jpeg|png|gif)$ {
root /var/www/html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 缓存控制头
add_header Cache-Control "public, max-age=36000, immutable"; # 10小时
expires 10h;
# 使用 ETag 进行缓存验证
etag on;
# 启用文件传输优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
try_files $uri $uri/ =404;
}
5.3 Nginx 代理 WebSocket
若你的应用使用了 WebSocket,可在 Nginx 中增加相应代理配置(根据实际需要调整)。
5.4 配置语法检查与重载
修改 Nginx 配置后,务必先检查语法是否正确,再重载服务使其生效:
# 检查配置文件语法
sudo nginx -t
# 若语法正确,重载 Nginx(不中断现有连接)
sudo systemctl reload nginx
# 或使用
sudo nginx -s reload
验证配置是否生效:
- 用
curl直接请求反向代理接口,检查返回状态码和响应头:# 测试 API 代理 curl -I http://你的服务器IP/api # 测试图片缓存头 curl -I http://你的服务器IP/test.png - 查看 Nginx 访问日志与错误日志,确认请求已正确代理:
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log - 检查 Nginx 进程及监听端口是否正常:
sudo systemctl status nginx sudo netstat -tlnp | grep nginx
以上步骤可帮你快速确认 Nginx 配置无误且反向代理已按预期生效。
6. 对象存储 S3
RustFS 兼容 MinIO。
GitHub 仓库:https://github.com/rustfs/rustfs/blob/main/README_ZH.md
安装命令:
curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh
默认账号/密码:rustfsadmin / rustfsadmin
后端服务端口:9000,Web 访问端口:9001
中文官网文档:https://docs.rustfs.com.cn/installation/linux/quick-start.html
7. 日志与调试
启动服务后,可通过以下命令实时查看 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log
8. 总结
以上完整记录了从零部署一台服务器的全部步骤,涵盖了 Nginx、MySQL、Java 运行环境以及反向代理与静态资源缓存配置。

1万+

被折叠的 条评论
为什么被折叠?



