Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao subir o comando docker-compose up no servidor EC2 da AWS

Boa tarde,

Estou enfrentando um problema ao subir a aplicação no servidor EC2 na AWS, pois está dando esse problema abaixo:

Segue log do erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Erro: app-1 | *************************** app-1 | APPLICATION FAILED TO START app-1 | *************************** app-1 | app-1 | Description: app-1 | app-1 | Parameter 0 of constructor in com.dev.codechella.infra.email.EnviadorDeEmailReal required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found. app-1 | app-1 | app-1 | Action: app-1 | app-1 | Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.

Alguém consegue me ajudar a resolver esse problema ?

3 respostas

Dados adicionais

application-prod.properties

spring.datasource.url=${DATASOURCE_URL}
spring.datasource.username=${DATASOURCE_USERNAME}
spring.datasource.password=${DATASOURCE_PASSWORD}

spring.jpa.show-sql=false
spring.jpa.properties.hibernate.format_sql=false

spring.mail.host=${MAIL_HOST}
spring.mail.username=${MAIL_USER}
spring.mail.password=${MAIL_PASSWORD}
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

app.security.jwt.secret=${APP_JWT_SECRET}

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/codechella?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=admin

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

app.security.jwt.secret=12345678

mysql.env

MYSQL_RANDOM_ROOT_PASSWORD=true
MYSQL_DATABASE=codechella
MYSQL_USER=codechella_user
MYSQL_PASSWORD=codechella_pwd

app.env

SPRING_PROFILES_ACTIVE=prod
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/codechella
SPRING_DATASOURCE_USERNAME=codechella_user
SPRING_DATASOURCE_PASSWORD=codechella_pwd
MAIL_HOST=smtp.gmail.com
MAIL_USER=mail_user
MAIL_PASSWORD=mail_pwd
APP_JWT_SECRET=jwt_secret

Dockerfile

FROM eclipse-temurin:17-jdk-alpine as builder
WORKDIR application
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
COPY src src
RUN ./mvnw package -DskipTests
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM eclipse-temurin:17-jre-alpine
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]

docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:8.0.36
    env_file: ./env/mysql.env
    volumes:
      - ./mysql-data:/var/lib/mysql
    restart: unless-stopped
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
      interval: 5s
      timeout: 5s
      retries: 10

  app:
    image: hemersoncarlos/codechella:latest
    env_file: ./env/app.env
    restart: unless-stopped
    depends_on:
      mysql:
        condition: service_healthy

volumes:
  mysql-data:

Seria esses os dados da aplicação

solução!

Olá Hemerson, tudo bem?

O problema que você está enfrentando ao tentar subir sua aplicação no servidor EC2 usando Docker Compose está relacionado à configuração do Spring Boot, especificamente com a injeção de dependências para o componente JavaMailSender.

A mensagem de erro indica que o Spring não conseguiu encontrar um bean do tipo org.springframework.mail.javamail.JavaMailSender, que é necessário para o construtor de EnviadorDeEmailReal. Isso geralmente acontece quando a configuração necessária para criar esse bean não está presente ou está incorreta.

Para resolver esse problema, você precisa garantir que a configuração do JavaMailSender esteja corretamente definida em sua aplicação Spring Boot. Aqui está um exemplo de como você pode configurar isso:

  1. Adicione a dependência do Spring Mail ao seu arquivo pom.xml ou build.gradle:

    Se você está usando Maven, adicione:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

    Para Gradle, use:

    implementation 'org.springframework.boot:spring-boot-starter-mail'
    
  2. Configure as propriedades do JavaMailSender no seu arquivo application.properties ou application.yml:

    spring.mail.host=smtp.example.com
    spring.mail.port=587
    spring.mail.username=your-email@example.com
    spring.mail.password=your-email-password
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    

    Certifique-se de substituir os valores acima pelos detalhes reais do seu servidor SMTP.

  3. Certifique-se de que não há conflitos nas configurações do seu bean:

    Se você declarou explicitamente um JavaMailSender bean em sua configuração Java, verifique se não há conflitos ou duplicidades com a configuração automática do Spring Boot.

Após realizar essas alterações, tente subir sua aplicação novamente com o comando docker-compose up. Certifique-se também de que todas as configurações necessárias estão disponíveis no servidor EC2 e que os arquivos de configuração foram corretamente transferidos para lá.

Espero que essas orientações ajudem a resolver o problema!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá Armano

Tudo bem sim e com você ?

Deu certo aqui, na realidade eu subi para a instância do EC2 que foi criada e deu um problema de memória por ser uma máquina gratuita da AWS, mas o erro não ia dar novamente, pelo que vi.

Obrigado pela ajuda

Vou fazer meus testes aqui, caso de outro problema eu abro uma dúvida no fórum.