Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/terraform.tfstate
**/terraform.tfstate.backup
**/values.dev.yaml
LICENSE
README.md
Expand Down
96 changes: 96 additions & 0 deletions ExtensionAppDataIO/Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Global arguments
ARG SDK_IMAGE=mcr.microsoft.com/dotnet/sdk:10.0
ARG RUNTIME_IMAGE=mcr.microsoft.com/dotnet/aspnet:10.0
ARG APP_DIR=/app
ARG SRC_DIR=/src
ARG UID=1000
ARG GID=1000
ARG PORT=8080
ARG BUILD_CONFIGURATION=Release
ARG PROJECT_NAME=ExtensionAppDataIO
ARG PROJECT_FILE=ExtensionAppDataIO.csproj
ARG PROJECT_CONTEXT_DIR=ExtensionAppDataIO

# Base stage
FROM ${RUNTIME_IMAGE} AS base
ARG APP_DIR
ARG UID
ARG GID
ARG PORT

USER root
RUN mkdir -p ${APP_DIR} && \
chown -R ${UID}:${GID} ${APP_DIR}

USER ${UID}:${GID}
WORKDIR ${APP_DIR}

ENV PORT=${PORT}
ENV ASPNETCORE_HTTP_PORTS=${PORT}
EXPOSE ${PORT}

# Dependencies stage
FROM ${SDK_IMAGE} AS dependencies
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG PROJECT_CONTEXT_DIR

USER root
RUN mkdir -p ${SRC_DIR}/${PROJECT_NAME} /tmp/nuget && \
chown -R ${UID}:${GID} ${SRC_DIR} /tmp/nuget

USER ${UID}:${GID}
WORKDIR ${SRC_DIR}

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/${PROJECT_FILE} ./${PROJECT_NAME}/

RUN dotnet restore ./${PROJECT_NAME}/${PROJECT_FILE} --packages /tmp/nuget

ENV NUGET_PACKAGES=/tmp/nuget

# Development stage
FROM dependencies AS development
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG PORT
ARG PROJECT_CONTEXT_DIR

ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS=http://+:${PORT}

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/ ${SRC_DIR}/${PROJECT_NAME}/
WORKDIR ${SRC_DIR}/${PROJECT_NAME}

CMD ["dotnet", "watch", "run", "--project", "ExtensionAppDataIO.csproj", "--no-launch-profile", "--urls", "http://+:8080"]

# Build stage
FROM dependencies AS build
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG BUILD_CONFIGURATION
ARG PROJECT_CONTEXT_DIR

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/ ${SRC_DIR}/${PROJECT_NAME}/
WORKDIR ${SRC_DIR}/${PROJECT_NAME}

RUN dotnet publish ./${PROJECT_FILE} -c ${BUILD_CONFIGURATION} -o ${SRC_DIR}/publish /p:UseAppHost=false --no-restore

# Production stage
FROM base AS production
ARG UID
ARG GID

ENV ASPNETCORE_ENVIRONMENT=Production

COPY --chown=${UID}:${GID} --from=build /src/publish .

ENTRYPOINT ["dotnet", "ExtensionAppDataIO.dll"]
116 changes: 91 additions & 25 deletions ExtensionAppDataIO/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,30 +1,96 @@
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# Global arguments
ARG SDK_IMAGE=mcr.microsoft.com/dotnet/sdk:10.0
ARG RUNTIME_IMAGE=mcr.microsoft.com/dotnet/aspnet:10.0
ARG APP_DIR=/app
ARG SRC_DIR=/src
ARG UID=1000
ARG GID=1000
ARG PORT=8080
ARG BUILD_CONFIGURATION=Release
ARG PROJECT_NAME=ExtensionAppDataIO
ARG PROJECT_FILE=ExtensionAppDataIO.csproj
ARG PROJECT_CONTEXT_DIR=ExtensionAppDataIO

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
# Base stage
FROM ${RUNTIME_IMAGE} AS base
ARG APP_DIR
ARG UID
ARG GID
ARG PORT

USER root
RUN mkdir -p ${APP_DIR} && \
chown -R ${UID}:${GID} ${APP_DIR}

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["ExtensionAppDataIO/ExtensionAppDataIO.csproj", "ExtensionAppDataIO/"]
RUN dotnet restore "./ExtensionAppDataIO/ExtensionAppDataIO.csproj"
COPY . .
WORKDIR "/src/ExtensionAppDataIO"
RUN dotnet build "./ExtensionAppDataIO.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./ExtensionAppDataIO.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
USER ${UID}:${GID}
WORKDIR ${APP_DIR}

ENV PORT=${PORT}
ENV ASPNETCORE_HTTP_PORTS=${PORT}
EXPOSE ${PORT}

# Dependencies stage
FROM ${SDK_IMAGE} AS dependencies
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG PROJECT_CONTEXT_DIR

USER root
RUN mkdir -p ${SRC_DIR}/${PROJECT_NAME} /tmp/nuget && \
chown -R ${UID}:${GID} ${SRC_DIR} /tmp/nuget

USER ${UID}:${GID}
WORKDIR ${SRC_DIR}

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/${PROJECT_FILE} ./${PROJECT_NAME}/

RUN dotnet restore ./${PROJECT_NAME}/${PROJECT_FILE} --packages /tmp/nuget

ENV NUGET_PACKAGES=/tmp/nuget

# Development stage
FROM dependencies AS development
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG PORT
ARG PROJECT_CONTEXT_DIR

ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS=http://+:${PORT}

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/ ${SRC_DIR}/${PROJECT_NAME}/
WORKDIR ${SRC_DIR}/${PROJECT_NAME}

