Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NO_MERGE] Rebase postgres on master #1302

Open
wants to merge 81 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
be50b5d
Adapt tmail after migrating new code from James
vttranlina Jan 10, 2024
cf5bc94
ISSUE-883 Implement postgres-app: setup git submodule
vttranlina Jan 11, 2024
fc084a0
ISSUE-883 Adapt Jenkinsfile
vttranlina Jan 11, 2024
34f80e1
ISSUE-883 Implement postgres-app
vttranlina Jan 10, 2024
a287910
ISSUE-883 postgres-app - Add bash script for quick test imap/smtp ser…
vttranlina Jan 11, 2024
cb9f9ab
ISSUE-883 Add deployment test for postgres
vttranlina Jan 12, 2024
090f186
ISSUE-895 Refactor Guice binding for choose User Module
vttranlina Jan 18, 2024
d003f2d
ISSUE-895 Support choose Rspamd & Introduce postgres-healthcheck-inte…
vttranlina Jan 18, 2024
6bea651
ISSUE-895 Refactor - generic code for user module chooser with Combin…
vttranlina Jan 19, 2024
8804d43
ISSUE-895 Update correct configuration file for deployment-test
vttranlina Jan 23, 2024
d2bf205
ISSUE-903 [CI build] Postgres experimental branch pushes also postgre…
vttranlina Jan 23, 2024
52217de
ISSUE-883 Add deployment test for combined user with postgres
vttranlina Jan 29, 2024
c12ce1c
ISSUE-918 JMAP memory binding for Postgres TMail app
Mar 7, 2024
4d6fff4
ISSUE-910 Introduce jmap-extensions-postgres module
quantranhong1999 Mar 6, 2024
55a1a70
ISSUE-910 Implement PostgresFirebaseSubscriptionRepository
quantranhong1999 Mar 7, 2024
6d957b5
ISSUE-910 PostgresFirebaseSubscriptionDAO: avoid fetching USER column…
quantranhong1999 Mar 8, 2024
5a60af1
ISSUE-911 Implement PostgresLabelChangeRepository
quantranhong1999 Mar 8, 2024
4562db0
ISSUE-911 SQL script to clean outdated data in the `label_change` table
quantranhong1999 Mar 8, 2024
9a5fd64
ISSUE-912 Implement PostgresLabelRepository
quantranhong1999 Mar 11, 2024
760ac44
ISSUE-912 Guice binding for Postgres label storage
quantranhong1999 Mar 11, 2024
840a9c9
ISSUE-910 Guice binding for Postgres firebase repository
quantranhong1999 Mar 11, 2024
cad5fb0
ISSUE-912 Add a few Postgres table comments
quantranhong1999 Mar 11, 2024
6f08750
ISSUE-913 Implement PostgresJmapSettingsRepository
Mar 11, 2024
5c21314
[FIX] Remove module chooser for deleted message vault for TMail Postg…
quantranhong1999 Mar 12, 2024
de6ce5a
ISSUE-915 Implement PostgresRateLimitingPlanUserRepository
quantranhong1999 Mar 12, 2024
4b79f8e
ISSUE-915 PostgresRateLimitingPlanUserRepository should use non-rls p…
quantranhong1999 Mar 13, 2024
cf8764f
ISSUE-914 Implement PostgresRateLimitingPlanRepository (#974)
hungphan227 Mar 20, 2024
091f957
Add missing PostgresDLPConfigurationStoreModule binding to PostgresTm…
Arsnael Mar 19, 2024
5e8c074
Disable temporarily webSocketShouldPushNewMessageWhenChangeSubscripti…
Arsnael Mar 19, 2024
5a33a2b
ISSUE-895 Refactor - generic code for user module chooser with Combin…
vttranlina Mar 22, 2024
e54a9bd
ISSUE-952 [ICS Reply] Binding to postgres app
vttranlina Mar 22, 2024
69816df
ISSUE-917 Implement PostgresKeystoreManager
Mar 26, 2024
a7866be
ISSUE-922 Implement PostgresBlobIdList
quantranhong1999 Mar 25, 2024
1937b4b
ISSUE-922 Introduce guice module for PostgresBlobIdList
quantranhong1999 Mar 26, 2024
a6448ae
ISSUE-922 Modularize BlobStoreModulesChooser for postgres-app
quantranhong1999 Mar 26, 2024
00a0596
ISSUE-922 Guice binding for Blob single save backed by Postgres
quantranhong1999 Mar 26, 2024
0b8f5db
ISSUE-922 Fix enable single save issue with Postgres/File blob implem…
quantranhong1999 Mar 26, 2024
983cc3b
ISSUE-916 Implement PostgresEncryptedEmailContentStore
Mar 27, 2024
00f059d
ISSUE-920 Webadmin integration tests for TMail postgres-app
vttranlina Mar 27, 2024
777b308
ISSUE-994 Adapt opensearch for Postgres distributed
vttranlina Mar 27, 2024
6a52ef9
Guice binding Encrypted mailbox module to Postgres app (#995)
vttranlina Mar 28, 2024
bddb341
[Postgres] Add missing bindings for tmail pg-app (#989)
Arsnael Apr 1, 2024
2cd7668
[Postgres] Bind PostgresEventStore for both memory and rabbitmq event…
Arsnael Apr 1, 2024
9673268
[CI] String interpolation of sensitive env variable in Jenkins pipeli…
Arsnael Apr 2, 2024
251451b
Optimize LinagoraFilterStateChangeTest test case
vttranlina Mar 29, 2024
a3ee460
Postgres - Firebase Subscription - update exception message
vttranlina Mar 29, 2024
9dbb585
Update guice binding for postgres app
vttranlina Mar 29, 2024
89b9294
ISSUE-919 Integration tests for TMail JMAP extensions
vttranlina Mar 29, 2024
45bd078
Postgres - Guice binding Task manager for postgres app
vttranlina Apr 3, 2024
70f6517
Postgres - Enabled PostgresTMailHealthCheckIntegrationTests
vttranlina Apr 3, 2024
91d2153
ISSUE-921 Integration test for TMail additional features
Apr 3, 2024
b2d32ce
Add missing Linagora service discovery Guice bindings to pg-app
Arsnael Apr 11, 2024
2976a26
ISSUE-919 Integration tests for TMail JMAP - Remove "@Disabled" test …
vttranlina Apr 15, 2024
2d4d8c6
Adapt after update SHA (postgresql)
vttranlina Apr 16, 2024
40391df
ISSUE-986 Fixup guice binding EventDeadLetter for AUTOCOMPLETE EventB…
vttranlina Apr 16, 2024
86842f5
Fix case inserting existed blob id in PostgresBlobIdListDAO
May 16, 2024
e0cb92c
ISSUE-1041 Implement PostgresPublicAssetRepository
quantranhong1999 May 27, 2024
5f372be
ISSUE-1041 Specify sample value for `url.prefix`
quantranhong1999 May 27, 2024
3d09c6b
Fix postgres jmap extension integration tests
Arsnael Jun 3, 2024
6028da3
Allow to re-use forks for TMail Postgres JMAP ITs
quantranhong1999 Jun 5, 2024
03f88da
Update PostgresTeamMailboxesTest: using rabbitmq eventbus for testing
vttranlina Jun 10, 2024
cb30eb4
ISSUE-261 Adapt TeamMailboxesContract for distributed test
vttranlina Jun 10, 2024
a66e204
Configure rerunFailingTestsCount = 2 for TMail Postgres JMAP ITs
vttranlina Jun 14, 2024
71d7041
Add RLSSupportPostgresMailboxModule in case rls is enabled
Jun 25, 2024
aef5c90
Refactor postgres code to match james submodule changes
Arsnael Jun 26, 2024
2690782
Update PostgresJmapSettingsRepositoryTest - using withoutRowLevelSecu…
vttranlina Jun 27, 2024
f5ffb5e
add method getTotalSize for PostgresPublicAssetRepository
vttranlina Jun 29, 2024
d8d96da
Fix compile code: update test case after rebase master
vttranlina Jun 29, 2024
f1e1fbb
Update smtpserver.xml configure for postgres-rspamd-integration-tests
vttranlina Jul 1, 2024
cab28cf
Fixup guice binding for RedisHealthCheck for PostgresTmailServer
vttranlina Jul 1, 2024
df10548
[PGSQL] Update default conf - Add PopulateEmailQueryViewListener to l…
vttranlina Aug 20, 2024
32126cf
JAMES-4054 Remove X-SMIME-Status header in mailetcontainer.xml
Arsnael Aug 20, 2024
958b45a
Postgres-app: unset JAVA_TOOL_OPTIONS env variable when running james…
quantranhong1999 Sep 9, 2024
b8e14c3
Postgres app: default config to relax mailbox name validation
quantranhong1999 Sep 6, 2024
106f496
ISSUE-1239 Implement PostgresTicketStore (#1271)
quantranhong1999 Oct 30, 2024
51dd139
Adapt from new master code - BlobId.Factory
vttranlina Oct 29, 2024
63ab2e4
Adapt new code master - typeStateFactory.parse -> strictParse
vttranlina Oct 29, 2024
895b53f
Adapt Rspamd config
quantranhong1999 Aug 19, 2024
13c652c
Fix postgres-related issues after postgres branch rebase
Nov 13, 2024
e8d3551
Fix distributed-code-related issues after postgres branch rebase
Nov 15, 2024
125c2b5
Update James SHA-1
Nov 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[submodule "james-project"]
path = james-project
url = https://github.com/apache/james-project
branch = postgresql
11 changes: 2 additions & 9 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,15 @@ pipeline {
stage('Deliver Docker images') {
when {
anyOf {
branch 'master'
branch 'postgresql'
buildingTag()
}
}
steps {
script {
env.DOCKER_TAG = 'branch-master'
if (env.TAG_NAME) {
env.DOCKER_TAG = env.TAG_NAME
}

echo "Docker tag: ${env.DOCKER_TAG}"
// build and push docker images
dir("tmail-backend") {
sh 'mvn -Pci jib:build -Djib.to.auth.username=$DOCKER_HUB_CREDENTIAL_USR -Djib.to.auth.password=$DOCKER_HUB_CREDENTIAL_PSW -Djib.to.tags=distributed-$DOCKER_TAG -pl apps/distributed -X'
sh 'mvn -Pci jib:build -Djib.to.auth.username=$DOCKER_HUB_CREDENTIAL_USR -Djib.to.auth.password=$DOCKER_HUB_CREDENTIAL_PSW -Djib.to.tags=memory-$DOCKER_TAG -pl apps/memory -X'
sh 'mvn -Pci jib:build -Djib.to.auth.username=$DOCKER_HUB_CREDENTIAL_USR -Djib.to.auth.password=$DOCKER_HUB_CREDENTIAL_PSW -Djib.to.image=linagora/tmail-backend:postgresql-experimental -Djib.to.tags=postgresql-experimental -pl apps/postgres -X'
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion james-project
Submodule james-project updated 672 files
4 changes: 4 additions & 0 deletions tmail-backend/apps/distributed/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
<groupId>${project.groupId}</groupId>
<artifactId>team-mailboxes-guice</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>tmail-guice-common</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>tmail-guice-distributed</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,21 @@
package com.linagora.tmail.james.app;


import org.apache.james.events.CassandraEventDeadLetters;
import org.apache.james.events.CassandraEventDeadLettersDAO;
import org.apache.james.events.CassandraEventDeadLettersGroupDAO;
import org.apache.james.events.EventDeadLetters;

import com.datastax.oss.driver.api.core.CqlSession;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.linagora.tmail.james.jmap.EmailAddressContactInjectKeys;
import com.linagora.tmail.james.jmap.contact.TmailJmapEventSerializer;

public class DistributedEmailAddressContactEventDeadLettersModule extends AbstractModule {

// TODO: for pass ci on postgresql branch,
// It should be replaced by https://github.com/linagora/tmail-backend/pull/1016 (when rebase master branch)
@Provides
@Singleton
@Named(EmailAddressContactInjectKeys.AUTOCOMPLETE)
EventDeadLetters provideEventDeadLetters(CassandraEventDeadLettersGroupDAO cassandraEventDeadLettersGroupDAO,
CqlSession session,
TmailJmapEventSerializer tmailJmapEventSerializer) {
return new CassandraEventDeadLetters(new CassandraEventDeadLettersDAO(session, tmailJmapEventSerializer),
cassandraEventDeadLettersGroupDAO);
EventDeadLetters provideEventDeadLetters(EventDeadLetters eventDeadLetters) {
return eventDeadLetters;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

import com.github.fge.lambdas.Throwing;
import com.linagora.tmail.OpenPaasModuleChooserConfiguration;
import com.linagora.tmail.UsersRepositoryModuleChooser;
import com.linagora.tmail.blob.guice.BlobStoreConfiguration;
import com.linagora.tmail.combined.identity.UsersRepositoryModuleChooser;
import com.linagora.tmail.encrypted.MailboxConfiguration;
import com.linagora.tmail.james.jmap.firebase.FirebaseModuleChooserConfiguration;
import com.linagora.tmail.james.jmap.service.discovery.LinagoraServicesDiscoveryModuleChooserConfiguration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.apache.james.modules.data.CassandraSieveQuotaLegacyModule;
import org.apache.james.modules.data.CassandraSieveQuotaModule;
import org.apache.james.modules.data.CassandraSieveRepositoryModule;
import org.apache.james.modules.data.CassandraUsersRepositoryModule;
import org.apache.james.modules.data.CassandraVacationModule;
import org.apache.james.modules.event.JMAPEventBusModule;
import org.apache.james.modules.event.RabbitMQEventBusModule;
Expand Down Expand Up @@ -103,6 +104,7 @@
import org.apache.james.quota.search.QuotaSearcher;
import org.apache.james.quota.search.scanning.ScanningQuotaSearcher;
import org.apache.james.rate.limiter.redis.RedisRateLimiterModule;
import org.apache.james.user.cassandra.CassandraUsersDAO;
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
import org.apache.james.vault.VaultConfiguration;
Expand All @@ -120,13 +122,14 @@
import com.google.inject.multibindings.ProvidesIntoSet;
import com.google.inject.name.Names;
import com.google.inject.util.Modules;
import com.linagora.tmail.DatabaseCombinedUserRequireModule;
import com.linagora.tmail.OpenPaasModule;
import com.linagora.tmail.OpenPaasModuleChooserConfiguration;
import com.linagora.tmail.ScheduledReconnectionHandler;
import com.linagora.tmail.UsersRepositoryModuleChooser;
import com.linagora.tmail.blob.guice.BlobStoreCacheModulesChooser;
import com.linagora.tmail.blob.guice.BlobStoreConfiguration;
import com.linagora.tmail.blob.guice.BlobStoreModulesChooser;
import com.linagora.tmail.combined.identity.UsersRepositoryModuleChooser;
import com.linagora.tmail.contact.RabbitMQEmailAddressContactModule;
import com.linagora.tmail.encrypted.ClearEmailContentFactory;
import com.linagora.tmail.encrypted.EncryptedMailboxManager;
Expand Down Expand Up @@ -350,7 +353,9 @@ public static GuiceJamesServer createServer(DistributedJamesConfiguration config
.combineWith(MailQueueViewChoice.ModuleChooser.choose(configuration.mailQueueViewChoice()))
.combineWith(BlobStoreModulesChooser.chooseModules(blobStoreConfiguration))
.combineWith(BlobStoreCacheModulesChooser.chooseModules(blobStoreConfiguration))
.combineWith(UsersRepositoryModuleChooser.chooseModules(configuration.usersRepositoryImplementation()))
.combineWith(new UsersRepositoryModuleChooser(
DatabaseCombinedUserRequireModule.of(CassandraUsersDAO.class),
new CassandraUsersRepositoryModule()).chooseModule(configuration.usersRepositoryImplementation()))
.combineWith(chooseFirebase(configuration.firebaseModuleChooserConfiguration()))
.combineWith(chooseLinagoraServicesDiscovery(configuration.linagoraServicesDiscoveryModuleChooserConfiguration()))
.combineWith(chooseOpenPaasModule(configuration.openPaasModuleChooserConfiguration()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import com.google.inject.multibindings.Multibinder;
import com.linagora.tmail.UsersRepositoryModuleChooser;
import com.linagora.tmail.combined.identity.CombinedUsersRepository;
import com.linagora.tmail.combined.identity.LdapExtension;
import com.linagora.tmail.combined.identity.UsersRepositoryClassProbe;
import com.linagora.tmail.combined.identity.UsersRepositoryModuleChooser;
import com.linagora.tmail.module.LinagoraTestJMAPServerModule;

public class CombinedIdentityJamesServerTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import com.google.inject.multibindings.Multibinder;

import com.linagora.tmail.OpenPaasModuleChooserConfiguration;
import com.linagora.tmail.UsersRepositoryModuleChooser;
import com.linagora.tmail.combined.identity.LdapExtension;
import com.linagora.tmail.combined.identity.UsersRepositoryClassProbe;
import com.linagora.tmail.combined.identity.UsersRepositoryModuleChooser;

public class DistributedServerWithOpenPaasRabbitMqConfiguredTest {
@RegisterExtension
Expand Down
1 change: 1 addition & 0 deletions tmail-backend/apps/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@
<modules>
<module>memory</module>
<module>distributed</module>
<module>postgres</module>
</modules>
</project>
10 changes: 10 additions & 0 deletions tmail-backend/apps/postgres/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Administration Operations
## Clean up data

To clean up some data on the specific TMail data structures, that will be redundant again after a long time, you can execute the SQL queries `clean_up_data_tmail.sql`.

The data that in:
- `label_change` table
- `ticket` table

Note that the `clean_up_data_tmail.sql` should be merged with [the SQL clean up script on Apache James](https://github.com/apache/james-project/blob/postgresql/server/apps/postgres-app/clean_up.sql) to clean data on James tables as well.
25 changes: 25 additions & 0 deletions tmail-backend/apps/postgres/clean_up_data_tmail.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
-- This is a script to delete old rows from some tables. One of the attempts to clean up the never-used data after a long time.

DO
$$
DECLARE
days_to_keep INTEGER;
ticket_ttl_in_seconds INTEGER;
BEGIN
-- Set the number of days dynamically
days_to_keep := 60;

-- Delete rows older than the specified number of days in the `label_change` table
DELETE
FROM label_change
WHERE created_date < current_timestamp - interval '1 day' * days_to_keep;

-- Set TTL in seconds for the Ticket table cleanup
ticket_ttl_in_seconds := 120;

-- Delete rows older than the specified TTL in the `Ticket` table
DELETE
FROM ticket
WHERE created_date < current_timestamp - interval '1 second' * ticket_ttl_in_seconds;
END
$$;
98 changes: 98 additions & 0 deletions tmail-backend/apps/postgres/docker-compose-distributed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
version: '3.4'

x-common-environment: &common-environment
POSTGRES_DB: tmail
POSTGRES_USER: tmail
POSTGRES_PASSWORD: secret1

services:

tmail-backend:
depends_on:
postgres:
condition: service_started
opensearch:
condition: service_healthy
s3:
condition: service_started
rabbitmq:
condition: service_started
image: linagora/tmail-backend-postgresql-experimental
container_name: tmail-backend
hostname: tmail-backend.local
command:
- --generate-keystore
environment:
<<: *common-environment
OBJECT_STORAGE_ENDPOINT: http://s3.docker.test:8000/
OBJECT_STORAGE_REGION: us-east-1
OBJECT_STORAGE_ACCESS_KEY_ID: accessKey1
OBJECT_STORAGE_SECRET_KEY: secretKey1

ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
volumes:
- ./sample-configuration/distributed/opensearch.properties:/root/conf/opensearch.properties
- ./sample-configuration/distributed/blob.properties:/root/conf/blob.properties
- ./sample-configuration/distributed/rabbitmq.properties:/root/conf/rabbitmq.properties
- ${RSA_PUBLICKEY_PATH}:/root/conf/jwt_publickey # Replace with absolute path to your RSA public key
- ${RSA_PRIVATEKEY_PATH}:/root/conf/jwt_privatekey # Replace with absolute path to your RSA private key
# Key generation:
# openssl genrsa -out jwt_privatekey 4096
# openssl rsa -in jwt_privatekey -pubout > jwt_publickey
networks:
- tmail

opensearch:
image: opensearchproject/opensearch:2.8.0
container_name: opensearch
healthcheck:
test: ["CMD", "curl", "-s", "http://opensearch:9200"]
interval: 3s
timeout: 10s
retries: 5
environment:
- discovery.type=single-node
- DISABLE_INSTALL_DEMO_CONFIG=true
- DISABLE_SECURITY_PLUGIN=true
networks:
- tmail

postgres:
image: postgres:16.1
container_name: postgres
ports:
- "5432:5432"
environment:
<<: *common-environment
networks:
- tmail

s3:
image: registry.scality.com/cloudserver/cloudserver:8.7.25
container_name: s3.docker.test
environment:
SCALITY_ACCESS_KEY_ID: accessKey1
SCALITY_SECRET_ACCESS_KEY: secretKey1
LOG_LEVEL: trace
REMOTE_MANAGEMENT_DISABLE: 1
networks:
- tmail

rabbitmq:
image: rabbitmq:3.12.1-management
ports:
- "5672:5672"
- "15672:15672"
networks:
- tmail

networks:
tmail:
41 changes: 41 additions & 0 deletions tmail-backend/apps/postgres/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
version: '3.4'

x-common-environment: &common-environment
POSTGRES_DB: tmail
POSTGRES_USER: tmail
POSTGRES_PASSWORD: secret1

services:

tmail-backend:
depends_on:
- postgres
image: linagora/tmail-backend-postgresql-experimental
container_name: tmail-backend
hostname: tmail-backend.local
command:
- --generate-keystore
volumes:
- ${RSA_PUBLICKEY_PATH}:/root/conf/jwt_publickey # Replace with absolute path to your RSA public key
- ${RSA_PRIVATEKEY_PATH}:/root/conf/jwt_privatekey # Replace with absolute path to your RSA private key
# Key generation:
# openssl genrsa -out jwt_privatekey 4096
# openssl rsa -in jwt_privatekey -pubout > jwt_publickey
ports:
- "80:80"
- "25:25"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "8000:8000"
environment:
<<: *common-environment

postgres:
image: postgres:16.1
ports:
- "5432:5432"
environment:
<<: *common-environment
Loading