diff --git a/README.md b/README.md index 384f29df8..ea98a0699 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Front Page|Post - High performance. - Server is written in rust. - Front end is `~80kB` gzipped. + - Supports arm64 / Raspberry Pi. ## About diff --git a/docker/dev/Dockerfile.aarch64 b/docker/dev/Dockerfile.aarch64 new file mode 100644 index 000000000..dbbafbd38 --- /dev/null +++ b/docker/dev/Dockerfile.aarch64 @@ -0,0 +1,78 @@ +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.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 +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 --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 new file mode 100644 index 000000000..3770dfd71 --- /dev/null +++ b/docker/dev/Dockerfile.armv7hf @@ -0,0 +1,78 @@ +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 --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/deploy.sh b/docker/dev/deploy.sh index 3027a93af..4784a7427 100755 --- a/docker/dev/deploy.sh +++ b/docker/dev/deploy.sh @@ -21,10 +21,32 @@ git commit -m"Version $new_tag" git push origin $new_tag git push +# Registering qemu binaries +docker run --rm --privileged multiarch/qemu-user-static:register --reset + # Rebuilding docker docker-compose build -docker tag dev_lemmy:latest dessalines/lemmy:$new_tag -docker push dessalines/lemmy:$new_tag +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 +docker build -t lemmy:aarch64 -f Dockerfile.aarch64 ../../ +docker tag lemmy:aarch64 dessalines/lemmy:arm64-$new_tag +docker push dessalines/lemmy:arm64-$new_tag + +# Creating the manifest for the multi-arch build +docker manifest create dessalines/lemmy:$new_tag \ + dessalines/lemmy:x64-$new_tag \ + dessalines/lemmy:arm64-$new_tag + +docker manifest push dessalines/lemmy:$new_tag # Pushing to any ansible deploys cd ../../ansible diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index 67fb184e6..86c6c3695 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - lemmy_db:/var/lib/postgresql/data lemmy: - image: dessalines/lemmy:v0.3.0.8 + image: dessalines/lemmy:v0.3.0.12 ports: - "127.0.0.1:8536:8536" environment: diff --git a/ui/src/version.ts b/ui/src/version.ts index a9df869db..3b76b1b0b 100644 --- a/ui/src/version.ts +++ b/ui/src/version.ts @@ -1 +1 @@ -export let version: string = 'v0.3.0.8-0-gbffd657'; +export let version: string = 'v0.3.0.12-0-g2535116';