fix: self hosting
This commit is contained in:
parent
9e8a9dafb8
commit
d06839bb96
@ -3,6 +3,11 @@ port: 7880
|
|||||||
keys:
|
keys:
|
||||||
'<replace-with-api-key>': '<replace-with-api-secret>'
|
'<replace-with-api-key>': '<replace-with-api-secret>'
|
||||||
|
|
||||||
|
webhook:
|
||||||
|
api_key: '<your_livekit_api_key>'
|
||||||
|
urls:
|
||||||
|
- https://your.domain/api/webhooks/livekit
|
||||||
|
|
||||||
rtc:
|
rtc:
|
||||||
tcp_port: 7881
|
tcp_port: 7881
|
||||||
|
|
||||||
|
|||||||
@ -250,7 +250,7 @@ export default () => {
|
|||||||
|
|
||||||
output: {
|
output: {
|
||||||
path: DIST_DIR,
|
path: DIST_DIR,
|
||||||
publicPath: isProduction ? `${CDN_ENDPOINT}/` : '/',
|
publicPath: '/',
|
||||||
workerPublicPath: '/',
|
workerPublicPath: '/',
|
||||||
filename: (pathData) => {
|
filename: (pathData) => {
|
||||||
if (pathData.chunk?.name === 'sw') {
|
if (pathData.chunk?.name === 'sw') {
|
||||||
|
|||||||
@ -93,6 +93,22 @@ get_first_viewable_text_channel(State) ->
|
|||||||
EveryoneChannelId = find_everyone_viewable_text_channel(Channels, State),
|
EveryoneChannelId = find_everyone_viewable_text_channel(Channels, State),
|
||||||
{reply, #{channel_id => EveryoneChannelId}, State}.
|
{reply, #{channel_id => EveryoneChannelId}, State}.
|
||||||
|
|
||||||
|
-spec fetch_voice_states_from_server(guild_state()) -> [map()].
|
||||||
|
fetch_voice_states_from_server(State) ->
|
||||||
|
case maps:get(voice_server_pid, State, undefined) of
|
||||||
|
Pid when is_pid(Pid) ->
|
||||||
|
try gen_server:call(Pid, {get_voice_states_list}, 5000) of
|
||||||
|
VoiceStates when is_list(VoiceStates) -> VoiceStates;
|
||||||
|
_ -> []
|
||||||
|
catch
|
||||||
|
exit:{timeout, _} -> [];
|
||||||
|
exit:{noproc, _} -> [];
|
||||||
|
exit:{normal, _} -> []
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
|
guild_voice:get_voice_states_list(State)
|
||||||
|
end.
|
||||||
|
|
||||||
-spec get_guild_state(user_id(), guild_state()) -> map().
|
-spec get_guild_state(user_id(), guild_state()) -> map().
|
||||||
get_guild_state(UserId, State) ->
|
get_guild_state(UserId, State) ->
|
||||||
Data = guild_data_map(State),
|
Data = guild_data_map(State),
|
||||||
@ -107,7 +123,7 @@ get_guild_state(UserId, State) ->
|
|||||||
undefined -> [];
|
undefined -> [];
|
||||||
M -> [M]
|
M -> [M]
|
||||||
end,
|
end,
|
||||||
VoiceStates = guild_voice:get_voice_states_list(State),
|
VoiceStates = fetch_voice_states_from_server(State),
|
||||||
VoiceMembers = voice_members_from_states(VoiceStates, AllMembers),
|
VoiceMembers = voice_members_from_states(VoiceStates, AllMembers),
|
||||||
Members = merge_members(OwnMemberList, VoiceMembers),
|
Members = merge_members(OwnMemberList, VoiceMembers),
|
||||||
MemberCount = maps:get(member_count, State, length(AllMembers)),
|
MemberCount = maps:get(member_count, State, length(AllMembers)),
|
||||||
|
|||||||
@ -16,6 +16,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
g++ \
|
g++ \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
|
||||||
|
--default-toolchain stable --profile minimal \
|
||||||
|
&& rustup target add wasm32-unknown-unknown \
|
||||||
|
&& cargo install wasm-pack
|
||||||
|
|
||||||
FROM base AS deps
|
FROM base AS deps
|
||||||
|
|
||||||
COPY pnpm-workspace.yaml ./
|
COPY pnpm-workspace.yaml ./
|
||||||
@ -55,6 +60,13 @@ COPY packages/worker/package.json ./packages/worker/
|
|||||||
COPY packages/http_client/package.json ./packages/http_client/
|
COPY packages/http_client/package.json ./packages/http_client/
|
||||||
COPY packages/schema/package.json ./packages/schema/
|
COPY packages/schema/package.json ./packages/schema/
|
||||||
COPY fluxer_server/package.json ./fluxer_server/
|
COPY fluxer_server/package.json ./fluxer_server/
|
||||||
|
|
||||||
|
for pkg in date_utils elasticsearch_search geo_utils geoip i18n kv_client limits \
|
||||||
|
list_utils locale markdown_parser media_proxy_utils meilisearch_search \
|
||||||
|
mime_utils nats number_utils openapi time; do
|
||||||
|
COPY packages/${pkg}/package.json ./packages/${pkg}/
|
||||||
|
done
|
||||||
|
|
||||||
COPY fluxer_app/package.json ./fluxer_app/
|
COPY fluxer_app/package.json ./fluxer_app/
|
||||||
|
|
||||||
RUN pnpm install --frozen-lockfile
|
RUN pnpm install --frozen-lockfile
|
||||||
@ -73,6 +85,8 @@ COPY fluxer_server/ ./fluxer_server/
|
|||||||
|
|
||||||
RUN pnpm --filter @fluxer/marketing build:css
|
RUN pnpm --filter @fluxer/marketing build:css
|
||||||
|
|
||||||
|
RUN pnpm --filter admin build:css
|
||||||
|
|
||||||
COPY fluxer_media_proxy/data/model.onnx ./fluxer_media_proxy/data/model.onnx
|
COPY fluxer_media_proxy/data/model.onnx ./fluxer_media_proxy/data/model.onnx
|
||||||
|
|
||||||
RUN cd fluxer_server && pnpm typecheck
|
RUN cd fluxer_server && pnpm typecheck
|
||||||
@ -106,6 +120,9 @@ RUN LOGGER_LEVEL=${LOGGER_LEVEL} envsubst '${LOGGER_LEVEL}' < fluxer_gateway/con
|
|||||||
(cd fluxer_gateway && rebar3 as prod release)
|
(cd fluxer_gateway && rebar3 as prod release)
|
||||||
|
|
||||||
FROM deps AS app-build
|
FROM deps AS app-build
|
||||||
|
ARG FLUXER_BUILD_CONFIG="{}"
|
||||||
|
RUN echo "$FLUXER_BUILD_CONFIG" > /tmp/fluxer-build-config.json
|
||||||
|
ENV FLUXER_CONFIG=/tmp/fluxer-build-config.json
|
||||||
|
|
||||||
COPY tsconfigs /usr/src/app/tsconfigs
|
COPY tsconfigs /usr/src/app/tsconfigs
|
||||||
|
|
||||||
@ -196,4 +213,4 @@ ENV RELEASE_CHANNEL=${RELEASE_CHANNEL}
|
|||||||
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
|
||||||
CMD curl -f http://localhost:8080/_health || exit 1
|
CMD curl -f http://localhost:8080/_health || exit 1
|
||||||
|
|
||||||
ENTRYPOINT ["pnpm", "start"]
|
ENTRYPOINT ["pnpm", "--filter", "fluxer_server", "start"]
|
||||||
|
|||||||
@ -277,6 +277,7 @@ function createAppServerInitializer(context: ServiceInitializationContext): Serv
|
|||||||
|
|
||||||
const publicUrlHost = new URL(requireValue(config.endpoints.app, 'endpoints.app')).origin;
|
const publicUrlHost = new URL(requireValue(config.endpoints.app, 'endpoints.app')).origin;
|
||||||
const mediaUrlHost = new URL(requireValue(config.endpoints.media, 'endpoints.media')).origin;
|
const mediaUrlHost = new URL(requireValue(config.endpoints.media, 'endpoints.media')).origin;
|
||||||
|
const staticCdnHost = new URL(requireValue(config.endpoints.static_cdn, 'endpoints.static_cdn')).origin;
|
||||||
|
|
||||||
const appServer = createAppServer({
|
const appServer = createAppServer({
|
||||||
staticDir,
|
staticDir,
|
||||||
@ -289,10 +290,10 @@ function createAppServerInitializer(context: ServiceInitializationContext): Serv
|
|||||||
cspDirectives: {
|
cspDirectives: {
|
||||||
defaultSrc: ["'self'"],
|
defaultSrc: ["'self'"],
|
||||||
scriptSrc: ["'self'", "'unsafe-inline'"],
|
scriptSrc: ["'self'", "'unsafe-inline'"],
|
||||||
styleSrc: ["'self'", "'unsafe-inline'"],
|
styleSrc: ["'self'", "'unsafe-inline'", staticCdnHost],
|
||||||
imgSrc: ["'self'", 'data:', 'blob:', publicUrlHost, mediaUrlHost],
|
imgSrc: ["'self'", 'data:', 'blob:', publicUrlHost, mediaUrlHost, staticCdnHost],
|
||||||
connectSrc: ["'self'", 'wss:', 'ws:', publicUrlHost],
|
connectSrc: ["'self'", 'wss:', 'ws:', publicUrlHost],
|
||||||
fontSrc: ["'self'"],
|
fontSrc: ["'self'", staticCdnHost],
|
||||||
mediaSrc: ["'self'", 'blob:', mediaUrlHost],
|
mediaSrc: ["'self'", 'blob:', mediaUrlHost],
|
||||||
frameSrc: ["'none'"],
|
frameSrc: ["'none'"],
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user