查阅官方文档如图:

在这里插入图片描述

  1. 检查端口号,没问题
  2. 内存也够,
  3. CMD 命令也只有一条

上面三点我都没问题,就是部署不了,最后我反复排查,总结如下几点可能原因:

1. 线上数据库地址确保能连接,并且设置时区和编码

spring:
	datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xxx/xxx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: xxx
    password: xxx

2. 线上数据库版本和本地数据库版本一致

本地调试数据库用8.0,线上就用8.0

3. 线上redis 必须修改配置,具体如下图:

  • 修改绑定的地址:
    在这里插入图片描述
  • 配置redis 的密码
    在这里插入图片描述
  • 修改 redis 的保护模式,以及检查redis 的端口号
    在这里插入图片描述

注意,如果你的服务器开启了防火墙,记得把你的端口号加到开放的端口列表
这里以 centos 进行讲解:

firewall-cmd --state # 查看是否开启防火墙
firewall-cmd --query-port=80/tcp # 查看80端口是否开放,其他端口同理
firewall-cmd --list-port # 查询以开放的端口列表
firewall-cmd --add-port=80/tcp # 添加端口80,格式为:端口/通讯协议

特别是服务安装了宝塔Linux的,它会帮你开启防火墙,一定要把端口号开放,同时服务器的安全组也要加上该端口

4. 如果你的代码中使用了 redisson 且配置信息是通过@ConfigurationProperties(prefix = “spring.redis”) 注解获取的,建议你把application.yml的 redis 也改为线上的,而不是只修改application-prod.yml,这个注解的读取方式,我也不太了解。

package com.yupi.usercenter.config;

import lombok.Data;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "spring.redis")
@Data
public class RedissonConfig {

    private String port;
    private String host;
    private String password;

    @Bean
    public RedissonClient redissonClient() {
        // 1. Create config object
        Config config = new Config();
        String redisAddress = String.format("redis://%s:%s", host, port);
        config.useSingleServer()
                .setAddress(redisAddress)
                .setPassword(password)
                .setDatabase(0);

        // 2. Create Redisson instance

        // Sync and Async API
        return Redisson.create(config);
    }
}

5. 修改Dockerfile文件,这里以spring-boot项目为例

FROM maven:3.6.0-jdk-8-slim as build

# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

EXPOSE 8080 # 这里的端口改成你自己项目的端口号

# 下面的文件名改成你项目的文件名
CMD ["java","-jar","/app/target/user-play-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

其他项目参考官方文档的例子:https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/quickstart/template/official.html

写在最后

部署项目真的太可怕了,跨域问题、防火墙问题、线上数据库、线上redis 等,真的会让人破防。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