Closed vincentchalamon closed 8 months ago
I'm not super familiar with aws, but the error message seems pretty obvious. Googling "Unable to load an HTTP implementation from any provider " suggests a solution. Have you tried this? Cheers
On 08.11.23 14:51, Vincent wrote:
Hi,
I'm trying to implement jgroups-aws-3.0.0.Final in Keycloak 22.0.5. Sadly, I cannot build Keycloak properly due to the following exception:
Caused by: software.amazon.awssdk.core.exception.SdkClientException: Unable to load an HTTP implementation from any provider in the chain. You must declare a dependency on an appropriate HTTP implementation or pass in an SdkHttpClient explicitly to the client builder.
Did I miss something in my configuration, or missed to install any required dependency?
Thanks for your feedback.
Providers:
- aws-auth-2.21.16.jar
- aws-core-2.21.16.jar
- aws-endpoints-spi-2.21.16.jar
- aws-http-auth-2.21.16.jar
- aws-http-auth-aws-2.21.16.jar
- aws-http-auth-spi-2.21.16.jar
- aws-http-client-spi-2.21.16.jar
- aws-identity-spi-2.21.16.jar
- aws-profiles-2.21.16.jar
- aws-regions-2.21.16.jar
- aws-s3-2.21.16.jar
- aws-sdk-core-2.21.16.jar
- aws-sdk-java-2.21.16.jar
- aws-utils-2.21.16.jar
- jgroups-aws-3.0.1.Final.jar
Infinispan configuration
<?xmlversion="1.0"encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:14.0 http://www.infinispan.org/schemas/infinispan-config-14.0.xsd" xmlns="urn:infinispan:config:14.0">
<jgroups> <stack name="s3"> <TCP bind_port="7800" recv_buf_size="${tcp.recv_buf_size:5M}" send_buf_size="${tcp.send_buf_size:5M}" thread_pool.enabled="true" thread_pool.min_threads="2" thread_pool.max_threads="8" thread_pool.keep_alive_time="5000"/> <aws.S3_PINGregion_name="${env.KC_CACHE_S3_REGION_NAME:eu-central-1}" bucket_name="${env.KC_CACHE_S3_BUCKET_NAME:keycloak-cache}" path_style_access_enabled="${env.KC_CACHE_S3_PATH_STYLE:false}" endpoint="${env.KC_CACHE_S3_ENDPOINT:https://cellar-c2.services.clever-cloud.com}"/> <MERGE3 min_interval="10000" max_interval="30000"/> <FD_SOCK/> <FD_ALL timeout="30000" interval="5000"/> <VERIFY_SUSPECT timeout="1500"/> <pbcast.NAKACK2use_mcast_xmit="false" discard_delivered_msgs="true"/> <UNICAST3/> <pbcast.STABLEdesired_avg_gossip="50000" max_bytes="4M"/> <pbcast.GMSprint_local_addr="true" join_timeout="2000"/> <MFC max_credits="2M" min_threshold="0.4"/> <FRAG2 frag_size="60K"/> </stack> </jgroups> <cache-container name="keycloak"> <transport lock-timeout="60000" stack="s3"/> <local-cache name="realms" simple-cache="true"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <memory max-count="10000"/> </local-cache> <local-cache name="users" simple-cache="true"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <memory max-count="10000"/> </local-cache> <distributed-cache name="sessions" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <distributed-cache name="authenticationSessions" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <distributed-cache name="offlineSessions" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <distributed-cache name="clientSessions" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <distributed-cache name="offlineClientSessions" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <distributed-cache name="loginFailures" owners="${env.KC_CACHE_OWNERS:2}"> <expiration lifespan="-1"/> </distributed-cache> <local-cache name="authorization" simple-cache="true"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <memory max-count="10000"/> </local-cache> <replicated-cache name="work"> <expiration lifespan="-1"/> </replicated-cache> <local-cache name="keys" simple-cache="true"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <expiration max-idle="3600000"/> <memory max-count="1000"/> </local-cache> <distributed-cache name="actionTokens" owners="${env.KC_CACHE_OWNERS:2}"> <encoding> <key media-type="application/x-java-object"/> <value media-type="application/x-java-object"/> </encoding> <expiration max-idle="-1" lifespan="-1" interval="300000"/> <memory max-count="-1"/> </distributed-cache> </cache-container>
Full logs
|ae-keycloak-keycloak-1 | Changes detected in configuration. Updating the server image. ae-keycloak-keycloak-1 | Updating the configuration and installing your custom providers, if any. Please wait. ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2 (be.cronos.keycloak.credential.hash.Argon2PasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: md5-ae-customer (com.keenetic.account.keycloak.anotherhashes.MD5AeCustomerPasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: md5-ae-owner (com.keenetic.account.keycloak.anotherhashes.MD5AeOwnerPasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Iterations (be.cronos.keycloak.policy.Argon2IterationsPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Variant (be.cronos.keycloak.policy.Argon2VariantPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Version (be.cronos.keycloak.policy.Argon2VersionPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Parallelism (be.cronos.keycloak.policy.Argon2ParallelismPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2HashLength (be.cronos.keycloak.policy.Argon2HashLengthPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2SaltLength (be.cronos.keycloak.policy.Argon2SaltLengthPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2MaxTime (be.cronos.keycloak.policy.Argon2MaxTimePasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,234 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Memory (be.cronos.keycloak.policy.Argon2MemoryPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:13,720 INFO [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 7283ms ae-keycloak-keycloak-1 | Server configuration updated and persisted. Run the following command to review the configuration: ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | kc.sh show-config ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | Next time you run the server, just run: ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | kc.sh start --optimized ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | 2023-11-08 13:37:14,480 INFO [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: http://keycloak.docker.local, Hostname: keycloak.docker.local, Strict HTTPS: false, Path: /, Strict BackChannel: false, Admin URL:
, Admin: , Port: -1, Proxied: true ae-keycloak-keycloak-1 | 2023-11-08 13:37:15,807 WARN [org.infinispan.PERSISTENCE] (keycloak-cache-init) ISPN000554: jboss-marshalling is deprecated and planned for removal ae-keycloak-keycloak-1 | 2023-11-08 13:37:15,939 INFO [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller' ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,119 INFO [org.jgroups.protocols.aws.S3_PING] (keycloak-cache-init) Set Amazon S3 endpoint to http://s3.docker.local:9090 ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,330 WARN [io.quarkus.vertx.http.runtime.VertxHttpRecorder] (main) The X-Forwarded-* and Forwarded headers will be considered when determining the proxy address. This configuration can cause a security issue as clients can forge requests and send a forwarded header that is not overwritten by the proxy. Please consider use one of these headers just to forward the proxy address in requests. ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,334 INFO [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,333 ERROR [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000660: DefaultCacheManager start failed, stopping any running components: org.infinispan.commons.CacheConfigurationException: ISPN000541: Error while trying to create a channel using the specified configuration '[TCP(send_buf_size=5M, thread_pool.max_threads=8, thread_pool.keep_alive_time=5000, thread_pool.enabled=true, bind_port=7800, recv_buf_size=5M, thread_pool.min_threads=2), aws.S3_PING(endpoint=http://s3.docker.local:9090, region_name=eu-central-1, path_style_access_enabled=true, bucket_name=keycloak), MERGE3(max_interval=30000, min_interval=10000), FD_SOCK(), FD_ALL(interval=5000, timeout=30000), VERIFY_SUSPECT(timeout=1500), pbcast.NAKACK2(discard_delivered_msgs=true, use_mcast_xmit=false), UNICAST3(), pbcast.STABLE(desired_avg_gossip=50000, max_bytes=4M), pbcast.GMS(join_timeout=2000, print_local_addr=true), MFC(min_threshold=0.4, max_credits=2M), FRAG2(frag_size=60K)]' ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.channelFromConfigurator(JGroupsTransport.java:779) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:748) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannel(JGroupsTransport.java:503) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:484) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.CorePackageImpl$1.start(CorePackageImpl.java:42) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.CorePackageImpl$1.start(CorePackageImpl.java:27) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.MetricsCollector.start(MetricsCollector.java:84) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.CorePackageImpl$1.start(CorePackageImpl.java:41) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.CorePackageImpl$1.start(CorePackageImpl.java:34) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startDependencies(BasicComponentRegistryImpl.java:634) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:598) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:379) ae-keycloak-keycloak-1 | at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:252) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:779) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:747) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager. (DefaultCacheManager.java:411) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.CacheManagerFactory.startCacheManager(CacheManagerFactory.java:96) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ae-keycloak-keycloak-1 | at java.base/java.lang.Thread.run(Thread.java:840) ae-keycloak-keycloak-1 | Caused by: software.amazon.awssdk.core.exception.SdkClientException: Unable to load an HTTP implementation from any provider in the chain. You must declare a dependency on an appropriate HTTP implementation or pass in an SdkHttpClient explicitly to the client builder. ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:111) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.lambda$buildWithDefaults$1(DefaultSdkHttpClientBuilder.java:49) ae-keycloak-keycloak-1 | at java.base/java.util.Optional.orElseThrow(Optional.java:403) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.buildWithDefaults(DefaultSdkHttpClientBuilder.java:43) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.lambda$resolveSyncHttpClient$7(SdkDefaultClientBuilder.java:450) ae-keycloak-keycloak-1 | at java.base/java.util.Optional.orElseGet(Optional.java:364) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.resolveSyncHttpClient(SdkDefaultClientBuilder.java:450) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.finalizeSyncConfiguration(SdkDefaultClientBuilder.java:380) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.syncClientConfiguration(SdkDefaultClientBuilder.java:194) ae-keycloak-keycloak-1 | at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:39) ae-keycloak-keycloak-1 | at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:28) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:157) ae-keycloak-keycloak-1 | at org.jgroups.protocols.aws.S3_PING.init(S3_PING.java:113) ae-keycloak-keycloak-1 | at org.jgroups.stack.ProtocolStack.initProtocolStack(ProtocolStack.java:802) ae-keycloak-keycloak-1 | at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:442) ae-keycloak-keycloak-1 | at org.jgroups.JChannel.init(JChannel.java:901) ae-keycloak-keycloak-1 | at org.jgroups.JChannel. (JChannel.java:123) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.EmbeddedJGroupsChannelConfigurator.createChannel(EmbeddedJGroupsChannelConfigurator.java:80) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.channelFromConfigurator(JGroupsTransport.java:777) ae-keycloak-keycloak-1 | ... 30 more ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,339 INFO [com.arjuna.ats.jbossatx] (main) ARJUNA032014: Stopping transaction recovery manager ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,358 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode ae-keycloak-keycloak-1 | 2023-11-08 13:37:16,358 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) Error details:: java.lang.RuntimeException: Failed to start caches ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.CacheManagerFactory.getOrCreate(CacheManagerFactory.java:61) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.CacheManagerFactory_9497dc12cf1c9738de11a9c4b512d17ae927dceb_Synthetic_ClientProxy.getOrCreate(Unknown Source) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.QuarkusCacheManagerProvider.getCacheManager(QuarkusCacheManagerProvider.java:32) ae-keycloak-keycloak-1 | at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.lazyInit(DefaultInfinispanConnectionProviderFactory.java:143) ae-keycloak-keycloak-1 | at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.create(DefaultInfinispanConnectionProviderFactory.java:83) ae-keycloak-keycloak-1 | at org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory.create(DefaultInfinispanConnectionProviderFactory.java:67) ae-keycloak-keycloak-1 | at org.keycloak.services.DefaultKeycloakSession.getProvider(DefaultKeycloakSession.java:177) ae-keycloak-keycloak-1 | at org.keycloak.models.sessions.infinispan.InfinispanSingleUseObjectProviderFactory.getSingleUseObjectCache(InfinispanSingleUseObjectProviderFactory.java:53) ae-keycloak-keycloak-1 | at org.keycloak.models.sessions.infinispan.InfinispanSingleUseObjectProviderFactory.postInit(InfinispanSingleUseObjectProviderFactory.java:77) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.integration.QuarkusKeycloakSessionFactory.init(QuarkusKeycloakSessionFactory.java:105) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.createSessionFactory(QuarkusKeycloakApplication.java:45) ae-keycloak-keycloak-1 | at org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:125) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.integration.QuarkusLifecycleObserver.onStartupEvent(QuarkusLifecycleObserver.java:37) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.integration.QuarkusLifecycleObserver_Observer_onStartupEvent_c9888fa6c2aa9208d4625ee9d83de6fd77e22c83.notify(Unknown Source) ae-keycloak-keycloak-1 | at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:346) ae-keycloak-keycloak-1 | at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:328) ae-keycloak-keycloak-1 | at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:82) ae-keycloak-keycloak-1 | at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:155) ae-keycloak-keycloak-1 | at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:106) ae-keycloak-keycloak-1 | at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source) ae-keycloak-keycloak-1 | at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source) ae-keycloak-keycloak-1 | at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source) ae-keycloak-keycloak-1 | at io.quarkus.runtime.Application.start(Application.java:101) ae-keycloak-keycloak-1 | at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111) ae-keycloak-keycloak-1 | at io.quarkus.runtime.Quarkus.run(Quarkus.java:71) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:98) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:37) ae-keycloak-keycloak-1 | at picocli.CommandLine.executeUserObject(CommandLine.java:2026) ae-keycloak-keycloak-1 | at picocli.CommandLine.access$1500(CommandLine.java:148) ae-keycloak-keycloak-1 | at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) ae-keycloak-keycloak-1 | at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) ae-keycloak-keycloak-1 | at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) ae-keycloak-keycloak-1 | at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) ae-keycloak-keycloak-1 | at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) ae-keycloak-keycloak-1 | at picocli.CommandLine.execute(CommandLine.java:2170) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:100) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:88) ae-keycloak-keycloak-1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ae-keycloak-keycloak-1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ae-keycloak-keycloak-1 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ae-keycloak-keycloak-1 | at java.base/java.lang.reflect.Method.invoke(Method.java:568) ae-keycloak-keycloak-1 | at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:61) ae-keycloak-keycloak-1 | at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:32) ae-keycloak-keycloak-1 | Caused by: java.util.concurrent.ExecutionException: org.infinispan.manager.EmbeddedCacheManagerStartupException: ISPN000541: Error while trying to create a channel using the specified configuration '[TCP(send_buf_size=5M, thread_pool.max_threads=8, thread_pool.keep_alive_time=5000, thread_pool.enabled=true, bind_port=7800, recv_buf_size=5M, thread_pool.min_threads=2), aws.S3_PING(endpoint=http://s3.docker.local:9090, region_name=eu-central-1, path_style_access_enabled=true, bucket_name=keycloak), MERGE3(max_interval=30000, min_interval=10000), FD_SOCK(), FD_ALL(interval=5000, timeout=30000), VERIFY_SUSPECT(timeout=1500), pbcast.NAKACK2(discard_delivered_msgs=true, use_mcast_xmit=false), UNICAST3(), pbcast.STABLE(desired_avg_gossip=50000, max_bytes=4M), pbcast.GMS(join_timeout=2000, print_local_addr=true), MFC(min_threshold=0.4, max_credits=2M), FRAG2(frag_size=60K)]' ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.CacheManagerFactory.getOrCreate(CacheManagerFactory.java:59) ae-keycloak-keycloak-1 | ... 42 more ae-keycloak-keycloak-1 | Caused by: org.infinispan.manager.EmbeddedCacheManagerStartupException: ISPN000541: Error while trying to create a channel using the specified configuration '[TCP(send_buf_size=5M, thread_pool.max_threads=8, thread_pool.keep_alive_time=5000, thread_pool.enabled=true, bind_port=7800, recv_buf_size=5M, thread_pool.min_threads=2), aws.S3_PING(endpoint=http://s3.docker.local:9090, region_name=eu-central-1, path_style_access_enabled=true, bucket_name=keycloak), MERGE3(max_interval=30000, min_interval=10000), FD_SOCK(), FD_ALL(interval=5000, timeout=30000), VERIFY_SUSPECT(timeout=1500), pbcast.NAKACK2(discard_delivered_msgs=true, use_mcast_xmit=false), UNICAST3(), pbcast.STABLE(desired_avg_gossip=50000, max_bytes=4M), pbcast.GMS(join_timeout=2000, print_local_addr=true), MFC(min_threshold=0.4, max_credits=2M), FRAG2(frag_size=60K)]' ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:782) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager.start(DefaultCacheManager.java:747) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager. (DefaultCacheManager.java:411) ae-keycloak-keycloak-1 | at org.keycloak.quarkus.runtime.storage.legacy.infinispan.CacheManagerFactory.startCacheManager(CacheManagerFactory.java:96) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ae-keycloak-keycloak-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ae-keycloak-keycloak-1 | at java.base/java.lang.Thread.run(Thread.java:840) ae-keycloak-keycloak-1 | Caused by: org.infinispan.commons.CacheConfigurationException: ISPN000541: Error while trying to create a channel using the specified configuration '[TCP(send_buf_size=5M, thread_pool.max_threads=8, thread_pool.keep_alive_time=5000, thread_pool.enabled=true, bind_port=7800, recv_buf_size=5M, thread_pool.min_threads=2), aws.S3_PING(endpoint=http://s3.docker.local:9090, region_name=eu-central-1, path_style_access_enabled=true, bucket_name=keycloak), MERGE3(max_interval=30000, min_interval=10000), FD_SOCK(), FD_ALL(interval=5000, timeout=30000), VERIFY_SUSPECT(timeout=1500), pbcast.NAKACK2(discard_delivered_msgs=true, use_mcast_xmit=false), UNICAST3(), pbcast.STABLE(desired_avg_gossip=50000, max_bytes=4M), pbcast.GMS(join_timeout=2000, print_local_addr=true), MFC(min_threshold=0.4, max_credits=2M), FRAG2(frag_size=60K)]' ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.channelFromConfigurator(JGroupsTransport.java:779) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:748) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannel(JGroupsTransport.java:503) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:484) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.CorePackageImpl$1.start(CorePackageImpl.java:42) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.CorePackageImpl$1.start(CorePackageImpl.java:27) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.MetricsCollector.start(MetricsCollector.java:84) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.CorePackageImpl$1.start(CorePackageImpl.java:41) ae-keycloak-keycloak-1 | at org.infinispan.metrics.impl.CorePackageImpl$1.start(CorePackageImpl.java:34) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.invokeStart(BasicComponentRegistryImpl.java:616) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:607) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startDependencies(BasicComponentRegistryImpl.java:634) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.doStartWrapper(BasicComponentRegistryImpl.java:598) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl.startWrapper(BasicComponentRegistryImpl.java:576) ae-keycloak-keycloak-1 | at org.infinispan.factories.impl.BasicComponentRegistryImpl$ComponentWrapper.running(BasicComponentRegistryImpl.java:807) ae-keycloak-keycloak-1 | at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:379) ae-keycloak-keycloak-1 | at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:252) ae-keycloak-keycloak-1 | at org.infinispan.manager.DefaultCacheManager.internalStart(DefaultCacheManager.java:779) ae-keycloak-keycloak-1 | ... 7 more ae-keycloak-keycloak-1 | Caused by: software.amazon.awssdk.core.exception.SdkClientException: Unable to load an HTTP implementation from any provider in the chain. You must declare a dependency on an appropriate HTTP implementation or pass in an SdkHttpClient explicitly to the client builder. ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:111) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.lambda$buildWithDefaults$1(DefaultSdkHttpClientBuilder.java:49) ae-keycloak-keycloak-1 | at java.base/java.util.Optional.orElseThrow(Optional.java:403) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.buildWithDefaults(DefaultSdkHttpClientBuilder.java:43) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.lambda$resolveSyncHttpClient$7(SdkDefaultClientBuilder.java:450) ae-keycloak-keycloak-1 | at java.base/java.util.Optional.orElseGet(Optional.java:364) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.resolveSyncHttpClient(SdkDefaultClientBuilder.java:450) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.finalizeSyncConfiguration(SdkDefaultClientBuilder.java:380) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.syncClientConfiguration(SdkDefaultClientBuilder.java:194) ae-keycloak-keycloak-1 | at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:39) ae-keycloak-keycloak-1 | at software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:28) ae-keycloak-keycloak-1 | at software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:157) ae-keycloak-keycloak-1 | at org.jgroups.protocols.aws.S3_PING.init(S3_PING.java:113) ae-keycloak-keycloak-1 | at org.jgroups.stack.ProtocolStack.initProtocolStack(ProtocolStack.java:802) ae-keycloak-keycloak-1 | at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:442) ae-keycloak-keycloak-1 | at org.jgroups.JChannel.init(JChannel.java:901) ae-keycloak-keycloak-1 | at org.jgroups.JChannel. (JChannel.java:123) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.EmbeddedJGroupsChannelConfigurator.createChannel(EmbeddedJGroupsChannelConfigurator.java:80) ae-keycloak-keycloak-1 | at org.infinispan.remoting.transport.jgroups.JGroupsTransport.channelFromConfigurator(JGroupsTransport.java:777) ae-keycloak-keycloak-1 | ... 30 more ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 exited with code 1 | Docker Compose configuration example
docker compose up -d&& docker compose logs -f keycloak
compose.yaml
version:"3.8"
services: database: image:postgres:15-alpine environment: POSTGRES_DB:keycloak POSTGRES_USER:keycloak POSTGRES_PASSWORD:password volumes: -db_data:/var/lib/postgresql/data
s3: image:adobe/s3mock environment: initialBuckets:keycloak debug:true
Nginx Proxy configuration (testing purpose only)
VIRTUAL_HOST:s3.docker.local VIRTUAL_PORT:9090 networks: default: aliases: -s3.docker.local ports: -target:9090 published:9090 protocol:tcp -target:9091 published:9091 protocol:tcp
keycloak: image:keycloak/keycloak:22.0.5 working_dir:/opt/keycloak entrypoint:bin/kc.sh --verbose command:start environment:
https://www.keycloak.org/server/all-config#category-database
KC_DB:postgres KC_DB_URL_HOST:database KC_DB_URL_PORT:5432 KC_DB_URL_DATABASE:keycloak KC_DB_USERNAME:keycloak KC_DB_PASSWORD:password #
https://www.keycloak.org/server/configuration#_creating_the_initial_admin_user KEYCLOAK_ADMIN:admin KEYCLOAK_ADMIN_PASSWORD:password
https://www.keycloak.org/server/all-config#category-hostname
KC_HOSTNAME_URL:http://keycloak.docker.local KC_ADMIN_HOSTNAME_URL:http://keycloak.docker.local # https://www.keycloak.org/server/all-config#category-http KC_HTTP_ENABLED:true KC_HTTP_PORT:80 # Custom cache options KC_CACHE_CONFIG_FILE:cache-ispn-s3.xml KC_CACHE_S3_REGION_NAME:eu-central-1 KC_CACHE_S3_BUCKET_NAME:keycloak KC_CACHE_S3_ENDPOINT:http://s3.docker.local:9090 KC_CACHE_S3_PATH_STYLE:true AWS_ACCESS_KEY_ID:aws_access_key AWS_SECRET_KEY:aws_secret_key # Nginx Proxy configuration (testing purpose only) VIRTUAL_HOST:keycloak.docker.local VIRTUAL_PORT:80 KC_PROXY:edge depends_on: -database volumes: -./conf:/opt/keycloak/conf:rw -./providers:/opt/keycloak/providers:rw
use nginx-proxy to prevent port conflict when scaling keycloak service
(testing purpose) nginx-proxy: image:nginxproxy/nginx-proxy volumes: -/var/run/docker.sock:/tmp/docker.sock:ro ports: -target:80 published:80 protocol:tcp
volumes: db_data:
— Reply to this email directly, view it on GitHub https://github.com/jgroups-extras/jgroups-aws/issues/301, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADPZXJ3LJFTCIGIU7THSHTYDOE5LAVCNFSM6AAAAAA7C5LV26VHI2DSMVQWIX3LMV43ASLTON2WKOZRHE4DGNRWGIZDONY. You are receiving this because you are subscribed to this thread.Message ID: @.***>
-- Bela Ban | http://www.jgroups.org
Sorry, I'm not a JAVA developer and don't know how those libraries work together. I already included the aws-httpclient and expected it to fix it, but it's not enough. Adding aws-apache-client fixed it. Thanks!
@vincentchalamon Perhaps we are missing information in docs on how to do this easily. Opened https://github.com/jgroups-extras/jgroups-aws/issues/305 to track this.
Hi,
I'm trying to implement jgroups-aws-3.0.0.Final in Keycloak 22.0.5. Sadly, I cannot build Keycloak properly due to the following exception:
Did I miss something in my configuration, or missed to install any required dependency?
Thanks for your feedback.
Reproducer: https://github.com/vincentchalamon/keycloak-jgroups-aws
Providers
- aws-auth-2.21.16.jar - aws-core-2.21.16.jar - aws-endpoints-spi-2.21.16.jar - aws-http-auth-2.21.16.jar - aws-http-auth-aws-2.21.16.jar - aws-http-auth-spi-2.21.16.jar - aws-http-client-spi-2.21.16.jar - aws-identity-spi-2.21.16.jar - aws-profiles-2.21.16.jar - aws-regions-2.21.16.jar - aws-s3-2.21.16.jar - aws-sdk-core-2.21.16.jar - aws-sdk-java-2.21.16.jar - aws-utils-2.21.16.jar - jgroups-aws-3.0.1.Final.jarInfinispan configuration
```xmlFull logs
``` ae-keycloak-keycloak-1 | Changes detected in configuration. Updating the server image. ae-keycloak-keycloak-1 | Updating the configuration and installing your custom providers, if any. Please wait. ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2 (be.cronos.keycloak.credential.hash.Argon2PasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: md5-ae-customer (com.keenetic.account.keycloak.anotherhashes.MD5AeCustomerPasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:07,849 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: md5-ae-owner (com.keenetic.account.keycloak.anotherhashes.MD5AeOwnerPasswordHashProviderFactory) is implementing the internal SPI password-hashing. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Iterations (be.cronos.keycloak.policy.Argon2IterationsPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Variant (be.cronos.keycloak.policy.Argon2VariantPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Version (be.cronos.keycloak.policy.Argon2VersionPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Parallelism (be.cronos.keycloak.policy.Argon2ParallelismPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2HashLength (be.cronos.keycloak.policy.Argon2HashLengthPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2SaltLength (be.cronos.keycloak.policy.Argon2SaltLengthPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,233 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2MaxTime (be.cronos.keycloak.policy.Argon2MaxTimePasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:08,234 WARN [org.keycloak.services] (build-34) KC-SERVICES0047: argon2Memory (be.cronos.keycloak.policy.Argon2MemoryPasswordPolicyProviderFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice ae-keycloak-keycloak-1 | 2023-11-08 13:37:13,720 INFO [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 7283ms ae-keycloak-keycloak-1 | Server configuration updated and persisted. Run the following command to review the configuration: ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | kc.sh show-config ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | Next time you run the server, just run: ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | kc.sh start --optimized ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | ae-keycloak-keycloak-1 | 2023-11-08 13:37:14,480 INFO [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: http://keycloak.docker.local, Hostname: keycloak.docker.local, Strict HTTPS: false, Path: /, Strict BackChannel: false, Admin URL:Docker Compose configuration example
```shell docker compose up -d && docker compose logs -f keycloak ``` ```yaml # compose.yaml version: "3.8" services: database: image: postgres:15-alpine environment: POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password volumes: - db_data:/var/lib/postgresql/data s3: image: adobe/s3mock environment: initialBuckets: keycloak debug: true # Nginx Proxy configuration (testing purpose only) VIRTUAL_HOST: s3.docker.local VIRTUAL_PORT: 9090 networks: default: aliases: - s3.docker.local ports: - target: 9090 published: 9090 protocol: tcp - target: 9091 published: 9091 protocol: tcp keycloak: image: keycloak/keycloak:22.0.5 working_dir: /opt/keycloak entrypoint: bin/kc.sh --verbose command: start environment: # https://www.keycloak.org/server/all-config#category-database KC_DB: postgres KC_DB_URL_HOST: database KC_DB_URL_PORT: 5432 KC_DB_URL_DATABASE: keycloak KC_DB_USERNAME: keycloak KC_DB_PASSWORD: password # https://www.keycloak.org/server/configuration#_creating_the_initial_admin_user KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: password # https://www.keycloak.org/server/all-config#category-hostname KC_HOSTNAME_URL: http://keycloak.docker.local KC_ADMIN_HOSTNAME_URL: http://keycloak.docker.local # https://www.keycloak.org/server/all-config#category-http KC_HTTP_ENABLED: true KC_HTTP_PORT: 80 # Custom cache options KC_CACHE_CONFIG_FILE: cache-ispn-s3.xml KC_CACHE_S3_REGION_NAME: eu-central-1 KC_CACHE_S3_BUCKET_NAME: keycloak KC_CACHE_S3_ENDPOINT: http://s3.docker.local:9090 KC_CACHE_S3_PATH_STYLE: true AWS_ACCESS_KEY_ID: aws_access_key AWS_SECRET_KEY: aws_secret_key # Nginx Proxy configuration (testing purpose only) VIRTUAL_HOST: keycloak.docker.local VIRTUAL_PORT: 80 KC_PROXY: edge depends_on: - database volumes: - ./conf:/opt/keycloak/conf:rw - ./providers:/opt/keycloak/providers:rw # use nginx-proxy to prevent port conflict when scaling keycloak service (testing purpose) nginx-proxy: image: nginxproxy/nginx-proxy volumes: - /var/run/docker.sock:/tmp/docker.sock:ro ports: - target: 80 published: 80 protocol: tcp volumes: db_data: ```