From 01e7acfbe4ad5904b5bf62070263aad03f1eaa13 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Mon, 16 Sep 2024 11:02:12 +0100 Subject: [PATCH 1/5] HTMLForm --- html-form/Dockerfile | 16 ++++++++-------- html-form/Package.swift | 7 +------ html-form/Sources/App/Application+build.swift | 3 ++- .../Templates}/details-entered.mustache | 0 .../Templates}/enter-details.mustache | 0 .../App/Resources/Templates}/page.mustache | 0 html-form/public/images/hummingbird.png | Bin 11854 -> 33568 bytes 7 files changed, 11 insertions(+), 15 deletions(-) rename html-form/{resources/templates => Sources/App/Resources/Templates}/details-entered.mustache (100%) rename html-form/{resources/templates => Sources/App/Resources/Templates}/enter-details.mustache (100%) rename html-form/{resources/templates => Sources/App/Resources/Templates}/page.mustache (100%) diff --git a/html-form/Dockerfile b/html-form/Dockerfile index 747bc44a..ed330017 100644 --- a/html-form/Dockerfile +++ b/html-form/Dockerfile @@ -40,7 +40,7 @@ RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./ # Copy resources bundled by SPM to staging area RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \; -# Copy any resouces from the public directory and views directory if the directories exist +# Copy any resouces from the public directory if the directories exist # Ensure that by default, neither the directory nor any of its contents are writable. RUN [ -d /build/public ] && { mv /build/public ./public && chmod -R a-w ./public; } || true @@ -54,13 +54,13 @@ RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ && apt-get -q update \ && apt-get -q dist-upgrade -y \ && apt-get -q install -y \ - libjemalloc2 \ - ca-certificates \ - tzdata \ - # If your app or its dependencies import FoundationNetworking, also install `libcurl4`. - # libcurl4 \ - # If your app or its dependencies import FoundationXML, also install `libxml2`. - # libxml2 \ + libjemalloc2 \ + ca-certificates \ + tzdata \ +# If your app or its dependencies import FoundationNetworking, also install `libcurl4`. + # libcurl4 \ +# If your app or its dependencies import FoundationXML, also install `libxml2`. + # libxml2 \ && rm -r /var/lib/apt/lists/* # Create a hummingbird user and group with /app as its home directory diff --git a/html-form/Package.swift b/html-form/Package.swift index 762735a4..7b28eb29 100644 --- a/html-form/Package.swift +++ b/html-form/Package.swift @@ -19,12 +19,7 @@ let package = Package( .product(name: "Hummingbird", package: "hummingbird"), .product(name: "Mustache", package: "swift-mustache"), ], - swiftSettings: [ - // Enable better optimizations when building in Release configuration. Despite the use of - // the `.unsafeFlags` construct required by SwiftPM, this flag is recommended for Release - // builds. See for details. - .unsafeFlags(["-cross-module-optimization"], .when(configuration: .release)), - ] + resources: [.process("Resources")] ), .testTarget( name: "AppTests", diff --git a/html-form/Sources/App/Application+build.swift b/html-form/Sources/App/Application+build.swift index e8df3818..dd1dafcd 100644 --- a/html-form/Sources/App/Application+build.swift +++ b/html-form/Sources/App/Application+build.swift @@ -1,3 +1,4 @@ +import Foundation import Hummingbird import Logging import Mustache @@ -29,7 +30,7 @@ public func buildApplication(args: AppArguments) async throws -> some Applicatio logger.logLevel = args.logLevel ?? .info return logger }() - let library = try await MustacheLibrary(directory: "resources/templates") + let library = try await MustacheLibrary(directory: Bundle.module.bundleURL.path) assert(library.getTemplate(named: "page") != nil, "Set your working directory to the root folder of this example to get it to work") let router = Router(context: HTMLFormRequestContext.self) diff --git a/html-form/resources/templates/details-entered.mustache b/html-form/Sources/App/Resources/Templates/details-entered.mustache similarity index 100% rename from html-form/resources/templates/details-entered.mustache rename to html-form/Sources/App/Resources/Templates/details-entered.mustache diff --git a/html-form/resources/templates/enter-details.mustache b/html-form/Sources/App/Resources/Templates/enter-details.mustache similarity index 100% rename from html-form/resources/templates/enter-details.mustache rename to html-form/Sources/App/Resources/Templates/enter-details.mustache diff --git a/html-form/resources/templates/page.mustache b/html-form/Sources/App/Resources/Templates/page.mustache similarity index 100% rename from html-form/resources/templates/page.mustache rename to html-form/Sources/App/Resources/Templates/page.mustache diff --git a/html-form/public/images/hummingbird.png b/html-form/public/images/hummingbird.png index 3dedb1b9af5f1cc5e2561ce98d0258ae4183d982..ec5a5dc96984f6040b42191a4c6b9930b5ed8371 100644 GIT binary patch literal 33568 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 literal 11854 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 HZyEYO%uT=B From 097fef11667e5e8d6db1475222bfa78b3f1ba51c Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Mon, 16 Sep 2024 11:26:12 +0100 Subject: [PATCH 2/5] todos-auth-fluent --- todos-auth-fluent/Dockerfile | 86 ++++++++++++++++++ todos-auth-fluent/Package.swift | 1 + .../Sources/App/Application+build.swift | 2 +- .../App/Resources}/templates/error.mustache | 0 .../App/Resources}/templates/head.mustache | 0 .../App/Resources}/templates/login.mustache | 0 .../App/Resources}/templates/signup.mustache | 0 .../App/Resources}/templates/todos.mustache | 0 .../public/images/hummingbird.png | Bin 0 -> 33568 bytes 9 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 todos-auth-fluent/Dockerfile rename todos-auth-fluent/{ => Sources/App/Resources}/templates/error.mustache (100%) rename todos-auth-fluent/{ => Sources/App/Resources}/templates/head.mustache (100%) rename todos-auth-fluent/{ => Sources/App/Resources}/templates/login.mustache (100%) rename todos-auth-fluent/{ => Sources/App/Resources}/templates/signup.mustache (100%) rename todos-auth-fluent/{ => Sources/App/Resources}/templates/todos.mustache (100%) create mode 100644 todos-auth-fluent/public/images/hummingbird.png diff --git a/todos-auth-fluent/Dockerfile b/todos-auth-fluent/Dockerfile new file mode 100644 index 00000000..cfc73c5e --- /dev/null +++ b/todos-auth-fluent/Dockerfile @@ -0,0 +1,86 @@ +# ================================ +# Build image +# ================================ +FROM swift:5.10-jammy as build + +# Install OS updates +RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ + && apt-get -q update \ + && apt-get -q dist-upgrade -y \ + && apt-get install -y libjemalloc-dev \ + && rm -rf /var/lib/apt/lists/* + +# Set up a build area +WORKDIR /build + +# First just resolve dependencies. +# This creates a cached layer that can be reused +# as long as your Package.swift/Package.resolved +# files do not change. +COPY ./Package.* ./ +RUN swift package resolve + +# Copy entire repo into container +COPY . . + +# Build everything, with optimizations, with static linking, and using jemalloc +RUN swift build -c release \ + --static-swift-stdlib \ + -Xlinker -ljemalloc + +# Switch to the staging area +WORKDIR /staging + +# Copy main executable to staging area +RUN cp "$(swift build --package-path /build -c release --show-bin-path)/App" ./ + +# Copy static swift backtracer binary to staging area +RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./ + +# Copy resources bundled by SPM to staging area +RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \; + +# Copy any resouces from the public directory if the directories exist +# Ensure that by default, neither the directory nor any of its contents are writable. +RUN [ -d /build/public ] && { mv /build/public ./public && chmod -R a-w ./public; } || true + +# ================================ +# Run image +# ================================ +FROM ubuntu:jammy + +# Make sure all system packages are up to date, and install only essential packages. +RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ + && apt-get -q update \ + && apt-get -q dist-upgrade -y \ + && apt-get -q install -y \ + libjemalloc2 \ + ca-certificates \ + tzdata \ +# If your app or its dependencies import FoundationNetworking, also install `libcurl4`. + # libcurl4 \ +# If your app or its dependencies import FoundationXML, also install `libxml2`. + # libxml2 \ + && rm -r /var/lib/apt/lists/* + +# Create a hummingbird user and group with /app as its home directory +RUN useradd --user-group --create-home --system --skel /dev/null --home-dir /app hummingbird + +# Switch to the new home directory +WORKDIR /app + +# Copy built executable and any staged resources from builder +COPY --from=build --chown=hummingbird:hummingbird /staging /app + +# Provide configuration needed by the built-in crash reporter and some sensible default behaviors. +ENV SWIFT_BACKTRACE=enable=yes,sanitize=yes,threads=all,images=all,interactive=no,swift-backtrace=./swift-backtrace-static + +# Ensure all further commands run as the hummingbird user +USER hummingbird:hummingbird + +# Let Docker bind to port 8080 +EXPOSE 8080 + +# Start the Hummingbird service when the image is run, default to listening on 8080 in production environment +ENTRYPOINT ["./App"] +CMD ["--hostname", "0.0.0.0", "--port", "8080", "--migrate"] diff --git a/todos-auth-fluent/Package.swift b/todos-auth-fluent/Package.swift index 324cd10f..dae11066 100644 --- a/todos-auth-fluent/Package.swift +++ b/todos-auth-fluent/Package.swift @@ -29,6 +29,7 @@ let package = Package( .product(name: "HummingbirdFluent", package: "hummingbird-fluent"), .product(name: "Mustache", package: "swift-mustache"), ], + resources: [.process("Resources")], swiftSettings: [ // Enable better optimizations when building in Release configuration. Despite the use of // the `.unsafeFlags` construct required by SwiftPM, this flag is recommended for Release diff --git a/todos-auth-fluent/Sources/App/Application+build.swift b/todos-auth-fluent/Sources/App/Application+build.swift index 343b1749..df5093c1 100644 --- a/todos-auth-fluent/Sources/App/Application+build.swift +++ b/todos-auth-fluent/Sources/App/Application+build.swift @@ -50,7 +50,7 @@ func buildApplication(_ arguments: some AppArguments) async throws -> some Appli } // load mustache template library - let library = try await MustacheLibrary(directory: "templates") + let library = try await MustacheLibrary(directory: Bundle.module.bundleURL.path) assert(library.getTemplate(named: "head") != nil, "Set your working directory to the root folder of this example to get it to work") let sessionAuthenticator = SessionAuthenticator(users: userRepository, sessionStorage: sessionStorage, context: TodosAuthRequestContext.self) diff --git a/todos-auth-fluent/templates/error.mustache b/todos-auth-fluent/Sources/App/Resources/templates/error.mustache similarity index 100% rename from todos-auth-fluent/templates/error.mustache rename to todos-auth-fluent/Sources/App/Resources/templates/error.mustache diff --git a/todos-auth-fluent/templates/head.mustache b/todos-auth-fluent/Sources/App/Resources/templates/head.mustache similarity index 100% rename from todos-auth-fluent/templates/head.mustache rename to todos-auth-fluent/Sources/App/Resources/templates/head.mustache diff --git a/todos-auth-fluent/templates/login.mustache b/todos-auth-fluent/Sources/App/Resources/templates/login.mustache similarity index 100% rename from todos-auth-fluent/templates/login.mustache rename to todos-auth-fluent/Sources/App/Resources/templates/login.mustache diff --git a/todos-auth-fluent/templates/signup.mustache b/todos-auth-fluent/Sources/App/Resources/templates/signup.mustache similarity index 100% rename from todos-auth-fluent/templates/signup.mustache rename to todos-auth-fluent/Sources/App/Resources/templates/signup.mustache diff --git a/todos-auth-fluent/templates/todos.mustache b/todos-auth-fluent/Sources/App/Resources/templates/todos.mustache similarity index 100% rename from todos-auth-fluent/templates/todos.mustache rename to todos-auth-fluent/Sources/App/Resources/templates/todos.mustache diff --git a/todos-auth-fluent/public/images/hummingbird.png b/todos-auth-fluent/public/images/hummingbird.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5a5dc96984f6040b42191a4c6b9930b5ed8371 GIT binary patch literal 33568 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 literal 0 HcmV?d00001 From b14065a93357b0095ff80421c21d3d89fd2c2483 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Mon, 16 Sep 2024 11:40:25 +0100 Subject: [PATCH 3/5] webauthn --- webauthn/Dockerfile | 16 ++++++++-------- webauthn/Package.swift | 1 + webauthn/Sources/App/Application+build.swift | 2 +- .../App/Resources}/templates/home.mustache | 0 webauthn/public/images/hummingbird.png | Bin 11854 -> 33568 bytes 5 files changed, 10 insertions(+), 9 deletions(-) rename webauthn/{resources => Sources/App/Resources}/templates/home.mustache (100%) diff --git a/webauthn/Dockerfile b/webauthn/Dockerfile index 40ede59c..cfc73c5e 100644 --- a/webauthn/Dockerfile +++ b/webauthn/Dockerfile @@ -40,7 +40,7 @@ RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./ # Copy resources bundled by SPM to staging area RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \; -# Copy any resouces from the public directory and views directory if the directories exist +# Copy any resouces from the public directory if the directories exist # Ensure that by default, neither the directory nor any of its contents are writable. RUN [ -d /build/public ] && { mv /build/public ./public && chmod -R a-w ./public; } || true @@ -54,13 +54,13 @@ RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ && apt-get -q update \ && apt-get -q dist-upgrade -y \ && apt-get -q install -y \ - libjemalloc2 \ - ca-certificates \ - tzdata \ - # If your app or its dependencies import FoundationNetworking, also install `libcurl4`. - # libcurl4 \ - # If your app or its dependencies import FoundationXML, also install `libxml2`. - # libxml2 \ + libjemalloc2 \ + ca-certificates \ + tzdata \ +# If your app or its dependencies import FoundationNetworking, also install `libcurl4`. + # libcurl4 \ +# If your app or its dependencies import FoundationXML, also install `libxml2`. + # libxml2 \ && rm -r /var/lib/apt/lists/* # Create a hummingbird user and group with /app as its home directory diff --git a/webauthn/Package.swift b/webauthn/Package.swift index f8ee4c98..488a4dd3 100644 --- a/webauthn/Package.swift +++ b/webauthn/Package.swift @@ -31,6 +31,7 @@ let package = Package( .product(name: "Mustache", package: "swift-mustache"), .product(name: "WebAuthn", package: "webauthn-swift"), ], + resources: [.process("Resources")], swiftSettings: [ // Enable better optimizations when building in Release configuration. Despite the use of // the `.unsafeFlags` construct required by SwiftPM, this flag is recommended for Release diff --git a/webauthn/Sources/App/Application+build.swift b/webauthn/Sources/App/Application+build.swift index a39b4d45..88743376 100644 --- a/webauthn/Sources/App/Application+build.swift +++ b/webauthn/Sources/App/Application+build.swift @@ -53,7 +53,7 @@ func buildApplication(_ arguments: AppArguments) async throws -> some Applicatio let sessionStorage = SessionStorage(memoryPersist) // load mustache template library - let library = try await MustacheLibrary(directory: "resources/templates") + let library = try await MustacheLibrary(directory: Bundle.module.bundleURL.path) assert(library.getTemplate(named: "home") != nil, "Set your working directory to the root folder of this example to get it to work") /// Authenticator storing the user diff --git a/webauthn/resources/templates/home.mustache b/webauthn/Sources/App/Resources/templates/home.mustache similarity index 100% rename from webauthn/resources/templates/home.mustache rename to webauthn/Sources/App/Resources/templates/home.mustache diff --git a/webauthn/public/images/hummingbird.png b/webauthn/public/images/hummingbird.png index 3dedb1b9af5f1cc5e2561ce98d0258ae4183d982..ec5a5dc96984f6040b42191a4c6b9930b5ed8371 100644 GIT binary patch literal 33568 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 literal 11854 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 HZyEYO%uT=B From 0e5b3cd60e4656f4c10cff2946aa7bddeefb26af Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Mon, 16 Sep 2024 11:47:46 +0100 Subject: [PATCH 4/5] multipart form --- multipart-form/Package.swift | 1 + .../Sources/App/Application+build.swift | 3 ++- .../templates/details-entered.mustache | 0 .../templates/enter-details.mustache | 0 .../App/Resources}/templates/page.mustache | 0 multipart-form/public/images/hummingbird.png | Bin 11854 -> 33568 bytes 6 files changed, 3 insertions(+), 1 deletion(-) rename multipart-form/{ => Sources/App/Resources}/templates/details-entered.mustache (100%) rename multipart-form/{ => Sources/App/Resources}/templates/enter-details.mustache (100%) rename multipart-form/{ => Sources/App/Resources}/templates/page.mustache (100%) diff --git a/multipart-form/Package.swift b/multipart-form/Package.swift index ad04ca63..27bc5651 100644 --- a/multipart-form/Package.swift +++ b/multipart-form/Package.swift @@ -26,6 +26,7 @@ let package = Package( .product(name: "ExtrasBase64", package: "swift-extras-base64"), .product(name: "MultipartKit", package: "multipart-kit"), ], + resources: [.process("Resources")], swiftSettings: [ // Enable better optimizations when building in Release configuration. Despite the use of // the `.unsafeFlags` construct required by SwiftPM, this flag is recommended for Release diff --git a/multipart-form/Sources/App/Application+build.swift b/multipart-form/Sources/App/Application+build.swift index 037fd9a5..4a1d2e4c 100644 --- a/multipart-form/Sources/App/Application+build.swift +++ b/multipart-form/Sources/App/Application+build.swift @@ -1,3 +1,4 @@ +import Foundation import Hummingbird import MultipartKit import Mustache @@ -8,7 +9,7 @@ protocol AppArguments { } func buildApplication(_ args: AppArguments) async throws -> some ApplicationProtocol { - let library = try await MustacheLibrary(directory: "templates") + let library = try await MustacheLibrary(directory: Bundle.module.bundleURL.path) assert(library.getTemplate(named: "page") != nil, "Set your working directory to the root folder of this example to get it to work") let router = Router(context: MultipartRequestContext.self) diff --git a/multipart-form/templates/details-entered.mustache b/multipart-form/Sources/App/Resources/templates/details-entered.mustache similarity index 100% rename from multipart-form/templates/details-entered.mustache rename to multipart-form/Sources/App/Resources/templates/details-entered.mustache diff --git a/multipart-form/templates/enter-details.mustache b/multipart-form/Sources/App/Resources/templates/enter-details.mustache similarity index 100% rename from multipart-form/templates/enter-details.mustache rename to multipart-form/Sources/App/Resources/templates/enter-details.mustache diff --git a/multipart-form/templates/page.mustache b/multipart-form/Sources/App/Resources/templates/page.mustache similarity index 100% rename from multipart-form/templates/page.mustache rename to multipart-form/Sources/App/Resources/templates/page.mustache diff --git a/multipart-form/public/images/hummingbird.png b/multipart-form/public/images/hummingbird.png index 3dedb1b9af5f1cc5e2561ce98d0258ae4183d982..ec5a5dc96984f6040b42191a4c6b9930b5ed8371 100644 GIT binary patch literal 33568 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 literal 11854 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 HZyEYO%uT=B From ef61a6b1fc6fd1fef5e257e87fa6c565dd2924bb Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Mon, 16 Sep 2024 11:48:17 +0100 Subject: [PATCH 5/5] multipart form Dockerfile --- multipart-form/Dockerfile | 86 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 multipart-form/Dockerfile diff --git a/multipart-form/Dockerfile b/multipart-form/Dockerfile new file mode 100644 index 00000000..ed330017 --- /dev/null +++ b/multipart-form/Dockerfile @@ -0,0 +1,86 @@ +# ================================ +# Build image +# ================================ +FROM swift:5.10-jammy as build + +# Install OS updates +RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ + && apt-get -q update \ + && apt-get -q dist-upgrade -y \ + && apt-get install -y libjemalloc-dev \ + && rm -rf /var/lib/apt/lists/* + +# Set up a build area +WORKDIR /build + +# First just resolve dependencies. +# This creates a cached layer that can be reused +# as long as your Package.swift/Package.resolved +# files do not change. +COPY ./Package.* ./ +RUN swift package resolve + +# Copy entire repo into container +COPY . . + +# Build everything, with optimizations, with static linking, and using jemalloc +RUN swift build -c release \ + --static-swift-stdlib \ + -Xlinker -ljemalloc + +# Switch to the staging area +WORKDIR /staging + +# Copy main executable to staging area +RUN cp "$(swift build --package-path /build -c release --show-bin-path)/App" ./ + +# Copy static swift backtracer binary to staging area +RUN cp "/usr/libexec/swift/linux/swift-backtrace-static" ./ + +# Copy resources bundled by SPM to staging area +RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \; + +# Copy any resouces from the public directory if the directories exist +# Ensure that by default, neither the directory nor any of its contents are writable. +RUN [ -d /build/public ] && { mv /build/public ./public && chmod -R a-w ./public; } || true + +# ================================ +# Run image +# ================================ +FROM ubuntu:jammy + +# Make sure all system packages are up to date, and install only essential packages. +RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ + && apt-get -q update \ + && apt-get -q dist-upgrade -y \ + && apt-get -q install -y \ + libjemalloc2 \ + ca-certificates \ + tzdata \ +# If your app or its dependencies import FoundationNetworking, also install `libcurl4`. + # libcurl4 \ +# If your app or its dependencies import FoundationXML, also install `libxml2`. + # libxml2 \ + && rm -r /var/lib/apt/lists/* + +# Create a hummingbird user and group with /app as its home directory +RUN useradd --user-group --create-home --system --skel /dev/null --home-dir /app hummingbird + +# Switch to the new home directory +WORKDIR /app + +# Copy built executable and any staged resources from builder +COPY --from=build --chown=hummingbird:hummingbird /staging /app + +# Provide configuration needed by the built-in crash reporter and some sensible default behaviors. +ENV SWIFT_BACKTRACE=enable=yes,sanitize=yes,threads=all,images=all,interactive=no,swift-backtrace=./swift-backtrace-static + +# Ensure all further commands run as the hummingbird user +USER hummingbird:hummingbird + +# Let Docker bind to port 8080 +EXPOSE 8080 + +# Start the Hummingbird service when the image is run, default to listening on 8080 in production environment +ENTRYPOINT ["./App"] +CMD ["--hostname", "0.0.0.0", "--port", "8080"]