diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d298e04 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +**/Dockerfile +**/bin +**/obj \ No newline at end of file diff --git a/.env b/.env index dc1ac7d..fc75632 100644 --- a/.env +++ b/.env @@ -18,4 +18,16 @@ NOTESNOOK_SENDER_EMAIL= # optional NOTESNOOK_SENDER_NAME= # optional # MessageBird is used for 2FA via SMS -MESSAGEBIRD_ACCESS_KEY= \ No newline at end of file +MESSAGEBIRD_ACCESS_KEY= + +# Server discovery settings +# The domain must be without protocol +# e.g. example.org NOT http://example.org +NOTESNOOK_SERVER_DOMAIN= +IDENTITY_SERVER_DOMAIN= +SSE_SERVER_DOMAIN= + +# url of the web app instance you want to use +# e.g. http://localhost:3000 +# Note: no slashes at the end +NOTESNOOK_APP_HOST= \ No newline at end of file diff --git a/Notesnook.API/Dockerfile b/Notesnook.API/Dockerfile new file mode 100644 index 0000000..10b92db --- /dev/null +++ b/Notesnook.API/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /app + +# restore all project dependencies +COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/ +RUN dotnet restore /app/Streetwriters.Data/Streetwriters.Data.csproj --use-current-runtime + +COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/ +RUN dotnet restore /app/Streetwriters.Common/Streetwriters.Common.csproj --use-current-runtime + +COPY Notesnook.API/*.csproj ./Notesnook.API/ +RUN dotnet restore /app/Notesnook.API/Notesnook.API.csproj --use-current-runtime + +# copy everything else +COPY Streetwriters.Data/ ./Streetwriters.Data/ +COPY Streetwriters.Common/ ./Streetwriters.Common/ +COPY Notesnook.API/ ./Notesnook.API/ + +# build +WORKDIR /app/Notesnook.API/ +ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true" +RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore + +# final stage/image +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build /app/out . +ENTRYPOINT ["dotnet", "Notesnook.API.dll"] \ No newline at end of file diff --git a/Streetwriters.Identity/Dockerfile b/Streetwriters.Identity/Dockerfile new file mode 100644 index 0000000..5c8cf31 --- /dev/null +++ b/Streetwriters.Identity/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /app + +# restore all project dependencies +COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/ +RUN dotnet restore /app/Streetwriters.Data/Streetwriters.Data.csproj --use-current-runtime + +COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/ +RUN dotnet restore /app/Streetwriters.Common/Streetwriters.Common.csproj --use-current-runtime + +COPY Streetwriters.Identity/*.csproj ./Streetwriters.Identity/ +RUN dotnet restore /app/Streetwriters.Identity/Streetwriters.Identity.csproj --use-current-runtime + +# copy everything else +COPY Streetwriters.Data/ ./Streetwriters.Data/ +COPY Streetwriters.Common/ ./Streetwriters.Common/ +COPY Streetwriters.Identity/ ./Streetwriters.Identity/ + +# build +WORKDIR /app/Streetwriters.Identity/ +ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true" +RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore + +# final stage/image +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build /app/out . +ENTRYPOINT ["dotnet", "Streetwriters.Identity.dll"] \ No newline at end of file diff --git a/Streetwriters.Messenger/Dockerfile b/Streetwriters.Messenger/Dockerfile new file mode 100644 index 0000000..8f76128 --- /dev/null +++ b/Streetwriters.Messenger/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /app + +# restore all project dependencies +COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/ +RUN dotnet restore /app/Streetwriters.Data/Streetwriters.Data.csproj --use-current-runtime + +COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/ +RUN dotnet restore /app/Streetwriters.Common/Streetwriters.Common.csproj --use-current-runtime + +COPY Streetwriters.Messenger/*.csproj ./Streetwriters.Messenger/ +RUN dotnet restore /app/Streetwriters.Messenger/Streetwriters.Messenger.csproj --use-current-runtime + +# copy everything else +COPY Streetwriters.Data/ ./Streetwriters.Data/ +COPY Streetwriters.Common/ ./Streetwriters.Common/ +COPY Streetwriters.Messenger/ ./Streetwriters.Messenger/ + +# build +WORKDIR /app/Streetwriters.Messenger/ +ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true" +RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore + +# final stage/image +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build /app/out . +ENTRYPOINT ["dotnet", "Streetwriters.Messenger.dll"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..710007b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,59 @@ +version: "3.4" + +x-server-discovery: + &server-discovery + NOTESNOOK_SERVER_PORT: 80 + NOTESNOOK_SERVER_HOST: notesnook-server + IDENTITY_SERVER_PORT: 80 + IDENTITY_SERVER_HOST: identity-server + SSE_SERVER_PORT: 80 + SSE_SERVER_HOST: sse-server + SELF_HOSTED: 1 + +services: + notesnook-db: + image: mongo + networks: + - notesnook + volumes: + - /data/db + + notesnook-server: + build: + context: . + dockerfile: ./Notesnook.API/Dockerfile + ports: + - "5264:80" + networks: + - notesnook + environment: + <<: *server-discovery + MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/notesnook + MONGODB_DATABASE_NAME: notesnook + + identity-server: + build: + context: . + dockerfile: ./Streetwriters.Identity/Dockerfile + ports: + - "8264:80" + networks: + - notesnook + environment: + <<: *server-discovery + MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/identity + MONGODB_DATABASE_NAME: identity + + sse-server: + build: + context: . + dockerfile: ./Streetwriters.Messenger/Dockerfile + ports: + - "7264:80" + networks: + - notesnook + environment: + <<: *server-discovery + +networks: + notesnook: