From 89311c0976952d22f9b87a7d0af9f8b823026937 Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:20:25 +0200 Subject: [PATCH 1/6] feat: use SQLitePCLRaw for testing w/SQLite --- .../EmailSender.Persistence.Database.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/EmailSender.Persistence/EmailSender.Persistence.Database/EmailSender.Persistence.Database.csproj b/EmailSender.Persistence/EmailSender.Persistence.Database/EmailSender.Persistence.Database.csproj index 5a5368e..8375d32 100644 --- a/EmailSender.Persistence/EmailSender.Persistence.Database/EmailSender.Persistence.Database.csproj +++ b/EmailSender.Persistence/EmailSender.Persistence.Database/EmailSender.Persistence.Database.csproj @@ -34,6 +34,7 @@ + From bc514efb2c46ae030272a7e549bd2a8c03202a2d Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:20:39 +0200 Subject: [PATCH 2/6] feat: change port for development --- EmailSender.WebApi/Properties/launchSettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EmailSender.WebApi/Properties/launchSettings.json b/EmailSender.WebApi/Properties/launchSettings.json index b7fb23c..7e17e7b 100644 --- a/EmailSender.WebApi/Properties/launchSettings.json +++ b/EmailSender.WebApi/Properties/launchSettings.json @@ -5,7 +5,7 @@ { "commandName": "Project", "launchBrowser": false, - "applicationUrl": "http://localhost:5010", + "applicationUrl": "http://localhost:6001", "launchUrl": "swagger", "environmentVariables": { From 2be08196e8ddc058edefc5dd81fd6672d53414af Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:21:58 +0200 Subject: [PATCH 3/6] feat: update project --- EmailSender.WebApi/EmailSender.WebApi.csproj | 45 ++++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/EmailSender.WebApi/EmailSender.WebApi.csproj b/EmailSender.WebApi/EmailSender.WebApi.csproj index f6e95b7..31aa378 100644 --- a/EmailSender.WebApi/EmailSender.WebApi.csproj +++ b/EmailSender.WebApi/EmailSender.WebApi.csproj @@ -6,8 +6,30 @@ 10 enable enable + true + true + true + false + true + + + appsettings.Development.json + Always + + + appsettings.Production.json + Always + + + + + + + + + @@ -23,27 +45,4 @@ - - - - - - - - - - - - - - - appsettings.Development.json - Always - - - appsettings.Production.json - Always - - - From 654daa843926c09d130280a8e41fddafe01fb795 Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:22:18 +0200 Subject: [PATCH 4/6] feat: add nginx configs --- EmailSender.ClientApp/nginx/nginx-http.conf | 82 +++++++++++++++++ EmailSender.ClientApp/nginx/nginx-https.conf | 93 ++++++++++++++++++++ EmailSender.ClientApp/nginx/nginx.conf | 82 +++++++++++++++++ 3 files changed, 257 insertions(+) create mode 100644 EmailSender.ClientApp/nginx/nginx-http.conf create mode 100644 EmailSender.ClientApp/nginx/nginx-https.conf create mode 100644 EmailSender.ClientApp/nginx/nginx.conf diff --git a/EmailSender.ClientApp/nginx/nginx-http.conf b/EmailSender.ClientApp/nginx/nginx-http.conf new file mode 100644 index 0000000..534fbbd --- /dev/null +++ b/EmailSender.ClientApp/nginx/nginx-http.conf @@ -0,0 +1,82 @@ +include /etc/nginx/modules-enabled/*.conf; + +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + server_tokens off; + more_clear_headers Server; + + keepalive_timeout 65; + + gzip on; + gzip_static on; + gzip_disable "msie6"; + gzip_proxied any; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_min_length 256; + gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; + gunzip on; + + server { + listen 80; + server_name ${SERVER_NAME}; + + error_page 404 /404.html; + location = /404.html { + root /usr/share/nginx/html; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html$is_args$args; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + proxy_buffering off; + proxy_cache_valid 200 30m; + proxy_cache_valid 404 1m; + + client_max_body_size 10m; + client_body_buffer_size 128k; + } + + location /api { + proxy_pass http://backend; + } + + location /hc { + proxy_pass http://backend/hc; + } + } +} \ No newline at end of file diff --git a/EmailSender.ClientApp/nginx/nginx-https.conf b/EmailSender.ClientApp/nginx/nginx-https.conf new file mode 100644 index 0000000..d0e00a8 --- /dev/null +++ b/EmailSender.ClientApp/nginx/nginx-https.conf @@ -0,0 +1,93 @@ +include /etc/nginx/modules-enabled/*.conf; + +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + server_tokens off; + more_clear_headers Server; + + keepalive_timeout 65; + + gzip on; + gzip_static on; + gzip_disable "msie6"; + gzip_proxied any; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_min_length 256; + gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; + gunzip on; + + server { + listen 443 ssl; + server_name ${SERVER_NAME}; + + ssl_certificate /etc/nginx/wildcard-emailsender.dev.chain; + ssl_certificate_key /etc/nginx/wildcard-emailsender.dev.key; + ssl_trusted_certificate /etc/nginx/wildcard-emailsender.dev.ca; + + ssl_session_cache shared:le_nginx_SSL:10m; + ssl_session_timeout 1d; + ssl_session_cache shared:MozSSL:10m; + ssl_session_tickets off; + + ssl_dhparam /etc/nginx/ffdhe2048.txt; + + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305; + ssl_prefer_server_ciphers off; + + ssl_stapling on; + ssl_stapling_verify on; + + add_header Strict-Transport-Security "max-age=63072000" always; + access_log /var/log/nginx/access.log; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html$is_args$args; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + proxy_buffering off; + proxy_cache_valid 200 30m; + proxy_cache_valid 404 1m; + + client_max_body_size 10m; + client_body_buffer_size 128k; + } + + location /api { + proxy_pass http://backend; + } + + location /hc { + proxy_pass http://backend/hc; + } + } +} \ No newline at end of file diff --git a/EmailSender.ClientApp/nginx/nginx.conf b/EmailSender.ClientApp/nginx/nginx.conf new file mode 100644 index 0000000..a6a31ff --- /dev/null +++ b/EmailSender.ClientApp/nginx/nginx.conf @@ -0,0 +1,82 @@ +include /etc/nginx/modules-enabled/*.conf; + +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + server_tokens off; + more_clear_headers Server; + + keepalive_timeout 65; + + gzip on; + gzip_static on; + gzip_disable "msie6"; + gzip_proxied any; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_min_length 256; + gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; + gunzip on; + + server { + listen 80; + server_name localhost; + + error_page 404 /404.html; + location = /404.html { + root /usr/share/nginx/html; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html$is_args$args; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + proxy_buffering off; + proxy_cache_valid 200 30m; + proxy_cache_valid 404 1m; + + client_max_body_size 10m; + client_body_buffer_size 128k; + } + + location /api { + proxy_pass http://backend; + } + + location /hc { + proxy_pass http://backend/hc; + } + } +} \ No newline at end of file From 1580671d74e9e1b6636fea845abc932056132299 Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:22:33 +0200 Subject: [PATCH 5/6] feat: add gitignore --- EmailSender.ClientApp/.gitignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 EmailSender.ClientApp/.gitignore diff --git a/EmailSender.ClientApp/.gitignore b/EmailSender.ClientApp/.gitignore new file mode 100644 index 0000000..53b5899 --- /dev/null +++ b/EmailSender.ClientApp/.gitignore @@ -0,0 +1,27 @@ +# See https://help.github.com/ignore-files/ for more about ignoring files. + +# dependencies +/node_modules + +# testing +/coverage +/reports + +# production +/build + +# misc +__testrun.dev.sh +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# sonar qube +/.sonarqube +/.scannerwork From f99daa429e353a19ced209b3d609d129c9668abd Mon Sep 17 00:00:00 2001 From: Tomasz 'Tom' Kandula Date: Mon, 22 Apr 2024 14:22:53 +0200 Subject: [PATCH 6/6] feat: add/update docker config for the solution --- EmailSender.ClientApp/clientapp.dockerfile | 15 +++++++++ EmailSender.sln | 24 ++++++++++---- dockerfile => backend.dockerfile | 29 ++--------------- docker-compose-prod.yml | 38 ++++++++++++++++++++++ docker-compose-run.yml | 34 +++++++++++++++++++ docker-compose-test.yml | 34 +++++++++++++++++++ docker-compose-up-prod.sh | 17 ++++++++++ docker-compose-up-test.sh | 17 ++++++++++ docker-compose.yml | 20 ------------ 9 files changed, 175 insertions(+), 53 deletions(-) create mode 100644 EmailSender.ClientApp/clientapp.dockerfile rename dockerfile => backend.dockerfile (54%) create mode 100644 docker-compose-prod.yml create mode 100644 docker-compose-run.yml create mode 100644 docker-compose-test.yml create mode 100644 docker-compose-up-prod.sh create mode 100644 docker-compose-up-test.sh delete mode 100644 docker-compose.yml diff --git a/EmailSender.ClientApp/clientapp.dockerfile b/EmailSender.ClientApp/clientapp.dockerfile new file mode 100644 index 0000000..cc46351 --- /dev/null +++ b/EmailSender.ClientApp/clientapp.dockerfile @@ -0,0 +1,15 @@ +FROM debian:latest +WORKDIR /usr/share/nginx/html + +RUN rm -rf ./* +RUN apt-get update +RUN apt-get upgrade +RUN apt-get -y install bash +RUN apt-get -y install nginx +RUN apt-get -y install nginx-full +RUN apt-get -y install nginx-extras +RUN adduser --system --no-create-home --shell /bin/false --group --disabled-login nginx +RUN chown -R nginx:nginx /var/www/html + +CMD /bin/bash -c "nginx -t" +CMD /bin/bash -c "nginx -g 'daemon off;'" diff --git a/EmailSender.sln b/EmailSender.sln index 0fa91fb..6b75597 100644 --- a/EmailSender.sln +++ b/EmailSender.sln @@ -2,9 +2,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.WebApi", "EmailSender.WebApi\EmailSender.WebApi.csproj", "{3891C8E1-909A-4D60-874B-1A149D8A3605}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "8. WebApi", "8. WebApi", "{C2719A80-86A0-4E87-A498-3EEDD5C9179E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "9. WebApi", "9. WebApi", "{C2719A80-86A0-4E87-A498-3EEDD5C9179E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "5. Backend", "5. Backend", "{9D9222F5-D3A7-4B54-8315-2C082E86E113}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "6. Backend", "6. Backend", "{9D9222F5-D3A7-4B54-8315-2C082E86E113}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Backend.Domain", "EmailSender.Backend\EmailSender.Backend.Domain\EmailSender.Backend.Domain.csproj", "{77E91901-D956-4B29-AFAA-FED0CC86832A}" EndProject @@ -24,9 +24,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Backend.UserSer EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Backend.SenderService", "EmailSender.Services\EmailSender.Services.SenderService\EmailSender.Services.SenderService.csproj", "{B202F77B-350C-4B2B-B4C5-231C01EBC262}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "7. Services", "7. Services", "{21288831-4321-4486-94E9-F845B0686DEA}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "8. Services", "8. Services", "{21288831-4321-4486-94E9-F845B0686DEA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "9. Tests", "9. Tests", "{629420EA-3D08-4245-A66C-BC1F5988F448}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "10. Tests", "10. Tests", "{629420EA-3D08-4245-A66C-BC1F5988F448}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Backend.Core", "EmailSender.Backend\EmailSender.Backend.Core\EmailSender.Backend.Core.csproj", "{398D9B4F-5B0F-4F45-995F-A3F0871D9C08}" EndProject @@ -34,7 +34,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Services.Behavi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.WebApi.Dto", "EmailSender.WebApi.Dto\EmailSender.WebApi.Dto.csproj", "{FE78528E-BAF5-4544-8CF9-F8C9C6B05F92}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "6. Persistence", "6. Persistence", "{14D3E1FE-C526-4670-BED4-5DED8546EA83}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "7. Persistence", "7. Persistence", "{14D3E1FE-C526-4670-BED4-5DED8546EA83}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "1. Documentation", "1. Documentation", "{FF7552A2-F719-47E0-BF43-EEAAE9CBEE97}" ProjectSection(SolutionItems) = preProject @@ -57,12 +57,22 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3. Deployment", "3. Deploym EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4. Docker", "4. Docker", "{5080551A-648C-4C60-AC89-9DD75FA32AC4}" ProjectSection(SolutionItems) = preProject - dockerfile = dockerfile - docker-compose.yml = docker-compose.yml + backend.dockerfile = backend.dockerfile + EmailSender.ClientApp\clientapp.dockerfile = EmailSender.ClientApp\clientapp.dockerfile + docker-compose-test.yml = docker-compose-test.yml + docker-compose-prod.yml = docker-compose-prod.yml + docker-compose-up-test.sh = docker-compose-up-test.sh + docker-compose-up-prod.sh = docker-compose-up-prod.sh EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailSender.Services.HttpClientService", "EmailSender.Services\EmailSender.Services.HttpClientService\EmailSender.Services.HttpClientService.csproj", "{4C4140B2-25EF-4E97-A767-46CAE4638853}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "5. Nginx", "5. Nginx", "{AF9CD4F2-94E5-4EDF-B29E-0422690765E5}" + ProjectSection(SolutionItems) = preProject + EmailSender.ClientApp\nginx\nginx-https.conf = EmailSender.ClientApp\nginx\nginx-https.conf + EmailSender.ClientApp\nginx\nginx-http.conf = EmailSender.ClientApp\nginx\nginx-http.conf + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/dockerfile b/backend.dockerfile similarity index 54% rename from dockerfile rename to backend.dockerfile index d029130..417d452 100644 --- a/dockerfile +++ b/backend.dockerfile @@ -20,38 +20,15 @@ WORKDIR /app RUN apk add icu-libs --no-cache RUN apk add icu-data-full --no-cache -# BACKEND +# ASSEMBLIES COPY --from=PROJECTS "/app/EmailSender.Backend/EmailSender.Backend.Application/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Backend/EmailSender.Backend.Core/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Backend/EmailSender.Backend.Domain/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Backend/EmailSender.Backend.Shared/bin/Release/net6.0" . - -# PERSISTENCE -COPY --from=PROJECTS "/app/EmailSender.Persistence/EmailSender.Persistence.Database/bin/Release/net6.0" . - -# SERVICES COPY --from=PROJECTS "/app/EmailSender.Services/EmailSender.Services.BehaviourService/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Services/EmailSender.Services.HttpClientService/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Services/EmailSender.Services.SenderService/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Services/EmailSender.Services.SmtpService/bin/Release/net6.0" . -COPY --from=PROJECTS "/app/EmailSender.Services/EmailSender.Services.UserService/bin/Release/net6.0" . - -# WEBAPI COPY --from=PROJECTS "/app/EmailSender.WebApi/bin/Release/net6.0" . COPY --from=PROJECTS "/app/EmailSender.WebApi.Dto/bin/Release/net6.0" . # CONFIGURATION ARG ENV_VALUE -ARG PFX_PASSWORD ENV ASPNETCORE_ENVIRONMENT=${ENV_VALUE} -ENV ASPNETCORE_Kestrel__Certificates__Default__Password=${PFX_PASSWORD} -ENV ASPNETCORE_Kestrel__Certificates__Default__Path=/https/wildcard-emailsender.dev.pfx -ENV ASPNETCORE_HTTPS_PORT=8081 -ENV ASPNETCORE_URLS=https://+:8081;http://+:8080 - -RUN update-ca-certificates - -EXPOSE 8080 -EXPOSE 8081 - +ENV ASPNETCORE_URLS=http://+:80 +EXPOSE 80 ENTRYPOINT ["dotnet", "EmailSender.WebApi.dll"] diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml new file mode 100644 index 0000000..a12bfc5 --- /dev/null +++ b/docker-compose-prod.yml @@ -0,0 +1,38 @@ +version: "3.8" + +services: + backend-api: + build: + context: . + args: + - ENV_VALUE=Production + dockerfile: backend.dockerfile + hostname: backend + networks: + - xnet + ports: + - "6000:80" + volumes: + - /opt/configs/emailsender-apis-prod.json:/app/appsettings.Production.json:ro + + frontend-app: + build: + context: EmailSender.ClientApp + args: + - ENV_VALUE=Production + dockerfile: clientapp.dockerfile + hostname: frontend + networks: + - xnet + ports: + - "443:443" + volumes: + - ./EmailSender.ClientApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - /opt/certs/wildcard-emailsender.dev.chain:/etc/nginx/wildcard-emailsender.dev.chain:ro + - /opt/certs/wildcard-emailsender.dev.key:/etc/nginx/wildcard-emailsender.dev.key:ro + - /opt/certs/wildcard-emailsender.dev.ca:/etc/nginx/wildcard-emailsender.dev.ca:ro + - /opt/certs/ffdhe2048.txt:/etc/nginx/ffdhe2048.txt:ro + +networks: + xnet: + driver: bridge \ No newline at end of file diff --git a/docker-compose-run.yml b/docker-compose-run.yml new file mode 100644 index 0000000..534803a --- /dev/null +++ b/docker-compose-run.yml @@ -0,0 +1,34 @@ +version: "3.8" + +services: + backend-api: + build: + context: . + args: + - ENV_VALUE=Testing + dockerfile: backend.dockerfile + hostname: backend + networks: + - xnet + ports: + - "6001:80" + volumes: + - /Users/tomkandula/.microsoft/usersecrets/424d541b-1da1-451a-ac5c-2431bf0d536c/secrets.json:/app/appsettings.Testing.json:ro + + frontend-app: + build: + context: EmailSender.ClientApp + args: + - ENV_VALUE=Testing + dockerfile: clientapp.dockerfile + hostname: frontend + networks: + - xnet + ports: + - "3001:80" + volumes: + - ./EmailSender.ClientApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + +networks: + xnet: + driver: bridge \ No newline at end of file diff --git a/docker-compose-test.yml b/docker-compose-test.yml new file mode 100644 index 0000000..534803a --- /dev/null +++ b/docker-compose-test.yml @@ -0,0 +1,34 @@ +version: "3.8" + +services: + backend-api: + build: + context: . + args: + - ENV_VALUE=Testing + dockerfile: backend.dockerfile + hostname: backend + networks: + - xnet + ports: + - "6001:80" + volumes: + - /Users/tomkandula/.microsoft/usersecrets/424d541b-1da1-451a-ac5c-2431bf0d536c/secrets.json:/app/appsettings.Testing.json:ro + + frontend-app: + build: + context: EmailSender.ClientApp + args: + - ENV_VALUE=Testing + dockerfile: clientapp.dockerfile + hostname: frontend + networks: + - xnet + ports: + - "3001:80" + volumes: + - ./EmailSender.ClientApp/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + +networks: + xnet: + driver: bridge \ No newline at end of file diff --git a/docker-compose-up-prod.sh b/docker-compose-up-prod.sh new file mode 100644 index 0000000..b816cae --- /dev/null +++ b/docker-compose-up-prod.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# PREPARE DOCKER COMPOSE FILE +cp docker-compose-prod.yml docker-compose-run.yml +cp EmailSender.ClientApp/nginx/nginx-https.conf EmailSender.ClientApp/nginx/nginx.conf + +# SET ENVIRONMENT VARIABLES +APP_BACKEND="emailsender.dev" +SERVER_NAME="emailsender.dev" + +# APPLY ENVIRONMENT VARIABLES +sed -i \ +-e "s/\${SERVER_NAME}/${SERVER_NAME}/" \ +-e "s/\${APP_BACKEND}/${APP_BACKEND}/" \ +EmailSender.ClientApp/nginx/nginx.conf + +# RUN DOCKER COMPOSE +docker compose -f docker-compose-run.yml up -d diff --git a/docker-compose-up-test.sh b/docker-compose-up-test.sh new file mode 100644 index 0000000..0cdcab1 --- /dev/null +++ b/docker-compose-up-test.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# PREPARE CONFIGURATION FILES +cp docker-compose-test.yml docker-compose-run.yml +cp EmailSender.ClientApp/nginx/nginx-http.conf EmailSender.ClientApp/nginx/nginx.conf + +# SET ENVIRONMENT VARIABLES +APP_BACKEND="localhost:6000" +SERVER_NAME="localhost" + +# APPLY ENVIRONMENT VARIABLES +sed -i "" \ +-e "s/\${SERVER_NAME}/${SERVER_NAME}/" \ +-e "s/\${APP_BACKEND}/${APP_BACKEND}/" \ +EmailSender.ClientApp/nginx/nginx.conf + +# RUN DOCKER COMPOSE +docker compose -f docker-compose-run.yml up -d diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index d1d8942..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: "3.8" - -services: - emailsender-api: - build: - context: . - args: - - ENV_VALUE=Production - - PFX_PASSWORD=${PFX_PASSWORD} - dockerfile: dockerfile - hostname: emailsender - ports: - - "80:8080" - - "443:8081" - volumes: - - /opt/configs/emailsender-apis-prod.json:/app/appsettings.Production.json:ro - - /opt/certs/wildcard-emailsender.dev.key:/usr/local/share/ca-certificates/wildcard-emailsender.dev.key:ro - - /opt/certs/wildcard-emailsender.dev.ca:/usr/local/share/ca-certificates/wildcard-emailsender.dev.ca:ro - - /opt/certs/wildcard-emailsender.dev.crt:/usr/local/share/ca-certificates/wildcard-emailsender.dev.crt:ro - - /opt/certs/wildcard-emailsender.dev.pfx:/https/wildcard-emailsender.dev.pfx:ro \ No newline at end of file