From fb86300d76a588cfc85826933a7e8852a3fb11c2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 12 Jan 2019 17:02:10 -0600 Subject: [PATCH 01/85] initial add docker --- .dockerignore | 9 ++++++++ src/FilterLists.Api/Dockerfile | 21 +++++++++++++++++++ src/FilterLists.Api/FilterLists.Api.csproj | 2 ++ .../Properties/launchSettings.json | 5 +++++ src/FilterLists.Web/Dockerfile | 19 +++++++++++++++++ src/FilterLists.Web/FilterLists.Web.csproj | 2 ++ .../Properties/launchSettings.json | 5 +++++ 7 files changed, 63 insertions(+) create mode 100644 .dockerignore create mode 100644 src/FilterLists.Api/Dockerfile create mode 100644 src/FilterLists.Web/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..df2e0fe50 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.dockerignore +.env +.git +.gitignore +.vs +.vscode +*/bin +*/obj +**/.toolstarget \ No newline at end of file diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile new file mode 100644 index 000000000..34248be89 --- /dev/null +++ b/src/FilterLists.Api/Dockerfile @@ -0,0 +1,21 @@ +FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base +WORKDIR /app +EXPOSE 80 + +FROM microsoft/dotnet:2.1-sdk AS build +WORKDIR /src +COPY ["src/FilterLists.Api/FilterLists.Api.csproj", "src/FilterLists.Api/"] +COPY ["src/FilterLists.Services/FilterLists.Services.csproj", "src/FilterLists.Services/"] +COPY ["src/FilterLists.Data/FilterLists.Data.csproj", "src/FilterLists.Data/"] +RUN dotnet restore "src/FilterLists.Api/FilterLists.Api.csproj" +COPY . . +WORKDIR "/src/src/FilterLists.Api" +RUN dotnet build "FilterLists.Api.csproj" -c Release -o /app + +FROM build AS publish +RUN dotnet publish "FilterLists.Api.csproj" -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index fa985d570..5df3f6165 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -18,6 +18,7 @@ git https://github.com/collinbarrett/FilterLists false + Linux @@ -42,6 +43,7 @@ + diff --git a/src/FilterLists.Api/Properties/launchSettings.json b/src/FilterLists.Api/Properties/launchSettings.json index 27a7f46de..dcce7aa59 100644 --- a/src/FilterLists.Api/Properties/launchSettings.json +++ b/src/FilterLists.Api/Properties/launchSettings.json @@ -8,6 +8,11 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "http://localhost:5000/docs/index.html" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/docs/index.html" } } } \ No newline at end of file diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile new file mode 100644 index 000000000..cd51d4d2d --- /dev/null +++ b/src/FilterLists.Web/Dockerfile @@ -0,0 +1,19 @@ +FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base +WORKDIR /app +EXPOSE 80 + +FROM microsoft/dotnet:2.1-sdk AS build +WORKDIR /src +COPY ["src/FilterLists.Web/FilterLists.Web.csproj", "src/FilterLists.Web/"] +RUN dotnet restore "src/FilterLists.Web/FilterLists.Web.csproj" +COPY . . +WORKDIR "/src/src/FilterLists.Web" +RUN dotnet build "FilterLists.Web.csproj" -c Release -o /app + +FROM build AS publish +RUN dotnet publish "FilterLists.Web.csproj" -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] \ No newline at end of file diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 309f26f94..7538963a3 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -19,6 +19,7 @@ git true false + Linux @@ -26,6 +27,7 @@ + diff --git a/src/FilterLists.Web/Properties/launchSettings.json b/src/FilterLists.Web/Properties/launchSettings.json index 0db5cdf24..8a3cc92da 100644 --- a/src/FilterLists.Web/Properties/launchSettings.json +++ b/src/FilterLists.Web/Properties/launchSettings.json @@ -13,6 +13,11 @@ "launchBrowser": true, "launchUrl": "http://localhost:5001/", "applicationUrl": "http://localhost:5001/" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/" } } } \ No newline at end of file From eec8a15dddfa015a022cb5cf598edb44bd87eb8d Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 12 Jan 2019 17:19:42 -0600 Subject: [PATCH 02/85] initial add docker-compose --- .dockerignore | 3 ++- FilterLists.sln | 6 ++++++ docker-compose.dcproj | 18 ++++++++++++++++++ docker-compose.override.yml | 15 +++++++++++++++ docker-compose.yml | 15 +++++++++++++++ src/FilterLists.Api/Dockerfile | 16 ++++++++-------- src/FilterLists.Api/FilterLists.Api.csproj | 1 + src/FilterLists.Web/Dockerfile | 12 ++++++------ src/FilterLists.Web/FilterLists.Web.csproj | 1 + 9 files changed, 72 insertions(+), 15 deletions(-) create mode 100644 docker-compose.dcproj create mode 100644 docker-compose.override.yml create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore index df2e0fe50..43e8ab1e3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,6 +4,7 @@ .gitignore .vs .vscode +docker-compose.yml +docker-compose.*.yml */bin */obj -**/.toolstarget \ No newline at end of file diff --git a/FilterLists.sln b/FilterLists.sln index 8a4a4abb6..83d579373 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -52,6 +52,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DA34DED7-B352-4855-9C7B-9E3D983DBE2E}" EndProject +Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{94FF757E-0A78-4E9C-971E-A0709206AC27}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -86,6 +88,10 @@ Global {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.Build.0 = Release|Any CPU + {94FF757E-0A78-4E9C-971E-A0709206AC27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94FF757E-0A78-4E9C-971E-A0709206AC27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94FF757E-0A78-4E9C-971E-A0709206AC27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94FF757E-0A78-4E9C-971E-A0709206AC27}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/docker-compose.dcproj b/docker-compose.dcproj new file mode 100644 index 000000000..56ad2e9ca --- /dev/null +++ b/docker-compose.dcproj @@ -0,0 +1,18 @@ + + + + 2.1 + Linux + 94ff757e-0a78-4e9c-971e-a0709206ac27 + LaunchBrowser + {Scheme}://localhost:{ServicePort} + filterlists.api + + + + docker-compose.yml + + + + + \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 000000000..fc499ec89 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,15 @@ +version: '3.4' + +services: + filterlists.api: + environment: + - ASPNETCORE_ENVIRONMENT=Development + ports: + - "80" + + filterlists.web: + environment: + - ASPNETCORE_ENVIRONMENT=Development + ports: + - "80" + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..ad1677ccb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.4' + +services: + filterlists.api: + image: ${DOCKER_REGISTRY-}filterlistsapi + build: + context: . + dockerfile: src/FilterLists.Api/Dockerfile + + filterlists.web: + image: ${DOCKER_REGISTRY-}filterlistsweb + build: + context: . + dockerfile: src/FilterLists.Web/Dockerfile + diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 34248be89..34c127cfc 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -4,18 +4,18 @@ EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src -COPY ["src/FilterLists.Api/FilterLists.Api.csproj", "src/FilterLists.Api/"] -COPY ["src/FilterLists.Services/FilterLists.Services.csproj", "src/FilterLists.Services/"] -COPY ["src/FilterLists.Data/FilterLists.Data.csproj", "src/FilterLists.Data/"] -RUN dotnet restore "src/FilterLists.Api/FilterLists.Api.csproj" +COPY src/FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ +COPY src/FilterLists.Services/FilterLists.Services.csproj src/FilterLists.Services/ +COPY src/FilterLists.Data/FilterLists.Data.csproj src/FilterLists.Data/ +RUN dotnet restore src/FilterLists.Api/FilterLists.Api.csproj COPY . . -WORKDIR "/src/src/FilterLists.Api" -RUN dotnet build "FilterLists.Api.csproj" -c Release -o /app +WORKDIR /src/src/FilterLists.Api +RUN dotnet build FilterLists.Api.csproj -c Release -o /app FROM build AS publish -RUN dotnet publish "FilterLists.Api.csproj" -c Release -o /app +RUN dotnet publish FilterLists.Api.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . -ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 5df3f6165..d32b446a7 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -19,6 +19,7 @@ https://github.com/collinbarrett/FilterLists false Linux + ..\..\docker-compose.dcproj diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index cd51d4d2d..23a45c8ff 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -4,16 +4,16 @@ EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src -COPY ["src/FilterLists.Web/FilterLists.Web.csproj", "src/FilterLists.Web/"] -RUN dotnet restore "src/FilterLists.Web/FilterLists.Web.csproj" +COPY src/FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ +RUN dotnet restore src/FilterLists.Web/FilterLists.Web.csproj COPY . . -WORKDIR "/src/src/FilterLists.Web" -RUN dotnet build "FilterLists.Web.csproj" -c Release -o /app +WORKDIR /src/src/FilterLists.Web +RUN dotnet build FilterLists.Web.csproj -c Release -o /app FROM build AS publish -RUN dotnet publish "FilterLists.Web.csproj" -c Release -o /app +RUN dotnet publish FilterLists.Web.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . -ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 7538963a3..14297f7dc 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -20,6 +20,7 @@ true false Linux + ..\..\docker-compose.dcproj From 79657e2eb8f8cd020eeebd834bc925e7a4bd66ba Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 12 Jan 2019 18:10:17 -0600 Subject: [PATCH 03/85] add nginx, other docker tweaks --- docker-compose.override.yml | 3 +-- docker-compose.yml | 18 ++++++++++++++++-- nginx/Dockerfile | 2 ++ nginx/nginx.conf | 24 ++++++++++++++++++++++++ src/FilterLists.Api/Dockerfile | 4 ++-- src/FilterLists.Web/Dockerfile | 4 ++-- 6 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 nginx/Dockerfile create mode 100644 nginx/nginx.conf diff --git a/docker-compose.override.yml b/docker-compose.override.yml index fc499ec89..e179c67ed 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,4 +1,4 @@ -version: '3.4' +version: '3.7' services: filterlists.api: @@ -12,4 +12,3 @@ services: - ASPNETCORE_ENVIRONMENT=Development ports: - "80" - diff --git a/docker-compose.yml b/docker-compose.yml index ad1677ccb..20e9ffdc9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,29 @@ -version: '3.4' +version: '3.7' services: + filterlists.mariadb: + image: mariadb + + filterlists.nginx: + build: + context: ./nginx + dockerfile: nginx/Dockerfile + ports: + - "80:80" + links: + - filterlists.api + - filterlists.web + filterlists.api: image: ${DOCKER_REGISTRY-}filterlistsapi build: context: . dockerfile: src/FilterLists.Api/Dockerfile + links: + - filterlists.mariadb filterlists.web: image: ${DOCKER_REGISTRY-}filterlistsweb build: context: . dockerfile: src/FilterLists.Web/Dockerfile - diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 000000000..0d947da02 --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,2 @@ +FROM nginx +COPY nginx.conf /etc/nginx/nginx.conf \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 000000000..5bcf81002 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,24 @@ +worker_processes 4; + +events { worker_connections 1024; } + +http { + sendfile on; + + upstream app_servers { + server app:5000; + } + + server { + listen 80; + + location / { + proxy_pass http://app_servers; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 34c127cfc..7d221b794 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,8 +1,8 @@ -FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base +FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 -FROM microsoft/dotnet:2.1-sdk AS build +FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY src/FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ COPY src/FilterLists.Services/FilterLists.Services.csproj src/FilterLists.Services/ diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 23a45c8ff..e9b666108 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,8 +1,8 @@ -FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base +FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 -FROM microsoft/dotnet:2.1-sdk AS build +FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY src/FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ RUN dotnet restore src/FilterLists.Web/FilterLists.Web.csproj From 2c7d4dfbc858cd7870c769785ce3e8a31ca19b9c Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 15:00:11 -0600 Subject: [PATCH 04/85] misc docker updates --- docker-compose.override.yml | 14 --------- docker-compose.yml | 54 +++++++++++++++++----------------- src/FilterLists.Api/Dockerfile | 10 +++---- src/FilterLists.Web/Dockerfile | 6 ++-- 4 files changed, 35 insertions(+), 49 deletions(-) delete mode 100644 docker-compose.override.yml diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index e179c67ed..000000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3.7' - -services: - filterlists.api: - environment: - - ASPNETCORE_ENVIRONMENT=Development - ports: - - "80" - - filterlists.web: - environment: - - ASPNETCORE_ENVIRONMENT=Development - ports: - - "80" diff --git a/docker-compose.yml b/docker-compose.yml index 20e9ffdc9..32ca669b4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,29 +1,29 @@ version: '3.7' - services: - filterlists.mariadb: - image: mariadb - - filterlists.nginx: - build: - context: ./nginx - dockerfile: nginx/Dockerfile - ports: - - "80:80" - links: - - filterlists.api - - filterlists.web - - filterlists.api: - image: ${DOCKER_REGISTRY-}filterlistsapi - build: - context: . - dockerfile: src/FilterLists.Api/Dockerfile - links: - - filterlists.mariadb - - filterlists.web: - image: ${DOCKER_REGISTRY-}filterlistsweb - build: - context: . - dockerfile: src/FilterLists.Web/Dockerfile + filterlists.mariadb: + image: mariadb + filterlists.nginx: + build: + context: ./nginx + ports: + - '80:80' + - '443:443' + links: + - filterlists.api + - filterlists.web + filterlists.api: + image: '${DOCKER_REGISTRY-}filterlistsapi' + build: + context: ./src + dockerfile: ./FilterLists.Api/Dockerfile + expose: + - '5000' + links: + - filterlists.mariadb + filterlists.web: + image: '${DOCKER_REGISTRY-}filterlistsweb' + build: + context: ./src + dockerfile: ./FilterLists.Web/Dockerfile + expose: + - '5001' diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 7d221b794..2836b2af5 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,15 +1,15 @@ FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app -EXPOSE 80 +EXPOSE 5000 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src -COPY src/FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ -COPY src/FilterLists.Services/FilterLists.Services.csproj src/FilterLists.Services/ -COPY src/FilterLists.Data/FilterLists.Data.csproj src/FilterLists.Data/ +COPY FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ +COPY FilterLists.Services/FilterLists.Services.csproj src/FilterLists.Services/ +COPY FilterLists.Data/FilterLists.Data.csproj src/FilterLists.Data/ RUN dotnet restore src/FilterLists.Api/FilterLists.Api.csproj COPY . . -WORKDIR /src/src/FilterLists.Api +WORKDIR FilterLists.Api RUN dotnet build FilterLists.Api.csproj -c Release -o /app FROM build AS publish diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index e9b666108..eef6cfda0 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,13 +1,13 @@ FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app -EXPOSE 80 +EXPOSE 5001 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src -COPY src/FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ +COPY FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ RUN dotnet restore src/FilterLists.Web/FilterLists.Web.csproj COPY . . -WORKDIR /src/src/FilterLists.Web +WORKDIR FilterLists.Web RUN dotnet build FilterLists.Web.csproj -c Release -o /app FROM build AS publish From fa2bca73b4a4c5c2f93d0289c0c39f7100716f04 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 16:56:16 -0600 Subject: [PATCH 05/85] simplify dockerfiles --- src/FilterLists.Api/Dockerfile | 7 ++----- src/FilterLists.Web/Dockerfile | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 2836b2af5..4a0f8eee1 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,7 +1,3 @@ -FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base -WORKDIR /app -EXPOSE 5000 - FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ @@ -15,7 +11,8 @@ RUN dotnet build FilterLists.Api.csproj -c Release -o /app FROM build AS publish RUN dotnet publish FilterLists.Api.csproj -c Release -o /app -FROM base AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final WORKDIR /app COPY --from=publish /app . +EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index eef6cfda0..b9da86d17 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,7 +1,3 @@ -FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base -WORKDIR /app -EXPOSE 5001 - FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ @@ -13,7 +9,8 @@ RUN dotnet build FilterLists.Web.csproj -c Release -o /app FROM build AS publish RUN dotnet publish FilterLists.Web.csproj -c Release -o /app -FROM base AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final WORKDIR /app COPY --from=publish /app . +EXPOSE 5001 ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] From a5a2aee5dc0e2cb0495839094554f3a65001707a Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 17:17:00 -0600 Subject: [PATCH 06/85] simplify dockerfiles --- src/FilterLists.Api/Dockerfile | 20 ++++++-------------- src/FilterLists.Web/Dockerfile | 16 ++++------------ 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 4a0f8eee1..5cd7c0228 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,18 +1,10 @@ -FROM microsoft/dotnet:2.2-sdk AS build -WORKDIR /src -COPY FilterLists.Api/FilterLists.Api.csproj src/FilterLists.Api/ -COPY FilterLists.Services/FilterLists.Services.csproj src/FilterLists.Services/ -COPY FilterLists.Data/FilterLists.Data.csproj src/FilterLists.Data/ -RUN dotnet restore src/FilterLists.Api/FilterLists.Api.csproj -COPY . . -WORKDIR FilterLists.Api -RUN dotnet build FilterLists.Api.csproj -c Release -o /app - -FROM build AS publish -RUN dotnet publish FilterLists.Api.csproj -c Release -o /app +FROM microsoft/dotnet:2.2-sdk AS publish +COPY FilterLists.Api /FilterLists.Api +COPY FilterLists.Data /FilterLists.Data +COPY FilterLists.Services /FilterLists.Services +RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final -WORKDIR /app -COPY --from=publish /app . +COPY --from=publish /out . EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index b9da86d17..948c5bc92 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,16 +1,8 @@ -FROM microsoft/dotnet:2.2-sdk AS build -WORKDIR /src -COPY FilterLists.Web/FilterLists.Web.csproj src/FilterLists.Web/ -RUN dotnet restore src/FilterLists.Web/FilterLists.Web.csproj -COPY . . -WORKDIR FilterLists.Web -RUN dotnet build FilterLists.Web.csproj -c Release -o /app - -FROM build AS publish -RUN dotnet publish FilterLists.Web.csproj -c Release -o /app +FROM microsoft/dotnet:2.2-sdk AS publish +COPY FilterLists.Web /FilterLists.Web +RUN dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final -WORKDIR /app -COPY --from=publish /app . +COPY --from=publish /out . EXPOSE 5001 ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] From 78a2589335d5736111b2040f2896ed598e4121eb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 17:27:44 -0600 Subject: [PATCH 07/85] install node dep in Web publish container --- src/FilterLists.Web/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 948c5bc92..78edad468 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,6 +1,8 @@ FROM microsoft/dotnet:2.2-sdk AS publish COPY FilterLists.Web /FilterLists.Web -RUN dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out +RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - \ + && apt-get install -y nodejs \ + && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final COPY --from=publish /out . From c9862e37e4b6662c1d995799fe93347b5d905ce2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 17:30:10 -0600 Subject: [PATCH 08/85] use LTS node for Web publish container --- src/FilterLists.Web/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 78edad468..07c878dd2 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,6 +1,6 @@ FROM microsoft/dotnet:2.2-sdk AS publish COPY FilterLists.Web /FilterLists.Web -RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - \ +RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ && apt-get install -y nodejs \ && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out From b78c1d36153674ee76afc66ca7949f2946c1be58 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 17:57:31 -0600 Subject: [PATCH 09/85] add ASPNETCORE_URLS env var to dockerfiles --- src/FilterLists.Api/Dockerfile | 1 + src/FilterLists.Web/Dockerfile | 1 + 2 files changed, 2 insertions(+) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 5cd7c0228..5990e5589 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -6,5 +6,6 @@ RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final COPY --from=publish /out . +ENV ASPNETCORE_URLS http://+:5000 EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 07c878dd2..aaf29bade 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -6,5 +6,6 @@ RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final COPY --from=publish /out . +ENV ASPNETCORE_URLS http://+:5001 EXPOSE 5001 ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] From 1a70a545ebe4b1e2f247ee7cabd07dcf6d0fdc8b Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 18:24:42 -0600 Subject: [PATCH 10/85] prefer alpine containers for smaller size --- docker-compose.yml | 2 +- nginx/Dockerfile | 2 +- src/FilterLists.Api/Dockerfile | 6 +++--- src/FilterLists.Web/Dockerfile | 9 ++++----- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 32ca669b4..8223b0d34 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,4 +26,4 @@ services: context: ./src dockerfile: ./FilterLists.Web/Dockerfile expose: - - '5001' + - '5001' \ No newline at end of file diff --git a/nginx/Dockerfile b/nginx/Dockerfile index 0d947da02..865767879 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,2 +1,2 @@ -FROM nginx +FROM nginx:mainline-alpine COPY nginx.conf /etc/nginx/nginx.conf \ No newline at end of file diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 5990e5589..8024a03e1 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,11 +1,11 @@ -FROM microsoft/dotnet:2.2-sdk AS publish +FROM microsoft/dotnet:2.2-sdk-alpine AS publish COPY FilterLists.Api /FilterLists.Api COPY FilterLists.Data /FilterLists.Data COPY FilterLists.Services /FilterLists.Services RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final COPY --from=publish /out . ENV ASPNETCORE_URLS http://+:5000 EXPOSE 5000 -ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index aaf29bade..d4a1bf03e 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,11 +1,10 @@ -FROM microsoft/dotnet:2.2-sdk AS publish +FROM microsoft/dotnet:2.2-sdk-alpine AS publish COPY FilterLists.Web /FilterLists.Web -RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ - && apt-get install -y nodejs \ +RUN apk add --update nodejs nodejs-npm \ && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final COPY --from=publish /out . ENV ASPNETCORE_URLS http://+:5001 EXPOSE 5001 -ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] +ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] \ No newline at end of file From 00c8b76c9a1f3ec10b450aa6867d548a62b25dbb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 18:55:35 -0600 Subject: [PATCH 11/85] change initial nginx conf test to web --- nginx/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 5bcf81002..151e90a4c 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -6,7 +6,7 @@ http { sendfile on; upstream app_servers { - server app:5000; + server filterlists.web:5001; } server { From f1b64bcf475e76f0dc7478c40da8be1b618b0763 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 19:45:18 -0600 Subject: [PATCH 12/85] progress in mariadb docker composition --- docker-compose.yml | 40 +++++++++++++++++----------- src/FilterLists.Api/Dockerfile | 8 +++--- src/FilterLists.Api/appsettings.json | 4 +-- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8223b0d34..0a6eaf611 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,29 +1,37 @@ version: '3.7' services: - filterlists.mariadb: - image: mariadb - filterlists.nginx: - build: - context: ./nginx - ports: - - '80:80' - - '443:443' - links: - - filterlists.api - - filterlists.web + filterlists.db: + image: mariadb:latest + restart: always + environment: + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + MYSQL_DATABASE: filterlistsdata + MYSQL_USER: filterlists + MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 filterlists.api: image: '${DOCKER_REGISTRY-}filterlistsapi' build: - context: ./src - dockerfile: ./FilterLists.Api/Dockerfile + context: . + dockerfile: ./src/FilterLists.Api/Dockerfile expose: - '5000' - links: - - filterlists.mariadb + depends_on: + - filterlists.db filterlists.web: image: '${DOCKER_REGISTRY-}filterlistsweb' build: context: ./src dockerfile: ./FilterLists.Web/Dockerfile expose: - - '5001' \ No newline at end of file + - '5001' + depends_on: + - filterlists.api + filterlists.nginx: + build: + context: ./nginx + ports: + - '80:80' + - '443:443' + depends_on: + - filterlists.api + - filterlists.web \ No newline at end of file diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 8024a03e1..493edd726 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,11 +1,13 @@ FROM microsoft/dotnet:2.2-sdk-alpine AS publish -COPY FilterLists.Api /FilterLists.Api -COPY FilterLists.Data /FilterLists.Data -COPY FilterLists.Services /FilterLists.Services +COPY src/FilterLists.Api /FilterLists.Api +COPY src/FilterLists.Data /FilterLists.Data +COPY src/FilterLists.Services /FilterLists.Services +COPY data /data RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final COPY --from=publish /out . +COPY --from=publish data /data ENV ASPNETCORE_URLS http://+:5000 EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Api/appsettings.json b/src/FilterLists.Api/appsettings.json index 40219fe34..10fd560b9 100644 --- a/src/FilterLists.Api/appsettings.json +++ b/src/FilterLists.Api/appsettings.json @@ -9,10 +9,10 @@ "InstrumentationKey": "" }, "ConnectionStrings": { - "FilterListsConnection": "" + "FilterListsConnection": "Server=filterlists.db;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" }, "DataDirectory": { - "Path": "..\\..\\data" + "Path": "data" }, "Logging": { "IncludeScopes": false, From fbf0ca5d310a5ef72ff85fdebb45a44de1018bc6 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Jan 2019 20:17:06 -0600 Subject: [PATCH 13/85] re-org sln --- FilterLists.sln | 67 ++++++++++++++----- docker-compose.yml | 6 +- {nginx => ops/nginx}/Dockerfile | 0 {nginx => ops/nginx}/nginx.conf | 0 {scripts => ops/scripts}/build.sh | 0 {scripts => ops/scripts}/cron | 0 {scripts => ops/scripts}/deploy.sh | 0 {scripts => ops/scripts}/sql/createDb.sql | 0 .../scripts}/sql/duplicateRules.sql | 0 .../scripts}/sql/orphanedSnapshotsRules.sql | 0 .../scripts}/sql/resetSnapshotsRules.sql | 0 .../scripts}/sql/snapshotMetrics.sql | 0 .../scripts}/sql/snapshotTimeAnalysis.sql | 0 13 files changed, 52 insertions(+), 21 deletions(-) rename {nginx => ops/nginx}/Dockerfile (100%) rename {nginx => ops/nginx}/nginx.conf (100%) rename {scripts => ops/scripts}/build.sh (100%) mode change 100755 => 100644 rename {scripts => ops/scripts}/cron (100%) rename {scripts => ops/scripts}/deploy.sh (100%) mode change 100755 => 100644 rename {scripts => ops/scripts}/sql/createDb.sql (100%) rename {scripts => ops/scripts}/sql/duplicateRules.sql (100%) rename {scripts => ops/scripts}/sql/orphanedSnapshotsRules.sql (100%) rename {scripts => ops/scripts}/sql/resetSnapshotsRules.sql (100%) rename {scripts => ops/scripts}/sql/snapshotMetrics.sql (100%) rename {scripts => ops/scripts}/sql/snapshotTimeAnalysis.sql (100%) diff --git a/FilterLists.sln b/FilterLists.sln index 83d579373..a93f225d4 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -29,31 +29,51 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{8C3C7C63-F data\Tag.json = data\Tag.json EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{FCA7F77A-9EC6-4C6D-A80E-7DD27FF95673}" - ProjectSection(SolutionItems) = preProject - scripts\build.sh = scripts\build.sh - scripts\cron = scripts\cron - scripts\deploy.sh = scripts\deploy.sh - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Agent", "src\FilterLists.Agent\FilterLists.Agent.csproj", "{4F39D132-498D-4A93-9F6C-1C604718300D}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{A4BB2C81-5232-4162-B410-704D123D2C01}" - ProjectSection(SolutionItems) = preProject - scripts\sql\createDb.sql = scripts\sql\createDb.sql - scripts\sql\duplicateRules.sql = scripts\sql\duplicateRules.sql - scripts\sql\orphanedSnapshotsRules.sql = scripts\sql\orphanedSnapshotsRules.sql - scripts\sql\resetSnapshotsRules.sql = scripts\sql\resetSnapshotsRules.sql - scripts\sql\snapshotMetrics.sql = scripts\sql\snapshotMetrics.sql - scripts\sql\snapshotTimeAnalysis.sql = scripts\sql\snapshotTimeAnalysis.sql - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests", "tests\FilterLists.Services.Tests\FilterLists.Services.Tests.csproj", "{7D9F0D85-E906-401A-BDAD-724440B34567}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DA34DED7-B352-4855-9C7B-9E3D983DBE2E}" EndProject Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{94FF757E-0A78-4E9C-971E-A0709206AC27}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CE4AB25B-5501-42E9-B8B4-87B9C20472AC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{041F9CFA-B6F7-4DEB-9441-829DE697B1BB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ops", "ops", "{AF336194-8932-4C99-BF8B-30FF8EC146E9}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + .travis.yml = .travis.yml + azure-pipelines.yml = azure-pipelines.yml + codecov.yml = codecov.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nginx", "nginx", "{E11FDECE-A7F7-4ECB-A61F-83C124466412}" + ProjectSection(SolutionItems) = preProject + ops\nginx\Dockerfile = ops\nginx\Dockerfile + ops\nginx\nginx.conf = ops\nginx\nginx.conf + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mariadb", "mariadb", "{982092B7-CCE2-4BD1-9240-E59D0817F5CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{EA7CB599-AE37-429E-A44D-E5C741F9FB3D}" + ProjectSection(SolutionItems) = preProject + ops\scripts\build.sh = ops\scripts\build.sh + ops\scripts\cron = ops\scripts\cron + ops\scripts\deploy.sh = ops\scripts\deploy.sh + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{D44C45FF-1AF9-4404-8510-418D9981B7CD}" + ProjectSection(SolutionItems) = preProject + ops\scripts\sql\createDb.sql = ops\scripts\sql\createDb.sql + ops\scripts\sql\duplicateRules.sql = ops\scripts\sql\duplicateRules.sql + ops\scripts\sql\orphanedSnapshotsRules.sql = ops\scripts\sql\orphanedSnapshotsRules.sql + ops\scripts\sql\resetSnapshotsRules.sql = ops\scripts\sql\resetSnapshotsRules.sql + ops\scripts\sql\snapshotMetrics.sql = ops\scripts\sql\snapshotMetrics.sql + ops\scripts\sql\snapshotTimeAnalysis.sql = ops\scripts\sql\snapshotTimeAnalysis.sql + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -97,7 +117,18 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {A4BB2C81-5232-4162-B410-704D123D2C01} = {FCA7F77A-9EC6-4C6D-A80E-7DD27FF95673} + {57E4CE18-41F3-48F6-B142-12947FFBA86C} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {6B3E6765-5B8B-4A23-AD12-7E2BC5F4D2E6} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {4F39D132-498D-4A93-9F6C-1C604718300D} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {7D9F0D85-E906-401A-BDAD-724440B34567} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} + {94FF757E-0A78-4E9C-971E-A0709206AC27} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} + {E11FDECE-A7F7-4ECB-A61F-83C124466412} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} + {982092B7-CCE2-4BD1-9240-E59D0817F5CF} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} + {EA7CB599-AE37-429E-A44D-E5C741F9FB3D} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} + {D44C45FF-1AF9-4404-8510-418D9981B7CD} = {EA7CB599-AE37-429E-A44D-E5C741F9FB3D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8A31B449-52DD-4445-A9C4-033A24E25308} diff --git a/docker-compose.yml b/docker-compose.yml index 0a6eaf611..07bd19b8a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ version: '3.7' services: - filterlists.db: + filterlists.mariadb: image: mariadb:latest restart: always environment: @@ -16,7 +16,7 @@ services: expose: - '5000' depends_on: - - filterlists.db + - filterlists.mariadb filterlists.web: image: '${DOCKER_REGISTRY-}filterlistsweb' build: @@ -28,7 +28,7 @@ services: - filterlists.api filterlists.nginx: build: - context: ./nginx + context: ./ops/nginx ports: - '80:80' - '443:443' diff --git a/nginx/Dockerfile b/ops/nginx/Dockerfile similarity index 100% rename from nginx/Dockerfile rename to ops/nginx/Dockerfile diff --git a/nginx/nginx.conf b/ops/nginx/nginx.conf similarity index 100% rename from nginx/nginx.conf rename to ops/nginx/nginx.conf diff --git a/scripts/build.sh b/ops/scripts/build.sh old mode 100755 new mode 100644 similarity index 100% rename from scripts/build.sh rename to ops/scripts/build.sh diff --git a/scripts/cron b/ops/scripts/cron similarity index 100% rename from scripts/cron rename to ops/scripts/cron diff --git a/scripts/deploy.sh b/ops/scripts/deploy.sh old mode 100755 new mode 100644 similarity index 100% rename from scripts/deploy.sh rename to ops/scripts/deploy.sh diff --git a/scripts/sql/createDb.sql b/ops/scripts/sql/createDb.sql similarity index 100% rename from scripts/sql/createDb.sql rename to ops/scripts/sql/createDb.sql diff --git a/scripts/sql/duplicateRules.sql b/ops/scripts/sql/duplicateRules.sql similarity index 100% rename from scripts/sql/duplicateRules.sql rename to ops/scripts/sql/duplicateRules.sql diff --git a/scripts/sql/orphanedSnapshotsRules.sql b/ops/scripts/sql/orphanedSnapshotsRules.sql similarity index 100% rename from scripts/sql/orphanedSnapshotsRules.sql rename to ops/scripts/sql/orphanedSnapshotsRules.sql diff --git a/scripts/sql/resetSnapshotsRules.sql b/ops/scripts/sql/resetSnapshotsRules.sql similarity index 100% rename from scripts/sql/resetSnapshotsRules.sql rename to ops/scripts/sql/resetSnapshotsRules.sql diff --git a/scripts/sql/snapshotMetrics.sql b/ops/scripts/sql/snapshotMetrics.sql similarity index 100% rename from scripts/sql/snapshotMetrics.sql rename to ops/scripts/sql/snapshotMetrics.sql diff --git a/scripts/sql/snapshotTimeAnalysis.sql b/ops/scripts/sql/snapshotTimeAnalysis.sql similarity index 100% rename from scripts/sql/snapshotTimeAnalysis.sql rename to ops/scripts/sql/snapshotTimeAnalysis.sql From 7aa074aedbeca57228950b9226adee16b6f264ff Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 14 Jan 2019 06:29:52 -0600 Subject: [PATCH 14/85] remove explicit nodejs apk (installed as dep of nodejs-npm) --- src/FilterLists.Web/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index d4a1bf03e..ddc121457 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,6 +1,6 @@ FROM microsoft/dotnet:2.2-sdk-alpine AS publish COPY FilterLists.Web /FilterLists.Web -RUN apk add --update nodejs nodejs-npm \ +RUN apk add --update nodejs-npm \ && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final From ec78f108aace598be4d9b4f1ad6d2b85492f5ccb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Fri, 18 Jan 2019 20:19:32 -0600 Subject: [PATCH 15/85] gitignore updates --- .gitignore | 18 +++++++++++---- FilterLists.sln.DotSettings | 1 + .../Properties/launchSettings.json | 18 --------------- .../Properties/launchSettings.json | 23 ------------------- 4 files changed, 14 insertions(+), 46 deletions(-) delete mode 100644 src/FilterLists.Api/Properties/launchSettings.json delete mode 100644 src/FilterLists.Web/Properties/launchSettings.json diff --git a/.gitignore b/.gitignore index e17f6427f..6174512bf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files +*.rsuser *.suo *.user *.userosscache @@ -19,6 +20,8 @@ [Rr]eleases/ x64/ x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ @@ -76,6 +79,7 @@ StyleCopReport.xml *.tlh *.tmp *.tmp_proj +*_wpftmp.csproj *.log *.vspscc *.vssscc @@ -207,7 +211,7 @@ _pkginfo.txt # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache -!*.[Cc]ache/ +!?*.[Cc]ache/ # Others ClientBin/ @@ -227,6 +231,8 @@ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ +# ASP.NET Core default setup: bower directory is configured as wwwroot/lib/ and bower restore is true +**/wwwroot/lib/ # RIA/Silverlight projects Generated_Code/ @@ -290,8 +296,8 @@ paket-files/ .idea/ *.sln.iml -# CodeRush -.cr/ +# CodeRush personal settings +.cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ @@ -331,7 +337,9 @@ ASALocalRun/ # Local History for Visual Studio .localhistory/ +# BeatPulse healthcheck temp database +healthchecksdb + # FilterLists Custom Ignores -appsettings.development.json -appsettings.production.json +appsettings*.json src/FilterLists.Web/wwwroot/dist \ No newline at end of file diff --git a/FilterLists.sln.DotSettings b/FilterLists.sln.DotSettings index a6cf3a100..7309602f7 100644 --- a/FilterLists.sln.DotSettings +++ b/FilterLists.sln.DotSettings @@ -194,6 +194,7 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> True True + True True True True diff --git a/src/FilterLists.Api/Properties/launchSettings.json b/src/FilterLists.Api/Properties/launchSettings.json deleted file mode 100644 index dcce7aa59..000000000 --- a/src/FilterLists.Api/Properties/launchSettings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "profiles": { - "FilterLists.Api": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "http://localhost:5000/docs/index.html", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:5000/docs/index.html" - }, - "Docker": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/docs/index.html" - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Web/Properties/launchSettings.json b/src/FilterLists.Web/Properties/launchSettings.json deleted file mode 100644 index 8a3cc92da..000000000 --- a/src/FilterLists.Web/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "FilterLists.Web": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:5001/" - }, - "profiles": { - "FilterLists.Web": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "http://localhost:5001/", - "applicationUrl": "http://localhost:5001/" - }, - "Docker": { - "commandName": "Docker", - "launchBrowser": true, - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/" - } - } -} \ No newline at end of file From e22c61557959f0c67132e94da93faf14f6d896c1 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 19 Jan 2019 11:58:17 -0600 Subject: [PATCH 16/85] docker tweaks, re-add launch settings ref: https://github.com/github/gitignore/pull/2705 --- src/FilterLists.Api/Dockerfile | 5 ++--- src/FilterLists.Api/Properties/launchSettings.json | 9 +++++++++ src/FilterLists.Web/Dockerfile | 2 +- src/FilterLists.Web/Properties/launchSettings.json | 9 +++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 src/FilterLists.Api/Properties/launchSettings.json create mode 100644 src/FilterLists.Web/Properties/launchSettings.json diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 493edd726..097fdf9bd 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -2,12 +2,11 @@ FROM microsoft/dotnet:2.2-sdk-alpine AS publish COPY src/FilterLists.Api /FilterLists.Api COPY src/FilterLists.Data /FilterLists.Data COPY src/FilterLists.Services /FilterLists.Services -COPY data /data RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine COPY --from=publish /out . -COPY --from=publish data /data +COPY data /data ENV ASPNETCORE_URLS http://+:5000 EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Api/Properties/launchSettings.json b/src/FilterLists.Api/Properties/launchSettings.json new file mode 100644 index 000000000..d76e83551 --- /dev/null +++ b/src/FilterLists.Api/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/docs/index.html" + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index ddc121457..adb8f9af8 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -3,7 +3,7 @@ COPY FilterLists.Web /FilterLists.Web RUN apk add --update nodejs-npm \ && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine AS final +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine COPY --from=publish /out . ENV ASPNETCORE_URLS http://+:5001 EXPOSE 5001 diff --git a/src/FilterLists.Web/Properties/launchSettings.json b/src/FilterLists.Web/Properties/launchSettings.json new file mode 100644 index 000000000..b86a23994 --- /dev/null +++ b/src/FilterLists.Web/Properties/launchSettings.json @@ -0,0 +1,9 @@ +{ + "profiles": { + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/" + } + } +} \ No newline at end of file From 0136fab879453b6b764dbe07d0d4af759623b75f Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 19 Jan 2019 12:01:16 -0600 Subject: [PATCH 17/85] prefer implicit package refs https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#implicit-package-references --- src/FilterLists.Api/FilterLists.Api.csproj | 2 +- src/FilterLists.Web/FilterLists.Web.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index d32b446a7..f628b1253 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -41,7 +41,7 @@ - + diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 14297f7dc..c3580f607 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -26,7 +26,7 @@ - + From 4d2f3aabcea465105ca9a69e04b311433b57c718 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 20 Jan 2019 17:43:17 -0600 Subject: [PATCH 18/85] wire up nginx as reverse proxy, optimize Api dockerfile, etc. --- docker-compose.yml | 36 +++++++++++++--------------- ops/nginx/Dockerfile | 2 +- ops/nginx/nginx.conf | 2 +- src/FilterLists.Api/Dockerfile | 23 ++++++++++++------ src/FilterLists.Api/Program.cs | 1 - src/FilterLists.Api/appsettings.json | 2 +- 6 files changed, 35 insertions(+), 31 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 07bd19b8a..4191787ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,37 +1,33 @@ version: '3.7' services: - filterlists.mariadb: + FilterLists.MariaDB: image: mariadb:latest - restart: always environment: MYSQL_RANDOM_ROOT_PASSWORD: 'yes' MYSQL_DATABASE: filterlistsdata MYSQL_USER: filterlists MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 - filterlists.api: - image: '${DOCKER_REGISTRY-}filterlistsapi' + command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_520_ci'] + FilterLists.Api: + image: 'filterlists.api' build: context: . - dockerfile: ./src/FilterLists.Api/Dockerfile + dockerfile: src/FilterLists.Api/Dockerfile expose: - - '5000' + - "80/tcp" depends_on: - - filterlists.mariadb - filterlists.web: - image: '${DOCKER_REGISTRY-}filterlistsweb' - build: - context: ./src - dockerfile: ./FilterLists.Web/Dockerfile - expose: - - '5001' - depends_on: - - filterlists.api - filterlists.nginx: + - FilterLists.MariaDB +# FilterLists.Web: +# image: 'filterlists.web' +# build: +# context: src/FilterLists.Web + FilterLists.NGINX: + image: 'nginx:stable-alpine' build: context: ./ops/nginx ports: - '80:80' - '443:443' - depends_on: - - filterlists.api - - filterlists.web \ No newline at end of file + links: + - FilterLists.Api +# - FilterLists.Web \ No newline at end of file diff --git a/ops/nginx/Dockerfile b/ops/nginx/Dockerfile index 865767879..fbf884847 100644 --- a/ops/nginx/Dockerfile +++ b/ops/nginx/Dockerfile @@ -1,2 +1,2 @@ -FROM nginx:mainline-alpine +FROM nginx:stable-alpine COPY nginx.conf /etc/nginx/nginx.conf \ No newline at end of file diff --git a/ops/nginx/nginx.conf b/ops/nginx/nginx.conf index 151e90a4c..3adbea35b 100644 --- a/ops/nginx/nginx.conf +++ b/ops/nginx/nginx.conf @@ -6,7 +6,7 @@ http { sendfile on; upstream app_servers { - server filterlists.web:5001; + server FilterLists.Api:80; } server { diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 097fdf9bd..8e88a6609 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,12 +1,21 @@ FROM microsoft/dotnet:2.2-sdk-alpine AS publish -COPY src/FilterLists.Api /FilterLists.Api -COPY src/FilterLists.Data /FilterLists.Data -COPY src/FilterLists.Services /FilterLists.Services -RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o /out +WORKDIR /app +COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ +COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ +COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ +WORKDIR /app/FilterLists.Api +RUN dotnet restore + +WORKDIR /app +COPY src/FilterLists.Data/. ./FilterLists.Data/ +COPY src/FilterLists.Services/. ./FilterLists.Services/ +COPY src/FilterLists.Api/. ./FilterLists.Api/ +WORKDIR /app/FilterLists.Api +RUN dotnet publish -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine +WORKDIR /app COPY --from=publish /out . -COPY data /data -ENV ASPNETCORE_URLS http://+:5000 -EXPOSE 5000 +COPY data ./data/ +ENV ASPNETCORE_URLS http://+:80 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Api/Program.cs b/src/FilterLists.Api/Program.cs index 57fa7f2b1..c293ba200 100644 --- a/src/FilterLists.Api/Program.cs +++ b/src/FilterLists.Api/Program.cs @@ -24,7 +24,6 @@ public static void Main(string[] args) private static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) - .UseUrls("http://localhost:5000") .UseApplicationInsights() .UseStartup(); } diff --git a/src/FilterLists.Api/appsettings.json b/src/FilterLists.Api/appsettings.json index 10fd560b9..0e5529e9b 100644 --- a/src/FilterLists.Api/appsettings.json +++ b/src/FilterLists.Api/appsettings.json @@ -9,7 +9,7 @@ "InstrumentationKey": "" }, "ConnectionStrings": { - "FilterListsConnection": "Server=filterlists.db;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" + "FilterListsConnection": "Server=FilterLists.MariaDB;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" }, "DataDirectory": { "Path": "data" From 5637d3563bdf41e1fdc289bdd092802e6b5c6bb0 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 20 Jan 2019 18:42:15 -0600 Subject: [PATCH 19/85] wire up Web proj behind nginx --- docker-compose.yml | 16 +++++++++------- ops/nginx/nginx.conf | 16 +++++++++++----- src/FilterLists.Web/ClientApp/Layout.tsx | 2 +- .../ClientApp/modules/home/HomeContainer.tsx | 16 ++++++++-------- src/FilterLists.Web/Dockerfile | 15 ++++++++++----- src/FilterLists.Web/Program.cs | 2 +- 6 files changed, 40 insertions(+), 27 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4191787ce..faa602e52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,17 +17,19 @@ services: - "80/tcp" depends_on: - FilterLists.MariaDB -# FilterLists.Web: -# image: 'filterlists.web' -# build: -# context: src/FilterLists.Web + FilterLists.Web: + image: 'filterlists.web' + build: + context: src/FilterLists.Web + expose: + - "80/tcp" FilterLists.NGINX: image: 'nginx:stable-alpine' build: context: ./ops/nginx ports: - - '80:80' - - '443:443' + - '80:80/tcp' + - '443:443/tcp' links: - FilterLists.Api -# - FilterLists.Web \ No newline at end of file + - FilterLists.Web \ No newline at end of file diff --git a/ops/nginx/nginx.conf b/ops/nginx/nginx.conf index 3adbea35b..3a148667b 100644 --- a/ops/nginx/nginx.conf +++ b/ops/nginx/nginx.conf @@ -5,15 +5,21 @@ events { worker_connections 1024; } http { sendfile on; - upstream app_servers { - server FilterLists.Api:80; - } - server { listen 80; + location ^~ /api { + rewrite ^/api/(.*)$ /$1 break; + proxy_pass http://FilterLists.Api:80; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + } + location / { - proxy_pass http://app_servers; + proxy_pass http://FilterLists.Web:80; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; diff --git a/src/FilterLists.Web/ClientApp/Layout.tsx b/src/FilterLists.Web/ClientApp/Layout.tsx index 02c0e3c92..1f1736118 100644 --- a/src/FilterLists.Web/ClientApp/Layout.tsx +++ b/src/FilterLists.Web/ClientApp/Layout.tsx @@ -34,7 +34,7 @@ const Footer = () => ; const ApiLink = () => - API ; diff --git a/src/FilterLists.Web/ClientApp/modules/home/HomeContainer.tsx b/src/FilterLists.Web/ClientApp/modules/home/HomeContainer.tsx index ea15d3818..9e966e29f 100644 --- a/src/FilterLists.Web/ClientApp/modules/home/HomeContainer.tsx +++ b/src/FilterLists.Web/ClientApp/modules/home/HomeContainer.tsx @@ -41,49 +41,49 @@ export class HomeContainer extends React.Component<{}, IState> { }; fetchLanguages() { - fetch("https://filterlists.com/api/v1/languages") + fetch("/api/v1/languages") .then(r => r.json() as Promise) .then(p => { this.setState({ languages: p }); }); }; fetchLicenses() { - fetch("https://filterlists.com/api/v1/licenses") + fetch("/api/v1/licenses") .then(r => r.json() as Promise) .then(p => { this.setState({ licenses: p }); }); }; fetchLists() { - fetch("https://filterlists.com/api/v1/lists") + fetch("/api/v1/lists") .then(r => r.json() as Promise) .then(p => { this.setState({ lists: p }); }); }; fetchMaintainers() { - fetch("https://filterlists.com/api/v1/maintainers") + fetch("/api/v1/maintainers") .then(r => r.json() as Promise) .then(p => { this.setState({ maintainers: p }); }); }; fetchSoftware() { - fetch("https://filterlists.com/api/v1/software") + fetch("/api/v1/software") .then(r => r.json() as Promise) .then(p => { this.setState({ software: p }); }); }; fetchSyntaxes() { - fetch("https://filterlists.com/api/v1/syntaxes") + fetch("/api/v1/syntaxes") .then(r => r.json() as Promise) .then(p => { this.setState({ syntaxes: p }); }); }; fetchTags() { - fetch("https://filterlists.com/api/v1/tags") + fetch("/api/v1/tags") .then(r => r.json() as Promise) .then(p => { this.setState({ tags: p }); }); }; fetchRuleCount() { - fetch("https://filterlists.com/api/v1/rules") + fetch("/api/v1/rules") .then(r => r.json() as Promise) .then(p => { this.setState({ ruleCount: p }); }); }; diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index adb8f9af8..81ff5d7c8 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,10 +1,15 @@ FROM microsoft/dotnet:2.2-sdk-alpine AS publish -COPY FilterLists.Web /FilterLists.Web -RUN apk add --update nodejs-npm \ - && dotnet publish FilterLists.Web/FilterLists.Web.csproj -c Release -o /out +RUN apk add --update nodejs-npm + +WORKDIR /app +COPY FilterLists.Web.csproj . +RUN dotnet restore + +COPY . . +RUN dotnet publish -c Release -o /out FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine +WORKDIR /app COPY --from=publish /out . -ENV ASPNETCORE_URLS http://+:5001 -EXPOSE 5001 +ENV ASPNETCORE_URLS http://+:80 ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] \ No newline at end of file diff --git a/src/FilterLists.Web/Program.cs b/src/FilterLists.Web/Program.cs index 6eefc54f8..82e198464 100644 --- a/src/FilterLists.Web/Program.cs +++ b/src/FilterLists.Web/Program.cs @@ -8,6 +8,6 @@ public static class Program public static void Main(string[] args) => CreateWebHostBuilder(args).Build().Run(); private static IWebHostBuilder CreateWebHostBuilder(string[] args) => - WebHost.CreateDefaultBuilder(args).UseUrls("http://localhost:5001;").UseStartup(); + WebHost.CreateDefaultBuilder(args).UseStartup(); } } \ No newline at end of file From a650b6d306a4a97774f5650a54fa9e69cc4ef267 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 08:49:41 -0600 Subject: [PATCH 20/85] change DevOps branch --- .travis.yml | 38 ----------------------- FilterLists.sln | 1 - azure-pipelines.yml | 15 ++++------ codecov.yml | 2 +- docker-compose.yml | 73 ++++++++++++++++++++++++--------------------- 5 files changed, 45 insertions(+), 84 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e6beca8d4..000000000 --- a/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -dist: trusty -language: csharp -mono: none -dotnet: 2.1.403 -solution: FilterLists.sln -addons: - mariadb: '10.3' - apt: - packages: - - sshpass -script: - - dotnet test tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - dotnet test tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover - - scripts/build.sh -after_script: - - bash <(curl -s https://codecov.io/bash) -env: - global: - #FTP_USER - - secure: o/C5sWQSvHAENA7OSgKyptgiI7mbBlMZOvy6cwiQDes9df32oy60CgWHhgFJ2bM61fiJt0jsvogrTY1Rk8HEYphHsJ/WzuOqbnPFJZ9V74HaGf9SN7O+8GjOrPd1p+v3Kv2q0Py3FdGeKWEbWn352Js2VRNw6uvlxxihNxETnTak2QymQ5SQpcd//O7E5NDTAO7/+mn9Le5ZN6ZE6mDf53YGVcaiN/sAbh9QOE17LX9fp5F0veuQ3a/wWjZlDLZBUwZAAxSPGqefv2eOx5wIpbbBhkFEqpN4xmhUrYNfzsGDMthhiaLAWS0JfnhSsc1l4T6b/ljoNarY2BSEYPwG4utdCauI1jdh8kR/ZZoLG7/8TJ396iIWlXW3Z0C4kHhD3075F6tqr3LbRQR5OU85+uAqwBhutwQkLLJ+Usp0pu8wj89mMYxC4Cp66aLJSdMqeemR6UIUNojNlqI1+wsclsgRgCK0KIf4LNcdmPh4WkURbzZ1SNTkmyb85bVCnP0heF6HPIguZ2aUYCWKfGuOv5ohFfv+IDPaYdQybZSPrEsROKyapgnJqvIc03UgIcAgb7GhZG4ZxAtuRNqzwg9PU0aL9vWXN6qbLm2oM5Fj0cIrab3leVpSHvJBvfxS0Wl18GhRDP7Bzmf1crkxwJqXZw1YFEK7BSuLJ7VTWo7mQUY= - #FTP_PASSWORD - - secure: JW9ZqU7dgvWSEZBAQ7ZG3/f1xt79RdR3p1wTLAlmGia8eOPCcmLd9sSder6dw08YvM6QaMTkNfoVWX2tl6ppZ5pRnYlv9bzdj1PDz9Twe9+acGJ13u97siTF9hRNI6KnUrJDZfkKDO3Kdeg0pI/5vib2gglhyVfiBYgcOAjHEHLp53fbet/hvx3gPMzunjRXFEoM6VdqBspqCSKHWF4nziVaapRGhFCq2sFL1RFz3whDGGY/7BRl2cchY11ysAyRsw+fNriwU0Hf7NTXdWFxvnsl1/pLcPnzECRjb48jgWctWwoOqm7aD5eAPCJgUEElMZc34HckinnvOg05N8ySchsMp6rJfT9G00Lu5RWtPRnpQ38CcHOR1K54kpe+PLrs8M/bOR9yQdCLoEyqfdUxNfcBIE3d8NkLIjDC4MomoQftg6QdEUhlOCwXGQn1M6jyp2AlAgs/SGPHb3zT6Lr3MUKAbYeYbb912d5KYFeu97I5ls3cWVV/omU0iOU6OT0hRgWiy+EtHOzzIQtgXoARh/AZXovytJcKiSvhDi/jZ9UIGE5HCrPwNkQ2SdcrCFF/TKFsjNK+SYoibDgqdh4rgBUrI5yGGgBn3EdvkBZWr78IQjM4A0TwyjGC+R7BHVRipvoaKOtsO7NC5qqb+3NJasEymsS5tH6LxcA3odx/rs0= - #FTP_HOST - - secure: Q/MyM2VmEeW0z6ujxQAHS6GLMXE3Dguu75oSARykrFJGk85iNTij7OiHvqfTYSBdw/h+47zv/pjtHwD8os3LTmTKpMOu3PyMP+SOk6J1SGKUKx1J959GHMRw94Dqcr7RbGmQA5eVWq/GJzPJffhWcMOSSwXSIaYFZcBTXIYqMMmcxwSEULutfvyfzhOm+8psdHLQQhjX2QcYHNHJQTpJ6+WJ7tLpZIxg5iHSZe1dPRVpeozOJ/+hhxPWwi2XDNt3LG9VUg4jMF24HXcw5zJLgSZGV7oy+XUMrcRV27DzL/s+nGS4FM2TQbMal94FU0tSyTAA+Qj80hUNvlgL/tykmDRK+E2am+04SisUtuTVPLjVy52qqwt25tvbOQH9BjN5eieZxj4uYog1S3HL5BUa7032MZbToZzt8IuOxyfIKfGZBUYwyWLK5pPWxQwnZhGIFpH98m0wTAsggvCrr1n9mNJeYO0n0DymTt+xWqHE/MIxKU3aUo0RNWGXNIwrp4TjYOaf/GgeKAUMSI5TzLhKY2n3uPfCniM4p25Ysf0RmnMEKW0VsXpSWfyIAtwqnF1NGFU/RJn2X13LsYLxwzE8JJ1hSEW+QQ7k1ZJKEqZWYEvhbF+7RD/l5KkKgZD1L8FGLLUEK6eTY65/rQV+4gprAVFw43PnkYa2codUn48952A= - #FTP_DIR - - secure: Fh47PH2JNBtvr7Dbbzf/wG+HizL7bND63JyhY97kG7VHtXSeLwWTw13YvF0UDoWa+37NicTOKUgGemg7Mz+K4+GpOiTBUm5YNTpw8ECpdys9G4xZURsIqUYUxrr5k//TddvRP+4CaH0miOW3hKF4SSnT9BwJeTMxsZjQNsg78UKTOWhGQIkmXqbpgzWOFoUH5NrrNTe+KoIYRJ85DOtGLwjpuKKOivjd090MG18ZcQ63SqQ0TTTr3gGHgahrc/IPzSFFsPiLHWjpCk3EkbL8M+GaSQtJ8jUE7hqfTFXBZdB2ws8Z7qbjSwLY6o3YgvW53GGMH8DBpYOq+iKbQnUG7/v4YWBsuUOPRb6TbtSNHEZUfqeKo7Ku60roSNLanMmIPsvnbNnWy+wuA19g/4YIxwNJpx+FkACnYc9NSjrnLIS39mo4w3ngcM+YcNLIe1bmxOQVxr++BbmbbDj1dQng0JotfZtUNmEMmNFpE3q9xdNYQPfFBMor8DxqDYTJ4UB4MSNfmNnJd1Io9ccDf77AFltyHrKzV7bK/ZcV7YA/kMgxpCU3WEt0DmXWVsMaaMBlv+iwF2ebOaYQODIpbl8rAHTRhfsFfdpZkZSPwlQiwyWRoVYMdl5JZ6jOjlIrmRxMc9rySDlJA16Zf5Ha2fVb9SSMczFuR1qd6fOujpyGaio= - #CF_GLOBAL_API_KEY - - secure: kh18jMJa474a5ihcPgnX/DfiMb1F/vVES1Y2LTOn2khJEpDOAXOkE33GHUrh3aCEf1/Wi09FdXWGzLGcps7DIozGcYNHZDd9iFdud0GUfmDYhEbrnph8GQZx/JghxuRZ0p6NW4PTmyrvCyUly01WK994+tEkKjf7+VZfjaxbXqLOo1zsBgRIAKBST2zXo/eFI89wlp6up5yn8W2gsfon++5Ahtt9zEZYN8QoD26Ii+B05niEEjJ5wkKgvLBY58OCxFp4Gg6kq4AS4kj8+3S7mFn0l4WAoEqTGJEDy43iLhEQgCf0AhZLetPOXVwkUQ2w+nUup1jpCyGUjC7vZKGHMxJXW1V3NtLQTw+Q+TGCYFIBa/yCU0TMInHI9p3VpZl2I6PziqAaUOSoKMI6WkVUy91veb23+pTVKD0N6XQBB1RFZD1eIH9kPCFOoha453RxRYt2iv9ndhd5mNGLGbyDkiOZ18zl4hl/E9aG2Yl/CDaVzVGkKCxTPAHH7z4QKnKZLRyVL7ylktlcDydnAHI7x8/iHRkJF5hpcy3LldOO0DJXBIoIoD5i+Vd7tqCkcWM5E87PQUZeyUACogayrFOs2szhVIPq91TH68TbeLRQicZ4e5VIt8ASJqpalBFBjtI1NKDGrqGGT12pG1QMOdvK0lEIWMwnSxsBa0X0ERqaAuQ= - #CF_EMAIL - - secure: t+IYZ85pjetgRMA8/wdNvQp6vcY62yMA3J/YCVdIrmoT6Zg1rPLy9XObz242Htpj9Cn6g4rWgmYZ+YHmzJJ5rh2q33voMn1hwYUvkj76tOnwDR9Y1nZcYfSk3nly/Tn4U8xdrbt9VylPwztaccUp6WtcdSZ/NQ4MP1TGmmJvjq/wfrRZdyDltas5g+e5YkP4k3hByIm+t7TUb0fKuIVSCktnwUl4FvQvhgZT7tzOecmTE1Kiw7QMbs1B6Mr+DE2eYNBqJC8IGpMGdoCqVjv1vEj3/u8XTUA78kZwrc2vz6uiz6Vr2E4SjR7ryf0y1KCQMDYr5eUMVb3L4HjFpRnJ+93lL4kdoOkEfdpgn2PSck+vEDDpJ2MWXeE5Fzz7AO34sFSbBR90+OiDH32msI7a8bEIZ5y6zCaJmh4eppPhYCH8SffWOTDAzDUrlV0JTmJgyUvY8oCi4bUxYtHVrraRQLg5tk1MJNPRqbi3fhevUMweoeEyzSdCxRmgNjN41KBRVSMUHSyHcEpKALBxHESoPQ/B+54swUBFVZ3q5rbvFln1mKCWd23BQqCft2U+PWT1IcTStbPSNVWFF2mpaeNlDK6gOToF66uz0DHbN81RvydiB5ryBz6gHHnOwtry0dBAQ7eBHkTx5aTWyCl81mvoEbDFio4eYEIVTtJ3xr0KJ/Y= - #CF_FILTERLISTS_ZONE - - secure: a2mR9nIaDs+HdIyShSqigrlydYJ27eJPuNuRG5pZ/kuqlJkbXxsOHwjHXjn22ERQQJKwjXbZxgGQxf9Ef9WmFygTVW5WZdpWcOCE5IZBYSZikwU2M6WO9w3ENvNes8mgcOQM9EoNLZTFJQZB9SNIWhqZysW6jRFxNFdDrI0AdyjG/1u7jzC56zo79/oJs9g25mOaFCqnQWjE9N5/tTqW23MjQBQexCCAMyafvq65Jji8LY624bcyMg0vWNHfPdP0ZUIUhFgkpEBq9+6CjKwNougD0C4FqYFBmB3kVT/sEn6/oc2XdXkp1jEA7sdl1pFss8YrpRBcpbhz5kKePlujkorIr6xgqjJ2N9q2N23V6ekWnLu97ZuivSPfSQ8NPj0WHT4+AWagHRUFmgERtyI74y4UnA68ADmKuQBp1GPzsNhJ/4w3K/Tro0McjbH9ac7v2DfHPdCGBsnv93AK1opVUIB6pdacDqgwQk9/XbTd0wW3t4l4cLlSsgykPxydwA2R6lG+fFyLrviBiLdv+KTzD015y0VY339sPFwarRha2+uUYNcunSZtw0oarqHJQoJvhY1aoF2tBJ4MJG4h87tUecjhDbKSti+l/GNU/3oIMfTDnt/MqaA9Bnt/MwVDZBW0eY6koSzxbfePUOKbvPL8eI8Ax+aYoGKMestjW7sw1tk= -deploy: - skip_cleanup: true - provider: script - script: scripts/deploy.sh - on: - branch: master \ No newline at end of file diff --git a/FilterLists.sln b/FilterLists.sln index a93f225d4..548b9855f 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -44,7 +44,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ops", "ops", "{AF336194-8932-4C99-BF8B-30FF8EC146E9}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore - .travis.yml = .travis.yml azure-pipelines.yml = azure-pipelines.yml codecov.yml = codecov.yml EndProjectSection diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d6f40c5c1..45b06c9b4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,17 +1,12 @@ -# ASP.NET Core -# Build and test ASP.NET Core projects targeting .NET Core. -# Add steps that run tests, create a NuGet package, deploy, and more: -# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core - trigger: -- master + - docker-devops pool: - vmImage: 'Ubuntu-16.04' + vmImage: "Ubuntu-16.04" variables: - buildConfiguration: 'Release' + buildConfiguration: "Release" steps: -- script: dotnet build --configuration $(buildConfiguration) - displayName: 'dotnet build $(buildConfiguration)' + - script: dotnet build --configuration $(buildConfiguration) + displayName: "dotnet build $(buildConfiguration)" diff --git a/codecov.yml b/codecov.yml index 507fc9694..f6272f5f1 100644 --- a/codecov.yml +++ b/codecov.yml @@ -5,4 +5,4 @@ coverage: enabled: no patch: default: - enabled: no \ No newline at end of file + enabled: no diff --git a/docker-compose.yml b/docker-compose.yml index faa602e52..787e01a5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,35 +1,40 @@ -version: '3.7' +version: "3.7" services: - FilterLists.MariaDB: - image: mariadb:latest - environment: - MYSQL_RANDOM_ROOT_PASSWORD: 'yes' - MYSQL_DATABASE: filterlistsdata - MYSQL_USER: filterlists - MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 - command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_520_ci'] - FilterLists.Api: - image: 'filterlists.api' - build: - context: . - dockerfile: src/FilterLists.Api/Dockerfile - expose: - - "80/tcp" - depends_on: - - FilterLists.MariaDB - FilterLists.Web: - image: 'filterlists.web' - build: - context: src/FilterLists.Web - expose: - - "80/tcp" - FilterLists.NGINX: - image: 'nginx:stable-alpine' - build: - context: ./ops/nginx - ports: - - '80:80/tcp' - - '443:443/tcp' - links: - - FilterLists.Api - - FilterLists.Web \ No newline at end of file + FilterLists.MariaDB: + image: mariadb:latest + environment: + MYSQL_RANDOM_ROOT_PASSWORD: "yes" + MYSQL_DATABASE: filterlistsdata + MYSQL_USER: filterlists + MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 + command: + [ + "mysqld", + "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_520_ci", + ] + FilterLists.Api: + image: "filterlists.api" + build: + context: . + dockerfile: src/FilterLists.Api/Dockerfile + expose: + - "80/tcp" + depends_on: + - FilterLists.MariaDB + FilterLists.Web: + image: "filterlists.web" + build: + context: src/FilterLists.Web + expose: + - "80/tcp" + FilterLists.NGINX: + image: "nginx:stable-alpine" + build: + context: ./ops/nginx + ports: + - "80:80/tcp" + - "443:443/tcp" + links: + - FilterLists.Api + - FilterLists.Web From 862e47220b6ac7db757eab916f3e339710ff641a Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 08:54:26 -0600 Subject: [PATCH 21/85] docker-compose build --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 45b06c9b4..e8b52ae5b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,5 +8,5 @@ variables: buildConfiguration: "Release" steps: - - script: dotnet build --configuration $(buildConfiguration) - displayName: "dotnet build $(buildConfiguration)" + - script: docker-compose build --configuration $(buildConfiguration) + displayName: "dotnet-compose build $(buildConfiguration)" From f7487ae19e22d82abe555915dfb3bf9918aa6ddd Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 09:09:41 -0600 Subject: [PATCH 22/85] add minimal base runtime layer --- src/FilterLists.Api/Dockerfile | 5 ++++- src/FilterLists.Web/Dockerfile | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 8e88a6609..292e59804 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,3 +1,6 @@ +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine as base +WORKDIR /app + FROM microsoft/dotnet:2.2-sdk-alpine AS publish WORKDIR /app COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ @@ -13,7 +16,7 @@ COPY src/FilterLists.Api/. ./FilterLists.Api/ WORKDIR /app/FilterLists.Api RUN dotnet publish -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine +FROM base WORKDIR /app COPY --from=publish /out . COPY data ./data/ diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 81ff5d7c8..98cd784fc 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,3 +1,6 @@ +FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine as base +WORKDIR /app + FROM microsoft/dotnet:2.2-sdk-alpine AS publish RUN apk add --update nodejs-npm @@ -8,7 +11,7 @@ RUN dotnet restore COPY . . RUN dotnet publish -c Release -o /out -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine +FROM base WORKDIR /app COPY --from=publish /out . ENV ASPNETCORE_URLS http://+:80 From 81937b317d87aa9bc4025b5b90b35fa315101d03 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 10:12:13 -0600 Subject: [PATCH 23/85] push to Docker Hub --- azure-pipelines.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e8b52ae5b..9a1330ed3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,7 +6,20 @@ pool: variables: buildConfiguration: "Release" + imageName: "FilterLists:$(Build.BuildId)" steps: - - script: docker-compose build --configuration $(buildConfiguration) - displayName: "dotnet-compose build $(buildConfiguration)" + - script: | + dotnet build --configuration $(buildConfiguration) + dotnet publish --configuration $(buildConfiguration) --output out + docker build -f Dockerfile -t $(dockerId)/$(imageName) . + docker login -u $(dockerId) -p $pswd + docker push $(dockerId)/$(imageName) + env: + pswd: $(dockerPassword) + + - task: PublishTestResults@2 + condition: succeededOrFailed() + inputs: + testRunner: VSTest +testResultsFiles: "**/*.trx" From fa5295563a27899dd658bc44ed36a25919089dda Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 10:13:00 -0600 Subject: [PATCH 24/85] remove testing for now --- azure-pipelines.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9a1330ed3..9da918328 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,9 +17,3 @@ steps: docker push $(dockerId)/$(imageName) env: pswd: $(dockerPassword) - - - task: PublishTestResults@2 - condition: succeededOrFailed() - inputs: - testRunner: VSTest -testResultsFiles: "**/*.trx" From b6fefd547f9955f0222360b61dd7152d4f6cd4e2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 10:17:26 -0600 Subject: [PATCH 25/85] use docker-compose --- azure-pipelines.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9da918328..81a011149 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,10 +10,8 @@ variables: steps: - script: | - dotnet build --configuration $(buildConfiguration) - dotnet publish --configuration $(buildConfiguration) --output out - docker build -f Dockerfile -t $(dockerId)/$(imageName) . + docker-compose build docker login -u $(dockerId) -p $pswd - docker push $(dockerId)/$(imageName) + docker-compose push env: pswd: $(dockerPassword) From ac6473fa53f34dc73aa126f0175cf82c9c071ca9 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 10:26:45 -0600 Subject: [PATCH 26/85] link to docker hub repos --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 787e01a5c..9c799d392 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: "--collation-server=utf8mb4_unicode_520_ci", ] FilterLists.Api: - image: "filterlists.api" + image: "collinbarrett/filterlists.api" build: context: . dockerfile: src/FilterLists.Api/Dockerfile @@ -23,7 +23,7 @@ services: depends_on: - FilterLists.MariaDB FilterLists.Web: - image: "filterlists.web" + image: "collinbarrett/filterlists.web" build: context: src/FilterLists.Web expose: From 1acb226212b203f1ed1f4e9b1e1fde514e917f47 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 10:35:47 -0600 Subject: [PATCH 27/85] ignore docker push failures --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 81a011149..c60e32985 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,6 +12,6 @@ steps: - script: | docker-compose build docker login -u $(dockerId) -p $pswd - docker-compose push + docker-compose push --ignore-push-failures env: pswd: $(dockerPassword) From 9dc56ee3debb047218e5e2a786ef17bc7bf041d8 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 21 Jan 2019 11:04:02 -0600 Subject: [PATCH 28/85] move azure-pipelines.yml --- azure-pipelines.yml => ops/azure-pipelines.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename azure-pipelines.yml => ops/azure-pipelines.yml (100%) diff --git a/azure-pipelines.yml b/ops/azure-pipelines.yml similarity index 100% rename from azure-pipelines.yml rename to ops/azure-pipelines.yml From f83f8fb1c074e8a841f3e0adffd07a290a3781d6 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 27 Jan 2019 19:32:44 -0600 Subject: [PATCH 29/85] add prod docker-compose --- docker-compose.dcproj | 4 +--- docker-compose.prod.yml | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 docker-compose.prod.yml diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 56ad2e9ca..baf34dea7 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -9,9 +9,7 @@ filterlists.api - - docker-compose.yml - + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 000000000..4a82b3ee1 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,6 @@ +version: "3.7" +services: + FilterLists.Api: + image: collinbarrett/filterlists.api:latest + FilterLists.Web: + image: collinbarrett/filterlists.web:latest From 34893f0690fd4729c754074d4be73b3ae18e031a Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 27 Jan 2019 19:54:34 -0600 Subject: [PATCH 30/85] fix path to azure-pipelines.yml --- FilterLists.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FilterLists.sln b/FilterLists.sln index 548b9855f..6d3733edf 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -44,7 +44,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ops", "ops", "{AF336194-8932-4C99-BF8B-30FF8EC146E9}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore - azure-pipelines.yml = azure-pipelines.yml + ops\azure-pipelines.yml = ops\azure-pipelines.yml codecov.yml = codecov.yml EndProjectSection EndProject From 1eb86c5a8e458474019ec0828cbfe53e995bd7d1 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 27 Jan 2019 20:15:16 -0600 Subject: [PATCH 31/85] cp visual designer build to yaml --- ops/azure-pipelines.yml | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/ops/azure-pipelines.yml b/ops/azure-pipelines.yml index c60e32985..73fbd3b5b 100644 --- a/ops/azure-pipelines.yml +++ b/ops/azure-pipelines.yml @@ -1,17 +1,28 @@ trigger: - - docker-devops - + - docker-devops +resources: + - + repo: self + clean: true pool: - vmImage: "Ubuntu-16.04" - -variables: - buildConfiguration: "Release" - imageName: "FilterLists:$(Build.BuildId)" - + vmImage: 'Hosted Ubuntu 1604' steps: - - script: | - docker-compose build - docker login -u $(dockerId) -p $pswd - docker-compose push --ignore-push-failures - env: - pswd: $(dockerPassword) + - + task: DockerCompose@0 + displayName: build + inputs: + containerregistrytype: 'Container Registry' + dockerRegistryEndpoint: 'Docker Hub - collinbarrett' + dockerComposeFile: docker-compose.yml + dockerComposeCommand: build + - + task: DockerCompose@0 + displayName: push + inputs: + containerregistrytype: 'Container Registry' + dockerRegistryEndpoint: 'Docker Hub - collinbarrett' + dockerComposeFile: docker-compose.yml + dockerComposeCommand: 'push --ignore-push-failures' + - + task: PublishBuildArtifacts@1 + displayName: publish From 4a75cea7c4e42d66280d625e06afc336bcf7458c Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 25 Apr 2019 19:33:55 -0500 Subject: [PATCH 32/85] rm unused pipelines yml, misc clenaup --- FilterLists.sln | 5 ++--- docker-compose.prod.yml | 3 +++ docker-compose.yml | 16 +++++----------- ops/azure-pipelines.yml | 28 ---------------------------- 4 files changed, 10 insertions(+), 42 deletions(-) delete mode 100644 ops/azure-pipelines.yml diff --git a/FilterLists.sln b/FilterLists.sln index 6d3733edf..debd5aa7b 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2026 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Api", "src\FilterLists.Api\FilterLists.Api.csproj", "{57E4CE18-41F3-48F6-B142-12947FFBA86C}" EndProject @@ -44,7 +44,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ops", "ops", "{AF336194-8932-4C99-BF8B-30FF8EC146E9}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore - ops\azure-pipelines.yml = ops\azure-pipelines.yml codecov.yml = codecov.yml EndProjectSection EndProject diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 4a82b3ee1..cf45102ac 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,6 +1,9 @@ version: "3.7" + services: + FilterLists.Api: image: collinbarrett/filterlists.api:latest + FilterLists.Web: image: collinbarrett/filterlists.web:latest diff --git a/docker-compose.yml b/docker-compose.yml index 9c799d392..0a8eeb1a1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,9 @@ version: "3.7" + services: + FilterLists.MariaDB: - image: mariadb:latest + image: mariadb:10 environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_DATABASE: filterlistsdata @@ -13,6 +15,7 @@ services: "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_520_ci", ] + FilterLists.Api: image: "collinbarrett/filterlists.api" build: @@ -22,19 +25,10 @@ services: - "80/tcp" depends_on: - FilterLists.MariaDB + FilterLists.Web: image: "collinbarrett/filterlists.web" build: context: src/FilterLists.Web expose: - "80/tcp" - FilterLists.NGINX: - image: "nginx:stable-alpine" - build: - context: ./ops/nginx - ports: - - "80:80/tcp" - - "443:443/tcp" - links: - - FilterLists.Api - - FilterLists.Web diff --git a/ops/azure-pipelines.yml b/ops/azure-pipelines.yml deleted file mode 100644 index 73fbd3b5b..000000000 --- a/ops/azure-pipelines.yml +++ /dev/null @@ -1,28 +0,0 @@ -trigger: - - docker-devops -resources: - - - repo: self - clean: true -pool: - vmImage: 'Hosted Ubuntu 1604' -steps: - - - task: DockerCompose@0 - displayName: build - inputs: - containerregistrytype: 'Container Registry' - dockerRegistryEndpoint: 'Docker Hub - collinbarrett' - dockerComposeFile: docker-compose.yml - dockerComposeCommand: build - - - task: DockerCompose@0 - displayName: push - inputs: - containerregistrytype: 'Container Registry' - dockerRegistryEndpoint: 'Docker Hub - collinbarrett' - dockerComposeFile: docker-compose.yml - dockerComposeCommand: 'push --ignore-push-failures' - - - task: PublishBuildArtifacts@1 - displayName: publish From c78cf2cd1856a07da0111ce38f13ac75ab7b1fe0 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 27 Apr 2019 10:20:41 -0500 Subject: [PATCH 33/85] update API build dockerfile --- src/FilterLists.Api/Dockerfile | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 292e59804..6e5ecd471 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,24 +1,14 @@ -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine as base +# docker build -f FilterLists.Api/Dockerfile . + +FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build WORKDIR /app -FROM microsoft/dotnet:2.2-sdk-alpine AS publish -WORKDIR /app -COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ -COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ -COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ -WORKDIR /app/FilterLists.Api -RUN dotnet restore +COPY FilterLists.Data/. ./FilterLists.Data/ +COPY FilterLists.Services/. ./FilterLists.Services/ +COPY FilterLists.Api/. ./FilterLists.Api/ +RUN dotnet publish FilterLists.Api/*.csproj -c Release -o out +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine WORKDIR /app -COPY src/FilterLists.Data/. ./FilterLists.Data/ -COPY src/FilterLists.Services/. ./FilterLists.Services/ -COPY src/FilterLists.Api/. ./FilterLists.Api/ -WORKDIR /app/FilterLists.Api -RUN dotnet publish -c Release -o /out - -FROM base -WORKDIR /app -COPY --from=publish /out . -COPY data ./data/ -ENV ASPNETCORE_URLS http://+:80 +COPY --from=build /app/FilterLists.Api/out ./ ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file From ca071962efee2bff527d0b3937db30372d2ccd87 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 27 Apr 2019 10:46:58 -0500 Subject: [PATCH 34/85] update docker comment --- src/FilterLists.Api/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 6e5ecd471..1bd04b954 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,4 +1,5 @@ -# docker build -f FilterLists.Api/Dockerfile . +# Context: src +# Command: docker build -f FilterLists.Api/Dockerfile . FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build WORKDIR /app From e0acf5c5fd7e184e7512838e996d5f2cdbcfc15c Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 27 Apr 2019 11:21:23 -0500 Subject: [PATCH 35/85] updates to API docker-compose --- docker-compose.dcproj | 2 +- docker-compose.filterlists-api.yml | 36 ++++++++++++++++++++++++++++++ docker-compose.yml | 34 ---------------------------- 3 files changed, 37 insertions(+), 35 deletions(-) create mode 100644 docker-compose.filterlists-api.yml delete mode 100644 docker-compose.yml diff --git a/docker-compose.dcproj b/docker-compose.dcproj index baf34dea7..ff04b2d1c 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -10,7 +10,7 @@ - + \ No newline at end of file diff --git a/docker-compose.filterlists-api.yml b/docker-compose.filterlists-api.yml new file mode 100644 index 000000000..220ebe3bc --- /dev/null +++ b/docker-compose.filterlists-api.yml @@ -0,0 +1,36 @@ +version: "3.7" + +services: + app_filterlists-api: + image: collinbarrett/filterlists.api + build: + context: src + dockerfile: FilterLists.Api/Dockerfile + networks: + - filterlists-api + depends_on: + - mariadb_filterlists-api + + mariadb_filterlists-api: + image: mariadb:10 + networks: + - filterlists-api + volumes: + - filterlists-api_data:/var/lib/mysql + environment: + MYSQL_RANDOM_ROOT_PASSWORD: "yes" + MYSQL_DATABASE: filterlistsdata + MYSQL_USER: filterlists + MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 + command: + [ + "mysqld", + "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_520_ci" + ] + +networks: + filterlists-api: + +volumes: + filterlists-api_data: diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 0a8eeb1a1..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: "3.7" - -services: - - FilterLists.MariaDB: - image: mariadb:10 - environment: - MYSQL_RANDOM_ROOT_PASSWORD: "yes" - MYSQL_DATABASE: filterlistsdata - MYSQL_USER: filterlists - MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 - command: - [ - "mysqld", - "--character-set-server=utf8mb4", - "--collation-server=utf8mb4_unicode_520_ci", - ] - - FilterLists.Api: - image: "collinbarrett/filterlists.api" - build: - context: . - dockerfile: src/FilterLists.Api/Dockerfile - expose: - - "80/tcp" - depends_on: - - FilterLists.MariaDB - - FilterLists.Web: - image: "collinbarrett/filterlists.web" - build: - context: src/FilterLists.Web - expose: - - "80/tcp" From 0d70622df3e447d1fe2364511784c099f798c105 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 27 Apr 2019 11:30:35 -0500 Subject: [PATCH 36/85] docker-compose tweaks --- docker-compose.filterlists-api.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.filterlists-api.yml b/docker-compose.filterlists-api.yml index 220ebe3bc..2a2c51844 100644 --- a/docker-compose.filterlists-api.yml +++ b/docker-compose.filterlists-api.yml @@ -1,7 +1,7 @@ version: "3.7" services: - app_filterlists-api: + filterlists-api: image: collinbarrett/filterlists.api build: context: src @@ -16,7 +16,7 @@ services: networks: - filterlists-api volumes: - - filterlists-api_data:/var/lib/mysql + - filterlists-api:/var/lib/mysql environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_DATABASE: filterlistsdata @@ -33,4 +33,4 @@ networks: filterlists-api: volumes: - filterlists-api_data: + filterlists-api: From 116279517aea1dffd0202cb6bb28d5088a7c7f31 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 27 Apr 2019 16:12:12 -0500 Subject: [PATCH 37/85] compose API now working --- docker-compose.filterlists-api.yml | 9 +++++-- src/FilterLists.Api/Dockerfile | 16 ++++++++----- src/FilterLists.Api/appsettings.json | 36 ---------------------------- 3 files changed, 17 insertions(+), 44 deletions(-) delete mode 100644 src/FilterLists.Api/appsettings.json diff --git a/docker-compose.filterlists-api.yml b/docker-compose.filterlists-api.yml index 2a2c51844..037bc5017 100644 --- a/docker-compose.filterlists-api.yml +++ b/docker-compose.filterlists-api.yml @@ -4,12 +4,17 @@ services: filterlists-api: image: collinbarrett/filterlists.api build: - context: src - dockerfile: FilterLists.Api/Dockerfile + context: . + dockerfile: src/FilterLists.Api/Dockerfile + ports: + - "80:80" + - "443:443" networks: - filterlists-api depends_on: - mariadb_filterlists-api + environment: + ConnectionStrings__FilterListsConnection: "Server=mariadb_filterlists-api;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" mariadb_filterlists-api: image: mariadb:10 diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 1bd04b954..1c2890b5c 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,15 +1,19 @@ -# Context: src -# Command: docker build -f FilterLists.Api/Dockerfile . +# Context: . +# Command: docker build -f src/FilterLists.Api/Dockerfile . FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build WORKDIR /app -COPY FilterLists.Data/. ./FilterLists.Data/ -COPY FilterLists.Services/. ./FilterLists.Services/ -COPY FilterLists.Api/. ./FilterLists.Api/ -RUN dotnet publish FilterLists.Api/*.csproj -c Release -o out +COPY src/FilterLists.Data/. ./FilterLists.Data/ +COPY src/FilterLists.Services/. ./FilterLists.Services/ +COPY src/FilterLists.Api/. ./FilterLists.Api/ +RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o out FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine WORKDIR /app COPY --from=build /app/FilterLists.Api/out ./ +COPY data/. ./data/ +ENV DataDirectory:Path="data" +EXPOSE 80 +EXPOSE 443 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file diff --git a/src/FilterLists.Api/appsettings.json b/src/FilterLists.Api/appsettings.json deleted file mode 100644 index 0e5529e9b..000000000 --- a/src/FilterLists.Api/appsettings.json +++ /dev/null @@ -1,36 +0,0 @@ -/* - WARNING - This file will be checked into source control. Do not change this file. - Use this as an example file only. - Use {env.EnvironmentName}.json as your configuration file as it will not be checked into source control. - {env.EnvironmentName} values : development, staging, production -*/ -{ - "ApplicationInsights": { - "InstrumentationKey": "" - }, - "ConnectionStrings": { - "FilterListsConnection": "Server=FilterLists.MariaDB;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" - }, - "DataDirectory": { - "Path": "data" - }, - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - }, - "SendGrid": { - "ApiKey": "", - "From": { - "Name": "", - "EmailAddress": "" - }, - "To": { - "Name": "", - "EmailAddress": "" - } - } -} \ No newline at end of file From 758c5e637bfb34384c55e8eceef341b87251fcdf Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 08:09:06 -0500 Subject: [PATCH 38/85] wip misc docker updates --- .dockerignore | 16 +++- FilterLists.Api.sln | 78 +++++++++++++++++++ FilterLists.sln | 42 ---------- docker-compose.dcproj | 16 ---- ....filterlists-api.yml => docker-compose.yml | 17 +++- ops/nginx/Dockerfile | 2 - ops/nginx/dev/conf.d/filterlists-api.conf | 15 ++++ ops/nginx/nginx.conf | 30 ------- src/FilterLists.Api/Dockerfile | 32 ++++++-- .../FilterLists.Data.Tests.csproj | 1 - 10 files changed, 143 insertions(+), 106 deletions(-) create mode 100644 FilterLists.Api.sln delete mode 100644 docker-compose.dcproj rename docker-compose.filterlists-api.yml => docker-compose.yml (80%) delete mode 100644 ops/nginx/Dockerfile create mode 100644 ops/nginx/dev/conf.d/filterlists-api.conf delete mode 100644 ops/nginx/nginx.conf diff --git a/.dockerignore b/.dockerignore index 43e8ab1e3..774e6e7d4 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,10 +1,18 @@ -.dockerignore -.env .git +.github +.gitattributes .gitignore .vs .vscode -docker-compose.yml -docker-compose.*.yml +images +ops +scripts */bin */obj +codecov.yml +.dockerignore +docker-compose.yml +docker-compose.*.yml +*.DotSettings* +FilterLists.postman_collection.json +LICENSE \ No newline at end of file diff --git a/FilterLists.Api.sln b/FilterLists.Api.sln new file mode 100644 index 000000000..8f9edffbd --- /dev/null +++ b/FilterLists.Api.sln @@ -0,0 +1,78 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Api", "src\FilterLists.Api\FilterLists.Api.csproj", "{0115C4AD-63F2-4075-98F4-DF97A1A961B0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data", "src\FilterLists.Data\FilterLists.Data.csproj", "{234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services", "src\FilterLists.Services\FilterLists.Services.csproj", "{8FACA060-B344-46C5-8614-5CA4273D38C4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests", "tests\FilterLists.Services.Tests\FilterLists.Services.Tests.csproj", "{2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B08FB2A1-A903-4C99-83E7-4991B49A9841}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{5D12BA97-CC9B-4195-8D9A-35012899D91C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{95556DA4-5C8B-43E4-B0E7-29DCF7F81F8A}" + ProjectSection(SolutionItems) = preProject + data\Dependent.json = data\Dependent.json + data\FilterList.json = data\FilterList.json + data\FilterListLanguage.json = data\FilterListLanguage.json + data\FilterListMaintainer.json = data\FilterListMaintainer.json + data\FilterListTag.json = data\FilterListTag.json + data\Fork.json = data\Fork.json + data\Language.json = data\Language.json + data\License.json = data\License.json + data\Maintainer.json = data\Maintainer.json + data\Merge.json = data\Merge.json + data\Software.json = data\Software.json + data\SoftwareSyntax.json = data\SoftwareSyntax.json + data\Syntax.json = data\Syntax.json + data\Tag.json = data\Tag.json + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Release|Any CPU.Build.0 = Release|Any CPU + {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Release|Any CPU.Build.0 = Release|Any CPU + {8FACA060-B344-46C5-8614-5CA4273D38C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FACA060-B344-46C5-8614-5CA4273D38C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FACA060-B344-46C5-8614-5CA4273D38C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FACA060-B344-46C5-8614-5CA4273D38C4}.Release|Any CPU.Build.0 = Release|Any CPU + {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Release|Any CPU.Build.0 = Release|Any CPU + {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0115C4AD-63F2-4075-98F4-DF97A1A961B0} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} + {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} + {8FACA060-B344-46C5-8614-5CA4273D38C4} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} + {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1} = {5D12BA97-CC9B-4195-8D9A-35012899D91C} + {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0} = {5D12BA97-CC9B-4195-8D9A-35012899D91C} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2A61003B-647A-4A20-A9D0-BE5AF9077426} + EndGlobalSection +EndGlobal diff --git a/FilterLists.sln b/FilterLists.sln index debd5aa7b..37aace757 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -35,43 +35,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DA34DED7-B352-4855-9C7B-9E3D983DBE2E}" EndProject -Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{94FF757E-0A78-4E9C-971E-A0709206AC27}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CE4AB25B-5501-42E9-B8B4-87B9C20472AC}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{041F9CFA-B6F7-4DEB-9441-829DE697B1BB}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ops", "ops", "{AF336194-8932-4C99-BF8B-30FF8EC146E9}" - ProjectSection(SolutionItems) = preProject - .gitignore = .gitignore - codecov.yml = codecov.yml - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nginx", "nginx", "{E11FDECE-A7F7-4ECB-A61F-83C124466412}" - ProjectSection(SolutionItems) = preProject - ops\nginx\Dockerfile = ops\nginx\Dockerfile - ops\nginx\nginx.conf = ops\nginx\nginx.conf - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mariadb", "mariadb", "{982092B7-CCE2-4BD1-9240-E59D0817F5CF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{EA7CB599-AE37-429E-A44D-E5C741F9FB3D}" - ProjectSection(SolutionItems) = preProject - ops\scripts\build.sh = ops\scripts\build.sh - ops\scripts\cron = ops\scripts\cron - ops\scripts\deploy.sh = ops\scripts\deploy.sh - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sql", "sql", "{D44C45FF-1AF9-4404-8510-418D9981B7CD}" - ProjectSection(SolutionItems) = preProject - ops\scripts\sql\createDb.sql = ops\scripts\sql\createDb.sql - ops\scripts\sql\duplicateRules.sql = ops\scripts\sql\duplicateRules.sql - ops\scripts\sql\orphanedSnapshotsRules.sql = ops\scripts\sql\orphanedSnapshotsRules.sql - ops\scripts\sql\resetSnapshotsRules.sql = ops\scripts\sql\resetSnapshotsRules.sql - ops\scripts\sql\snapshotMetrics.sql = ops\scripts\sql\snapshotMetrics.sql - ops\scripts\sql\snapshotTimeAnalysis.sql = ops\scripts\sql\snapshotTimeAnalysis.sql - EndProjectSection -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -106,10 +73,6 @@ Global {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.Build.0 = Release|Any CPU - {94FF757E-0A78-4E9C-971E-A0709206AC27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94FF757E-0A78-4E9C-971E-A0709206AC27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94FF757E-0A78-4E9C-971E-A0709206AC27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94FF757E-0A78-4E9C-971E-A0709206AC27}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -122,11 +85,6 @@ Global {4F39D132-498D-4A93-9F6C-1C604718300D} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} {7D9F0D85-E906-401A-BDAD-724440B34567} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} {DA34DED7-B352-4855-9C7B-9E3D983DBE2E} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} - {94FF757E-0A78-4E9C-971E-A0709206AC27} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} - {E11FDECE-A7F7-4ECB-A61F-83C124466412} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} - {982092B7-CCE2-4BD1-9240-E59D0817F5CF} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} - {EA7CB599-AE37-429E-A44D-E5C741F9FB3D} = {AF336194-8932-4C99-BF8B-30FF8EC146E9} - {D44C45FF-1AF9-4404-8510-418D9981B7CD} = {EA7CB599-AE37-429E-A44D-E5C741F9FB3D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8A31B449-52DD-4445-A9C4-033A24E25308} diff --git a/docker-compose.dcproj b/docker-compose.dcproj deleted file mode 100644 index ff04b2d1c..000000000 --- a/docker-compose.dcproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - 2.1 - Linux - 94ff757e-0a78-4e9c-971e-a0709206ac27 - LaunchBrowser - {Scheme}://localhost:{ServicePort} - filterlists.api - - - - - - - \ No newline at end of file diff --git a/docker-compose.filterlists-api.yml b/docker-compose.yml similarity index 80% rename from docker-compose.filterlists-api.yml rename to docker-compose.yml index 037bc5017..52a9194b0 100644 --- a/docker-compose.filterlists-api.yml +++ b/docker-compose.yml @@ -1,15 +1,24 @@ version: "3.7" services: + nginx: + image: nginx:alpine + restart: always + ports: + - "80:80" + networks: + - reverse-proxy + volumes: + - ./ops/nginx/dev/conf.d:/etc/nginx/conf.d:ro + filterlists-api: image: collinbarrett/filterlists.api + restart: always build: context: . dockerfile: src/FilterLists.Api/Dockerfile - ports: - - "80:80" - - "443:443" networks: + - reverse-proxy - filterlists-api depends_on: - mariadb_filterlists-api @@ -18,6 +27,7 @@ services: mariadb_filterlists-api: image: mariadb:10 + restart: always networks: - filterlists-api volumes: @@ -35,6 +45,7 @@ services: ] networks: + reverse-proxy: filterlists-api: volumes: diff --git a/ops/nginx/Dockerfile b/ops/nginx/Dockerfile deleted file mode 100644 index fbf884847..000000000 --- a/ops/nginx/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM nginx:stable-alpine -COPY nginx.conf /etc/nginx/nginx.conf \ No newline at end of file diff --git a/ops/nginx/dev/conf.d/filterlists-api.conf b/ops/nginx/dev/conf.d/filterlists-api.conf new file mode 100644 index 000000000..75f64fc2d --- /dev/null +++ b/ops/nginx/dev/conf.d/filterlists-api.conf @@ -0,0 +1,15 @@ +server { + listen 80; + + location ^~ /api { + rewrite ^/api/(.*)$ /$1 break; + proxy_pass http://filterlists-api:5000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} \ No newline at end of file diff --git a/ops/nginx/nginx.conf b/ops/nginx/nginx.conf deleted file mode 100644 index 3a148667b..000000000 --- a/ops/nginx/nginx.conf +++ /dev/null @@ -1,30 +0,0 @@ -worker_processes 4; - -events { worker_connections 1024; } - -http { - sendfile on; - - server { - listen 80; - - location ^~ /api { - rewrite ^/api/(.*)$ /$1 break; - proxy_pass http://FilterLists.Api:80; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $server_name; - } - - location / { - proxy_pass http://FilterLists.Web:80; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $server_name; - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 1c2890b5c..01f069eac 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -2,18 +2,34 @@ # Command: docker build -f src/FilterLists.Api/Dockerfile . FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build -WORKDIR /app +# restore +COPY ./FilterLists.Api.sln ./ +COPY src/*/*.csproj ./ +RUN for file in $(ls *.csproj); do mkdir -p src/${file%.*}/ && mv $file src/${file%.*}/; done +COPY tests/*/*.csproj ./ +RUN for file in $(ls *.csproj); do mkdir -p tests/${file%.*}/ && mv $file tests/${file%.*}/; done +RUN dotnet restore + +# build COPY src/FilterLists.Data/. ./FilterLists.Data/ COPY src/FilterLists.Services/. ./FilterLists.Services/ COPY src/FilterLists.Api/. ./FilterLists.Api/ -RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o out +COPY tests/FilterLists.Data.Tests/. ./tests/FilterLists.Data.Tests/ +COPY tests/FilterLists.Services.Tests/. ./tests/FilterLists.Services.Tests/ +RUN dotnet build -c Release --no-restore +# test +RUN dotnet test "./tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj" -c Release --no-build --no-restore +RUN dotnet test "./tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj" -c Release --no-build --no-restore + +# publish +RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o out --no-build --no-restore + +# run FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine -WORKDIR /app -COPY --from=build /app/FilterLists.Api/out ./ -COPY data/. ./data/ ENV DataDirectory:Path="data" -EXPOSE 80 -EXPOSE 443 -ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] \ No newline at end of file +ENV ASPNETCORE_URLS http://+:5000 +EXPOSE 5000 +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +COPY --from=build /FilterLists.Api/out ./ diff --git a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj index a35662227..8d8e6a229 100644 --- a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj +++ b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj @@ -38,7 +38,6 @@ - From 1065b9d31a15cc3c36d33f38576a09c12eb63f44 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 08:11:37 -0500 Subject: [PATCH 39/85] dockerignore patch --- .dockerignore | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.dockerignore b/.dockerignore index 774e6e7d4..0ff7b9621 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,13 +6,12 @@ .vscode images ops -scripts -*/bin -*/obj codecov.yml .dockerignore docker-compose.yml docker-compose.*.yml *.DotSettings* FilterLists.postman_collection.json -LICENSE \ No newline at end of file +LICENSE +*/bin +*/obj \ No newline at end of file From 8180eb9f22aa3c23ca70abca043e6839c0324e48 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 14:12:37 -0500 Subject: [PATCH 40/85] API docker build updates --- .dockerignore | 16 ++--- FilterLists.Api.sln | 78 ---------------------- src/FilterLists.Api/Dockerfile | 48 ++++++++----- src/FilterLists.Api/FilterLists.Api.csproj | 5 +- 4 files changed, 41 insertions(+), 106 deletions(-) delete mode 100644 FilterLists.Api.sln diff --git a/.dockerignore b/.dockerignore index 0ff7b9621..31dc9509d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,11 +1,11 @@ -.git -.github +**/.git +**/.github .gitattributes .gitignore -.vs -.vscode -images -ops +**/.vs +**/.vscode +**/images +**/ops codecov.yml .dockerignore docker-compose.yml @@ -13,5 +13,5 @@ docker-compose.*.yml *.DotSettings* FilterLists.postman_collection.json LICENSE -*/bin -*/obj \ No newline at end of file +**/bin +**/obj diff --git a/FilterLists.Api.sln b/FilterLists.Api.sln deleted file mode 100644 index 8f9edffbd..000000000 --- a/FilterLists.Api.sln +++ /dev/null @@ -1,78 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.202 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Api", "src\FilterLists.Api\FilterLists.Api.csproj", "{0115C4AD-63F2-4075-98F4-DF97A1A961B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data", "src\FilterLists.Data\FilterLists.Data.csproj", "{234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services", "src\FilterLists.Services\FilterLists.Services.csproj", "{8FACA060-B344-46C5-8614-5CA4273D38C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests", "tests\FilterLists.Services.Tests\FilterLists.Services.Tests.csproj", "{2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B08FB2A1-A903-4C99-83E7-4991B49A9841}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{5D12BA97-CC9B-4195-8D9A-35012899D91C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{95556DA4-5C8B-43E4-B0E7-29DCF7F81F8A}" - ProjectSection(SolutionItems) = preProject - data\Dependent.json = data\Dependent.json - data\FilterList.json = data\FilterList.json - data\FilterListLanguage.json = data\FilterListLanguage.json - data\FilterListMaintainer.json = data\FilterListMaintainer.json - data\FilterListTag.json = data\FilterListTag.json - data\Fork.json = data\Fork.json - data\Language.json = data\Language.json - data\License.json = data\License.json - data\Maintainer.json = data\Maintainer.json - data\Merge.json = data\Merge.json - data\Software.json = data\Software.json - data\SoftwareSyntax.json = data\SoftwareSyntax.json - data\Syntax.json = data\Syntax.json - data\Tag.json = data\Tag.json - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0115C4AD-63F2-4075-98F4-DF97A1A961B0}.Release|Any CPU.Build.0 = Release|Any CPU - {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD}.Release|Any CPU.Build.0 = Release|Any CPU - {8FACA060-B344-46C5-8614-5CA4273D38C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FACA060-B344-46C5-8614-5CA4273D38C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FACA060-B344-46C5-8614-5CA4273D38C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FACA060-B344-46C5-8614-5CA4273D38C4}.Release|Any CPU.Build.0 = Release|Any CPU - {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1}.Release|Any CPU.Build.0 = Release|Any CPU - {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {0115C4AD-63F2-4075-98F4-DF97A1A961B0} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} - {234B42ED-DE64-427A-9FAA-A4B4DA25BBFD} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} - {8FACA060-B344-46C5-8614-5CA4273D38C4} = {B08FB2A1-A903-4C99-83E7-4991B49A9841} - {DB1E6B87-DF71-47B8-9235-BFCD1496EFA1} = {5D12BA97-CC9B-4195-8D9A-35012899D91C} - {2ACC8D42-9E7D-4447-BC2B-9449B8981CF0} = {5D12BA97-CC9B-4195-8D9A-35012899D91C} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {2A61003B-647A-4A20-A9D0-BE5AF9077426} - EndGlobalSection -EndGlobal diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 01f069eac..277bd51c4 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -4,32 +4,44 @@ FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore -COPY ./FilterLists.Api.sln ./ -COPY src/*/*.csproj ./ -RUN for file in $(ls *.csproj); do mkdir -p src/${file%.*}/ && mv $file src/${file%.*}/; done -COPY tests/*/*.csproj ./ -RUN for file in $(ls *.csproj); do mkdir -p tests/${file%.*}/ && mv $file tests/${file%.*}/; done +WORKDIR /src/ +COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ +COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ +COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ +WORKDIR /src/FilterLists.Api/ RUN dotnet restore -# build +# publish +WORKDIR /src/ COPY src/FilterLists.Data/. ./FilterLists.Data/ COPY src/FilterLists.Services/. ./FilterLists.Services/ COPY src/FilterLists.Api/. ./FilterLists.Api/ -COPY tests/FilterLists.Data.Tests/. ./tests/FilterLists.Data.Tests/ -COPY tests/FilterLists.Services.Tests/. ./tests/FilterLists.Services.Tests/ -RUN dotnet build -c Release --no-restore +WORKDIR /src/FilterLists.Api/ +RUN dotnet publish -c Release -o out --no-restore -# test -RUN dotnet test "./tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj" -c Release --no-build --no-restore -RUN dotnet test "./tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj" -c Release --no-build --no-restore +# restore data tests +# FROM build AS test-data +# COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./tests/FilterLists.Data.Tests/ +# RUN dotnet restore tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj -# publish -RUN dotnet publish FilterLists.Api/FilterLists.Api.csproj -c Release -o out --no-build --no-restore +# build data tests +# COPY tests/FilterLists.Data.Tests/. ./tests/FilterLists.Data.Tests/ +# RUN dotnet build tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj -c Release --no-restore +# ENTRYPOINT ["dotnet", "test", "./tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj"] + +# restore services tests +# FROM build AS test-services +# COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./tests/FilterLists.Services.Tests/ +# RUN dotnet restore tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj + +# build services tests +# COPY tests/FilterLists.Services.Tests/. ./tests/FilterLists.Services.Tests/ +# RUN dotnet build tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj -c Release --no-restore +# ENTRYPOINT ["dotnet", "test", "./tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj"] # run -FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine -ENV DataDirectory:Path="data" -ENV ASPNETCORE_URLS http://+:5000 +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] -COPY --from=build /FilterLists.Api/out ./ +COPY --from=build /src/FilterLists.Api/out ./ +COPY data/. ./data/ diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index f628b1253..9ecbb0576 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -18,8 +18,9 @@ git https://github.com/collinbarrett/FilterLists false - Linux - ..\..\docker-compose.dcproj + + Exe + From 2398bd76c9090904f6e388e1ff007b2562e19abc Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 15:15:12 -0500 Subject: [PATCH 41/85] docker API updates --- FilterLists.Api.sln | 81 ++++++++++++++++++++++++++++++++++ src/FilterLists.Api/Dockerfile | 35 +++++++-------- 2 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 FilterLists.Api.sln diff --git a/FilterLists.Api.sln b/FilterLists.Api.sln new file mode 100644 index 000000000..734be577b --- /dev/null +++ b/FilterLists.Api.sln @@ -0,0 +1,81 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Api", "src\FilterLists.Api\FilterLists.Api.csproj", "{57E4CE18-41F3-48F6-B142-12947FFBA86C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data", "src\FilterLists.Data\FilterLists.Data.csproj", "{944ADE8F-18E3-4DB8-9098-6A55E026EAC1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services", "src\FilterLists.Services\FilterLists.Services.csproj", "{9F296ECF-97C9-47E6-A794-5AD900ECFE6C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data", "data", "{8C3C7C63-F5EF-4E4E-B9BF-47F6EA7D2CBD}" + ProjectSection(SolutionItems) = preProject + data\Dependent.json = data\Dependent.json + data\FilterList.json = data\FilterList.json + data\FilterListLanguage.json = data\FilterListLanguage.json + data\FilterListMaintainer.json = data\FilterListMaintainer.json + data\FilterListTag.json = data\FilterListTag.json + data\Fork.json = data\Fork.json + data\Language.json = data\Language.json + data\License.json = data\License.json + data\Maintainer.json = data\Maintainer.json + data\Merge.json = data\Merge.json + data\README.md = data\README.md + data\Software.json = data\Software.json + data\SoftwareSyntax.json = data\SoftwareSyntax.json + data\Syntax.json = data\Syntax.json + data\Tag.json = data\Tag.json + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Services.Tests", "tests\FilterLists.Services.Tests\FilterLists.Services.Tests.csproj", "{7D9F0D85-E906-401A-BDAD-724440B34567}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Data.Tests", "tests\FilterLists.Data.Tests\FilterLists.Data.Tests.csproj", "{DA34DED7-B352-4855-9C7B-9E3D983DBE2E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CE4AB25B-5501-42E9-B8B4-87B9C20472AC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{041F9CFA-B6F7-4DEB-9441-829DE697B1BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57E4CE18-41F3-48F6-B142-12947FFBA86C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57E4CE18-41F3-48F6-B142-12947FFBA86C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57E4CE18-41F3-48F6-B142-12947FFBA86C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57E4CE18-41F3-48F6-B142-12947FFBA86C}.Release|Any CPU.Build.0 = Release|Any CPU + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1}.Release|Any CPU.Build.0 = Release|Any CPU + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C}.Release|Any CPU.Build.0 = Release|Any CPU + {7D9F0D85-E906-401A-BDAD-724440B34567}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D9F0D85-E906-401A-BDAD-724440B34567}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D9F0D85-E906-401A-BDAD-724440B34567}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D9F0D85-E906-401A-BDAD-724440B34567}.Release|Any CPU.Build.0 = Release|Any CPU + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {57E4CE18-41F3-48F6-B142-12947FFBA86C} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {944ADE8F-18E3-4DB8-9098-6A55E026EAC1} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {9F296ECF-97C9-47E6-A794-5AD900ECFE6C} = {CE4AB25B-5501-42E9-B8B4-87B9C20472AC} + {7D9F0D85-E906-401A-BDAD-724440B34567} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} + {DA34DED7-B352-4855-9C7B-9E3D983DBE2E} = {041F9CFA-B6F7-4DEB-9441-829DE697B1BB} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8A31B449-52DD-4445-A9C4-033A24E25308} + EndGlobalSection + GlobalSection(NDepend) = preSolution + Project = ".\FilterLists.ndproj" + EndGlobalSection +EndGlobal diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 277bd51c4..dcc9f4a68 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -4,11 +4,15 @@ FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore +COPY FilterLists.Api.sln ./ WORKDIR /src/ COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ -WORKDIR /src/FilterLists.Api/ +WORKDIR /tests/ +COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./FilterLists.Data.Tests/ +COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./FilterLists.Services.Tests/ +WORKDIR / RUN dotnet restore # publish @@ -19,29 +23,24 @@ COPY src/FilterLists.Api/. ./FilterLists.Api/ WORKDIR /src/FilterLists.Api/ RUN dotnet publish -c Release -o out --no-restore -# restore data tests -# FROM build AS test-data -# COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./tests/FilterLists.Data.Tests/ -# RUN dotnet restore tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj - # build data tests -# COPY tests/FilterLists.Data.Tests/. ./tests/FilterLists.Data.Tests/ -# RUN dotnet build tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj -c Release --no-restore -# ENTRYPOINT ["dotnet", "test", "./tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj"] - -# restore services tests -# FROM build AS test-services -# COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./tests/FilterLists.Services.Tests/ -# RUN dotnet restore tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj +FROM build AS test-data +WORKDIR /tests/FilterLists.Data.Tests/ +COPY tests/FilterLists.Data.Tests/. ./ +RUN dotnet build -c Release --no-restore +ENTRYPOINT ["dotnet", "test"] # build services tests -# COPY tests/FilterLists.Services.Tests/. ./tests/FilterLists.Services.Tests/ -# RUN dotnet build tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj -c Release --no-restore -# ENTRYPOINT ["dotnet", "test", "./tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj"] +FROM build AS test-services +WORKDIR /tests/FilterLists.Services.Tests/ +COPY tests/FilterLists.Services.Tests/. ./ +RUN dotnet build -c Release --no-restore +ENTRYPOINT ["dotnet", "test"] # run FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime -EXPOSE 5000 +ENV DataDirectory__Path "data" ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +EXPOSE 5000 COPY --from=build /src/FilterLists.Api/out ./ COPY data/. ./data/ From 0b33305fdf167d69bf62897e5bf59bb5c55d8b39 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 15:35:00 -0500 Subject: [PATCH 42/85] fix api port --- src/FilterLists.Api/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index dcc9f4a68..56e508765 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -39,8 +39,9 @@ ENTRYPOINT ["dotnet", "test"] # run FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime -ENV DataDirectory__Path "data" ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +ENV DataDirectory__Path "data" +ENV ASPNETCORE_URLS "http://*:5000" EXPOSE 5000 COPY --from=build /src/FilterLists.Api/out ./ COPY data/. ./data/ From fc4f52b2da7aac6922077f97c65efcd4bf60e2c7 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:11:57 -0500 Subject: [PATCH 43/85] re-orgs --- .dockerignore | 1 - docker-compose.yml | 2 +- .../FilterLists.postman_collection.json | 0 ops/nginx/{dev => }/conf.d/filterlists-api.conf | 2 +- 4 files changed, 2 insertions(+), 3 deletions(-) rename FilterLists.postman_collection.json => ops/FilterLists.postman_collection.json (100%) rename ops/nginx/{dev => }/conf.d/filterlists-api.conf (93%) diff --git a/.dockerignore b/.dockerignore index 31dc9509d..b8ee7703b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,7 +11,6 @@ codecov.yml docker-compose.yml docker-compose.*.yml *.DotSettings* -FilterLists.postman_collection.json LICENSE **/bin **/obj diff --git a/docker-compose.yml b/docker-compose.yml index 52a9194b0..37d25a815 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: networks: - reverse-proxy volumes: - - ./ops/nginx/dev/conf.d:/etc/nginx/conf.d:ro + - ./ops/nginx/conf.d:/etc/nginx/conf.d:ro filterlists-api: image: collinbarrett/filterlists.api diff --git a/FilterLists.postman_collection.json b/ops/FilterLists.postman_collection.json similarity index 100% rename from FilterLists.postman_collection.json rename to ops/FilterLists.postman_collection.json diff --git a/ops/nginx/dev/conf.d/filterlists-api.conf b/ops/nginx/conf.d/filterlists-api.conf similarity index 93% rename from ops/nginx/dev/conf.d/filterlists-api.conf rename to ops/nginx/conf.d/filterlists-api.conf index 75f64fc2d..7da027fcf 100644 --- a/ops/nginx/dev/conf.d/filterlists-api.conf +++ b/ops/nginx/conf.d/filterlists-api.conf @@ -1,5 +1,5 @@ server { - listen 80; + listen 80 default_server; location ^~ /api { rewrite ^/api/(.*)$ /$1 break; From e0bc6f57cb4b99f9a67354847dea46503d7ea069 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:18:49 -0500 Subject: [PATCH 44/85] optimize api dockerfile --- src/FilterLists.Api/Dockerfile | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 56e508765..e7570e450 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,6 +1,14 @@ # Context: . # Command: docker build -f src/FilterLists.Api/Dockerfile . +# prep runtime +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +ENV DataDirectory__Path "data" +ENV ASPNETCORE_URLS "http://*:5000" +EXPOSE 5000 + +# init build FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore @@ -38,10 +46,6 @@ RUN dotnet build -c Release --no-restore ENTRYPOINT ["dotnet", "test"] # run -FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime -ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] -ENV DataDirectory__Path "data" -ENV ASPNETCORE_URLS "http://*:5000" -EXPOSE 5000 +FROM runtime COPY --from=build /src/FilterLists.Api/out ./ COPY data/. ./data/ From 2e4e9684df03894f68afffd92dfb694fd5c97e68 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:38:16 -0500 Subject: [PATCH 45/85] fix Web dockerfile, add web to docker-compose --- .dockerignore | 1 + FilterLists.Web.sln | 30 ++++++++++++++++++++++++++++ docker-compose.yml | 11 +++++++++++ src/FilterLists.Web/Dockerfile | 36 ++++++++++++++++++++++------------ 4 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 FilterLists.Web.sln diff --git a/.dockerignore b/.dockerignore index b8ee7703b..7443667bf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -14,3 +14,4 @@ docker-compose.*.yml LICENSE **/bin **/obj +**/node_modules \ No newline at end of file diff --git a/FilterLists.Web.sln b/FilterLists.Web.sln new file mode 100644 index 000000000..9a2220756 --- /dev/null +++ b/FilterLists.Web.sln @@ -0,0 +1,30 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{6F70E166-BB98-41BE-A137-CB8C7E559174}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilterLists.Web", "src\FilterLists.Web\FilterLists.Web.csproj", "{FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {FD17DF1D-4D60-454F-8FC7-73DF1B51E9B3} = {6F70E166-BB98-41BE-A137-CB8C7E559174} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {925C18D5-4B82-4EA2-B45F-FD7D8F01A80F} + EndGlobalSection +EndGlobal diff --git a/docker-compose.yml b/docker-compose.yml index 37d25a815..0b10a1ab5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,17 @@ services: volumes: - ./ops/nginx/conf.d:/etc/nginx/conf.d:ro + filterlists-web: + image: collinbarrett/filterlists.web + restart: always + build: + context: . + dockerfile: src/FilterLists.Web/Dockerfile + networks: + - reverse-proxy + depends_on: + - filterlists-api + filterlists-api: image: collinbarrett/filterlists.api restart: always diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 98cd784fc..ad47a408e 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,18 +1,28 @@ -FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine as base -WORKDIR /app +# Context: . +# Command: docker build -f src/FilterLists.Web/Dockerfile . -FROM microsoft/dotnet:2.2-sdk-alpine AS publish -RUN apk add --update nodejs-npm +# prep runtime +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime +ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] +ENV ASPNETCORE_URLS "http://*:5000" +EXPOSE 5000 -WORKDIR /app -COPY FilterLists.Web.csproj . +# init build +FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build +RUN apk add --update nodejs nodejs-npm + +# restore +COPY FilterLists.Web.sln ./ +WORKDIR /src/FilterLists.Web/ +COPY src/FilterLists.Web/FilterLists.Web.csproj ./ +WORKDIR / RUN dotnet restore -COPY . . -RUN dotnet publish -c Release -o /out +# publish +WORKDIR /src/FilterLists.Web/ +COPY src/FilterLists.Web/. ./ +RUN dotnet publish -c Release -o out --no-restore -FROM base -WORKDIR /app -COPY --from=publish /out . -ENV ASPNETCORE_URLS http://+:80 -ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] \ No newline at end of file +# run +FROM runtime +COPY --from=build /src/FilterLists.Web/out ./ From 4d09ff891956cfb10e29ec751cb777576621511b Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:39:30 -0500 Subject: [PATCH 46/85] exclude FilterLists.sln from docker context --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index 7443667bf..1ca1c3da4 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,6 +10,7 @@ codecov.yml .dockerignore docker-compose.yml docker-compose.*.yml +FilterLists.sln *.DotSettings* LICENSE **/bin From c108b45e941cde28ba40ccff75aaff543f40b424 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:43:34 -0500 Subject: [PATCH 47/85] test web build trigger --- src/FilterLists.Web/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index ad47a408e..1fe10fabe 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -26,3 +26,5 @@ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime COPY --from=build /src/FilterLists.Web/out ./ + +# test build trigger From d773c99a3bcc2b360642c5d6bc3c89e78e0f2a53 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:48:48 -0500 Subject: [PATCH 48/85] simplify web dockerfile --- src/FilterLists.Web/Dockerfile | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 1fe10fabe..3b06185e9 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -12,19 +12,13 @@ FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build RUN apk add --update nodejs nodejs-npm # restore -COPY FilterLists.Web.sln ./ -WORKDIR /src/FilterLists.Web/ COPY src/FilterLists.Web/FilterLists.Web.csproj ./ -WORKDIR / RUN dotnet restore # publish -WORKDIR /src/FilterLists.Web/ COPY src/FilterLists.Web/. ./ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime -COPY --from=build /src/FilterLists.Web/out ./ - -# test build trigger +COPY --from=build /out ./ From 4d380c94facc5dd89bfcacc6023c06659c549284 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 16:59:31 -0500 Subject: [PATCH 49/85] Revert "simplify web dockerfile" This reverts commit d773c99a3bcc2b360642c5d6bc3c89e78e0f2a53. --- src/FilterLists.Web/Dockerfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 3b06185e9..1fe10fabe 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -12,13 +12,19 @@ FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build RUN apk add --update nodejs nodejs-npm # restore +COPY FilterLists.Web.sln ./ +WORKDIR /src/FilterLists.Web/ COPY src/FilterLists.Web/FilterLists.Web.csproj ./ +WORKDIR / RUN dotnet restore # publish +WORKDIR /src/FilterLists.Web/ COPY src/FilterLists.Web/. ./ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime -COPY --from=build /out ./ +COPY --from=build /src/FilterLists.Web/out ./ + +# test build trigger From 008a76fd03a6ec34115a3e17d3f3905496a56466 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 17:00:59 -0500 Subject: [PATCH 50/85] rm trigger test comment --- src/FilterLists.Web/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 1fe10fabe..9cd50da75 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -26,5 +26,4 @@ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime COPY --from=build /src/FilterLists.Web/out ./ - -# test build trigger + \ No newline at end of file From bb696d91dc49f29a027732bee84b11497aa9dc4c Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 17:14:00 -0500 Subject: [PATCH 51/85] simplify docker compose setup --- docker-compose.yml | 22 +++++++++++----------- ops/nginx/conf.d/filterlists-api.conf | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0b10a1ab5..6e8a20cfb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ services: volumes: - ./ops/nginx/conf.d:/etc/nginx/conf.d:ro - filterlists-web: + web: image: collinbarrett/filterlists.web restart: always build: @@ -20,9 +20,9 @@ services: networks: - reverse-proxy depends_on: - - filterlists-api + - api - filterlists-api: + api: image: collinbarrett/filterlists.api restart: always build: @@ -30,19 +30,19 @@ services: dockerfile: src/FilterLists.Api/Dockerfile networks: - reverse-proxy - - filterlists-api + - api depends_on: - - mariadb_filterlists-api + - mariadb environment: - ConnectionStrings__FilterListsConnection: "Server=mariadb_filterlists-api;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" + ConnectionStrings__FilterListsConnection: "Server=mariadb;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" - mariadb_filterlists-api: + mariadb: image: mariadb:10 restart: always networks: - - filterlists-api + - api volumes: - - filterlists-api:/var/lib/mysql + - data:/var/lib/mysql environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_DATABASE: filterlistsdata @@ -57,7 +57,7 @@ services: networks: reverse-proxy: - filterlists-api: + api: volumes: - filterlists-api: + data: diff --git a/ops/nginx/conf.d/filterlists-api.conf b/ops/nginx/conf.d/filterlists-api.conf index 7da027fcf..34dc09fbd 100644 --- a/ops/nginx/conf.d/filterlists-api.conf +++ b/ops/nginx/conf.d/filterlists-api.conf @@ -3,7 +3,7 @@ server { location ^~ /api { rewrite ^/api/(.*)$ /$1 break; - proxy_pass http://filterlists-api:5000; + proxy_pass http://api:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; From ca7e8dc4f44c961b327e00b597d4917463b0f3bb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 17:40:56 -0500 Subject: [PATCH 52/85] simplify API dockerfile --- src/FilterLists.Api/Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index e7570e450..62a7d3a7a 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -12,15 +12,11 @@ EXPOSE 5000 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore -COPY FilterLists.Api.sln ./ WORKDIR /src/ COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ -WORKDIR /tests/ -COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./FilterLists.Data.Tests/ -COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./FilterLists.Services.Tests/ -WORKDIR / +WORKDIR /src/FilterLists.Api/ RUN dotnet restore # publish @@ -34,6 +30,8 @@ RUN dotnet publish -c Release -o out --no-restore # build data tests FROM build AS test-data WORKDIR /tests/FilterLists.Data.Tests/ +COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./ +RUN dotnet restore COPY tests/FilterLists.Data.Tests/. ./ RUN dotnet build -c Release --no-restore ENTRYPOINT ["dotnet", "test"] @@ -41,6 +39,8 @@ ENTRYPOINT ["dotnet", "test"] # build services tests FROM build AS test-services WORKDIR /tests/FilterLists.Services.Tests/ +COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./ +RUN dotnet restore COPY tests/FilterLists.Services.Tests/. ./ RUN dotnet build -c Release --no-restore ENTRYPOINT ["dotnet", "test"] From 7e55ed33bc03f2ec8b96fba73785575d0daff9d3 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 28 Apr 2019 18:13:26 -0500 Subject: [PATCH 53/85] minor simplification to API dockerfile --- src/FilterLists.Api/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 62a7d3a7a..358e56765 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -15,16 +15,16 @@ FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build WORKDIR /src/ COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ -COPY src/FilterLists.Api/FilterLists.Api.csproj ./FilterLists.Api/ WORKDIR /src/FilterLists.Api/ +COPY src/FilterLists.Api/FilterLists.Api.csproj ./ RUN dotnet restore # publish WORKDIR /src/ COPY src/FilterLists.Data/. ./FilterLists.Data/ COPY src/FilterLists.Services/. ./FilterLists.Services/ -COPY src/FilterLists.Api/. ./FilterLists.Api/ WORKDIR /src/FilterLists.Api/ +COPY src/FilterLists.Api/. ./ RUN dotnet publish -c Release -o out --no-restore # build data tests From b74dcdd956fbb6b548012a05b4d8b638beb2b718 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 29 Apr 2019 12:56:32 -0500 Subject: [PATCH 54/85] add named final stage to target --- src/FilterLists.Api/Dockerfile | 2 +- src/FilterLists.Web/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 358e56765..6dd3ed03e 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -46,6 +46,6 @@ RUN dotnet build -c Release --no-restore ENTRYPOINT ["dotnet", "test"] # run -FROM runtime +FROM runtime as final COPY --from=build /src/FilterLists.Api/out ./ COPY data/. ./data/ diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 9cd50da75..96ae63c72 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -24,6 +24,6 @@ COPY src/FilterLists.Web/. ./ RUN dotnet publish -c Release -o out --no-restore # run -FROM runtime +FROM runtime as final COPY --from=build /src/FilterLists.Web/out ./ \ No newline at end of file From abb1149aece362af8621f47edfd336d702658bf1 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 30 Apr 2019 06:57:45 -0500 Subject: [PATCH 55/85] data int test wip --- docker-compose.prod.yml | 2 ++ docker-compose.tests.data.yml | 23 +++++++++++++++++++ docker-compose.yml | 4 ++++ src/FilterLists.Api/Dockerfile | 4 +++- .../FilterLists.Data.Tests.csproj | 1 + .../SeedFilterListsDbContextTests.cs | 20 +++++----------- 6 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 docker-compose.tests.data.yml diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index cf45102ac..f51c3c989 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,3 +1,5 @@ +# For running pre-build instances of all modules from Hub + version: "3.7" services: diff --git a/docker-compose.tests.data.yml b/docker-compose.tests.data.yml new file mode 100644 index 000000000..5f57ed4ab --- /dev/null +++ b/docker-compose.tests.data.yml @@ -0,0 +1,23 @@ +# For running data integration tests in FilterLists.Data.Tests + +version: "3.7" + +services: + api: + build: + context: . + dockerfile: src/FilterLists.Api/Dockerfile + target: test-data + depends_on: + - mariadb + + mariadb: + image: mariadb:10 + environment: + MYSQL_ROOT_PASSWORD: filterlists + command: + [ + "mysqld", + "--character-set-server=utf8mb4", + "--collation-server=utf8mb4_unicode_520_ci" + ] diff --git a/docker-compose.yml b/docker-compose.yml index 6e8a20cfb..604f69574 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +# For building and running all modules + version: "3.7" services: @@ -17,6 +19,7 @@ services: build: context: . dockerfile: src/FilterLists.Web/Dockerfile + target: final networks: - reverse-proxy depends_on: @@ -28,6 +31,7 @@ services: build: context: . dockerfile: src/FilterLists.Api/Dockerfile + target: final networks: - reverse-proxy - api diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 6dd3ed03e..2c939d97a 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -25,7 +25,8 @@ COPY src/FilterLists.Data/. ./FilterLists.Data/ COPY src/FilterLists.Services/. ./FilterLists.Services/ WORKDIR /src/FilterLists.Api/ COPY src/FilterLists.Api/. ./ -RUN dotnet publish -c Release -o out --no-restore +RUN dotnet build -c Release --no-restore +RUN dotnet publish -c Release -o out --no-restore --no-build # build data tests FROM build AS test-data @@ -34,6 +35,7 @@ COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./ RUN dotnet restore COPY tests/FilterLists.Data.Tests/. ./ RUN dotnet build -c Release --no-restore +COPY data/. ./data/ ENTRYPOINT ["dotnet", "test"] # build services tests diff --git a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj index 8d8e6a229..a35662227 100644 --- a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj +++ b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj @@ -38,6 +38,7 @@ + diff --git a/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs b/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs index a90b1b4a6..9c9050d71 100644 --- a/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs +++ b/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using FilterLists.Data.Seed.Extensions; using Microsoft.EntityFrameworkCore; @@ -8,35 +9,26 @@ namespace FilterLists.Data.Tests { public class SeedFilterListsDbContextTests { - private const string CiTestServerConnString = "Server=localhost;Uid=travis;"; - private const string CiTestDatabaseConnString = CiTestServerConnString + "Database=filterlistsdatatest;"; - - /// - /// requires "CREATE USER 'travis'@'localhost';" on non-Travis mysql instance - /// [Fact] public async void SeedOrUpdateAsync_DoesNotThrowException() { + var connString = "Server=mariadb;Database=filterlists;Uid=root;Pwd=filterlists;"; var options = new DbContextOptionsBuilder() - .UseMySql(CiTestDatabaseConnString, m => m.MigrationsAssembly("FilterLists.Api")) + .UseMySql(connString, m => m.MigrationsAssembly("FilterLists.Api")) .Options; using (var context = new FilterListsDbContext(options)) { - await context.Database.EnsureDeletedAsync(); - using (var conn = new MySqlConnection(CiTestServerConnString)) + using (var conn = new MySqlConnection(connString)) { await conn.OpenAsync(); var cmd = new MySqlCommand( - "CREATE DATABASE filterlistsdatatest CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;", + "CREATE DATABASE filterlists CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;", conn); await cmd.ExecuteNonQueryAsync(); } await context.Database.MigrateAsync(); - if (Directory.Exists("../../../../../data")) - await SeedFilterListsDbContext.SeedOrUpdateAsync(context, "../../../../../data"); - else - await SeedFilterListsDbContext.SeedOrUpdateAsync(context, "../../../../../../../../data"); + await SeedFilterListsDbContext.SeedOrUpdateAsync(context, "../../../data"); } } } From 3b1d04a283d0176dd3ced58da562d38b6031441d Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 17:52:34 -0500 Subject: [PATCH 56/85] update framework ver and nugets --- .../FilterLists.Agent.csproj | 15 +++++------ src/FilterLists.Api/FilterLists.Api.csproj | 27 +++++-------------- src/FilterLists.Data/FilterLists.Data.csproj | 11 ++++---- .../FilterLists.Services.csproj | 17 ++++++------ src/FilterLists.Web/FilterLists.Web.csproj | 13 ++++----- .../FilterLists.Data.Tests.csproj | 13 +++++---- .../FilterLists.Services.Tests.csproj | 10 +++---- 7 files changed, 43 insertions(+), 63 deletions(-) diff --git a/src/FilterLists.Agent/FilterLists.Agent.csproj b/src/FilterLists.Agent/FilterLists.Agent.csproj index b1c5d2c77..f8e7dd8e9 100644 --- a/src/FilterLists.Agent/FilterLists.Agent.csproj +++ b/src/FilterLists.Agent/FilterLists.Agent.csproj @@ -2,15 +2,14 @@ Exe - netcoreapp2.1 + netcoreapp2.2 true latest - ubuntu.18.04-x64 Collin M. Barrett Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png https://github.com/collinbarrett/FilterLists @@ -20,12 +19,12 @@ - + - - - - + + + + diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 9ecbb0576..fa8fea3f6 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -1,36 +1,23 @@  - netcoreapp2.1 + netcoreapp2.2 true latest - ubuntu.18.04-x64 /subscriptions/4bcbdfe1-6c65-4c02-820f-7c0e7ec5614f/resourcegroups/FilterLists/providers/microsoft.insights/components/FilterLists /subscriptions/4bcbdfe1-6c65-4c02-820f-7c0e7ec5614f/resourcegroups/FilterLists/providers/microsoft.insights/components/FilterLists Collin M. Barrett Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://filterlists.com/ https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png git https://github.com/collinbarrett/FilterLists false - Exe - - - - - bin\Debug\netcoreapp2.0\FilterLists.Api.xml - 1701;1702;1705;1591 - - - - bin\Release\netcoreapp2.0\FilterLists.Api.xml - 1701;1702;1705;1591 @@ -39,13 +26,13 @@ - - - + + + - + - + diff --git a/src/FilterLists.Data/FilterLists.Data.csproj b/src/FilterLists.Data/FilterLists.Data.csproj index 9720df115..6ddcd79c0 100644 --- a/src/FilterLists.Data/FilterLists.Data.csproj +++ b/src/FilterLists.Data/FilterLists.Data.csproj @@ -4,11 +4,10 @@ netstandard2.0 true latest - ubuntu.18.04-x64 Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://filterlists.com/ https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png @@ -18,14 +17,14 @@ - - + + - + all runtime; build; native; contentfiles; analyzers - + \ No newline at end of file diff --git a/src/FilterLists.Services/FilterLists.Services.csproj b/src/FilterLists.Services/FilterLists.Services.csproj index dec6e0be6..89e6e4177 100644 --- a/src/FilterLists.Services/FilterLists.Services.csproj +++ b/src/FilterLists.Services/FilterLists.Services.csproj @@ -4,11 +4,10 @@ netstandard2.0 true latest - ubuntu.18.04-x64 Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png https://filterlists.com/ @@ -18,15 +17,15 @@ - - - - + + + + - + - - + + diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index c3580f607..7ac45af76 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -1,17 +1,16 @@  - netcoreapp2.1 + netcoreapp2.2 true latest - ubuntu.18.04-x64 true Latest false Collin M. Barrett FilterLists https://github.com/collinbarrett/FilterLists/blob/master/LICENSE - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. https://filterlists.com/ https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png @@ -19,16 +18,14 @@ git true false - Linux - ..\..\docker-compose.dcproj - - + + - + diff --git a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj index a35662227..d6753384e 100644 --- a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj +++ b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj @@ -1,14 +1,14 @@ - + - netcoreapp2.1 + netcoreapp2.2 true latest Collin M. Barrett Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://filterlists.com/ https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png @@ -17,7 +17,7 @@ - + all runtime; build; native; contentfiles; analyzers @@ -25,11 +25,11 @@ all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers - + all @@ -38,7 +38,6 @@ - diff --git a/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj b/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj index 5bddc0fc6..a9ddd3d56 100644 --- a/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj +++ b/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj @@ -1,14 +1,14 @@ - + - netcoreapp2.1 + netcoreapp2.2 true latest Collin M. Barrett Collin M. Barrett FilterLists The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. - Copyright (c) 2018 Collin M. Barrett + Copyright (c) 2019 Collin M. Barrett https://github.com/collinbarrett/FilterLists/blob/master/LICENSE https://filterlists.com/ https://github.com/collinbarrett/FilterLists/raw/master/imgs/icon_filterlists.png @@ -17,7 +17,7 @@ - + all runtime; build; native; contentfiles; analyzers @@ -25,7 +25,7 @@ all runtime; build; native; contentfiles; analyzers - + all From 71e44f7dcbceed8410b870bf7c35d8f8b7f88749 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 18:42:39 -0500 Subject: [PATCH 57/85] break out publish step --- src/FilterLists.Api/Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 2c939d97a..35c59d55b 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -19,14 +19,13 @@ WORKDIR /src/FilterLists.Api/ COPY src/FilterLists.Api/FilterLists.Api.csproj ./ RUN dotnet restore -# publish +# build WORKDIR /src/ COPY src/FilterLists.Data/. ./FilterLists.Data/ COPY src/FilterLists.Services/. ./FilterLists.Services/ WORKDIR /src/FilterLists.Api/ COPY src/FilterLists.Api/. ./ RUN dotnet build -c Release --no-restore -RUN dotnet publish -c Release -o out --no-restore --no-build # build data tests FROM build AS test-data @@ -47,7 +46,11 @@ COPY tests/FilterLists.Services.Tests/. ./ RUN dotnet build -c Release --no-restore ENTRYPOINT ["dotnet", "test"] +# publish +FROM build AS publish +RUN dotnet publish -c Release -o out --no-restore --no-build + # run FROM runtime as final -COPY --from=build /src/FilterLists.Api/out ./ +COPY --from=publish /src/FilterLists.Api/out ./ COPY data/. ./data/ From b9c2cf46192803c7ef924bec9c6d7b466f40bd90 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 19:25:51 -0500 Subject: [PATCH 58/85] fix data seed test --- docker-compose.tests.data.yml | 5 +- ...20181019141708_AddRuleRawIndex.Designer.cs | 686 ------------------ .../20181019141708_AddRuleRawIndex.cs | 24 - .../FilterListsDbContextModelSnapshot.cs | 2 - src/FilterLists.Data/FilterListsDbContext.cs | 1 - .../SeedFilterListsDbContextTests.cs | 16 +- 6 files changed, 6 insertions(+), 728 deletions(-) delete mode 100644 src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.Designer.cs delete mode 100644 src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.cs diff --git a/docker-compose.tests.data.yml b/docker-compose.tests.data.yml index 5f57ed4ab..e21a1d610 100644 --- a/docker-compose.tests.data.yml +++ b/docker-compose.tests.data.yml @@ -14,7 +14,10 @@ services: mariadb: image: mariadb:10 environment: - MYSQL_ROOT_PASSWORD: filterlists + - MYSQL_ROOT_PASSWORD=filterlists + - MYSQL_DATABASE=filterlists + - MYSQL_USER=filterlists + - MYSQL_PASSWORD=filterlists command: [ "mysqld", diff --git a/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.Designer.cs b/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.Designer.cs deleted file mode 100644 index 98d2bc03f..000000000 --- a/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.Designer.cs +++ /dev/null @@ -1,686 +0,0 @@ -// - -using System; -using FilterLists.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace FilterLists.Api.Migrations -{ - [DbContext(typeof(FilterListsDbContext))] - [Migration("20181019141708_AddRuleRawIndex")] - partial class AddRuleRawIndex - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.1.4-rtm-31024") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("FilterLists.Data.Entities.FilterList", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("ChatUrl") - .HasColumnType("TEXT"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("Description") - .HasColumnType("TEXT"); - - b.Property("DescriptionSourceUrl") - .HasColumnType("TEXT"); - - b.Property("DonateUrl") - .HasColumnType("TEXT"); - - b.Property("EmailAddress") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(126)") - .HasDefaultValueSql("NULL"); - - b.Property("ForumUrl") - .HasColumnType("TEXT"); - - b.Property("HomeUrl") - .HasColumnType("TEXT"); - - b.Property("IssuesUrl") - .HasColumnType("TEXT"); - - b.Property("LicenseId") - .ValueGeneratedOnAdd() - .HasDefaultValue((short)5); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.Property("PolicyUrl") - .HasColumnType("TEXT"); - - b.Property("PublishedDate") - .ValueGeneratedOnAdd() - .HasColumnType("DATETIME") - .HasDefaultValueSql("NULL"); - - b.Property("SubmissionUrl") - .HasColumnType("TEXT"); - - b.Property("SyntaxId"); - - b.Property("UpdatedDate") - .ValueGeneratedOnAdd() - .HasColumnType("DATETIME") - .HasDefaultValueSql("NULL"); - - b.Property("ViewUrl") - .HasColumnType("TEXT"); - - b.Property("ViewUrlMirror1") - .HasColumnType("TEXT"); - - b.Property("ViewUrlMirror2") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("LicenseId"); - - b.HasIndex("SyntaxId"); - - b.ToTable("filterlists"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Dependent", b => - { - b.Property("DependentFilterListId"); - - b.Property("DependencyFilterListId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("DependentFilterListId", "DependencyFilterListId"); - - b.HasIndex("DependencyFilterListId"); - - b.ToTable("dependents"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListLanguage", b => - { - b.Property("FilterListId"); - - b.Property("LanguageId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("FilterListId", "LanguageId"); - - b.HasIndex("LanguageId"); - - b.ToTable("filterlists_languages"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListMaintainer", b => - { - b.Property("FilterListId"); - - b.Property("MaintainerId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("FilterListId", "MaintainerId"); - - b.HasIndex("MaintainerId"); - - b.ToTable("filterlists_maintainers"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListTag", b => - { - b.Property("FilterListId"); - - b.Property("TagId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("FilterListId", "TagId"); - - b.HasIndex("TagId"); - - b.ToTable("filterlists_tags"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Fork", b => - { - b.Property("ForkFilterListId"); - - b.Property("UpstreamFilterListId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("ForkFilterListId", "UpstreamFilterListId"); - - b.HasIndex("UpstreamFilterListId"); - - b.ToTable("forks"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Merge", b => - { - b.Property("MergeFilterListId"); - - b.Property("UpstreamFilterListId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("MergeFilterListId", "UpstreamFilterListId"); - - b.HasIndex("UpstreamFilterListId"); - - b.ToTable("merges"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SnapshotRule", b => - { - b.Property("SnapshotId"); - - b.Property("RuleId"); - - b.HasKey("SnapshotId", "RuleId"); - - b.HasIndex("RuleId"); - - b.ToTable("snapshots_rules"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SoftwareSyntax", b => - { - b.Property("SyntaxId"); - - b.Property("SoftwareId"); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.HasKey("SyntaxId", "SoftwareId"); - - b.HasIndex("SoftwareId"); - - b.ToTable("software_syntaxes"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Language", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("Iso6391") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(2)") - .HasDefaultValueSql("NULL"); - - b.Property("Iso6392") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(3)") - .HasDefaultValueSql("NULL"); - - b.Property("Iso6392B") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(3)") - .HasDefaultValueSql("NULL"); - - b.Property("Iso6392T") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(3)") - .HasDefaultValueSql("NULL"); - - b.Property("Iso6393") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(3)") - .HasDefaultValueSql("NULL"); - - b.Property("LocalName") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(126)") - .HasDefaultValueSql("NULL"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(126)") - .HasDefaultValueSql("NULL"); - - b.HasKey("Id"); - - b.ToTable("languages"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.License", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("DescriptionUrl") - .HasColumnType("TEXT"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.Property("PermissiveAdaptation"); - - b.Property("PermissiveCommercial"); - - b.HasKey("Id"); - - b.ToTable("licenses"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Maintainer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("EmailAddress") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(126)") - .HasDefaultValueSql("NULL"); - - b.Property("HomeUrl") - .HasColumnType("TEXT"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.Property("TwitterHandle") - .ValueGeneratedOnAdd() - .HasColumnType("VARCHAR(126)") - .HasDefaultValueSql("NULL"); - - b.HasKey("Id"); - - b.ToTable("maintainers"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Rule", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("Raw") - .IsRequired() - .HasColumnType("LONGTEXT"); - - b.HasKey("Id"); - - b.HasIndex("Raw"); - - b.ToTable("rules"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Snapshot", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("MEDIUMINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("FilterListId"); - - b.Property("HttpStatusCode") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasDefaultValueSql("NULL"); - - b.Property("Md5Checksum") - .HasColumnType("BINARY(16)"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("WasSuccessful"); - - b.Property("WasUpdated"); - - b.Property("WaybackTimestamp") - .HasColumnType("TIMESTAMP"); - - b.Property("WaybackUrl") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("FilterListId"); - - b.ToTable("snapshots"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Software", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("DownloadUrl") - .HasColumnType("TEXT"); - - b.Property("HomeUrl") - .HasColumnType("TEXT"); - - b.Property("IsAbpSubscribable"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.HasKey("Id"); - - b.ToTable("software"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Syntax", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("DefinitionUrl") - .HasColumnType("TEXT"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.HasKey("Id"); - - b.ToTable("syntaxes"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Tag", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("SMALLINT") - .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); - - b.Property("CreatedDateUtc") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp()"); - - b.Property("Description") - .HasColumnType("TEXT"); - - b.Property("ModifiedDateUtc") - .IsRequired() - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TIMESTAMP") - .HasDefaultValueSql("current_timestamp() ON UPDATE current_timestamp()"); - - b.Property("Name") - .IsRequired() - .HasColumnType("VARCHAR(126)"); - - b.HasKey("Id"); - - b.ToTable("tags"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.FilterList", b => - { - b.HasOne("FilterLists.Data.Entities.License", "License") - .WithMany("FilterLists") - .HasForeignKey("LicenseId"); - - b.HasOne("FilterLists.Data.Entities.Syntax", "Syntax") - .WithMany("FilterLists") - .HasForeignKey("SyntaxId"); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Dependent", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "DependencyFilterList") - .WithMany("DependencyFilterLists") - .HasForeignKey("DependencyFilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.FilterList", "DependentFilterList") - .WithMany("DependentFilterLists") - .HasForeignKey("DependentFilterListId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListLanguage", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList") - .WithMany("FilterListLanguages") - .HasForeignKey("FilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.Language", "Language") - .WithMany("FilterListLanguages") - .HasForeignKey("LanguageId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListMaintainer", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList") - .WithMany("FilterListMaintainers") - .HasForeignKey("FilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.Maintainer", "Maintainer") - .WithMany("FilterListMaintainers") - .HasForeignKey("MaintainerId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListTag", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList") - .WithMany("FilterListTags") - .HasForeignKey("FilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.Tag", "Tag") - .WithMany("FilterListTags") - .HasForeignKey("TagId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Fork", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "ForkFilterList") - .WithMany("ForkFilterLists") - .HasForeignKey("ForkFilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.FilterList", "UpstreamFilterList") - .WithMany("UpstreamForkFilterLists") - .HasForeignKey("UpstreamFilterListId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Merge", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "MergeFilterList") - .WithMany("MergeFilterLists") - .HasForeignKey("MergeFilterListId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.FilterList", "UpstreamFilterList") - .WithMany("UpstreamMergeFilterLists") - .HasForeignKey("UpstreamFilterListId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SnapshotRule", b => - { - b.HasOne("FilterLists.Data.Entities.Rule", "Rule") - .WithMany("SnapshotRules") - .HasForeignKey("RuleId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.Snapshot", "Snapshot") - .WithMany("SnapshotRules") - .HasForeignKey("SnapshotId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SoftwareSyntax", b => - { - b.HasOne("FilterLists.Data.Entities.Software", "Software") - .WithMany("SoftwareSyntaxes") - .HasForeignKey("SoftwareId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("FilterLists.Data.Entities.Syntax", "Syntax") - .WithMany("SoftwareSyntaxes") - .HasForeignKey("SyntaxId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("FilterLists.Data.Entities.Snapshot", b => - { - b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList") - .WithMany("Snapshots") - .HasForeignKey("FilterListId") - .OnDelete(DeleteBehavior.Cascade); - }); -#pragma warning restore 612, 618 - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.cs b/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.cs deleted file mode 100644 index 78c6524b5..000000000 --- a/src/FilterLists.Api/Migrations/20181019141708_AddRuleRawIndex.cs +++ /dev/null @@ -1,24 +0,0 @@ -using FilterLists.Api.Migrations.Extensions; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace FilterLists.Api.Migrations -{ - public partial class AddRuleRawIndex : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateIndex( - "IX_rules_Raw", - "rules", - "Raw", - 3072); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - "IX_rules_Raw", - "rules"); - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs index 83cf8ebac..4ea06d109 100644 --- a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs +++ b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs @@ -407,8 +407,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.HasIndex("Raw"); - b.ToTable("rules"); }); diff --git a/src/FilterLists.Data/FilterListsDbContext.cs b/src/FilterLists.Data/FilterListsDbContext.cs index 02c120a38..4970f6443 100644 --- a/src/FilterLists.Data/FilterListsDbContext.cs +++ b/src/FilterLists.Data/FilterListsDbContext.cs @@ -35,7 +35,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); ApplyConfigurations(modelBuilder); - modelBuilder.Entity().HasIndex(r => r.Raw); } private static void ApplyConfigurations(ModelBuilder modelBuilder) diff --git a/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs b/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs index 9c9050d71..244b3b17c 100644 --- a/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs +++ b/tests/FilterLists.Data.Tests/SeedFilterListsDbContextTests.cs @@ -1,8 +1,5 @@ -using System; -using System.IO; using FilterLists.Data.Seed.Extensions; using Microsoft.EntityFrameworkCore; -using MySql.Data.MySqlClient; using Xunit; namespace FilterLists.Data.Tests @@ -12,22 +9,13 @@ public class SeedFilterListsDbContextTests [Fact] public async void SeedOrUpdateAsync_DoesNotThrowException() { - var connString = "Server=mariadb;Database=filterlists;Uid=root;Pwd=filterlists;"; + const string connString = "Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists;"; var options = new DbContextOptionsBuilder() .UseMySql(connString, m => m.MigrationsAssembly("FilterLists.Api")) .Options; using (var context = new FilterListsDbContext(options)) { - using (var conn = new MySqlConnection(connString)) - { - await conn.OpenAsync(); - var cmd = new MySqlCommand( - "CREATE DATABASE filterlists CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;", - conn); - await cmd.ExecuteNonQueryAsync(); - } - - await context.Database.MigrateAsync(); + await context.Database.EnsureCreatedAsync(); await SeedFilterListsDbContext.SeedOrUpdateAsync(context, "../../../data"); } } From 6c309c3ab1ee192d956a7e726dfe22bd179d6517 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 20:12:20 -0500 Subject: [PATCH 59/85] test invalid data --- data/FilterList.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/FilterList.json b/data/FilterList.json index 176020ad6..7232fc6b8 100644 --- a/data/FilterList.json +++ b/data/FilterList.json @@ -1,6 +1,6 @@ [ { - "id": 1, + "id: 1, "description": "A filter list that blocks mobile advertisements and trackers on Japanese properties", "homeUrl": "https://280blocker.net", "licenseId": 1, From 336dd43e5701f0fda247d3e561eaebf65e03e8a4 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 20:28:14 -0500 Subject: [PATCH 60/85] Revert "test invalid data" This reverts commit 6c309c3ab1ee192d956a7e726dfe22bd179d6517. --- data/FilterList.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/FilterList.json b/data/FilterList.json index 7232fc6b8..176020ad6 100644 --- a/data/FilterList.json +++ b/data/FilterList.json @@ -1,6 +1,6 @@ [ { - "id: 1, + "id": 1, "description": "A filter list that blocks mobile advertisements and trackers on Japanese properties", "homeUrl": "https://280blocker.net", "licenseId": 1, From 24f702a1c28bf57904db256b07a889cfd2b0b716 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 20:37:46 -0500 Subject: [PATCH 61/85] try specifying tag in compose to preserve build cache during later steps --- docker-compose.tests.data.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.tests.data.yml b/docker-compose.tests.data.yml index e21a1d610..4c0735da0 100644 --- a/docker-compose.tests.data.yml +++ b/docker-compose.tests.data.yml @@ -4,6 +4,7 @@ version: "3.7" services: api: + image: filiterlists.api:test-data build: context: . dockerfile: src/FilterLists.Api/Dockerfile From 5344293bf15d9d81cfbcaccb7cd0494a7e05c3d5 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 21:08:13 -0500 Subject: [PATCH 62/85] Revert "try specifying tag in compose to preserve build cache during later steps" This reverts commit 24f702a1c28bf57904db256b07a889cfd2b0b716. --- docker-compose.tests.data.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.tests.data.yml b/docker-compose.tests.data.yml index 4c0735da0..e21a1d610 100644 --- a/docker-compose.tests.data.yml +++ b/docker-compose.tests.data.yml @@ -4,7 +4,6 @@ version: "3.7" services: api: - image: filiterlists.api:test-data build: context: . dockerfile: src/FilterLists.Api/Dockerfile From 51d294056a59156965e5a73d5c4c8fe27d6bf087 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 1 May 2019 21:13:44 -0500 Subject: [PATCH 63/85] rm code coverage --- .github/README.md | 2 -- tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj | 4 ---- .../FilterLists.Services.Tests.csproj | 4 ---- 3 files changed, 10 deletions(-) diff --git a/.github/README.md b/.github/README.md index b25c885f2..226816de3 100644 --- a/.github/README.md +++ b/.github/README.md @@ -2,8 +2,6 @@ [![Website](https://img.shields.io/website-up-down-green-red/http/shields.io.svg)](https://filterlists.com/) [![API](https://img.shields.io/website-up-down-green-red/http/shields.io.svg?label=API)](https://filterlists.com/api/v1/lists) -[![Travis](https://travis-ci.org/collinbarrett/FilterLists.svg?branch=master)](https://travis-ci.org/collinbarrett/FilterLists) -[![codecov](https://codecov.io/gh/collinbarrett/FilterLists/branch/master/graph/badge.svg)](https://codecov.io/gh/collinbarrett/FilterLists) [![License](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/collinbarrett/FilterLists/blob/master/LICENSE) [![BuiltWithDot.Net shield](https://builtwithdot.net/project/125/filterlists/badge)](https://builtwithdot.net/project/125/filterlists) [![Beerpay](https://beerpay.io/collinbarrett/FilterLists/badge.svg?style=beer-square)](https://beerpay.io/collinbarrett/FilterLists) diff --git a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj index d6753384e..a927e8b19 100644 --- a/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj +++ b/tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj @@ -17,10 +17,6 @@ - - all - runtime; build; native; contentfiles; analyzers - all runtime; build; native; contentfiles; analyzers diff --git a/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj b/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj index a9ddd3d56..a6d92658c 100644 --- a/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj +++ b/tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj @@ -17,10 +17,6 @@ - - all - runtime; build; native; contentfiles; analyzers - all runtime; build; native; contentfiles; analyzers From bea6d0dafe289bfbd8f50510102064b2a6ae90e2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 2 May 2019 06:48:56 -0500 Subject: [PATCH 64/85] rm some deps --- src/FilterLists.Api/FilterLists.Api.csproj | 1 - src/FilterLists.Services/EmailService.cs | 38 ------------------- .../FilterLists.Services.csproj | 1 - src/FilterLists.Web/FilterLists.Web.csproj | 1 - 4 files changed, 41 deletions(-) delete mode 100644 src/FilterLists.Services/EmailService.cs diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index fa8fea3f6..1aab8c80b 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -32,7 +32,6 @@ - diff --git a/src/FilterLists.Services/EmailService.cs b/src/FilterLists.Services/EmailService.cs deleted file mode 100644 index 3fffee25f..000000000 --- a/src/FilterLists.Services/EmailService.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Threading.Tasks; -using JetBrains.Annotations; -using Microsoft.Extensions.Configuration; -using SendGrid; -using SendGrid.Helpers.Mail; - -namespace FilterLists.Services -{ - [UsedImplicitly] - public class EmailService - { - private readonly SendGridClient sendGridClient; - private readonly EmailAddress fromEmailAddress; - private readonly EmailAddress toEmailAddress; - - public EmailService(IConfiguration configuration) - { - var sendGridConfig = configuration.GetSection("SendGrid"); - sendGridClient = new SendGridClient(sendGridConfig.GetValue("ApiKey")); - fromEmailAddress = new EmailAddress(sendGridConfig.GetSection("From").GetValue("EmailAddress"), - sendGridConfig.GetSection("From").GetValue("Name")); - toEmailAddress = new EmailAddress(sendGridConfig.GetSection("To").GetValue("EmailAddress"), - sendGridConfig.GetSection("To").GetValue("Name")); - } - - public async Task SendEmailAsync(string subjectBody, string message) - { - var msg = new SendGridMessage - { - From = fromEmailAddress, - Subject = "[FilterLists] " + subjectBody, - PlainTextContent = message - }; - msg.AddTo(toEmailAddress); - await sendGridClient.SendEmailAsync(msg); - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Services/FilterLists.Services.csproj b/src/FilterLists.Services/FilterLists.Services.csproj index 89e6e4177..dbab4d666 100644 --- a/src/FilterLists.Services/FilterLists.Services.csproj +++ b/src/FilterLists.Services/FilterLists.Services.csproj @@ -24,7 +24,6 @@ - diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 7ac45af76..1d84e8bc3 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -25,7 +25,6 @@ - From 4347d77c4dcad0e6bbfffdae980686af0bdff83e Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 2 May 2019 10:09:09 -0500 Subject: [PATCH 65/85] add vs docker toolilng to API --- .dockerignore | 17 ++--- FilterLists.sln | 6 ++ codecov.yml | 8 --- ....data.yml => docker-compose.data.tests.yml | 2 - docker-compose.dcproj | 17 +++++ docker-compose.prod.yml | 6 +- docker-compose.yml | 2 - src/FilterLists.Api/Dockerfile | 66 +++++++++++-------- src/FilterLists.Api/FilterLists.Api.csproj | 1 + 9 files changed, 72 insertions(+), 53 deletions(-) delete mode 100644 codecov.yml rename docker-compose.tests.data.yml => docker-compose.data.tests.yml (88%) create mode 100644 docker-compose.dcproj diff --git a/.dockerignore b/.dockerignore index 1ca1c3da4..5771a184e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,18 +1,19 @@ +.env **/.git -**/.github .gitattributes .gitignore +**/.github **/.vs **/.vscode -**/images -**/ops -codecov.yml .dockerignore docker-compose.yml docker-compose.*.yml -FilterLists.sln -*.DotSettings* -LICENSE +docker-compose.dcproj **/bin **/obj -**/node_modules \ No newline at end of file +**/.sln +**/node_modules +*.DotSettings* +LICENSE +**/images +**/ops \ No newline at end of file diff --git a/FilterLists.sln b/FilterLists.sln index 37aace757..4bcdb338e 100644 --- a/FilterLists.sln +++ b/FilterLists.sln @@ -39,6 +39,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CE4AB25B-550 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{041F9CFA-B6F7-4DEB-9441-829DE697B1BB}" EndProject +Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{B94A5BCD-3BE3-4FE4-AE48-ADCF904A22A4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +75,10 @@ Global {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA34DED7-B352-4855-9C7B-9E3D983DBE2E}.Release|Any CPU.Build.0 = Release|Any CPU + {B94A5BCD-3BE3-4FE4-AE48-ADCF904A22A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B94A5BCD-3BE3-4FE4-AE48-ADCF904A22A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B94A5BCD-3BE3-4FE4-AE48-ADCF904A22A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B94A5BCD-3BE3-4FE4-AE48-ADCF904A22A4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index f6272f5f1..000000000 --- a/codecov.yml +++ /dev/null @@ -1,8 +0,0 @@ -coverage: - status: - project: - default: - enabled: no - patch: - default: - enabled: no diff --git a/docker-compose.tests.data.yml b/docker-compose.data.tests.yml similarity index 88% rename from docker-compose.tests.data.yml rename to docker-compose.data.tests.yml index e21a1d610..8910d8e33 100644 --- a/docker-compose.tests.data.yml +++ b/docker-compose.data.tests.yml @@ -1,5 +1,3 @@ -# For running data integration tests in FilterLists.Data.Tests - version: "3.7" services: diff --git a/docker-compose.dcproj b/docker-compose.dcproj new file mode 100644 index 000000000..565f51e9e --- /dev/null +++ b/docker-compose.dcproj @@ -0,0 +1,17 @@ + + + + 2.1 + Linux + b94a5bcd-3be3-4fe4-ae48-adcf904a22a4 + LaunchBrowser + {Scheme}://localhost:{ServicePort} + filterlists.api + + + + + + + + \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index f51c3c989..1b2a3900d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,11 +1,9 @@ -# For running pre-build instances of all modules from Hub - version: "3.7" services: - FilterLists.Api: + api: image: collinbarrett/filterlists.api:latest - FilterLists.Web: + web: image: collinbarrett/filterlists.web:latest diff --git a/docker-compose.yml b/docker-compose.yml index 604f69574..551179741 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -# For building and running all modules - version: "3.7" services: diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index 35c59d55b..b769b62bc 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -1,56 +1,64 @@ # Context: . # Command: docker build -f src/FilterLists.Api/Dockerfile . -# prep runtime -FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime -ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] +# init base +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as base ENV DataDirectory__Path "data" ENV ASPNETCORE_URLS "http://*:5000" EXPOSE 5000 +ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] # init build FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore -WORKDIR /src/ -COPY src/FilterLists.Data/FilterLists.Data.csproj ./FilterLists.Data/ -COPY src/FilterLists.Services/FilterLists.Services.csproj ./FilterLists.Services/ -WORKDIR /src/FilterLists.Api/ -COPY src/FilterLists.Api/FilterLists.Api.csproj ./ +WORKDIR /src +COPY src/FilterLists.Data/FilterLists.Data.csproj FilterLists.Data/ +COPY src/FilterLists.Services/FilterLists.Services.csproj FilterLists.Services/ +WORKDIR /src/FilterLists.Api +COPY src/FilterLists.Api/FilterLists.Api.csproj . RUN dotnet restore # build -WORKDIR /src/ -COPY src/FilterLists.Data/. ./FilterLists.Data/ -COPY src/FilterLists.Services/. ./FilterLists.Services/ -WORKDIR /src/FilterLists.Api/ -COPY src/FilterLists.Api/. ./ +WORKDIR /src +COPY src/FilterLists.Data/. FilterLists.Data/ +COPY src/FilterLists.Services/. FilterLists.Services/ +WORKDIR /src/FilterLists.Api +COPY src/FilterLists.Api/. . RUN dotnet build -c Release --no-restore -# build data tests +# init Data.Tests FROM build AS test-data -WORKDIR /tests/FilterLists.Data.Tests/ -COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj ./ -RUN dotnet restore -COPY tests/FilterLists.Data.Tests/. ./ -RUN dotnet build -c Release --no-restore -COPY data/. ./data/ ENTRYPOINT ["dotnet", "test"] -# build services tests -FROM build AS test-services -WORKDIR /tests/FilterLists.Services.Tests/ -COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj ./ +# restore Data.Tests +WORKDIR /tests/FilterLists.Data.Tests +COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj . RUN dotnet restore -COPY tests/FilterLists.Services.Tests/. ./ + +# build Data.Tests +COPY tests/FilterLists.Data.Tests/. . RUN dotnet build -c Release --no-restore +COPY data/. data/ + +# init Services.Tests +FROM build AS test-services ENTRYPOINT ["dotnet", "test"] +# restore Services.Tests +WORKDIR /tests/FilterLists.Services.Tests +COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj . +RUN dotnet restore + +# build Services.Tests +COPY tests/FilterLists.Services.Tests/. . +RUN dotnet build -c Release --no-restore + # publish FROM build AS publish RUN dotnet publish -c Release -o out --no-restore --no-build -# run -FROM runtime as final -COPY --from=publish /src/FilterLists.Api/out ./ -COPY data/. ./data/ +# final +FROM base as final +COPY --from=publish /src/FilterLists.Api/out . +COPY data/. data/ diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 1aab8c80b..193b6d430 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -18,6 +18,7 @@ https://github.com/collinbarrett/FilterLists false Exe + ..\..\docker-compose.dcproj From 14979effcd577b1df817a5dbb530c5a6bafb1bb9 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 2 May 2019 11:13:22 -0500 Subject: [PATCH 66/85] ref docker-compose in Web proj --- src/FilterLists.Web/FilterLists.Web.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 1d84e8bc3..59ae94392 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -18,6 +18,7 @@ git true false + ..\..\docker-compose.dcproj From 516b08fe01862d352979adc96114883ff8934e67 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Thu, 2 May 2019 13:07:33 -0500 Subject: [PATCH 67/85] fix VS docker support --- src/FilterLists.Api/FilterLists.Api.csproj | 2 ++ src/FilterLists.Api/Properties/launchSettings.json | 1 + src/FilterLists.Web/FilterLists.Web.csproj | 2 ++ src/FilterLists.Web/Properties/launchSettings.json | 1 + 4 files changed, 6 insertions(+) diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 193b6d430..a9246a9e1 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -2,6 +2,7 @@ netcoreapp2.2 + InProcess true latest /subscriptions/4bcbdfe1-6c65-4c02-820f-7c0e7ec5614f/resourcegroups/FilterLists/providers/microsoft.insights/components/FilterLists @@ -33,6 +34,7 @@ + diff --git a/src/FilterLists.Api/Properties/launchSettings.json b/src/FilterLists.Api/Properties/launchSettings.json index d76e83551..99003596b 100644 --- a/src/FilterLists.Api/Properties/launchSettings.json +++ b/src/FilterLists.Api/Properties/launchSettings.json @@ -1,4 +1,5 @@ { + "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "Docker": { "commandName": "Docker", diff --git a/src/FilterLists.Web/FilterLists.Web.csproj b/src/FilterLists.Web/FilterLists.Web.csproj index 59ae94392..2a2a25d7b 100644 --- a/src/FilterLists.Web/FilterLists.Web.csproj +++ b/src/FilterLists.Web/FilterLists.Web.csproj @@ -2,6 +2,7 @@ netcoreapp2.2 + InProcess true latest true @@ -26,6 +27,7 @@ + diff --git a/src/FilterLists.Web/Properties/launchSettings.json b/src/FilterLists.Web/Properties/launchSettings.json index b86a23994..4fda38730 100644 --- a/src/FilterLists.Web/Properties/launchSettings.json +++ b/src/FilterLists.Web/Properties/launchSettings.json @@ -1,4 +1,5 @@ { + "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "Docker": { "commandName": "Docker", From d83d7f19e17f08c24fecc065f5bfb90356a4393d Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 09:17:20 -0500 Subject: [PATCH 68/85] various docker tweaks --- docker-compose.dcproj | 5 ++++- docker-compose.vs.debug.yml | 10 ++++++++++ src/FilterLists.Web/Dockerfile | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 docker-compose.vs.debug.yml diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 565f51e9e..511d1c5d2 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -6,11 +6,14 @@ b94a5bcd-3be3-4fe4-ae48-adcf904a22a4 LaunchBrowser {Scheme}://localhost:{ServicePort} - filterlists.api + filterlists + + docker-compose.yml + diff --git a/docker-compose.vs.debug.yml b/docker-compose.vs.debug.yml new file mode 100644 index 000000000..cf173a8fd --- /dev/null +++ b/docker-compose.vs.debug.yml @@ -0,0 +1,10 @@ +version: "3.7" + +services: + api: + build: + target: build + + web: + build: + target: build diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 96ae63c72..9db44bfb6 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -1,11 +1,11 @@ # Context: . # Command: docker build -f src/FilterLists.Web/Dockerfile . -# prep runtime +# init base FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime -ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] ENV ASPNETCORE_URLS "http://*:5000" EXPOSE 5000 +ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] # init build FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build From 56fdca896dfcff59152e349e6be02bfb25d268b0 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 09:22:41 -0500 Subject: [PATCH 69/85] add web nginx conf --- .../conf.d/{filterlists-api.conf => filterlists.conf} | 11 +++++++++++ 1 file changed, 11 insertions(+) rename ops/nginx/conf.d/{filterlists-api.conf => filterlists.conf} (54%) diff --git a/ops/nginx/conf.d/filterlists-api.conf b/ops/nginx/conf.d/filterlists.conf similarity index 54% rename from ops/nginx/conf.d/filterlists-api.conf rename to ops/nginx/conf.d/filterlists.conf index 34dc09fbd..4a92743d3 100644 --- a/ops/nginx/conf.d/filterlists-api.conf +++ b/ops/nginx/conf.d/filterlists.conf @@ -12,4 +12,15 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } + + location / { + proxy_pass http://web:5000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } } \ No newline at end of file From bc141266fe41ecac0e6d7ae01243ca44cd96474b Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 09:44:46 -0500 Subject: [PATCH 70/85] initial update of README for building/running locally --- .github/README.md | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/.github/README.md b/.github/README.md index 226816de3..955e83b21 100644 --- a/.github/README.md +++ b/.github/README.md @@ -9,6 +9,16 @@ FilterLists is the independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances. +# Background + +FilterLists helps to protect your privacy and security when using the internet. It provides a comprehensive directory of subscription lists to block advertisements, malware, trackers, and other general annoyances. First, install one of the [software tools](https://github.com/collinbarrett/FilterLists/blob/master/data/Software.json) that supports these lists. Then, you can subscribe to a set of these lists inside of that software. If you need help or have a comment/question, open an [Issue](https://github.com/collinbarrett/FilterLists/issues). + +Using a software firewall or adblocker has become a key tool in protecting one's privacy online. While the current business model of the "free" internet relies upon advertising revenue, publishers have become too flippant about tracking users without their consent. Advertising networks track users' browsing habits around the internet building lucrative profiles to exploit for targeted marketing or big data research. Until internet publishers develop more transparency or a new business model, we must continue to take the protection of our privacy into our hands. + +Typical adblockers run as an extension in popular web browsers. As we browse the internet, they compare HTTP requests to their list of hosts and filters to selectively block advertisements, trackers, and malware. This filtering helps to protect the surfer's privacy, prevents [malvertising attacks](http://www.wired.com/insights/2014/11/malvertising-is-cybercriminals-latest-sweet-spot/ "Why Malvertising Is Cybercriminals' Latest Sweet Spot - Wired"), and [reduces bandwidth requirements](http://venturebeat.com/2015/07/08/blocking-ads-can-cut-network-traffic-25-to-40-study-shows/ "Blocking Ads Can Cut Network Traffic 25% to 40%, Study Shows - VentureBeat"). Thousands of contributors work hard to maintain these FilterLists for anyone to use. Locating and selecting these lists, however, has not historically been very easy. This project aims to solve that problem. + +# Contributing + ## Adding or Updating Lists To submit a new list or update data about an existing list, please submit a pull request to [data](https://github.com/collinbarrett/FilterLists/tree/master/data) in conjunction with the data model described [here](https://github.com/collinbarrett/FilterLists/wiki/Data-Model_sidebar). Alternatively, you can [open a new issue](https://github.com/collinbarrett/FilterLists/issues/new) providing information for all of the fields described in the [data model](https://github.com/collinbarrett/FilterLists/wiki/Data-Model_sidebar). @@ -17,31 +27,33 @@ To submit a new list or update data about an existing list, please submit a pull FilterLists does not maintain any of these lists. It serves only as a discovery tool to direct users to lists that they may want to use. If you want to request addition, modification, or removal of a rule from a list, you will need to contact the maintainers of that list directly. FilterLists provides a variety of ways you can get in contact with the maintainers to do so. -## Background +## Building and/or Running Locally -FilterLists helps to protect your privacy and security when using the internet. It provides a comprehensive directory of subscription lists to block advertisements, malware, trackers, and other general annoyances. First, install one of the [software tools](https://github.com/collinbarrett/FilterLists/blob/master/data/Software.json) that supports these lists. Then, you can subscribe to a set of these lists inside of that software. If you need help or have a comment/question, open an [Issue](https://github.com/collinbarrett/FilterLists/issues). +We have containerized FilterLists to make it as easy as possible for contributers to get the project up and running locally. -Using a software firewall or adblocker has become a key tool in protecting one's privacy online. While the current business model of the "free" internet relies upon advertising revenue, publishers have become too flippant about tracking users without their consent. Advertising networks track users' browsing habits around the internet building lucrative profiles to exploit for targeted marketing or big data research. Until internet publishers develop more transparency or a new business model, we must continue to take the protection of our privacy into our hands. +1. Install Docker CE for your computer's operating system. [Docs](https://docs.docker.com/install/) +2. Clone the FilterLists git repo to your computer. [Docs](https://help.github.com/en/articles/cloning-a-repository) +3. Navigate to the root directory of your locally cloned FilterLists git repository in a command-line interface (bash, cmd, etc.). +4. Execute `docker-compose up -d`. +5. Visit the locally running version of FilterLists in a web browser at `http://localhost/` (web) and `http://localhost/api/v1/lists` (API). -Typical adblockers run as an extension in popular web browsers. As we browse the internet, they compare HTTP requests to their list of hosts and filters to selectively block advertisements, trackers, and malware. This filtering helps to protect the surfer's privacy, prevents [malvertising attacks](http://www.wired.com/insights/2014/11/malvertising-is-cybercriminals-latest-sweet-spot/ "Why Malvertising Is Cybercriminals' Latest Sweet Spot - Wired"), and [reduces bandwidth requirements](http://venturebeat.com/2015/07/08/blocking-ads-can-cut-network-traffic-25-to-40-study-shows/ "Blocking Ads Can Cut Network Traffic 25% to 40%, Study Shows - VentureBeat"). Thousands of contributors work hard to maintain these FilterLists for anyone to use. Locating and selecting these lists, however, has not historically been very easy. This project aims to solve that problem. - -## Acknowledgements +# Acknowledgements - Imre Kristoffer Eilertsen [@DandelionSprout](https://github.com/DandelionSprout) : major contributor - Raymond Hill [@gorhill](https://github.com/gorhill) : uBlock Origin owner, advised on some technical aspects of FilterLists - Andrey Meshkov [@ameshkov](https://github.com/ameshkov) : AdGuard CTO, advised on some technical aspects of FilterLists - [More contributors](https://github.com/collinbarrett/FilterLists/graphs/contributors) -## Miscellany +# Miscellany -### Disclaimer +## Disclaimer FilterLists does not condone or endorse implementing any particular FilterList or blocking any particular advertisement network. Make sure to financially support your favorite sites in some way if you choose to block their advertisements. FilterLists is also in no way officially affiliated with any of the software vendors or list maintainers referenced on this site. -### Privacy +## Privacy We respect your privacy. That is the whole point of this site. The only minor data we collect about visitors is what [Cloudflare](https://www.cloudflare.com/analytics/), [Application Insights](https://docs.microsoft.com/en-us/azure/application-insights/app-insights-data-retention-privacy), and [GitHub](https://help.github.com/articles/github-privacy-statement/) capture. -### Internet Explorer TPL users +## Internet Explorer TPL users The FilterLists.com website returns a blank page in Internet Explorer, mostly due to problems with both polyfill and JavaScript elements, in addition to IE being considered by us to be an outdated browser. To help alleviate this, a makeshift archive has been set up. To view a smaller TPL-only archive with subscribable links, right-click on [this link](https://raw.githubusercontent.com/collinbarrett/FilterLists/master/data/TPLSubscriptionAssistant.html), choose to save it as an HTML file, and open it in Internet Explorer ≥9. From 80ce116d5ba16af0e1c642b042154ee3ffcb0f33 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 10:03:55 -0500 Subject: [PATCH 71/85] update README for building locally --- .github/README.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/.github/README.md b/.github/README.md index 955e83b21..a506f3b80 100644 --- a/.github/README.md +++ b/.github/README.md @@ -27,16 +27,33 @@ To submit a new list or update data about an existing list, please submit a pull FilterLists does not maintain any of these lists. It serves only as a discovery tool to direct users to lists that they may want to use. If you want to request addition, modification, or removal of a rule from a list, you will need to contact the maintainers of that list directly. FilterLists provides a variety of ways you can get in contact with the maintainers to do so. -## Building and/or Running Locally +## Building and Running Locally We have containerized FilterLists to make it as easy as possible for contributers to get the project up and running locally. +### Up and Running + 1. Install Docker CE for your computer's operating system. [Docs](https://docs.docker.com/install/) -2. Clone the FilterLists git repo to your computer. [Docs](https://help.github.com/en/articles/cloning-a-repository) +2. Clone the FilterLists git repository to your computer. [Docs](https://help.github.com/en/articles/cloning-a-repository) 3. Navigate to the root directory of your locally cloned FilterLists git repository in a command-line interface (bash, cmd, etc.). 4. Execute `docker-compose up -d`. 5. Visit the locally running version of FilterLists in a web browser at `http://localhost/` (web) and `http://localhost/api/v1/lists` (API). +### Testing changes to the data (.json files) + +1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.api` container. +2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. + +### Testing changes to the `Api`, `Services`, or `Data` projects + +1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.api` container. +2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. + +### Testing changes to the `Web` project + +1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.web` container. +2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. + # Acknowledgements - Imre Kristoffer Eilertsen [@DandelionSprout](https://github.com/DandelionSprout) : major contributor From 17ec6d7ae48d1943af751ef7db386fd821eb3859 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 10:18:26 -0500 Subject: [PATCH 72/85] add Debugging step to README --- .github/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/README.md b/.github/README.md index a506f3b80..6b8b54785 100644 --- a/.github/README.md +++ b/.github/README.md @@ -54,6 +54,11 @@ We have containerized FilterLists to make it as easy as possible for contributer 1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.web` container. 2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. +### Debugging + +1. Execute `docker container ls -a` to find the `CONTAINER ID` of the container in question. +2. Execute `docker logs [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1 to view the logs from that container. + # Acknowledgements - Imre Kristoffer Eilertsen [@DandelionSprout](https://github.com/DandelionSprout) : major contributor From 1ec0f8065176923708fb79833eb5d77a31101ce5 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 11:18:41 -0500 Subject: [PATCH 73/85] automated testing updates --- .github/README.md | 17 ++++++++++++++++- docker-compose.data.services.yml | 13 +++++++++++++ docker-compose.data.tests.yml | 7 +++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 docker-compose.data.services.yml diff --git a/.github/README.md b/.github/README.md index 6b8b54785..660c28c28 100644 --- a/.github/README.md +++ b/.github/README.md @@ -37,17 +37,32 @@ We have containerized FilterLists to make it as easy as possible for contributer 2. Clone the FilterLists git repository to your computer. [Docs](https://help.github.com/en/articles/cloning-a-repository) 3. Navigate to the root directory of your locally cloned FilterLists git repository in a command-line interface (bash, cmd, etc.). 4. Execute `docker-compose up -d`. -5. Visit the locally running version of FilterLists in a web browser at `http://localhost/` (web) and `http://localhost/api/v1/lists` (API). +5. Visit the locally running version of FilterLists in a web browser at `http://localhost/`. ### Testing changes to the data (.json files) +#### Automated + +Execute `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` + +#### Manual + 1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.api` container. 2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. +3. Verify your changes are properly reflected at `http://localhost/`. ### Testing changes to the `Api`, `Services`, or `Data` projects +#### Automated + +- `Services`: Execute `docker-compose -f docker-compose.services.tests.yml down -v && docker-compose -f docker-compose.services.tests.yml build api && docker-compose -f docker-compose.services.tests.yml run api` +- `Data`: Execute `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` + +#### Manual + 1. Execute `docker container ls` to find the `CONTAINER ID` of the `filterlists.api` container. 2. Execute `docker-compose up -d --build [CONTAINER ID]` replacing `[CONTAINER ID]` with the hash from step 1. +3. Verify your changes are properly reflected at `http://localhost/api`. ### Testing changes to the `Web` project diff --git a/docker-compose.data.services.yml b/docker-compose.data.services.yml new file mode 100644 index 000000000..d6a3dda41 --- /dev/null +++ b/docker-compose.data.services.yml @@ -0,0 +1,13 @@ +version: "3.7" + +services: + api: + build: + context: . + dockerfile: src/FilterLists.Api/Dockerfile + target: test-services + networks: + - test-services + +networks: + test-services: diff --git a/docker-compose.data.tests.yml b/docker-compose.data.tests.yml index 8910d8e33..a1802e0b8 100644 --- a/docker-compose.data.tests.yml +++ b/docker-compose.data.tests.yml @@ -6,11 +6,15 @@ services: context: . dockerfile: src/FilterLists.Api/Dockerfile target: test-data + networks: + - test-data depends_on: - mariadb mariadb: image: mariadb:10 + networks: + - test-data environment: - MYSQL_ROOT_PASSWORD=filterlists - MYSQL_DATABASE=filterlists @@ -22,3 +26,6 @@ services: "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_520_ci" ] + +networks: + test-data: From b39a0f5e9c9a318b1db4fa0460ea48236c9eae90 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 11:29:09 -0500 Subject: [PATCH 74/85] fix typo in services tests yml --- ...compose.data.services.yml => docker-compose.services.tests.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docker-compose.data.services.yml => docker-compose.services.tests.yml (100%) diff --git a/docker-compose.data.services.yml b/docker-compose.services.tests.yml similarity index 100% rename from docker-compose.data.services.yml rename to docker-compose.services.tests.yml From a357d6449c0ec531c79127052fae0b46f9581ef2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 12:20:56 -0500 Subject: [PATCH 75/85] make some commands more readable in README --- .github/README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/README.md b/.github/README.md index 660c28c28..ef008e5b1 100644 --- a/.github/README.md +++ b/.github/README.md @@ -35,7 +35,7 @@ We have containerized FilterLists to make it as easy as possible for contributer 1. Install Docker CE for your computer's operating system. [Docs](https://docs.docker.com/install/) 2. Clone the FilterLists git repository to your computer. [Docs](https://help.github.com/en/articles/cloning-a-repository) -3. Navigate to the root directory of your locally cloned FilterLists git repository in a command-line interface (bash, cmd, etc.). +3. Navigate to the root directory of your locally cloned FilterLists git repository in a command-line interface. 4. Execute `docker-compose up -d`. 5. Visit the locally running version of FilterLists in a web browser at `http://localhost/`. @@ -43,7 +43,9 @@ We have containerized FilterLists to make it as easy as possible for contributer #### Automated -Execute `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` +Execute: + +`docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` #### Manual @@ -55,8 +57,12 @@ Execute `docker-compose -f docker-compose.data.tests.yml down -v && docker-compo #### Automated -- `Services`: Execute `docker-compose -f docker-compose.services.tests.yml down -v && docker-compose -f docker-compose.services.tests.yml build api && docker-compose -f docker-compose.services.tests.yml run api` -- `Data`: Execute `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` +- For `Services`, execute: + + `docker-compose -f docker-compose.services.tests.yml down -v && docker-compose -f docker-compose.services.tests.yml build api && docker-compose -f docker-compose.services.tests.yml run api` +- For `Data`, execute: + + `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` #### Manual From 302d56611a3983d78e533c9113313052e5d90851 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 12:57:40 -0500 Subject: [PATCH 76/85] tidy tests in docker --- .github/README.md | 3 ++- docker-compose.data.tests.yml | 1 + docker-compose.services.tests.yml | 6 +----- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/README.md b/.github/README.md index ef008e5b1..ff6fb5649 100644 --- a/.github/README.md +++ b/.github/README.md @@ -59,7 +59,8 @@ Execute: - For `Services`, execute: - `docker-compose -f docker-compose.services.tests.yml down -v && docker-compose -f docker-compose.services.tests.yml build api && docker-compose -f docker-compose.services.tests.yml run api` + `docker-compose -f docker-compose.services.tests.yml build api && docker-compose -f docker-compose.services.tests.yml run --rm api` + - For `Data`, execute: `docker-compose -f docker-compose.data.tests.yml down -v && docker-compose -f docker-compose.data.tests.yml build api && docker-compose -f docker-compose.data.tests.yml run api` diff --git a/docker-compose.data.tests.yml b/docker-compose.data.tests.yml index a1802e0b8..12bedece0 100644 --- a/docker-compose.data.tests.yml +++ b/docker-compose.data.tests.yml @@ -2,6 +2,7 @@ version: "3.7" services: api: + image: collinbarrett/filterlists.api:test-data build: context: . dockerfile: src/FilterLists.Api/Dockerfile diff --git a/docker-compose.services.tests.yml b/docker-compose.services.tests.yml index d6a3dda41..b72638bf8 100644 --- a/docker-compose.services.tests.yml +++ b/docker-compose.services.tests.yml @@ -2,12 +2,8 @@ version: "3.7" services: api: + image: collinbarrett/filterlists.api:test-services build: context: . dockerfile: src/FilterLists.Api/Dockerfile target: test-services - networks: - - test-services - -networks: - test-services: From f33cf5de767d17ede7204a863cd8dcb50f8a7a5b Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 13:05:07 -0500 Subject: [PATCH 77/85] re-add explicit network in services.tests because default seems to fail on Azure Pipes --- docker-compose.services.tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose.services.tests.yml b/docker-compose.services.tests.yml index b72638bf8..cbc23fda8 100644 --- a/docker-compose.services.tests.yml +++ b/docker-compose.services.tests.yml @@ -7,3 +7,9 @@ services: context: . dockerfile: src/FilterLists.Api/Dockerfile target: test-services + networks: + - test-services + +networks: + test-services: + \ No newline at end of file From 863742dfe6d06941bc92fdb0bc745cafbbf162dc Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 4 May 2019 14:54:13 -0500 Subject: [PATCH 78/85] format tweak --- docker-compose.prod.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1b2a3900d..1284fbd6d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,7 +1,6 @@ version: "3.7" services: - api: image: collinbarrett/filterlists.api:latest From e122fb6269b068ddcd28997c4c09f901206c58cd Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 6 May 2019 17:44:18 -0500 Subject: [PATCH 79/85] add badges --- .github/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/README.md b/.github/README.md index ff6fb5649..29f5d098f 100644 --- a/.github/README.md +++ b/.github/README.md @@ -2,6 +2,8 @@ [![Website](https://img.shields.io/website-up-down-green-red/http/shields.io.svg)](https://filterlists.com/) [![API](https://img.shields.io/website-up-down-green-red/http/shields.io.svg?label=API)](https://filterlists.com/api/v1/lists) +[![Build status](https://dev.azure.com/collinbarrett/FilterLists/_apis/build/status/FilterLists.Api-CI)](https://dev.azure.com/collinbarrett/FilterLists/_build/latest?definitionId=3) +[![Build status](https://dev.azure.com/collinbarrett/FilterLists/_apis/build/status/FilterLists.Web-CI)](https://dev.azure.com/collinbarrett/FilterLists/_build/latest?definitionId=12) [![License](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/collinbarrett/FilterLists/blob/master/LICENSE) [![BuiltWithDot.Net shield](https://builtwithdot.net/project/125/filterlists/badge)](https://builtwithdot.net/project/125/filterlists) [![Beerpay](https://beerpay.io/collinbarrett/FilterLists/badge.svg?style=beer-square)](https://beerpay.io/collinbarrett/FilterLists) From 369432d81ad73c26f5c1148d0ecb3b3d0dfe02e9 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 7 May 2019 20:01:54 -0500 Subject: [PATCH 80/85] initial try of docker-devops prod deploy --- .env | 5 +++++ .gitignore | 21 ++++++++++++++------- docker-compose.prod.yml | 11 +++++------ docker-compose.yml | 14 +++++++------- 4 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 000000000..a59b8881d --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +FILTERLISTS_CONNECTION_STRING="Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists;" +FILTERLISTS_MYSQL_ROOT_PASSWORD=filterlists +FILTERLISTS_MYSQL_DATABASE=filterlists +FILTERLISTS_MYSQL_USER=filterlists +FILTERLISTS_MYSQL_PASSWORD=filterlists \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6174512bf..bd381b8cd 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs +# Mono auto generated files +mono_crash.* + # Build results [Dd]ebug/ [Dd]ebugPublic/ @@ -182,6 +185,8 @@ PublishScripts/ # NuGet Packages *.nupkg +# NuGet Symbol Packages +*.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. @@ -206,6 +211,8 @@ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx +*.appxbundle +*.appxupload # Visual Studio cache files # files ending in .cache can be ignored @@ -231,8 +238,6 @@ orleans.codegen.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ -# ASP.NET Core default setup: bower directory is configured as wwwroot/lib/ and bower restore is true -**/wwwroot/lib/ # RIA/Silverlight projects Generated_Code/ @@ -257,6 +262,9 @@ ServiceFabricBackup/ *.bim.layout *.bim_*.settings *.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ @@ -292,10 +300,6 @@ paket-files/ # FAKE - F# Make .fake/ -# JetBrains Rider -.idea/ -*.sln.iml - # CodeRush personal settings .cr/personal @@ -337,9 +341,12 @@ ASALocalRun/ # Local History for Visual Studio .localhistory/ -# BeatPulse healthcheck temp database +# BeatPulse healthcheck temp database healthchecksdb +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + # FilterLists Custom Ignores appsettings*.json src/FilterLists.Web/wwwroot/dist \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1284fbd6d..50ba8321b 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,8 +1,7 @@ version: "3.7" -services: - api: - image: collinbarrett/filterlists.api:latest - - web: - image: collinbarrett/filterlists.web:latest +networks: + # https://github.com/collinbarrett/wp-host-on-containers/blob/master/docker-compose.nginx.yml + reverse-proxy: + external: + name: wp-host_reverse-proxy diff --git a/docker-compose.yml b/docker-compose.yml index 551179741..53faf1f9a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ services: - ./ops/nginx/conf.d:/etc/nginx/conf.d:ro web: - image: collinbarrett/filterlists.web + image: collinbarrett/filterlists.web:latest restart: always build: context: . @@ -24,7 +24,7 @@ services: - api api: - image: collinbarrett/filterlists.api + image: collinbarrett/filterlists.api:latest restart: always build: context: . @@ -36,7 +36,7 @@ services: depends_on: - mariadb environment: - ConnectionStrings__FilterListsConnection: "Server=mariadb;Database=filterlistsdata;Uid=filterlists;Pwd=C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833;" + ConnectionStrings__FilterListsConnection: ${FILTERLISTS_CONNECTION_STRING} mariadb: image: mariadb:10 @@ -46,10 +46,10 @@ services: volumes: - data:/var/lib/mysql environment: - MYSQL_RANDOM_ROOT_PASSWORD: "yes" - MYSQL_DATABASE: filterlistsdata - MYSQL_USER: filterlists - MYSQL_PASSWORD: C53A28194242D82288E1E84A37E56D3EC7DFF83F1D9E018AF19E9BA27A5DF833 + MYSQL_ROOT_PASSWORD: ${FILTERLISTS_MYSQL_ROOT_PASSWORD} + MYSQL_DATABASE: ${FILTERLISTS_MYSQL_DATABASE} + MYSQL_USER: ${FILTERLISTS_MYSQL_USER} + MYSQL_PASSWORD: ${FILTERLISTS_MYSQL_PASSWORD} command: [ "mysqld", From 661d5e7202947438cbabe11cd2073f625af4c69b Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 7 May 2019 21:02:52 -0500 Subject: [PATCH 81/85] wrap env var name in quotes --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index a59b8881d..3a307df60 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -FILTERLISTS_CONNECTION_STRING="Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists;" +"FILTERLISTS_CONNECTION_STRING=Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists;" FILTERLISTS_MYSQL_ROOT_PASSWORD=filterlists FILTERLISTS_MYSQL_DATABASE=filterlists FILTERLISTS_MYSQL_USER=filterlists From 7fb14e8c8fcdb0a0b2129a68273e2812d072eeee Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 7 May 2019 21:11:14 -0500 Subject: [PATCH 82/85] alt conn string env var formatting --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 3a307df60..b21c4d35a 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -"FILTERLISTS_CONNECTION_STRING=Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists;" +FILTERLISTS_CONNECTION_STRING=Server=mariadb;Database=filterlists;Uid=filterlists;Pwd=filterlists; FILTERLISTS_MYSQL_ROOT_PASSWORD=filterlists FILTERLISTS_MYSQL_DATABASE=filterlists FILTERLISTS_MYSQL_USER=filterlists From 06b9b92e84114f7094de49efe8836e009c409257 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 8 May 2019 17:43:06 -0500 Subject: [PATCH 83/85] web should not depend on api --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 53faf1f9a..1887df5d7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,8 +20,6 @@ services: target: final networks: - reverse-proxy - depends_on: - - api api: image: collinbarrett/filterlists.api:latest From c11d01737076d4971bfdc937a9335dd6ae91ba12 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 8 May 2019 19:25:14 -0500 Subject: [PATCH 84/85] isolate app from environment in /app directory --- src/FilterLists.Api/Dockerfile | 15 ++++++++------- src/FilterLists.Web/Dockerfile | 10 ++++++---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/FilterLists.Api/Dockerfile b/src/FilterLists.Api/Dockerfile index b769b62bc..aac6363fc 100644 --- a/src/FilterLists.Api/Dockerfile +++ b/src/FilterLists.Api/Dockerfile @@ -3,6 +3,7 @@ # init base FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as base +WORKDIR /app ENV DataDirectory__Path "data" ENV ASPNETCORE_URLS "http://*:5000" EXPOSE 5000 @@ -12,18 +13,18 @@ ENTRYPOINT ["dotnet", "FilterLists.Api.dll"] FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build # restore -WORKDIR /src +WORKDIR /app/src COPY src/FilterLists.Data/FilterLists.Data.csproj FilterLists.Data/ COPY src/FilterLists.Services/FilterLists.Services.csproj FilterLists.Services/ -WORKDIR /src/FilterLists.Api +WORKDIR /app/src/FilterLists.Api COPY src/FilterLists.Api/FilterLists.Api.csproj . RUN dotnet restore # build -WORKDIR /src +WORKDIR /app/src COPY src/FilterLists.Data/. FilterLists.Data/ COPY src/FilterLists.Services/. FilterLists.Services/ -WORKDIR /src/FilterLists.Api +WORKDIR /app/src/FilterLists.Api COPY src/FilterLists.Api/. . RUN dotnet build -c Release --no-restore @@ -32,7 +33,7 @@ FROM build AS test-data ENTRYPOINT ["dotnet", "test"] # restore Data.Tests -WORKDIR /tests/FilterLists.Data.Tests +WORKDIR /app/tests/FilterLists.Data.Tests COPY tests/FilterLists.Data.Tests/FilterLists.Data.Tests.csproj . RUN dotnet restore @@ -46,7 +47,7 @@ FROM build AS test-services ENTRYPOINT ["dotnet", "test"] # restore Services.Tests -WORKDIR /tests/FilterLists.Services.Tests +WORKDIR /app/tests/FilterLists.Services.Tests COPY tests/FilterLists.Services.Tests/FilterLists.Services.Tests.csproj . RUN dotnet restore @@ -60,5 +61,5 @@ RUN dotnet publish -c Release -o out --no-restore --no-build # final FROM base as final -COPY --from=publish /src/FilterLists.Api/out . +COPY --from=publish /app/src/FilterLists.Api/out . COPY data/. data/ diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 9db44bfb6..4b87eb9a3 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -3,27 +3,29 @@ # init base FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine as runtime +WORKDIR /app ENV ASPNETCORE_URLS "http://*:5000" EXPOSE 5000 ENTRYPOINT ["dotnet", "FilterLists.Web.dll"] # init build FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build +WORKDIR /app RUN apk add --update nodejs nodejs-npm # restore COPY FilterLists.Web.sln ./ -WORKDIR /src/FilterLists.Web/ +WORKDIR /app/src/FilterLists.Web/ COPY src/FilterLists.Web/FilterLists.Web.csproj ./ -WORKDIR / +WORKDIR /app RUN dotnet restore # publish -WORKDIR /src/FilterLists.Web/ +WORKDIR /app/src/FilterLists.Web/ COPY src/FilterLists.Web/. ./ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime as final -COPY --from=build /src/FilterLists.Web/out ./ +COPY --from=build /app/src/FilterLists.Web/out ./ \ No newline at end of file From c3e54420c95c03c52526b9964918a1cdee7423e8 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Wed, 8 May 2019 19:50:54 -0500 Subject: [PATCH 85/85] add mount point for static files --- docker-compose.prod.yml | 9 +++++++++ src/FilterLists.Web/Dockerfile | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 50ba8321b..8481650ea 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,7 +1,16 @@ version: "3.7" +services: + web: + volumes: + - web-static:/app/wwwroot + networks: # https://github.com/collinbarrett/wp-host-on-containers/blob/master/docker-compose.nginx.yml reverse-proxy: external: name: wp-host_reverse-proxy + +volumes: + web-static: + \ No newline at end of file diff --git a/src/FilterLists.Web/Dockerfile b/src/FilterLists.Web/Dockerfile index 4b87eb9a3..bf7268737 100644 --- a/src/FilterLists.Web/Dockerfile +++ b/src/FilterLists.Web/Dockerfile @@ -28,4 +28,4 @@ RUN dotnet publish -c Release -o out --no-restore # run FROM runtime as final COPY --from=build /app/src/FilterLists.Web/out ./ - \ No newline at end of file +VOLUME /app/wwwroot