From 88dfc4d63c54e215190a789dd3151506c4a5054b Mon Sep 17 00:00:00 2001 From: Igor Velkov Date: Fri, 6 Sep 2019 23:16:32 +0300 Subject: [PATCH] Add docker chain for direct building debian-based image. No cross-compilation, no MUSL support. --- docker/nocross/.env | 4 +++ docker/nocross/Dockerfile | 60 +++++++++++++++++++++++++++++++ docker/nocross/Dockerfile.org | 50 ++++++++++++++++++++++++++ docker/nocross/deploy.sh | 31 ++++++++++++++++ docker/nocross/docker-compose.yml | 26 ++++++++++++++ docker/nocross/docker_update.sh | 2 ++ 6 files changed, 173 insertions(+) create mode 100644 docker/nocross/.env create mode 100644 docker/nocross/Dockerfile create mode 100644 docker/nocross/Dockerfile.org create mode 100644 docker/nocross/deploy.sh create mode 100644 docker/nocross/docker-compose.yml create mode 100644 docker/nocross/docker_update.sh diff --git a/docker/nocross/.env b/docker/nocross/.env new file mode 100644 index 0000000..f82502d --- /dev/null +++ b/docker/nocross/.env @@ -0,0 +1,4 @@ +DOMAIN=my_domain +DATABASE_PASSWORD=password +DATABASE_URL=postgres://lemmy:password@lemmy_db:5432/lemmy +JWT_SECRET=changeme diff --git a/docker/nocross/Dockerfile b/docker/nocross/Dockerfile new file mode 100644 index 0000000..47e7849 --- /dev/null +++ b/docker/nocross/Dockerfile @@ -0,0 +1,60 @@ +FROM 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.37 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 +RUN rm -f ./target/debug/deps/lemmy_server* +COPY server/src ./src/ +COPY server/migrations ./migrations/ + +# build for release +#RUN cargo build --frozen --release +RUN cargo build + +# 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/debug/lemmy_server /app/server/ready + + +#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 + +# Copy resources +#COPY --from=rust /app/server/target/$TARGET/debug/lemmy_server /app/lemmy +COPY --from=rust /app/server/ready /app/lemmy +COPY --from=node /app/ui/dist /app/dist +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 +RUN chown lemmy:lemmy /app/lemmy +USER lemmy +EXPOSE 8536 +CMD ["/app/lemmy"] diff --git a/docker/nocross/Dockerfile.org b/docker/nocross/Dockerfile.org new file mode 100644 index 0000000..0eb5f60 --- /dev/null +++ b/docker/nocross/Dockerfile.org @@ -0,0 +1,50 @@ +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 rust:latest as rust + +# Install musl +RUN apt-get update +RUN apt-get install musl-tools -y +RUN rustup target add x86_64-unknown-linux-musl + +# 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 RUSTFLAGS=-Clinker=musl-gcc cargo build --release --target=x86_64-unknown-linux-musl +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 RUSTFLAGS=-Clinker=musl-gcc cargo build --frozen --release --target=x86_64-unknown-linux-musl + +# Get diesel-cli on there just in case +# RUN cargo install diesel_cli --no-default-features --features postgres + +FROM alpine:latest + +# Install libpq for postgres +RUN apk add libpq + +# Copy resources +COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/lemmy_server /app/lemmy +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/nocross/deploy.sh b/docker/nocross/deploy.sh new file mode 100644 index 0000000..e7ab706 --- /dev/null +++ b/docker/nocross/deploy.sh @@ -0,0 +1,31 @@ +#!/bin/sh +git checkout master + +# Creating the new tag +new_tag="$1" +git tag $new_tag + +# Setting the version on the front end +pushd ../../ui/ +node set_version.js +git add src/version.ts +popd + +# Changing the docker-compose prod +sed -i "s/dessalines\/lemmy:.*/dessalines\/lemmy:$new_tag/" ../prod/docker-compose.yml +git add ../prod/docker-compose.yml + +# The commit +git commit -m"Upping version." + +git push origin $new_tag +git push + +# Rebuilding docker +./docker_update.sh +docker tag dev_lemmy:latest dessalines/lemmy:$new_tag +docker push dessalines/lemmy:$new_tag + +# Pushing to any ansible deploys +cd ../../ansible +ansible-playbook lemmy.yml diff --git a/docker/nocross/docker-compose.yml b/docker/nocross/docker-compose.yml new file mode 100644 index 0000000..15bf267 --- /dev/null +++ b/docker/nocross/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.3' + +services: + lemmy_db: + image: postgres:12-alpine + environment: + - POSTGRES_USER=lemmy + - POSTGRES_PASSWORD=${DATABASE_PASSWORD} + - POSTGRES_DB=lemmy + volumes: + - lemmy_db:/var/lib/postgresql/data + lemmy: + build: + context: ../../ + dockerfile: docker/pi/Dockerfile + ports: + - "8536:8536" + environment: + - LEMMY_FRONT_END_DIR=/app/dist + - DATABASE_URL=${DATABASE_URL} + - JWT_SECRET=${JWT_SECRET} + - HOSTNAME=${DOMAIN} + depends_on: + - lemmy_db +volumes: + lemmy_db: diff --git a/docker/nocross/docker_update.sh b/docker/nocross/docker_update.sh new file mode 100644 index 0000000..9d0f454 --- /dev/null +++ b/docker/nocross/docker_update.sh @@ -0,0 +1,2 @@ +#!/bin/sh +docker-compose up -d --no-deps --build