diff --git a/bin/deploy.sh b/bin/deploy.sh index b0e7cfa0..5dcf3b2e 100755 --- a/bin/deploy.sh +++ b/bin/deploy.sh @@ -1,6 +1,6 @@ #!/bin/bash bin/quickstart.sh --nodev if [[ -n $ADMIN_PASSWORD ]]; then DOMAIN=$(grep APP_DOMAIN .env | tail -n1 | sed "s/APP_DOMAIN=//") - docker exec -w /src/kolabsrc/ kolab-webapp ./artisan user:password "admin@$DOMAIN" "$ADMIN_PASSWORD" + docker exec kolab-webapp ./artisan user:password "admin@$DOMAIN" "$ADMIN_PASSWORD" fi diff --git a/docker-compose.yml b/docker-compose.yml index 7a59a399..4708b614 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,222 +1,222 @@ version: '3' services: coturn: build: context: ./docker/coturn/ container_name: kolab-coturn healthcheck: interval: 10s test: "kill -0 $$(cat /tmp/turnserver.pid)" timeout: 5s retries: 30 environment: - TURN_PUBLIC_IP=${COTURN_PUBLIC_IP} - TURN_LISTEN_PORT=3478 - TURN_STATIC_SECRET=${COTURN_STATIC_SECRET} hostname: sturn.mgmt.com image: kolab-coturn network_mode: host restart: on-failure roundcube: build: context: ./docker/roundcube/ container_name: kolab-roundcube hostname: roundcube.hosted.com restart: on-failure depends_on: mariadb: condition: service_healthy pdns: condition: service_healthy environment: - APP_DOMAIN=${APP_DOMAIN} - DB_HOST=mariadb - DB_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - DB_RC_DATABASE=roundcube - DB_RC_USERNAME=roundcube - DB_RC_PASSWORD=${DB_PASSWORD:?"DB_PASSWORD is missing"} - IMAP_HOST=imap - IMAP_PORT=11143 - IMAP_ADMIN_LOGIN=${IMAP_ADMIN_LOGIN} - IMAP_ADMIN_PASSWORD=${IMAP_ADMIN_PASSWORD} - MAIL_HOST=postfix - MAIL_PORT=10587 healthcheck: interval: 10s test: "kill -0 $$(cat /run/httpd/httpd.pid)" timeout: 5s retries: 30 # 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: roundcube networks: kolab: ipv4_address: 172.18.0.9 ports: - "8080:8080" tmpfs: - /tmp - /var/tmp volumes: - ./ext/:/src.orig/:ro mariadb: container_name: kolab-mariadb restart: on-failure environment: - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - TZ="+02:00" - DB_HKCCP_DATABASE=${DB_DATABASE} - DB_HKCCP_USERNAME=${DB_USERNAME} - DB_HKCCP_PASSWORD=${DB_PASSWORD} - DB_KOLAB_DATABASE=kolab - DB_KOLAB_USERNAME=kolab - DB_KOLAB_PASSWORD=${DB_PASSWORD:?"DB_PASSWORD is missing"} healthcheck: interval: 10s test: test -e /var/run/mysqld/mysqld.sock timeout: 5s retries: 30 image: mariadb:10.9 networks: kolab: ipv4_address: 172.18.0.3 volumes: - ./docker/mariadb/mysql-init/:/docker-entrypoint-initdb.d/ - ./docker/mariadb/mysql-update/:/always-initdb.d/ - mariadb:/var/lib/mysql pdns: build: context: ./docker/pdns/ args: DB_HOST: mariadb DB_DATABASE: ${DB_DATABASE:?DB_DATABASE} DB_USERNAME: ${DB_USERNAME:?DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD} container_name: kolab-pdns restart: on-failure tty: true hostname: pdns depends_on: mariadb: condition: service_healthy healthcheck: interval: 10s test: "systemctl status pdns || exit 1" timeout: 5s retries: 30 image: kolab-pdns networks: kolab: ipv4_address: 172.18.0.11 tmpfs: - /run - /tmp - /var/run - /var/tmp volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro redis: build: context: ./docker/redis/ healthcheck: interval: 10s test: "redis-cli ping || exit 1" timeout: 5s retries: 30 container_name: kolab-redis restart: on-failure hostname: redis image: redis networks: - kolab volumes: - ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro webapp: build: context: ./docker/webapp/ args: GIT_REF: ${KOLAB_GIT_REF:-master} container_name: kolab-webapp restart: on-failure image: kolab-webapp healthcheck: interval: 10s - test: "/src/kolabsrc/artisan octane:status || exit 1" + test: "./artisan octane:status || exit 1" timeout: 5s retries: 30 start_period: 5m depends_on: redis: condition: service_healthy networks: kolab: ipv4_address: 172.18.0.4 volumes: - ./src:/src/kolabsrc.orig:ro ports: - "8000:8000" meet: build: context: ./docker/meet/ args: GIT_REF: ${KOLAB_GIT_REF:-master} container_name: kolab-meet restart: on-failure healthcheck: interval: 10s test: "curl --insecure -H 'X-AUTH-TOKEN: ${MEET_SERVER_TOKEN}' --fail https://${MEET_LISTENING_HOST}:12443/meetmedia/api/health || exit 1" timeout: 5s retries: 30 start_period: 5m environment: - WEBRTC_LISTEN_IP=${MEET_WEBRTC_LISTEN_IP:?err} - PUBLIC_DOMAIN=${MEET_PUBLIC_DOMAIN:?err} - LISTENING_HOST=${MEET_LISTENING_HOST:?err} - LISTENING_PORT=12443 - TURN_SERVER=${MEET_TURN_SERVER} - TURN_STATIC_SECRET=${COTURN_STATIC_SECRET} - AUTH_TOKEN=${MEET_SERVER_TOKEN:?err} - WEBHOOK_TOKEN=${MEET_WEBHOOK_TOKEN:?err} - WEBHOOK_URL=${APP_PUBLIC_URL:?err}/api/webhooks/meet - SSL_CERT=/etc/pki/tls/certs/meet.${APP_WEBSITE_DOMAIN:?err}.cert - SSL_KEY=/etc/pki/tls/private/meet.${APP_WEBSITE_DOMAIN:?err}.key network_mode: host container_name: kolab-meet image: kolab-meet volumes: - ./meet/server:/src/meet/:ro - ./docker/certs/meet.${APP_WEBSITE_DOMAIN}.cert:/etc/pki/tls/certs/meet.${APP_WEBSITE_DOMAIN}.cert - ./docker/certs/meet.${APP_WEBSITE_DOMAIN}.key:/etc/pki/tls/private/meet.${APP_WEBSITE_DOMAIN}.key minio: container_name: kolab-minio restart: on-failure healthcheck: interval: 10s test: "curl -f http://127.0.0.1:9000/minio/health/live || exit 1" timeout: 5s retries: 30 start_period: 5m environment: - MINIO_ROOT_USER=${MINIO_USER} - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD} image: minio/minio networks: kolab: ipv4_address: 172.18.0.14 ports: - "9000:9000" - "9001:9001" entrypoint: sh command: -c 'mkdir -p /data/${MINIO_BUCKET} && minio server /data --console-address ":9001"' volumes: - minio:/data networks: kolab: driver: bridge ipam: config: - subnet: "172.18.0.0/24" volumes: mariadb: minio: diff --git a/docker/webapp/build.sh b/docker/webapp/build.sh index 8c9fb150..5cd5e4d5 100755 --- a/docker/webapp/build.sh +++ b/docker/webapp/build.sh @@ -1,28 +1,30 @@ #!/bin/bash set -e set -x mkdir /src cd /src git clone --branch $GIT_REF https://git.kolab.org/source/kolab.git kolab pushd kolab git reset --hard $GIT_REF popd -cp -a kolab/src /src/kolabsrc -cd /src/kolabsrc +rmdir /opt/app-root/src +cp -a kolab/src /opt/app-root/src +cd /opt/app-root/src/ mkdir -p storage/framework/{sessions,views,cache} mkdir -p database/seeds php -dmemory_limit=-1 $(command -v composer) install npm -g install npm /usr/local/bin/npm install ./artisan storage:link ./artisan clear-compiled +./artisan horizon:install if [ ! -f 'resources/countries.php' ]; then ./artisan data:countries fi /usr/local/bin/npm run dev diff --git a/docker/webapp/init.sh b/docker/webapp/init.sh index 9cff60ce..991e52cb 100755 --- a/docker/webapp/init.sh +++ b/docker/webapp/init.sh @@ -1,41 +1,39 @@ #!/bin/bash set -e set -x rsync -av \ --exclude=vendor \ --exclude=composer.lock \ --exclude=node_modules \ --exclude=package-lock.json \ --exclude=public \ --exclude=storage \ --exclude=resources/build \ --exclude=bootstrap \ --exclude=.gitignore \ - /src/kolabsrc.orig/ /src/kolabsrc/ | tee /tmp/rsync.output -cd /src/kolabsrc + /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output + +cd /opt/app-root/src/ rm -rf storage/framework mkdir -p storage/framework/{sessions,views,cache} -php -dmemory_limit=-1 $(command -v composer) update -/usr/local/bin/npm install find bootstrap/cache/ -type f ! -name ".gitignore" -delete ./artisan clear-compiled ./artisan cache:clear -./artisan horizon:install + +php -dmemory_limit=-1 $(command -v composer) install if [ ! -f 'resources/countries.php' ]; then ./artisan data:countries fi -/usr/local/bin/npm run dev - ./artisan db:ping --wait php -dmemory_limit=512M ./artisan migrate --force if test "$( env APP_DEBUG=false ./artisan -n users | wc -l )" -lt "1"; then php -dmemory_limit=512M ./artisan db:seed fi ./artisan data:import || : nohup ./artisan horizon 2>&1 & ./artisan octane:start --host=$(grep OCTANE_HTTP_HOST .env | tail -n1 | sed "s/OCTANE_HTTP_HOST=//") diff --git a/docker/webapp/update.sh b/docker/webapp/update.sh index 8e03bf21..1f4e52b8 100755 --- a/docker/webapp/update.sh +++ b/docker/webapp/update.sh @@ -1,22 +1,32 @@ #!/bin/bash set -e set -x rsync -av \ --exclude=vendor \ --exclude=composer.lock \ --exclude=node_modules \ --exclude=package-lock.json \ --exclude=public \ --exclude=storage \ --exclude=resources/build \ --exclude=bootstrap \ --exclude=.gitignore \ - /src/kolabsrc.orig/ /src/kolabsrc/ | tee /tmp/rsync.output + /src/kolabsrc.orig/ /opt/app-root/src/ | tee /tmp/rsync.output + +cd /opt/app-root/src/ + +rm -rf storage/framework +mkdir -p storage/framework/{sessions,views,cache} + +find bootstrap/cache/ -type f ! -name ".gitignore" -delete +./artisan clear-compiled +./artisan cache:clear + +php -dmemory_limit=-1 $(command -v composer) update -cd /src/kolabsrc/ # Only run npm if something relevant was updated if grep -e "package.json" -e "resources" /tmp/rsync.output; then npm run dev fi ./artisan octane:reload