From: Dessalines Date: Tue, 23 Jun 2020 00:35:09 +0000 (-0400) Subject: Merge branch 'master' into iav-arm-musl-dessalines X-Git-Url: http://these/git/?a=commitdiff_plain;h=e3484de3b898d6d51f22e7456842362501fd1f5b;hp=bca76f1f2f4f45ff46b1289d794d61d7fa977922;p=lemmy.git Merge branch 'master' into iav-arm-musl-dessalines --- diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index 3ebfa097..82a03f3c 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -12,10 +12,6 @@ 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 . @@ -25,13 +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 RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build +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 debug -RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build +RUN cargo build FROM ekidd/rust-musl-builder:1.42.0-openssl11 as docs WORKDIR /app @@ -39,8 +35,7 @@ COPY docs ./docs RUN sudo chown -R rust:rust . RUN mdbook build docs/ - -FROM alpine:3.10 +FROM alpine:3.12 # Install libpq for postgres RUN apk add libpq diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index bc17a186..54485a37 100644 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -1,61 +1,63 @@ -FROM node:10-jessie as node +ARG RUST_BUILDER_IMAGE=shtripok/rust-musl-builder:arm -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 +FROM $RUST_BUILDER_IMAGE as rust -# Install lld -RUN sudo apt-get update -y -RUN sudo apt-get install -y lld +#ARG RUSTRELEASEDIR="debug" +ARG RUSTRELEASEDIR="release" # 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 . +COPY --chown=rust:rust 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 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/ + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs +RUN cargo build --release +RUN rm -f ./target/$CARGO_BUILD_TARGET/$RUSTRELEASEDIR/deps/lemmy_server* +COPY --chown=rust:rust server/src ./src/ +COPY --chown=rust:rust server/migrations ./migrations/ -# Build for release -RUN RUSTFLAGS="-Clink-arg=-fuse-ld=lld" cargo build --frozen --release +# build for release +# workaround for https://github.com/rust-lang/rust/issues/62896 +RUN cargo build --frozen --release # reduce binary size -RUN strip /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server +RUN strip ./target/$CARGO_BUILD_TARGET/$RUSTRELEASEDIR/lemmy_server -FROM ekidd/rust-musl-builder:1.42.0-openssl11 as docs +RUN cp ./target/$CARGO_BUILD_TARGET/$RUSTRELEASEDIR/lemmy_server /app/server/ + +FROM $RUST_BUILDER_IMAGE as docs WORKDIR /app -COPY docs ./docs -RUN sudo chown -R rust:rust . +COPY --chown=rust:rust docs ./docs RUN mdbook build docs/ +FROM node:12-buster as node -FROM alpine:3.10 +WORKDIR /app/ui + +# Cache deps +COPY ui/package.json ui/yarn.lock ./ +RUN yarn install --pure-lockfile --network-timeout 600000 + +# Build +COPY ui /app/ui +RUN yarn build + +FROM alpine:3.12 as lemmy # Install libpq for postgres RUN apk add libpq +RUN addgroup -g 1000 lemmy +RUN adduser -D -s /bin/sh -u 1000 -G lemmy lemmy # 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 +COPY --chown=lemmy:lemmy server/config/defaults.hjson /config/defaults.hjson +COPY --chown=lemmy:lemmy --from=rust /app/server/lemmy_server /app/lemmy +COPY --chown=lemmy:lemmy --from=docs /app/docs/book/ /app/dist/documentation/ +COPY --chown=lemmy:lemmy --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 diff --git a/docker/prod/Dockerfile.aarch64 b/docker/prod/Dockerfile.aarch64 deleted file mode 100644 index 7a1c833f..00000000 --- a/docker/prod/Dockerfile.aarch64 +++ /dev/null @@ -1,80 +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 - -# 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 deleted file mode 100644 index efd937a3..00000000 --- a/docker/prod/Dockerfile.armv7hf +++ /dev/null @@ -1,81 +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 - -# 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 deleted file mode 100644 index 9c750282..00000000 --- a/docker/prod/Dockerfile.libc +++ /dev/null @@ -1,90 +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 - -# 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 index 496b598e..2c6e3d31 100755 --- a/docker/prod/deploy.sh +++ b/docker/prod/deploy.sh @@ -37,40 +37,20 @@ export COMPOSE_DOCKER_CLI_BUILD=1 export DOCKER_BUILDKIT=1 # Rebuilding docker -docker build ../../ -f Dockerfile --tag prod_lemmy:latest -docker tag prod_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 + # TODO get linux/arm/v7 build working + # Build for Raspberry Pi / other archs too + docker buildx build --platform linux/amd64,linux/arm64 ../../ \ + --file Dockerfile \ + --tag dessalines/lemmy:$new_tag \ + --push else - docker manifest create dessalines/lemmy:$new_tag \ - dessalines/lemmy:x64-$new_tag + docker buildx build --platform linux/amd64 ../../ \ + --file Dockerfile \ + --tag dessalines/lemmy:$new_tag \ + --push fi -docker manifest push dessalines/lemmy:$new_tag - # Push git push origin $new_tag git push