Сначала я просто собирал JAR-файл локально, а затем копировал и запускал его в образе Docker, но теперь я также хочу создать файл JAR внутри Docker.
Конфигурация
Код: Выделить всё
package com.qcphotos.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(requests -> {
requests.requestMatchers(
HttpMethod.GET,
"/products",
"products/parseUrl",
"/products/popular",
"/products/viewCount"
)
.permitAll()
.requestMatchers(
HttpMethod.GET,
"/affiliates/redirect",
"/affiliates/url"
)
.permitAll()
.requestMatchers(
HttpMethod.GET,
"/collections/{collectionId}",
"/collections/{collectionId}/products"
)
.permitAll()
.requestMatchers(
HttpMethod.GET,
"/users/{userId}"
)
.permitAll()
.requestMatchers(
HttpMethod.GET,
"/storefronts",
"/shippingAgents"
)
.permitAll()
.requestMatchers("/login/oauth2/code/discord", "/")
.permitAll()
.anyRequest()
.authenticated();
})
.csrf(csrf -> csrf.disable())
.oauth2Login(Customizer.withDefaults());
return http.build();
}
}
Код: Выделить всё
spring:
security:
oauth2:
client:
registration:
discord:
client-id: 'myClientId'
client-secret: 'mySecretCode'
authorization-grant-type: authorization_code
scope:
- identify
- email
redirect-uri: '{baseUrl}/login/oauth2/code/discord'
client-name: Discord
provider:
discord:
authorization-uri: https://discordapp.com/api/oauth2/authorize
token-uri: https://discordapp.com/api/oauth2/token
user-info-uri: https://discordapp.com/api/users/@me
user-name-attribute: username
Код: Выделить всё
package com.qcphotos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration;
@SpringBootApplication(exclude = {
RepositoryRestMvcAutoConfiguration.class
})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Dockerfile
Я использовал пакет mvn clean для создания jar-файла
Код: Выделить всё
FROM openjdk:21
WORKDIR /app
COPY /target/rest-api-1.0-SNAPSHOT-jar-with-dependencies.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
https://gist.github.com/Eli-Chandler/28 ... 78b5ecfe8e
Сборка Docker
Dockerfile
Код: Выделить всё
# Build
FROM maven:3.9.7-eclipse-temurin-21 AS build
COPY ./backend /src
WORKDIR /src
RUN mvn clean package
# Run
FROM openjdk:21
WORKDIR /app
COPY --from=build /src/rest-api/target/rest-api-1.0-SNAPSHOT-jar-with-dependencies.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
https://gist.github.com/Eli-Chandler/d2 ... abe813d63c
Подробнее здесь: https://stackoverflow.com/questions/786 ... but-not-wh