From 46bb3064ed64bee31e8ae3a31a9380bf9fb17f14 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 9 Jun 2020 22:49:42 -0400 Subject: Version v0.6.72 --- docker/prod/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docker') diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index db6e4004..8d773569 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -12,7 +12,7 @@ services: restart: always lemmy: - image: dessalines/lemmy:v0.6.71 + image: dessalines/lemmy:v0.6.72 ports: - "127.0.0.1:8536:8536" restart: always -- cgit v1.2.3 From 043f484693c2bdc356e60b0a0e7ebdddcf1fad85 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 10 Jun 2020 11:27:12 -0400 Subject: Version v0.6.73 --- docker/prod/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docker') diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 8d773569..bbf2a698 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -12,7 +12,7 @@ services: restart: always lemmy: - image: dessalines/lemmy:v0.6.72 + image: dessalines/lemmy:v0.6.73 ports: - "127.0.0.1:8536:8536" restart: always -- cgit v1.2.3 From 1b0212377df2e56c4e950a4abbf8c594daabc73a Mon Sep 17 00:00:00 2001 From: Dessalines Date: Thu, 11 Jun 2020 10:28:21 -0400 Subject: Version v0.6.74 --- docker/prod/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docker') diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index bbf2a698..246a9586 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -12,7 +12,7 @@ services: restart: always lemmy: - image: dessalines/lemmy:v0.6.73 + image: dessalines/lemmy:v0.6.74 ports: - "127.0.0.1:8536:8536" restart: always -- cgit v1.2.3 From 4ea6c4ad5d1cac14d63f758f8fa6909b77a0b758 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Fri, 12 Jun 2020 15:29:50 +0200 Subject: Various build optimizations --- docker/dev/Dockerfile | 12 ++---- docker/dev/Dockerfile.aarch64 | 79 ------------------------------------ docker/dev/Dockerfile.armv7hf | 79 ------------------------------------ docker/dev/Dockerfile.libc | 88 ----------------------------------------- docker/dev/deploy.sh | 76 ----------------------------------- docker/dev/docker_update.sh | 4 ++ docker/dev/test_deploy.sh | 4 ++ docker/prod/Dockerfile | 58 +++++++++++++++++++++++++++ docker/prod/Dockerfile.aarch64 | 80 +++++++++++++++++++++++++++++++++++++ docker/prod/Dockerfile.armv7hf | 81 +++++++++++++++++++++++++++++++++++++ docker/prod/Dockerfile.libc | 90 ++++++++++++++++++++++++++++++++++++++++++ docker/prod/deploy.sh | 80 +++++++++++++++++++++++++++++++++++++ 12 files changed, 401 insertions(+), 330 deletions(-) delete mode 100644 docker/dev/Dockerfile.aarch64 delete mode 100644 docker/dev/Dockerfile.armv7hf delete mode 100644 docker/dev/Dockerfile.libc delete mode 100755 docker/dev/deploy.sh create mode 100644 docker/prod/Dockerfile create mode 100644 docker/prod/Dockerfile.aarch64 create mode 100644 docker/prod/Dockerfile.armv7hf create mode 100644 docker/prod/Dockerfile.libc create mode 100755 docker/prod/deploy.sh (limited to 'docker') diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index d9ffc2f3..fbec2536 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -21,17 +21,13 @@ COPY server/Cargo.toml server/Cargo.lock ./ RUN sudo chown -R rust:rust . RUN mkdir -p ./src/bin \ && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -RUN cargo build --release +RUN cargo build RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/lemmy_server* COPY server/src ./src/ COPY server/migrations ./migrations/ -# Build for release -RUN cargo build --frozen --release - -# Get diesel-cli on there just in case -# RUN cargo install diesel_cli --no-default-features --features postgres - +# Build for debug +RUN cargo build FROM ekidd/rust-musl-builder:1.42.0-openssl11 as docs WORKDIR /app @@ -47,7 +43,7 @@ RUN apk add libpq # Copy resources COPY server/config/defaults.hjson /config/defaults.hjson -COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server /app/lemmy +COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/debug/lemmy_server /app/lemmy COPY --from=docs /app/docs/book/ /app/dist/documentation/ COPY --from=node /app/ui/dist /app/dist diff --git a/docker/dev/Dockerfile.aarch64 b/docker/dev/Dockerfile.aarch64 deleted file mode 100644 index 9636a590..00000000 --- a/docker/dev/Dockerfile.aarch64 +++ /dev/null @@ -1,79 +0,0 @@ -FROM node:10-jessie as node - -WORKDIR /app/ui - -# Cache deps -COPY ui/package.json ui/yarn.lock ./ -RUN yarn install --pure-lockfile - -# Build -COPY ui /app/ui -RUN yarn build - - -# contains qemu-*-static for cross-compilation -FROM multiarch/qemu-user-static as qemu - - -FROM arm64v8/rust:1.40-buster as rust - -COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin -#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin - - -# Install musl -#RUN apt-get update && apt-get install -y mc -#RUN apt-get install -y musl-tools mc -#libpq-dev mc -#RUN rustup target add ${TARGET} - -# Cache deps -WORKDIR /app -RUN USER=root cargo new server -WORKDIR /app/server -COPY server/Cargo.toml server/Cargo.lock ./ -RUN mkdir -p ./src/bin \ - && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -RUN cargo build --release -# RUN cargo build -COPY server/src ./src/ -COPY server/migrations ./migrations/ -RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* - - -# build for release -RUN cargo build --frozen --release -# RUN cargo build --frozen - -# Get diesel-cli on there just in case -# RUN cargo install diesel_cli --no-default-features --features postgres - -# RUN cp /app/server/target/debug/lemmy_server /app/server/ready -RUN cp /app/server/target/release/lemmy_server /app/server/ready - -#FROM alpine:3.10 -# debian because build with dynamic linking with debian:buster -FROM arm64v8/debian:buster-slim as lemmy - -#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin -COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin - -# Install libpq for postgres -#RUN apk add libpq -RUN apt-get update && apt-get install -y libpq5 - -RUN addgroup --gid 1000 lemmy -# for alpine -#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy -# for debian -RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy - -# Copy resources -COPY server/config/defaults.hjson /config/defaults.hjson -COPY --from=rust /app/server/ready /app/lemmy -COPY --from=node /app/ui/dist /app/dist - -RUN chown lemmy:lemmy /app/lemmy -USER lemmy -EXPOSE 8536 -CMD ["/app/lemmy"] diff --git a/docker/dev/Dockerfile.armv7hf b/docker/dev/Dockerfile.armv7hf deleted file mode 100644 index c2c9084c..00000000 --- a/docker/dev/Dockerfile.armv7hf +++ /dev/null @@ -1,79 +0,0 @@ -FROM node:10-jessie as node - -WORKDIR /app/ui - -# Cache deps -COPY ui/package.json ui/yarn.lock ./ -RUN yarn install --pure-lockfile - -# Build -COPY ui /app/ui -RUN yarn build - - -# contains qemu-*-static for cross-compilation -FROM multiarch/qemu-user-static as qemu - - -FROM arm32v7/rust:1.37-buster as rust - -#COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin -COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin - - -# Install musl -#RUN apt-get update && apt-get install -y mc -#RUN apt-get install -y musl-tools mc -#libpq-dev mc -#RUN rustup target add ${TARGET} - -# Cache deps -WORKDIR /app -RUN USER=root cargo new server -WORKDIR /app/server -COPY server/Cargo.toml server/Cargo.lock ./ -RUN mkdir -p ./src/bin \ - && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -#RUN cargo build --release -# RUN cargo build - RUN RUSTFLAGS='-Ccodegen-units=1' cargo build -COPY server/src ./src/ -COPY server/migrations ./migrations/ -RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* - - -# build for release -#RUN cargo build --frozen --release -RUN cargo build --frozen - -# Get diesel-cli on there just in case -# RUN cargo install diesel_cli --no-default-features --features postgres - -RUN cp /app/server/target/debug/lemmy_server /app/server/ready -#RUN cp /app/server/target/release/lemmy_server /app/server/ready - -#FROM alpine:3.10 -# debian because build with dynamic linking with debian:buster -FROM arm32v7/debian:buster-slim as lemmy - -COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin - -# Install libpq for postgres -#RUN apk add libpq -RUN apt-get update && apt-get install -y libpq5 - -RUN addgroup --gid 1000 lemmy -# for alpine -#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy -# for debian -RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy - -# Copy resources -COPY server/config/defaults.hjson /config/defaults.hjson -COPY --from=rust /app/server/ready /app/lemmy -COPY --from=node /app/ui/dist /app/dist - -RUN chown lemmy:lemmy /app/lemmy -USER lemmy -EXPOSE 8536 -CMD ["/app/lemmy"] diff --git a/docker/dev/Dockerfile.libc b/docker/dev/Dockerfile.libc deleted file mode 100644 index 6348342f..00000000 --- a/docker/dev/Dockerfile.libc +++ /dev/null @@ -1,88 +0,0 @@ -# can be build on x64, arm32, arm64 platforms -# to build on target platform run -# docker build -f Dockerfile.libc -t dessalines/lemmy:version ../.. -# -# to use docker buildx run -# docker buildx build --platform linux/amd64,linux/arm64 -f Dockerfile.libc -t YOURNAME/lemmy --push ../.. - -FROM node:12-buster as node -# use this if use docker buildx -#FROM --platform=$BUILDPLATFORM node:12-buster as node - -WORKDIR /app/ui - -# Cache deps -COPY ui/package.json ui/yarn.lock ./ -RUN yarn install --pure-lockfile --network-timeout 100000 - -# Build -COPY ui /app/ui -RUN yarn build - - -FROM rust:1.42 as rust - -# Cache deps -WORKDIR /app - -RUN USER=root cargo new server -WORKDIR /app/server -COPY server/Cargo.toml server/Cargo.lock ./ -RUN mkdir -p ./src/bin \ - && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs - - -RUN cargo build --release -#RUN cargo build && \ -# rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* -COPY server/src ./src/ -COPY server/migrations ./migrations/ - - -# build for release -# workaround for https://github.com/rust-lang/rust/issues/62896 -#RUN RUSTFLAGS='-Ccodegen-units=1' cargo build --release -RUN cargo build --release --frozen -#RUN cargo build --frozen - -# Get diesel-cli on there just in case -# RUN cargo install diesel_cli --no-default-features --features postgres - -# make result place always the same for lemmy container -RUN cp /app/server/target/release/lemmy_server /app/server/ready -#RUN cp /app/server/target/debug/lemmy_server /app/server/ready - - -FROM rust:1.42 as docs - -WORKDIR /app - -# Build docs -COPY docs ./docs -RUN cargo install mdbook -RUN mdbook build docs/ - - -#FROM alpine:3.10 -# debian because build with dynamic linking with debian:buster -FROM debian:buster as lemmy - -# Install libpq for postgres -#RUN apk add libpq -RUN apt-get update && apt-get install -y libpq5 -RUN addgroup --gid 1000 lemmy -# for alpine -#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy -# for debian -RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy - -# Copy resources -COPY server/config/defaults.hjson /config/defaults.hjson -COPY --from=node /app/ui/dist /app/dist -COPY --from=docs /app/docs/book/ /app/dist/documentation/ -COPY --from=rust /app/server/ready /app/lemmy - -RUN chown lemmy:lemmy /app/lemmy -USER lemmy -EXPOSE 8536 -CMD ["/app/lemmy"] diff --git a/docker/dev/deploy.sh b/docker/dev/deploy.sh deleted file mode 100755 index 09b21b0b..00000000 --- a/docker/dev/deploy.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -git checkout master - -# Import translations -git fetch weblate -git merge weblate/master - -# Creating the new tag -new_tag="$1" -third_semver=$(echo $new_tag | cut -d "." -f 3) - -# Setting the version on the front end -cd ../../ -echo "export const version: string = '$new_tag';" > "ui/src/version.ts" -git add "ui/src/version.ts" -# Setting the version on the backend -echo "pub const VERSION: &str = \"$new_tag\";" > "server/src/version.rs" -git add "server/src/version.rs" -# Setting the version for Ansible -echo $new_tag > "ansible/VERSION" -git add "ansible/VERSION" - -cd docker/dev || exit - -# Changing the docker-compose prod -sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml -sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../../ansible/templates/docker-compose.yml -git add ../prod/docker-compose.yml -git add ../../ansible/templates/docker-compose.yml - -# The commit -git commit -m"Version $new_tag" -git tag $new_tag - -# Rebuilding docker -docker-compose build -docker tag dev_lemmy:latest dessalines/lemmy:x64-$new_tag -docker push dessalines/lemmy:x64-$new_tag - -# Build for Raspberry Pi / other archs - -# Arm currently not working -# docker build -t lemmy:armv7hf -f Dockerfile.armv7hf ../../ -# docker tag lemmy:armv7hf dessalines/lemmy:armv7hf-$new_tag -# docker push dessalines/lemmy:armv7hf-$new_tag - -# aarch64 -# Only do this on major releases (IE the third semver is 0) -if [ $third_semver -eq 0 ]; then - # Registering qemu binaries - docker run --rm --privileged multiarch/qemu-user-static:register --reset - - docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ - docker tag lemmy:aarch64 dessalines/lemmy:arm64-$new_tag - docker push dessalines/lemmy:arm64-$new_tag -fi - -# Creating the manifest for the multi-arch build -if [ $third_semver -eq 0 ]; then - docker manifest create dessalines/lemmy:$new_tag \ - dessalines/lemmy:x64-$new_tag \ - dessalines/lemmy:arm64-$new_tag -else - docker manifest create dessalines/lemmy:$new_tag \ - dessalines/lemmy:x64-$new_tag -fi - -docker manifest push dessalines/lemmy:$new_tag - -# Push -git push origin $new_tag -git push - -# Pushing to any ansible deploys -cd ../../../lemmy-ansible || exit -ansible-playbook -i prod playbooks/site.yml --vault-password-file vault_pass diff --git a/docker/dev/docker_update.sh b/docker/dev/docker_update.sh index 9d0f4542..21e92ba8 100755 --- a/docker/dev/docker_update.sh +++ b/docker/dev/docker_update.sh @@ -1,2 +1,6 @@ #!/bin/sh +set -e + +export COMPOSE_DOCKER_CLI_BUILD=1 +export DOCKER_BUILDKIT=1 docker-compose up -d --no-deps --build diff --git a/docker/dev/test_deploy.sh b/docker/dev/test_deploy.sh index 1ae91f65..ce85f60c 100755 --- a/docker/dev/test_deploy.sh +++ b/docker/dev/test_deploy.sh @@ -1,4 +1,8 @@ #!/bin/sh +set -e + +export COMPOSE_DOCKER_CLI_BUILD=1 +export DOCKER_BUILDKIT=1 # Rebuilding dev docker docker-compose build diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile new file mode 100644 index 00000000..b9eec456 --- /dev/null +++ b/docker/prod/Dockerfile @@ -0,0 +1,58 @@ +FROM node:10-jessie as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile + +# Build +COPY ui /app/ui +RUN yarn build + +FROM ekidd/rust-musl-builder:1.42.0-openssl11 as rust + +# Cache deps +WORKDIR /app +RUN sudo chown -R rust:rust . +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN sudo chown -R rust:rust . +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +RUN cargo build --release +RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/lemmy_server* +COPY server/src ./src/ +COPY server/migrations ./migrations/ + +# Build for release +RUN cargo build --frozen --release + +# reduce binary size +RUN strip /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server + +FROM ekidd/rust-musl-builder:1.42.0-openssl11 as docs +WORKDIR /app +COPY docs ./docs +RUN sudo chown -R rust:rust . +RUN mdbook build docs/ + + +FROM alpine:3.10 + +# Install libpq for postgres +RUN apk add libpq + +# Copy resources +COPY server/config/defaults.hjson /config/defaults.hjson +COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server /app/lemmy +COPY --from=docs /app/docs/book/ /app/dist/documentation/ +COPY --from=node /app/ui/dist /app/dist + +RUN addgroup -g 1000 lemmy +RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/prod/Dockerfile.aarch64 b/docker/prod/Dockerfile.aarch64 new file mode 100644 index 00000000..7a1c833f --- /dev/null +++ b/docker/prod/Dockerfile.aarch64 @@ -0,0 +1,80 @@ +FROM node:10-jessie as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile + +# Build +COPY ui /app/ui +RUN yarn build + + +# contains qemu-*-static for cross-compilation +FROM multiarch/qemu-user-static as qemu + + +FROM arm64v8/rust:1.40-buster as rust + +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin +#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + + +# Install musl +#RUN apt-get update && apt-get install -y mc +#RUN apt-get install -y musl-tools mc +#libpq-dev mc +#RUN rustup target add ${TARGET} + +# Cache deps +WORKDIR /app +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +RUN cargo build --release +# RUN cargo build +COPY server/src ./src/ +COPY server/migrations ./migrations/ +RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* + +# build for release +RUN cargo build --frozen --release + +# reduce binary size +RUN strip /app/server/target/release/lemmy_server + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +# RUN cp /app/server/target/debug/lemmy_server /app/server/ready +RUN cp /app/server/target/release/lemmy_server /app/server/ready + +#FROM alpine:3.10 +# debian because build with dynamic linking with debian:buster +FROM arm64v8/debian:buster-slim as lemmy + +#COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin +COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin + +# Install libpq for postgres +#RUN apk add libpq +RUN apt-get update && apt-get install -y libpq5 + +RUN addgroup --gid 1000 lemmy +# for alpine +#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +# for debian +RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy + +# Copy resources +COPY server/config/defaults.hjson /config/defaults.hjson +COPY --from=rust /app/server/ready /app/lemmy +COPY --from=node /app/ui/dist /app/dist + +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/prod/Dockerfile.armv7hf b/docker/prod/Dockerfile.armv7hf new file mode 100644 index 00000000..efd937a3 --- /dev/null +++ b/docker/prod/Dockerfile.armv7hf @@ -0,0 +1,81 @@ +FROM node:10-jessie as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile + +# Build +COPY ui /app/ui +RUN yarn build + + +# contains qemu-*-static for cross-compilation +FROM multiarch/qemu-user-static as qemu + + +FROM arm32v7/rust:1.37-buster as rust + +#COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + + +# Install musl +#RUN apt-get update && apt-get install -y mc +#RUN apt-get install -y musl-tools mc +#libpq-dev mc +#RUN rustup target add ${TARGET} + +# Cache deps +WORKDIR /app +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +#RUN cargo build --release +# RUN cargo build + RUN RUSTFLAGS='-Ccodegen-units=1' cargo build +COPY server/src ./src/ +COPY server/migrations ./migrations/ +RUN rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* + + +# build for release +RUN cargo build --frozen --release + +# reduce binary size +RUN strip /app/server/target/debug/lemmy_server + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +RUN cp /app/server/target/debug/lemmy_server /app/server/ready +#RUN cp /app/server/target/release/lemmy_server /app/server/ready + +#FROM alpine:3.10 +# debian because build with dynamic linking with debian:buster +FROM arm32v7/debian:buster-slim as lemmy + +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin + +# Install libpq for postgres +#RUN apk add libpq +RUN apt-get update && apt-get install -y libpq5 + +RUN addgroup --gid 1000 lemmy +# for alpine +#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +# for debian +RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy + +# Copy resources +COPY server/config/defaults.hjson /config/defaults.hjson +COPY --from=rust /app/server/ready /app/lemmy +COPY --from=node /app/ui/dist /app/dist + +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/prod/Dockerfile.libc b/docker/prod/Dockerfile.libc new file mode 100644 index 00000000..9c750282 --- /dev/null +++ b/docker/prod/Dockerfile.libc @@ -0,0 +1,90 @@ +# can be build on x64, arm32, arm64 platforms +# to build on target platform run +# docker build -f Dockerfile.libc -t dessalines/lemmy:version ../.. +# +# to use docker buildx run +# docker buildx build --platform linux/amd64,linux/arm64 -f Dockerfile.libc -t YOURNAME/lemmy --push ../.. + +FROM node:12-buster as node +# use this if use docker buildx +#FROM --platform=$BUILDPLATFORM node:12-buster as node + +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile --network-timeout 100000 + +# Build +COPY ui /app/ui +RUN yarn build + + +FROM rust:1.42 as rust + +# Cache deps +WORKDIR /app + +RUN USER=root cargo new server +WORKDIR /app/server +COPY server/Cargo.toml server/Cargo.lock ./ +RUN mkdir -p ./src/bin \ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs + + +RUN cargo build --release +#RUN cargo build && \ +# rm -f ./target/release/deps/lemmy_server* ; rm -f ./target/debug/deps/lemmy_server* +COPY server/src ./src/ +COPY server/migrations ./migrations/ + + +# build for release +# workaround for https://github.com/rust-lang/rust/issues/62896 +#RUN RUSTFLAGS='-Ccodegen-units=1' cargo build --release +RUN cargo build --release --frozen + +# reduce binary size +RUN strip /app/server/target/release/lemmy_server + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +# make result place always the same for lemmy container +RUN cp /app/server/target/release/lemmy_server /app/server/ready +#RUN cp /app/server/target/debug/lemmy_server /app/server/ready + + +FROM rust:1.42 as docs + +WORKDIR /app + +# Build docs +COPY docs ./docs +RUN cargo install mdbook +RUN mdbook build docs/ + + +#FROM alpine:3.10 +# debian because build with dynamic linking with debian:buster +FROM debian:buster as lemmy + +# Install libpq for postgres +#RUN apk add libpq +RUN apt-get update && apt-get install -y libpq5 +RUN addgroup --gid 1000 lemmy +# for alpine +#RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy +# for debian +RUN adduser --disabled-password --shell /bin/sh --uid 1000 --ingroup lemmy lemmy + +# Copy resources +COPY server/config/defaults.hjson /config/defaults.hjson +COPY --from=node /app/ui/dist /app/dist +COPY --from=docs /app/docs/book/ /app/dist/documentation/ +COPY --from=rust /app/server/ready /app/lemmy + +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/prod/deploy.sh b/docker/prod/deploy.sh new file mode 100755 index 00000000..0ad47bcd --- /dev/null +++ b/docker/prod/deploy.sh @@ -0,0 +1,80 @@ +#!/bin/sh +set -e +git checkout master + +# Import translations +git fetch weblate +git merge weblate/master + +# Creating the new tag +new_tag="$1" +third_semver=$(echo $new_tag | cut -d "." -f 3) + +# Setting the version on the front end +cd ../../ +echo "export const version: string = '$new_tag';" > "ui/src/version.ts" +git add "ui/src/version.ts" +# Setting the version on the backend +echo "pub const VERSION: &str = \"$new_tag\";" > "server/src/version.rs" +git add "server/src/version.rs" +# Setting the version for Ansible +echo $new_tag > "ansible/VERSION" +git add "ansible/VERSION" + +cd docker/prod || exit + +# Changing the docker-compose prod +sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml +sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../../ansible/templates/docker-compose.yml +git add ../prod/docker-compose.yml +git add ../../ansible/templates/docker-compose.yml + +# The commit +git commit -m"Version $new_tag" +git tag $new_tag + +export COMPOSE_DOCKER_CLI_BUILD=1 +export DOCKER_BUILDKIT=1 + +# Rebuilding docker +docker-compose build +docker tag dev_lemmy:latest dessalines/lemmy:x64-$new_tag +docker push dessalines/lemmy:x64-$new_tag + +# Build for Raspberry Pi / other archs + +# Arm currently not working +# docker build -t lemmy:armv7hf -f Dockerfile.armv7hf ../../ +# docker tag lemmy:armv7hf dessalines/lemmy:armv7hf-$new_tag +# docker push dessalines/lemmy:armv7hf-$new_tag + +# aarch64 +# Only do this on major releases (IE the third semver is 0) +if [ $third_semver -eq 0 ]; then + # Registering qemu binaries + docker run --rm --privileged multiarch/qemu-user-static:register --reset + + docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ + docker tag lemmy:aarch64 dessalines/lemmy:arm64-$new_tag + docker push dessalines/lemmy:arm64-$new_tag +fi + +# Creating the manifest for the multi-arch build +if [ $third_semver -eq 0 ]; then + docker manifest create dessalines/lemmy:$new_tag \ + dessalines/lemmy:x64-$new_tag \ + dessalines/lemmy:arm64-$new_tag +else + docker manifest create dessalines/lemmy:$new_tag \ + dessalines/lemmy:x64-$new_tag +fi + +docker manifest push dessalines/lemmy:$new_tag + +# Push +git push origin $new_tag +git push + +# Pushing to any ansible deploys +cd ../../../lemmy-ansible || exit +ansible-playbook -i prod playbooks/site.yml --vault-password-file vault_pass -- cgit v1.2.3 From 7cb7c1f0f9a77c3019200edffa5381f8a4d76e55 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 12 Jun 2020 16:17:01 -0400 Subject: Adding lld to docker builds. #810 --- docker/dev/Dockerfile | 8 ++++++-- docker/prod/Dockerfile | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'docker') diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index fbec2536..3ebfa097 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -12,6 +12,10 @@ RUN yarn build FROM ekidd/rust-musl-builder:1.42.0-openssl11 as rust +# Install lld +RUN sudo apt-get update -y +RUN sudo apt-get install -y lld + # Cache deps WORKDIR /app RUN sudo chown -R rust:rust . @@ -21,13 +25,13 @@ COPY server/Cargo.toml server/Cargo.lock ./ RUN sudo chown -R rust:rust . RUN mkdir -p ./src/bin \ && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -RUN cargo build +RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/lemmy_server* COPY server/src ./src/ COPY server/migrations ./migrations/ # Build for debug -RUN cargo build +RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build FROM ekidd/rust-musl-builder:1.42.0-openssl11 as docs WORKDIR /app diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index b9eec456..bc17a186 100644 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -12,6 +12,10 @@ RUN yarn build FROM ekidd/rust-musl-builder:1.42.0-openssl11 as rust +# Install lld +RUN sudo apt-get update -y +RUN sudo apt-get install -y lld + # Cache deps WORKDIR /app RUN sudo chown -R rust:rust . @@ -21,13 +25,13 @@ COPY server/Cargo.toml server/Cargo.lock ./ RUN sudo chown -R rust:rust . RUN mkdir -p ./src/bin \ && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs -RUN cargo build --release +RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build --release RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/lemmy_server* COPY server/src ./src/ COPY server/migrations ./migrations/ # Build for release -RUN cargo build --frozen --release +RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build --frozen --release # reduce binary size RUN strip /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server -- cgit v1.2.3