使用宝塔进行云服务器部署步骤总结(包含遇到的问题及解决方案)
·
部署步骤
1.创建数据库
2.修改application.yml文件
把jar包解压,然后修改里面的application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 补充allowPublicKeyRetrieval+useSSL=false,解决宝塔MySQL连接问题
url: jdbc:mysql://localhost:3306/wuyi_mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false
username: wuyi # 生产环境建议新建非root账号(如wuyi),降低权限风险
password: 123456 # 生产环境务必修改为复杂密码,宝塔MySQL面板中同步更新
application:
name: wuyi-mall
jpa:
hibernate:
ddl-auto: none # 生产环境改为none,避免JPA自动修改表结构
show-sql: false # 生产环境关闭SQL打印
# 核心修复:显式指定MySQL8方言,解决启动报错
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
format_sql: false # 关闭SQL格式化,提升性能
use_sql_comments: false
# Jackson配置(生产环境简化)
jackson:
mapper:
ACCEPT_CASE_INSENSITIVE_PROPERTIES: true
serialization:
INDENT_OUTPUT: false # 关闭JSON格式化,提升响应速度
WRITE_DATES_AS_TIMESTAMPS: false
deserialization:
FAIL_ON_UNKNOWN_PROPERTIES: false
# 文件上传配置
servlet:
multipart:
max-file-size: 2MB
max-request-size: 10MB
# 文件上传路径(服务器宝塔目录)
file:
upload:
path: /www/wwwroot/wuyi_mall_12.21/backend/uploads/ # 服务器存储路径
prefix: http://47.110.83.xxx/upload/ # 前端访问文件的公网前缀
# 支付宝配置(适配服务器环境)
alipay:
app-id: 2021000122677777
private-key: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCVb+xYChdqTRDFoEaHs+k0g9V+x3QawOVmymvLMMOlezNMojUK74oAnF1kJ0EdDffVxU5lyE51CDVLZ5W0iS13TtwgHjyLIkhzBW0KXduzFAV0lak3YJVaOP1dcL+9C1dNNYbYzPdzEy0d2gOV++t6bGmoA0gJvUK78RZfXuKmw67ClnKoBlDDN45Vw5ma5hmwdbiAtiiUCehZTuRSWtgqhz7dZCDhD9fPLxCnmP7PMYqoL0pXr3Rb6IqFIWq/55uANuhD8NEhG5MRvSZ8iP3q8udlqNWpVOgtfqKawzlZuDgGhCpIEr5Ib5MZ7IhEvQBXG1ZnPiYiittXgRl/RoshAgMBAAECggEAElLbBCCYpmw0tkbk3xbsbYgM0bLbRbyJZIVFmnCsTMpCjA8HugONRG3n9bPqhAmGbiv3ZPuewzLydgCJls2LSandzAJpIhZeE9yCdlbz7Y1y7cy8JxIsvhdm2eJNYHzXg5wgoMzhOrcLPTHSZr2xLh3FBtkAKFGQsULqn18fI5uBfj6bPw8nWsosTk/eMWFpH3EuL1hC4a2+VK7bjgk4KJPf1sdkiqP0ciOjh9CfC2zAi/7e7dMdXj3NYZo/P2JyHkVThSeF/1tizHN1KN8MR8qA177og+3HkTPcco5Kx6WmkPz2mDWkYw2op6/iaSp+PQJprCbMJXwxGLkaQV3v0QKBgQD7swojvv876FhD3qIB03WBVfyNHkFN2ODp/p+i1opBf0OInVD1ua1TrqRf2JcrYk91DO9YkfCVBxDzaOPOgfgVrGD+dmSLzclm6gfHa2VVxE4BFUTiA8kBDLmHt5Xkod7qI3sGRSijtUfHoEjTfc18e9KgzV7PEvtpTlH9QHhtqwKBgQCX/ZPoBiHDn1C6tnTp7e9uqGKQKYvZA0N/fMwL757zH5qag6KsLBVzv/MglEI2by7sbIC2HVmYDodzcyhNkViaEMNhH2LiWcaSWz6O+AeWF+bCTt6HHcOatFkfRTVQ9gTw6KhPTI86yqX02I4ar1U4b5Z7SRGqAaj51+1kCQZmYwKBgQDvtYivmIQdut7s7Efgc1ISdiDLCQhqqmUxlLTV8XrEe/6GSkTDcS04aDfVrEH0KHHB6Sq9cGfulkc3eiqTDsaFZaEOVxTU7Iyl/bag3pAoyYb8kxQCKFazMDo1ncscbmkNFfNhelYE623MGcOh38rmhkqHqG9lyQ81MEj3ZwIKdwKBgFicPd7HtGeYOjigpwi67xxUjyH9FssuW+u3lj5fNQwJINl0ZSJ7kQYqolQcG34g0/qCR4flFJbR4aYtPRH76uvnWgEFi2DrdhldmNtBPysCREaENLgRYjiPbGYOs0bAJ6FMAtQ4jkh4XMiieDaWgdilNdYqg2HaFemTOZNYr6KBAoGBAMLsrOVwLiKYn5AYxPDNLSC/uiVjH5jzJO9OcyG6cvY9HDSdxpuvMDYqa0FXPk0WKJFbmYudb+1LuQZxJzDyz7hSDILOxeBhBs8Bexhic0ngsegwD5uqHy7jbRZ5ZVVizmJbNXjMkLdW2peyyHIsuM21M7VTQrAPByN3KWcKiHHI"
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9KXiZqGtGr6f0Nk7i6R/fl2eJ17ruNrJbDi3Hwj8Yz7eLqnW5Ju83HEWUdfoXXlAXegK6hcZtVm2C7IfiHODBLjC+tFadY54aq9NbCM3S15ejvJVrs61kORaD+38YZCAJlnP/2sDsdtSgOEGxZjLx4l7CcGyx4+i8Ausx30JxRdUiHHZzTCivYcpXZQncZWV8AxK/gfBtAAMcrO88f6XRZlAl/nQel0tIfTWk7xbffdTFh9cRIoBE+NF6uFHmdxuSerjMx59B17H4kA5iQckqrJNxw7gi3f7Pu4W/u5w3qorktO32lF/H/pr2+fhpeq1qJWBu4MtIpWxrsALjVFp7wIDAQAB"
notify-url: "http://47.110.83.xxx/api/pay/alipay/notify" # 服务器回调地址
return-url: "http://47.110.83.xxx/orders" # 前端跳转地址
server:
port: 8081
# 注释context-path,避免接口路径重复
# servlet:
# context-path: /api
# 静态资源+跨域配置
web:
resources:
static-locations: classpath:/static/,file:${file.upload.path}
cors:
allowed-origins: "http://47.110.83.xxx,http://localhost:5173,http://localhost:5174"
allowed-methods: GET,POST,PUT,DELETE,OPTIONS
allowed-headers: "*"
allow-credentials: true
# 连接超时配置,避免后端响应慢导致502
tomcat:
connection-timeout: 30000
threads:
max: 200 # 增大线程数,适配并发
# 日志配置(增强排查能力)
logging:
level:
root: INFO
org.springframework.web: INFO
org.hibernate: WARN # 降低Hibernate日志级别,减少冗余
com.wuyi.mall: DEBUG # 业务包名,按需开启
com.alipay: DEBUG # 支付宝日志,排查支付问题
file:
name: /www/wwwroot/wuyi_mall_12.21/backend/logs/wuyi-mall.log
pattern:
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n" # 日志格式优化
logback:
rollingpolicy:
max-file-size: 100MB # 单个日志文件大小限制
max-history: 7 # 日志保留7天
然后重新打包jar包
jar uf C:\Users\yzy\Desktop\temp\wuyi-mall-1.0.0.jar -C C:\Users\yzy\Desktop\temp\wuyi-mall-1.0.0 BOOT-INF/classes/application.yml
把jar包上传到宝塔的[文件]里,然后创建yml里规定的文件夹
| 类型 | 路径(宝塔服务器) | 用途 | 创建时机 | 权限要求 |
|---|---|---|---|---|
| 文件夹 | /www/wwwroot/wuyi_mall_12.21/ | 项目根目录(包含后端、前端、日志、上传文件) | 上传 jar 包前 | 755(所有用户可读可执行,所有者可写) |
| 文件夹 | /www/wwwroot/wuyi_mall_12.21/backend/ | 后端 jar 包存放目录 | 上传 jar 包前 | 755 |
| 文件夹 | /www/wwwroot/wuyi_mall_12.21/backend/uploads/ | 文件上传目录(对应file.upload.path) | 启动 jar 包前 | 755(需让 SpringBoot 有写入权限) |
| 文件夹 | /www/wwwroot/wuyi_mall_12.21/backend/logs/ | 日志存放目录(对应logging.file.name) | 启动 jar 包前 | 755 |
| 配置文件 | /www/wwwroot/wuyi_mall_12.21/backend/application.yml | 生产版配置文件(若用 “外部挂载” 方式,需单独上传) | 上传 jar 包后、启动前 | 644(只读,避免误改) |
| (可选)文件夹 | /www/wwwroot/wuyi_mall_12.21/frontend/ | 前端 Vue 打包后的dist目录存放处 | 部署前端前 | 755 |
后续需要修改的话,就启动时指定加载外部配置文件(优先级高于 jar 内配置)
3.启动 SpringBoot 后端
# 进入后端目录
cd /www/wwwroot/wuyi_mall_12.21
# 启动jar包(替换为你的jar包名称,比如wuyi-mall-1.0.0.jar)
nohup java -jar wuyi-mall-1.0.0.jar > start.log 2>&1 &
# 查看启动日志,无报错则正常
tail -f start.log
# 查看端口是否被占用(8081端口有进程则成功)
netstat -tlnp | grep 8081
#杀死旧进程
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
4.部署前端 Vue 项目
执行node -v和npm -v,能显示版本号(如v16.18.0)则正常
若项目是刚拉取的 / 依赖未安装,先安装项目依赖:
# 示例:切换到项目目录(替换为你的实际路径)
cd D:\wuyi_mall_12.21\frontend
npm install
生成 dist 文件夹:
npm run build
打包成zip压缩包,上传到宝塔的wuyi_mall_12.21\frontend
然后双击解压
直接访问服务器 IP:打开浏览器,输入http://47.110.83.xxx✅ 成功标志:能看到 Vue 项目首页
宝塔配置前端站点:
宝塔 → 左侧「网站」→ PHP→「添加站点」;
域名:填写你的服务器 IP(47.110.83.xxx)!!!记得换成你的IP;
根目录:选择/www/wwwroot/wuyi_mall_12.21/frontend/dist;
PHP:静态
然后点击站点右侧设置→配置文件,改为:
server
{
listen 80;
server_name 47.110.83.xxx;
# 1. 仅保留index.html(Vue入口),删除PHP相关索引
index index.html index.htm;
root /www/wwwroot/wuyi_mall_12.21/frontend/dist;
#CERT-APPLY-CHECK--START
include /www/server/panel/vhost/nginx/well-known/47.110.83.xxx.conf;
#CERT-APPLY-CHECK--END
include /www/server/panel/vhost/nginx/extension/47.110.83.xxx/*.conf;
#SSL-START
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START
error_page 404 /404.html;
#ERROR-PAGE-END
# 2. 删除PHP引用(前端是静态文件,无需PHP)
# include enable-php-00.conf;
#REWRITE-START
include /www/server/panel/vhost/rewrite/47.110.83.xxx.conf;
#REWRITE-END
# 3. 新增:Vue History路由适配(刷新页面不404)
location / {
try_files $uri $uri/ /index.html;
}
# 4. 新增:反向代理后端API到8081端口
location /api/ {
proxy_pass http://127.0.0.1:8081/;
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;
proxy_redirect off;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
location ~ \.well-known{
allow all;
}
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}
access_log /www/wwwlogs/47.110.83.xxx.log;
error_log /www/wwwlogs/47.110.83.xxx.error.log;
}
打开上端的反向代理,直接点Nginx修改配置文件为:
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
stream {
log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
access_log /www/wwwlogs/tcp-access.log tcp_format;
error_log /www/wwwlogs/tcp-error.log;
include /www/server/panel/vhost/nginx/tcp/*.conf;
}
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
#include luawaf.conf;
include proxy.conf;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 100m; # 改1:扩大文件上传限制(默认50m,适配图片/文件上传)
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/jpeg image/gif image/png font/ttf font/otf image/svg+xml application/xml+rss text/x-js;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server_tokens off;
access_log off;
server
{
listen 888;
server_name phpmyadmin;
index index.html index.htm index.php;
root /www/server/phpmyadmin;
allow 127.0.0.1;
allow ::1;
deny all;
#error_page 404 /404.html;
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
}
access_log /www/wwwlogs/access.log;
}
# ========== 新增的前端+反向代理配置 start ==========
server
{
listen 80;
listen [::]:80;
server_name 47.110.83.xxx;
root /www/wwwroot/wuyi_mall_12.21/frontend/dist;
index index.html index.htm;
# 解决Vue路由刷新404
location / {
try_files $uri $uri/ /index.html;
}
# API接口代理(核心修改:去掉proxy_pass末尾的/)
location /api/ {
proxy_pass http://127.0.0.1:8081; # 去掉末尾的/
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_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
# upload文件访问代理(核心修改:去掉proxy_pass末尾的/upload/)
location /upload/ {
proxy_pass http://127.0.0.1:8081; # 去掉末尾的/upload/
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
# 日志配置(开启debug级日志,排查问题用)
access_log /www/wwwlogs/wuyi-mall-access.log;
error_log /www/wwwlogs/wuyi-mall-error.log debug;
}
# ========== 新增的前端+反向代理配置 end ==========
include /www/server/panel/vhost/nginx/*.conf;
}
5.改本地地址为服务器地址
修改文件中的baseURL为’',并将request.js 里的http://localhost:8081进行修改:
String fileUrl = "http://localhost:8081/upload/" + filename;改成String fileUrl = "http://47.110.83.xxx/upload/" + filename;
把所有http://localhost:5174和http://localhost:5173改成http://47.110.83.xxx
更多推荐
所有评论(0)