diff options
author | Felix Pojtinger <felix@pojtinger.com> | 2019-04-27 15:49:50 +0200 |
---|---|---|
committer | Felix Pojtinger <felix@pojtinger.com> | 2019-04-27 15:49:50 +0200 |
commit | c83f98ed5ca1eb4d7971a78a1b44eac069a72764 (patch) | |
tree | e87b2e951b20878771a9dd4151b6ffcd1af4f49e /server | |
parent | 74db51c6cdb0f9ca1353c76318f4ef3668272e2d (diff) |
build: Minimize build time with multi-stage build, add Ingress and production versions
Diffstat (limited to 'server')
-rw-r--r-- | server/Dockerfile.dev | 15 | ||||
-rw-r--r-- | server/Dockerfile.prod | 28 | ||||
-rw-r--r-- | server/stack.prod.yaml | 110 |
3 files changed, 149 insertions, 4 deletions
diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index c7951ce8..203dd742 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -1,9 +1,7 @@ # Setup env -FROM rust:1.33 +FROM rust:1.33 AS build RUN USER=root cargo new --bin /opt/lemmy/server--dev WORKDIR /opt/lemmy/server--dev -# Create empty directory where the frontend would normally be -RUN mkdir -p /opt/lemmy/ui--dev/dist # Enable deps caching RUN mkdir -p src/bin RUN echo 'fn main() { println!("Dummy") }' >src/bin/main.rs @@ -17,5 +15,14 @@ COPY src/ src/ COPY migrations/ migrations/ RUN rm target/release/deps/lemmy* RUN cargo build --release + +# Setup env (no Alpine because Rust requires glibc) +FROM ubuntu:18.04 +RUN apt update +RUN apt install postgresql-client -y +# Create empty directory where the frontend would normally be +RUN mkdir -p /opt/lemmy/ui--dev/dist +# Add app +COPY --from=build /opt/lemmy/server--dev/target/release/lemmy . # Run app -CMD ["/opt/lemmy/server--dev/target/release/lemmy"] +CMD ["./lemmy"] diff --git a/server/Dockerfile.prod b/server/Dockerfile.prod new file mode 100644 index 00000000..b375e478 --- /dev/null +++ b/server/Dockerfile.prod @@ -0,0 +1,28 @@ +# Setup env +FROM rust:1.33 AS build +RUN USER=root cargo new --bin /opt/lemmy/server--prod +WORKDIR /opt/lemmy/server--prod +# Enable deps caching +RUN mkdir -p src/bin +RUN echo 'fn main() { println!("Dummy") }' >src/bin/main.rs +# Install deps +COPY Cargo.toml . +COPY Cargo.lock . +RUN cargo build --release +RUN rm src/bin/main.rs +# Add app +COPY src/ src/ +COPY migrations/ migrations/ +RUN rm target/release/deps/lemmy* +RUN cargo build --release + +# Setup env (no Alpine because Rust requires glibc) +FROM ubuntu:18.04 +RUN apt update +RUN apt install postgresql-client -y +# Create empty directory where the frontend would normally be +RUN mkdir -p /opt/lemmy/ui--prod/dist +# Add app +COPY --from=build /opt/lemmy/server--prod/target/release/lemmy . +# Run app +CMD ["./lemmy"] diff --git a/server/stack.prod.yaml b/server/stack.prod.yaml new file mode 100644 index 00000000..d221de16 --- /dev/null +++ b/server/stack.prod.yaml @@ -0,0 +1,110 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgres +data: + POSTGRES_PASSWORD: rrr + POSTGRES_USER: rrr + POSTGRES_DB: rrr + PGDATA: /var/lib/postgresql/data/pgdata + DATABASE_URL: postgres://rrr:rrr@postgres:5432/rrr +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: postgres +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgres +spec: + selector: + matchLabels: + app: postgres + template: + metadata: + labels: + app: postgres + spec: + containers: + - name: postgres + image: postgres:11.2-alpine + resources: + limits: + memory: 256Mi + cpu: 512m + ports: + - containerPort: 5432 + envFrom: + - configMapRef: + name: postgres + volumeMounts: + - name: postgres + mountPath: /var/lib/postgresql/data + volumes: + - name: postgres + persistentVolumeClaim: + claimName: postgres +--- +apiVersion: v1 +kind: Service +metadata: + name: postgres +spec: + selector: + app: postgres + ports: + - port: 5432 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: lemmy-server--prod +data: + LEMMY_FRONT_END_DIR: /opt/lemmy/ui--prod/dist # not actually used here, polyfill for monolith +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: lemmy-server--prod +spec: + selector: + matchLabels: + app: lemmy-server--prod + template: + metadata: + labels: + app: lemmy-server--prod + spec: + containers: + - name: lemmy-server--prod + image: registry.gitlab.com/pojntfx/lemmy/server.prod + envFrom: + - configMapRef: + name: postgres + - configMapRef: + name: lemmy-server--prod + resources: + limits: + memory: 512Mi + cpu: 512m + ports: + - containerPort: 8536 +--- +apiVersion: v1 +kind: Service +metadata: + name: lemmy-server--prod +spec: + selector: + app: lemmy-server--prod + ports: + - port: 8536 + targetPort: 8536 |