diff --git a/Makefile b/Makefile index 391e6369..5a62ef02 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,33 @@ demo: bin/configure.sh config.demo bin/quickstart.sh src/artisan user:assign-sku john@kolab.org beta prod: env KOLAB_GIT_REF=dev/mollekopf HOST=kolab.local ADMIN_PASSWORD="simple123" bin/configure.sh config.prod env ADMIN_PASSWORD="simple123" bin/deploy.sh +dev: + env KOLAB_GIT_REF=dev/mollekopf HOST=kolab.local ADMIN_PASSWORD="simple123" bin/configure.sh config.docker-dev + env ADMIN_PASSWORD="simple123" bin/deploy.sh quickstart: bin/quickstart.sh deploy: env ADMIN_PASSWORD="simple123" bin/deploy.sh octane: src/artisan octane:start --host=(grep OCTANE_HTTP_HOST .env | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") httprestart: src/artisan octane:stop || true src/artisan octane:start --watch --host=$$(grep OCTANE_HTTP_HOST .env | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") taillog: tail -f $$(ls src/storage/logs/laravel-* | sort | tail -1) lint: src/phpcs shell: docker exec -ti -w /src/kolabsrc/ kolab-webapp /bin/bash db: docker exec -ti kolab-mariadb /bin/bash -c "mysql -h 127.0.0.1 -u root --password=$$(grep DB_ROOT_PASSWORD .env | tail -n1 | sed "s/DB_ROOT_PASSWORD=//") kolabdev" refresh-meet: docker exec -ti kolab-meet /bin/bash -c "/bin/cp -rf /src/meet/* /src/meetsrc/" refresh-webapp: docker exec -ti kolab-webapp /update.sh ci-shell: cd ci && make shell diff --git a/README.md b/README.md index 5eeddf16..955a0e10 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,50 @@ ## Quickstart Instructions to try it out * Make sure you have docker and docker-compose available. * Change to the base directory of this repository. * Run 'HOST=kolab.local ADMIN_PASSWORD="simple123" bin/configure.sh config.prod' to configure this deployment. * Run 'env ADMIN_PASSWORD="simple123" bin/deploy.sh' to start the deployment. * Add an /etc/hosts entry "127.0.0.1 kolab.local" * navigate to https://kolab.local * login as "admin@kolab.local" with password "simple123" (or whatever you have set), and create your users. # Customization To customize the installation, copy config.prod and adjust to your liking. You can then install the configuration using 'bin/configure.sh $YOURCONFIG', and afterwards 'bin/deploy.sh' again. Please note that bin/deploy.sh will remove any existing data. +## Alternative configurations + +Everything but config.prod is for development or demo purposes: +* config.dev: Run only dependencies in docker with ports exposed, and expect kolab4 to be run locally. +* config.docker-dev: A development environment with everything running in docker. Includes a cyrus-murder. +* config.demo: A docker environment with demo data included. +* config.prod: A docker environment with just an admin account prepared. A starting point for a production environment. + + # Use the ansible setup The ansible/ directory contains setup scripts to setup a fresh Fedora system with a kolab deployment. Modify the Makefile with the required variables and then execute `make setup`. This will configure the remote system and execute the above steps. ### Update To update the containers without removing the data: * git pull * Run "bin/update.sh" ### Backup / Restore The "bin/backup.sh" script will stop all containers, snapshot the volumes to the backup/ directory, and restart the containers. "bin/restore.sh" will stop all containers, restore the volumes from tarballs in the backup/ directory, and restart the containers. ### Requirements * docker * openssl diff --git a/bin/quickstart.sh b/bin/quickstart.sh index 57eb64b5..e16fbad3 100755 --- a/bin/quickstart.sh +++ b/bin/quickstart.sh @@ -1,136 +1,142 @@ #!/bin/bash set -e function die() { echo "$1" exit 1 } rpm -qv docker-compose >/dev/null 2>&1 || \ test ! -z "$(which docker-compose 2>/dev/null)" || \ die "Is docker-compose installed?" test ! -z "$(grep 'systemd.unified_cgroup_hierarchy=0' /proc/cmdline)" || \ die "systemd containers only work with cgroupv1 (use 'grubby --update-kernel=ALL --args=\"systemd.unified_cgroup_hierarchy=0\"' and a reboot to fix)" base_dir=$(dirname $(dirname $0)) export DOCKER_BUILDKIT=0 docker-compose down -t 1 --remove-orphans docker volume rm kolab_mariadb || : docker volume rm kolab_imap || : docker volume rm kolab_ldap || : docker volume rm kolab_minio || : # We can't use the following artisan commands because it will just block if redis is unavailable: # src/artisan octane:stop >/dev/null 2>&1 || : # src/artisan horizon:terminate >/dev/null 2>&1 || : # we therefore just kill all artisan processes running. pkill -9 -f artisan || : pkill -9 -f swoole || : bin/regen-certs - -docker-compose -f docker-compose.yml -f docker-compose.imap-murder.yml build imap-frontend imap-backend imap-mupdate + +# Build the murder setup if configured +if grep -q "imap-frontend" docker-compose.override.yml; then + docker-compose build imap-frontend imap-backend imap-mupdate +fi + docker-compose build coturn ldap kolab mariadb meet pdns proxy redis haproxy roundcube -docker-compose -f docker-compose.yml -f docker-compose.imap-murder.yml up -d imap-frontend imap-backend imap-mupdate +if grep -q "imap-frontend" docker-compose.override.yml; then + docker-compose up -d imap-frontend imap-backend imap-mupdate +fi docker-compose up -d coturn ldap kolab mariadb meet pdns redis roundcube minio # Workaround until we have docker-compose --wait (https://github.com/docker/compose/pull/8777) function wait_for_container { container_id="$1" container_name="$(docker inspect "${container_id}" --format '{{ .Name }}')" echo "Waiting for container: ${container_name} [${container_id}]" waiting_done="false" while [[ "${waiting_done}" != "true" ]]; do container_state="$(docker inspect "${container_id}" --format '{{ .State.Status }}')" if [[ "${container_state}" == "running" ]]; then health_status="$(docker inspect "${container_id}" --format '{{ .State.Health.Status }}')" echo "${container_name}: container_state=${container_state}, health_status=${health_status}" if [[ ${health_status} == "healthy" ]]; then waiting_done="true" fi else echo "${container_name}: container_state=${container_state}" waiting_done="true" fi sleep 1; done; } if [ "$1" == "--nodev" ]; then echo "starting everything in containers" docker-compose -f docker-compose.build.yml build swoole docker-compose build webapp docker-compose up -d webapp wait_for_container 'kolab-webapp' docker-compose up --no-deps -d proxy haproxy exit 0 fi echo "Starting the development environment" rpm -qv composer >/dev/null 2>&1 || \ test ! -z "$(which composer 2>/dev/null)" || \ die "Is composer installed?" rpm -qv npm >/dev/null 2>&1 || \ test ! -z "$(which npm 2>/dev/null)" || \ die "Is npm installed?" rpm -qv php >/dev/null 2>&1 || \ test ! -z "$(which php 2>/dev/null)" || \ die "Is php installed?" rpm -qv php-ldap >/dev/null 2>&1 || \ test ! -z "$(php --ini | grep ldap)" || \ die "Is php-ldap installed?" rpm -qv php-mysqlnd >/dev/null 2>&1 || \ test ! -z "$(php --ini | grep mysql)" || \ die "Is php-mysqlnd installed?" test ! -z "$(php --modules | grep swoole)" || \ die "Is swoole installed?" # Ensure the containers we depend on are fully started wait_for_container 'kolab' wait_for_container 'kolab-redis' pushd ${base_dir}/src/ rm -rf vendor/ composer.lock php -dmemory_limit=-1 $(which composer) install npm install find bootstrap/cache/ -type f ! -name ".gitignore" -delete ./artisan key:generate ./artisan clear-compiled ./artisan cache:clear ./artisan horizon:install if rpm -qv chromium 2>/dev/null; then chver=$(rpmquery --queryformat="%{VERSION}" chromium | awk -F'.' '{print $1}') ./artisan dusk:chrome-driver ${chver} fi if [ ! -f 'resources/countries.php' ]; then ./artisan data:countries fi npm run dev popd pushd ${base_dir}/src/ rm -rf database/database.sqlite ./artisan db:ping --wait php -dmemory_limit=512M ./artisan migrate:refresh --seed ./artisan data:import || : nohup ./artisan octane:start --host=$(grep OCTANE_HTTP_HOST .env | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") > octane.out & nohup ./artisan horizon > horizon.out & popd docker-compose up --no-deps -d proxy haproxy diff --git a/config.docker-dev/docker-compose.override.yml b/config.docker-dev/docker-compose.override.yml index 65de8240..cf76dd87 100644 --- a/config.docker-dev/docker-compose.override.yml +++ b/config.docker-dev/docker-compose.override.yml @@ -1,207 +1,224 @@ version: '3' services: haproxy: depends_on: proxy: condition: service_healthy proxy: depends_on: kolab: condition: service_healthy webapp: condition: service_healthy build: context: ./docker/proxy/ args: APP_WEBSITE_DOMAIN: ${APP_WEBSITE_DOMAIN:?err} SSL_CERTIFICATE: ${PROXY_SSL_CERTIFICATE:?err} SSL_CERTIFICATE_KEY: ${PROXY_SSL_CERTIFICATE_KEY:?err} healthcheck: interval: 10s test: "kill -0 $$(cat /run/nginx.pid)" timeout: 5s retries: 30 container_name: kolab-proxy restart: on-failure hostname: proxy image: kolab-proxy extra_hosts: - "meet:${MEET_LISTENING_HOST}" networks: kolab: ipv4_address: 172.18.0.7 tmpfs: - /run - /tmp - /var/run - /var/tmp tty: true volumes: - ./docker/certs/:/etc/certs/:ro - /etc/letsencrypt/:/etc/letsencrypt/:ro ports: # - "80:80" - "443:443" - "465:465" - "587:587" - "143:143" - "993:993" imap-legacy: build: context: ./docker/imap-legacy/ args: IMAP_ADMIN_LOGIN: ${IMAP_ADMIN_LOGIN} IMAP_ADMIN_PASSWORD: ${IMAP_ADMIN_PASSWORD} container_name: imap-legacy privileged: true depends_on: pdns: condition: service_healthy # This makes docker's dns, resolve via pdns for this container. # Please note it does not affect /etc/resolv.conf dns: 172.18.0.11 image: imap-legacy extra_hosts: - "services.${APP_DOMAIN}:172.18.0.4" networks: kolab: ipv4_address: 172.18.0.19 ports: - "9993:993" - "9143:143" tmpfs: - /run - /tmp - /var/run - /var/tmp tty: true volumes: - /etc/letsencrypt/:/etc/letsencrypt/:ro - ./docker/certs/ca.cert:/etc/pki/tls/certs/ca.cert:ro - ./docker/certs/ca.cert:/etc/pki/ca-trust/source/anchors/ca.cert:ro - ./docker/certs/kolab.hosted.com.cert:${KOLAB_SSL_CERTIFICATE:?err} - ./docker/certs/kolab.hosted.com.chain.pem:${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?err} - ./docker/certs/kolab.hosted.com.key:${KOLAB_SSL_CERTIFICATE_KEY:?err} - ./docker/kolab/utils:/root/utils:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro imap-backend: build: context: ./docker/imap-backend/ args: IMAP_ADMIN_LOGIN: ${IMAP_ADMIN_LOGIN} IMAP_ADMIN_PASSWORD: ${IMAP_ADMIN_PASSWORD} container_name: imap-backend privileged: true depends_on: pdns: condition: service_healthy + imap-mupdate: + condition: service_healthy # This makes docker's dns, resolve via pdns for this container. # Please note it does not affect /etc/resolv.conf dns: 172.18.0.11 + healthcheck: + interval: 10s + test: "systemctl status cyrus-imapd || exit 1" + timeout: 5s + retries: 30 image: imap-backend extra_hosts: - "services.${APP_DOMAIN}:172.18.0.4" networks: kolab: ipv4_address: 172.18.0.20 ports: - "8993:993" - "8143:143" - "8080:80" - "8443:443" tmpfs: - /run - /tmp - /var/run - /var/tmp tty: true volumes: - /etc/letsencrypt/:/etc/letsencrypt/:ro - ./docker/certs/ca.cert:/etc/pki/tls/certs/ca.cert:ro - ./docker/certs/ca.cert:/etc/pki/ca-trust/source/anchors/ca.cert:ro - ./docker/certs/kolab.hosted.com.cert:${KOLAB_SSL_CERTIFICATE:?err} - ./docker/certs/kolab.hosted.com.chain.pem:${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?err} - ./docker/certs/kolab.hosted.com.key:${KOLAB_SSL_CERTIFICATE_KEY:?err} - ./docker/kolab/utils:/root/utils:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro - /home/mollekopf/src/cyrus-imapd:/root/cyrus-imapd imap-frontend: build: context: ./docker/imap-frontend/ args: IMAP_ADMIN_LOGIN: ${IMAP_ADMIN_LOGIN} IMAP_ADMIN_PASSWORD: ${IMAP_ADMIN_PASSWORD} container_name: imap-frontend privileged: true depends_on: pdns: condition: service_healthy # This makes docker's dns, resolve via pdns for this container. # Please note it does not affect /etc/resolv.conf dns: 172.18.0.11 + healthcheck: + interval: 10s + test: "systemctl status cyrus-imapd || exit 1" + timeout: 5s + retries: 30 image: imap-frontend extra_hosts: - "services.${APP_DOMAIN}:172.18.0.4" # Somehow necessary for caldav because it connects to the backend not via imap-backend but the full hostname imap.backend.${APP_DOMAIN} - "imap-backend.${APP_DOMAIN}:172.18.0.20" - "imap-frontend.${APP_DOMAIN}:172.18.0.21" networks: kolab: ipv4_address: 172.18.0.21 ports: - "7993:993" - "7143:143" - "7080:80" - "7443:443" tmpfs: - /run - /tmp - /var/run - /var/tmp tty: true volumes: - /etc/letsencrypt/:/etc/letsencrypt/:ro - ./docker/certs/ca.cert:/etc/pki/tls/certs/ca.cert:ro - ./docker/certs/ca.cert:/etc/pki/ca-trust/source/anchors/ca.cert:ro - ./docker/certs/kolab.hosted.com.cert:${KOLAB_SSL_CERTIFICATE:?err} - ./docker/certs/kolab.hosted.com.chain.pem:${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?err} - ./docker/certs/kolab.hosted.com.key:${KOLAB_SSL_CERTIFICATE_KEY:?err} - ./docker/kolab/utils:/root/utils:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro - /home/mollekopf/src/cyrus-imapd:/root/cyrus-imapd imap-mupdate: build: context: ./docker/imap-mupdate/ args: IMAP_ADMIN_LOGIN: ${IMAP_ADMIN_LOGIN} IMAP_ADMIN_PASSWORD: ${IMAP_ADMIN_PASSWORD} container_name: imap-mupdate privileged: true depends_on: pdns: condition: service_healthy # This makes docker's dns, resolve via pdns for this container. # Please note it does not affect /etc/resolv.conf dns: 172.18.0.11 + healthcheck: + interval: 10s + test: "systemctl status cyrus-imapd || exit 1" + timeout: 5s + retries: 30 image: imap-mupdate extra_hosts: - "services.${APP_DOMAIN}:172.18.0.4" networks: kolab: ipv4_address: 172.18.0.22 tmpfs: - /run - /tmp - /var/run - /var/tmp tty: true volumes: - /etc/letsencrypt/:/etc/letsencrypt/:ro - ./docker/certs/ca.cert:/etc/pki/tls/certs/ca.cert:ro - ./docker/certs/ca.cert:/etc/pki/ca-trust/source/anchors/ca.cert:ro - ./docker/certs/kolab.hosted.com.cert:${KOLAB_SSL_CERTIFICATE:?err} - ./docker/certs/kolab.hosted.com.chain.pem:${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?err} - ./docker/certs/kolab.hosted.com.key:${KOLAB_SSL_CERTIFICATE_KEY:?err} - ./docker/kolab/utils:/root/utils:ro - /sys/fs/cgroup:/sys/fs/cgroup:ro - /home/mollekopf/src/cyrus-imapd:/root/cyrus-imapd diff --git a/config.docker-dev/src/.env b/config.docker-dev/src/.env index a5e1d7fe..c5650560 100644 --- a/config.docker-dev/src/.env +++ b/config.docker-dev/src/.env @@ -1,201 +1,174 @@ APP_NAME=Kolab APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=https://{{ host }} APP_PASSPHRASE=simple123 APP_PUBLIC_URL=https://{{ host }} APP_DOMAIN={{ host }} APP_WEBSITE_DOMAIN={{ host }} APP_THEME=default APP_TENANT_ID=5 APP_LOCALE=en APP_LOCALES= APP_WITH_ADMIN=1 APP_WITH_RESELLER=1 APP_WITH_SERVICES=1 APP_WITH_FILES=1 APP_LDAP=1 APP_IMAP=1 APP_HEADER_CSP="connect-src 'self'; child-src 'self'; font-src 'self'; form-action 'self' data:; frame-ancestors 'self'; img-src blob: data: 'self' *; media-src 'self'; object-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-eval' 'unsafe-inline'; default-src 'self';" APP_HEADER_XFO=sameorigin SIGNUP_LIMIT_EMAIL=0 SIGNUP_LIMIT_IP=0 ASSET_URL=https://{{ host }} WEBMAIL_URL=/roundcubemail/ SUPPORT_URL=/support SUPPORT_EMAIL=support@example.com LOG_CHANNEL=stdout LOG_SLOW_REQUESTS=5 LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_DATABASE=kolabdev DB_HOST=mariadb DB_PASSWORD=kolab DB_ROOT_PASSWORD=Welcome2KolabSystems DB_PORT=3306 DB_USERNAME=kolabdev BROADCAST_DRIVER=redis CACHE_DRIVER=redis QUEUE_CONNECTION=redis SESSION_DRIVER=file SESSION_LIFETIME=120 OPENEXCHANGERATES_API_KEY="from openexchangerates.org" MFA_DSN=mysql://roundcube:kolab@mariadb/roundcube MFA_TOTP_DIGITS=6 MFA_TOTP_INTERVAL=30 MFA_TOTP_DIGEST=sha1 IMAP_URI=ssl://imap-frontend:993 IMAP_HOST=172.18.0.21 IMAP_PORT=143 IMAP_ADMIN_LOGIN=cyrus-admin IMAP_ADMIN_PASSWORD=Welcome2KolabSystems IMAP_VERIFY_HOST=false IMAP_VERIFY_PEER=false LDAP_BASE_DN="dc=mgmt,dc=com" LDAP_DOMAIN_BASE_DN="ou=Domains,dc=mgmt,dc=com" LDAP_HOSTS=ldap LDAP_PORT=389 LDAP_SERVICE_BIND_DN="uid=kolab-service,ou=Special Users,dc=mgmt,dc=com" LDAP_SERVICE_BIND_PW="Welcome2KolabSystems" LDAP_USE_SSL=false LDAP_USE_TLS=false # Administrative LDAP_ADMIN_BIND_DN="cn=Directory Manager" LDAP_ADMIN_BIND_PW="Welcome2KolabSystems" LDAP_ADMIN_ROOT_DN="dc=mgmt,dc=com" # Hosted (public registration) LDAP_HOSTED_BIND_DN="uid=hosted-kolab-service,ou=Special Users,dc=mgmt,dc=com" LDAP_HOSTED_BIND_PW="Welcome2KolabSystems" LDAP_HOSTED_ROOT_DN="dc=hosted,dc=com" COTURN_PUBLIC_IP='{{ public_ip }}' COTURN_STATIC_SECRET="Welcome2KolabSystems" MEET_WEBHOOK_TOKEN=Welcome2KolabSystems MEET_SERVER_TOKEN=Welcome2KolabSystems MEET_SERVER_URLS=https://{{ host }}/meetmedia/api/ MEET_SERVER_VERIFY_TLS=false MEET_WEBRTC_LISTEN_IP='172.18.0.1' MEET_PUBLIC_DOMAIN={{ host }} MEET_TURN_SERVER='turn:172.18.0.1:3478' MEET_LISTENING_HOST=172.18.0.1 - PGP_ENABLE=true PGP_BINARY=/usr/bin/gpg PGP_AGENT=/usr/bin/gpg-agent PGP_GPGCONF=/usr/bin/gpgconf PGP_LENGTH= # Set these to IP addresses you serve WOAT with. # Have the domain owner point _woat. NS RRs refer to ns0{1,2}. WOAT_NS1=ns01.domain.tld WOAT_NS2=ns02.domain.tld REDIS_HOST=redis REDIS_PASSWORD=null REDIS_PORT=6379 OCTANE_HTTP_HOST=0.0.0.0 SWOOLE_PACKAGE_MAX_LENGTH=10485760 PAYMENT_PROVIDER= -MOLLIE_KEY= -STRIPE_KEY= -STRIPE_PUBLIC_KEY= -STRIPE_WEBHOOK_SECRET= MAIL_DRIVER=log MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="noreply@example.com" MAIL_FROM_NAME="Example.com" MAIL_REPLYTO_ADDRESS="replyto@example.com" MAIL_REPLYTO_NAME=null DNS_TTL=3600 DNS_SPF="v=spf1 mx -all" DNS_STATIC="%s. MX 10 ext-mx01.mykolab.com." DNS_COPY_FROM=null -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= -AWS_USE_PATH_STYLE_ENDPOINT=false - -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_APP_CLUSTER=mt1 - -MIX_ASSET_PATH='/' -MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" - -PASSWORD_POLICY= - COMPANY_NAME=kolab.org -COMPANY_ADDRESS= -COMPANY_DETAILS= -COMPANY_EMAIL= -COMPANY_LOGO= -COMPANY_FOOTER= VAT_COUNTRIES=CH,LI VAT_RATE=7.7 KB_ACCOUNT_DELETE= KB_ACCOUNT_SUSPENDED= KB_PAYMENT_SYSTEM= KOLAB_SSL_CERTIFICATE=/etc/pki/tls/certs/kolab.hosted.com.cert KOLAB_SSL_CERTIFICATE_FULLCHAIN=/etc/pki/tls/certs/kolab.hosted.com.chain.pem KOLAB_SSL_CERTIFICATE_KEY=/etc/pki/tls/certs/kolab.hosted.com.key PROXY_SSL_CERTIFICATE=/etc/certs/imap.hosted.com.cert PROXY_SSL_CERTIFICATE_KEY=/etc/certs/imap.hosted.com.key APP_KEY=base64:FG6ECzyAMSmyX+eYwO/FW3bwnarbKkBhqtO65vlMb1E= COTURN_STATIC_SECRET=uzYguvIl9tpZFMuQOE78DpOi6Jc7VFSD0UAnvgMsg5n4e74MgIf6vQvbc6LWzZjz MOLLIE_KEY="from mollie" STRIPE_KEY="from stripe" STRIPE_PUBLIC_KEY="from stripe" STRIPE_WEBHOOK_SECRET="from stripe" OX_API_KEY="from openexchange" FIREBASE_API_KEY="from firebase" #Generated by php artisan passport:client --password, but can be left hardcoded (the seeder will pick it up) PASSPORT_PROXY_OAUTH_CLIENT_ID=942edef5-3dbd-4a14-8e3e-d5d59b727bee PASSPORT_PROXY_OAUTH_CLIENT_SECRET=L6L0n56ecvjjK0cJMjeeV1pPAeffUBO0YSSH63wf MINIO_USER=minio MINIO_PASSWORD=W3lcom32@ph3lia MINIO_BUCKET=kolab FILESYSTEM_DISK=minio diff --git a/config.docker-dev/src/database b/config.docker-dev/src/database index 28204f1b..0b1f88e7 120000 --- a/config.docker-dev/src/database +++ b/config.docker-dev/src/database @@ -1 +1 @@ -../../config.demo/src/database \ No newline at end of file +../../config.prod/src/database/ \ No newline at end of file