diff --git a/Dockerfile b/Dockerfile index c8a1a538..8e479e5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -67,6 +67,5 @@ ENV VENUELESS_COMMIT_SHA=${COMMIT} USER venueless VOLUME ["/etc/venueless", "/data"] EXPOSE 80 -ENTRYPOINT ["venueless"] CMD ["all"] diff --git a/docker-compose.yml b/docker-compose.yml index 66e278ad..937a2f6b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -77,4 +77,3 @@ networks: ipam: config: - subnet: 172.177.0.0/16 - diff --git a/prod/docker-compose.yml b/prod/docker-compose.yml new file mode 100644 index 00000000..fcc57a41 --- /dev/null +++ b/prod/docker-compose.yml @@ -0,0 +1,65 @@ +version: '3.4' + +services: + venueless: + image: eventyay/eventyay-video:development + container_name: venueless + ports: + - "8375:80" + environment: + - DJANGO_SETTINGS_MODULE=venueless.settings + - LC_ALL=C.UTF-8 + - IPYTHONDIR=/data/.ipython + - VENUELESS_COMMIT_SHA=${COMMIT} + - VENUELESS_DB_TYPE=postgresql + - VENUELESS_DB_NAME=eventyay_db + - VENUELESS_DB_USER=postgres_db_user_changeme + - VENUELESS_DB_PASS=postgres_db_pwd_changeme + - VENUELESS_DB_HOST=venueless-db + - VENUELESS_REDIS_URLS=redis://venueless-redis:6379/0,redis://venueless-redis1:6379/0 + - VENUELESS_DATA_DIR=/data + - VENUELESS_MEDIA_URL=http://localhost:8375/media/ + - VENUELESS_REDIS_USE_PUBSUB=true + depends_on: + - venueless-db + - venueless-redis + - venueless-redis1 + volumes: + - /etc/venueless:/etc/venueless + - /data:/data + entrypoint: ["/usr/local/bin/venueless"] + command: ["all"] + + venueless-webapp: + image: eventyay/eventyay-video:development + container_name: venueless-webapp + ports: + - "8002:8880" + environment: + - NODE_OPTIONS=--openssl-legacy-provider + entrypoint: [""] + command: ["npm", "start", "--", "--host", "0.0.0.0"] + working_dir: /venueless/webapp + + venueless-redis: + image: redis:latest + container_name: venueless-redis + + venueless-redis1: + image: redis:latest + container_name: venueless-redis1 + + venueless-db: + image: postgres:15 + container_name: venueless-db + volumes: + - postgres_data:/var/lib/postgresql/data/ + environment: + - POSTGRES_INITDB_ARGS=--auth-host=md5 + - POSTGRES_HOST_AUTH_METHOD=md5 + - POSTGRES_DB=eventyay_db + - POSTGRES_USER=postgres_db_user_changeme + - POSTGRES_PASSWORD=postgres_db_pwd_changeme + +volumes: + postgres_data: diff --git a/server/venueless/core/services/world.py b/server/venueless/core/services/world.py index 974e508b..51b063f9 100644 --- a/server/venueless/core/services/world.py +++ b/server/venueless/core/services/world.py @@ -17,8 +17,7 @@ from venueless.core.models.auth import ShortToken from venueless.core.models.room import ( RoomConfigSerializer, - RoomView, - approximate_view_number, + RoomView ) from venueless.core.permissions import Permission @@ -168,7 +167,8 @@ def get_room_config(room, permissions): } if hasattr(room, "current_roomviews"): - room_config["users"] = approximate_view_number(room.current_roomviews) + # set actual viewer count instead of approximate text + room_config["users"] = room.current_roomviews for module in room.module_config: module_config = copy.deepcopy(module) diff --git a/server/venueless/live/modules/room.py b/server/venueless/live/modules/room.py index 1457e9b0..768ab87c 100644 --- a/server/venueless/live/modules/room.py +++ b/server/venueless/live/modules/room.py @@ -14,7 +14,6 @@ from venueless.core.models.room import ( AnonymousInvite, RoomConfigSerializer, - approximate_view_number, ) from venueless.core.permissions import Permission from venueless.core.services.poll import get_polls, get_voted_polls @@ -184,20 +183,18 @@ async def _leave_room(self, room): async def _update_view_count(self, room, actual_view_count): async with aredis(f"room:approxcount:known:{room.pk}") as redis: - next_value = approximate_view_number(actual_view_count) prev_value = await redis.getset( - f"room:approxcount:known:{room.pk}", next_value + f"room:approxcount:known:{room.pk}", actual_view_count ) - if prev_value: - prev_value = prev_value.decode() - if prev_value != next_value: + if prev_value != actual_view_count: await redis.expire(f"room:approxcount:known:{room.pk}", 900) + # broadcast actual viewer count instead of approximate text await self.consumer.channel_layer.group_send( GROUP_WORLD.format(id=self.consumer.world.pk), { "type": "world.user_count_change", "room": str(room.pk), - "users": next_value, + "users": actual_view_count, }, ) diff --git a/server/venueless/settings.py b/server/venueless/settings.py index 61e9eb85..5a657cb2 100644 --- a/server/venueless/settings.py +++ b/server/venueless/settings.py @@ -299,6 +299,11 @@ ROOT_URLCONF = "venueless.urls" +CORS_ORIGIN_REGEX_WHITELIST = [ + r"^https?://(\w+\.)?eventyay\.com$", # Allow any subdomain of eventyay.com + r"^https?://video\.eventyay\.com(:\d+)?$", # Allow video.eventyay.com with any port + r"^https?://video-dev\.eventyay\.com(:\d+)?$", # Allow video-dev.eventyay.com with any port +] if DEBUG: CORS_ORIGIN_REGEX_WHITELIST = [ r"^http://localhost$", diff --git a/webapp/config.js b/webapp/config.js index 88976580..8d02ba7a 100644 --- a/webapp/config.js +++ b/webapp/config.js @@ -3,13 +3,15 @@ import cloneDeep from 'lodash/cloneDeep' let config if (ENV_DEVELOPMENT || !window.venueless) { const hostname = window.location.hostname + const wsProtocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; + const httpProtocol = window.location.protocol; config = { api: { - base: `http://${hostname}:8375/api/v1/worlds/sample/`, - socket: `ws://${hostname}:8375/ws/world/sample/`, - upload: `http://${hostname}:8375/storage/upload/`, - scheduleImport: `http://${hostname}:8375/storage/schedule_import/`, - feedback: `http://${hostname}:8375/_feedback/`, + base: `${httpProtocol}//${hostname}:8443/api/v1/worlds/sample/`, + socket: `${wsProtocol}://${hostname}:8443/ws/world/sample/`, + upload: `${httpProtocol}//${hostname}:8443/storage/upload/`, + scheduleImport: `${httpProtocol}//${hostname}:8443/storage/schedule_import/`, + feedback: `${httpProtocol}//${hostname}:8443/_feedback/`, }, defaultLocale: 'en', locales: ['en', 'de', 'pt_BR'], diff --git a/webapp/package-lock.json b/webapp/package-lock.json index d250e859..74e4f2f6 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -10939,6 +10939,14 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/iso-639-1": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", + "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", diff --git a/webapp/src/components/AudioTranslationDropdown.vue b/webapp/src/components/AudioTranslationDropdown.vue index 465864ae..581a9bfd 100644 --- a/webapp/src/components/AudioTranslationDropdown.vue +++ b/webapp/src/components/AudioTranslationDropdown.vue @@ -12,14 +12,14 @@ div.c-audio-translation