CMD ["dotnet", "watch", "run", "--project", "ExtensionAppDataIO.csproj", "--no-launch-profile", "--urls", "http://+:8080"]

# Build stage
FROM dependencies AS build
ARG SRC_DIR
ARG UID
ARG GID
ARG PROJECT_NAME
ARG PROJECT_FILE
ARG BUILD_CONFIGURATION
ARG PROJECT_CONTEXT_DIR

COPY --chown=${UID}:${GID} ${PROJECT_CONTEXT_DIR}/ ${SRC_DIR}/${PROJECT_NAME}/
WORKDIR ${SRC_DIR}/${PROJECT_NAME}

RUN dotnet publish ./${PROJECT_FILE} -c ${BUILD_CONFIGURATION} -o ${SRC_DIR}/publish /p:UseAppHost=false --no-restore

# Production stage
FROM base AS production
ARG UID
ARG GID

ENV ASPNETCORE_ENVIRONMENT=Production

COPY --chown=${UID}:${GID} --from=build /src/publish .

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ExtensionAppDataIO.dll"]
47 changes: 47 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: extension-app-data-io-csharp

services:
dataio-dev:
profiles: ["dev"]
build:
context: .
dockerfile: ExtensionAppDataIO/Dockerfile
target: development
args:
PORT: 8080
environment:
ASPNETCORE_ENVIRONMENT: Development
ASPNETCORE_URLS: http://+:8080
ASPNETCORE_HTTP_PORTS: "8080"
AuthSettings__JwtSecretKey: ${AUTH_JWT_SECRET_KEY:-b48f0046467d1d2ef8f6c2a0a4007e596199b43fd491f1a2f223c58686df3b1a6c0e295dadc80811cf633981d1cbf36560e0ee91f87de36e27acd98306ebeff7}
AuthSettings__OAuthClientId: ${AUTH_OAUTH_CLIENT_ID:-31d040b29254174fb3afe9720c0dcfca43662f7d35eb9b17f0eb20456701515c789d33ee78acd3cfdf75d0a9cd3cdf7dd0866b8ef022f98caf6b7a2929fd25e9}
AuthSettings__OAuthClientSecret: ${AUTH_OAUTH_CLIENT_SECRET:-46c907643b229e602e5e2121adb3f0fdfb4b1ba0502b8da7ff41faf14477253e4049c33e99e8b4c7a23b3fbcf67b4c8d74244e5e1f88a43c324cd8dae960e991}
AuthSettings__AuthorizationCode: ${AUTH_AUTHORIZATION_CODE:-4cf62718907d84bc5874d4d128403072a3acfaf87df935bc65459684306a2b0fab52b7de5850b176522ad2e330d7ff21f3bd47b60cf13d046d36813570abc834}
ports:
- "5245:8080"
volumes:
- ./ExtensionAppDataIO:/src/ExtensionAppDataIO
- nuget_cache:/tmp/nuget

dataio-prod:
profiles: ["prod"]
build:
context: .
dockerfile: ExtensionAppDataIO/Dockerfile
target: production
args:
PORT: 8080
environment:
ASPNETCORE_ENVIRONMENT: Production
ASPNETCORE_URLS: http://+:8080
ASPNETCORE_HTTP_PORTS: "8080"
AuthSettings__JwtSecretKey: ${AUTH_JWT_SECRET_KEY:-b48f0046467d1d2ef8f6c2a0a4007e596199b43fd491f1a2f223c58686df3b1a6c0e295dadc80811cf633981d1cbf36560e0ee91f87de36e27acd98306ebeff7}
AuthSettings__OAuthClientId: ${AUTH_OAUTH_CLIENT_ID:-31d040b29254174fb3afe9720c0dcfca43662f7d35eb9b17f0eb20456701515c789d33ee78acd3cfdf75d0a9cd3cdf7dd0866b8ef022f98caf6b7a2929fd25e9}
AuthSettings__OAuthClientSecret: ${AUTH_OAUTH_CLIENT_SECRET:-46c907643b229e602e5e2121adb3f0fdfb4b1ba0502b8da7ff41faf14477253e4049c33e99e8b4c7a23b3fbcf67b4c8d74244e5e1f88a43c324cd8dae960e991}
AuthSettings__AuthorizationCode: ${AUTH_AUTHORIZATION_CODE:-4cf62718907d84bc5874d4d128403072a3acfaf87df935bc65459684306a2b0fab52b7de5850b176522ad2e330d7ff21f3bd47b60cf13d046d36813570abc834}
ports:
- "8080:8080"
restart: unless-stopped

volumes:
nuget_cache:
110 changes: 110 additions & 0 deletions terraform/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Created by https://www.toptal.com/developers/gitignore/api/terraform,osx,linux,windows
# Edit at https://www.toptal.com/developers/gitignore?templates=terraform,osx,linux,windows

### Linux ###
*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

### OSX ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### Terraform ###
# Local .terraform directories
**/.terraform/*

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log
crash.*.log

# Exclude all .tfvars files, which are likely to contain sensitive data, such as
# password, private keys, and other secrets. These should not be part of version
# control as they are data points which are potentially sensitive and subject
# to change depending on the environment.
*.tfvars
*.tfvars.json

# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json

# Include override files you do wish to add to version control using negated pattern
# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*

# Ignore CLI configuration files
.terraformrc
terraform.rc

### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/terraform,osx,linux,windows
Loading