From 88dfc4d63c54e215190a789dd3151506c4a5054b Mon Sep 17 00:00:00 2001 From: Igor Velkov Date: Fri, 6 Sep 2019 23:16:32 +0300 Subject: [PATCH 1/3] 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 000000000..f82502d7f --- /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 000000000..47e78490e --- /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 000000000..0eb5f60d1 --- /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 000000000..e7ab706ff --- /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 000000000..15bf2674f --- /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 000000000..9d0f45429 --- /dev/null +++ b/docker/nocross/docker_update.sh @@ -0,0 +1,2 @@ +#!/bin/sh +docker-compose up -d --no-deps --build From df792fb0ef1420d6e0c4a8a6ed929400e66c701c Mon Sep 17 00:00:00 2001 From: Igor Velkov Date: Fri, 6 Sep 2019 22:10:14 +0000 Subject: [PATCH 2/3] corrected error in path --- docker/nocross/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/nocross/docker-compose.yml b/docker/nocross/docker-compose.yml index 15bf2674f..ac77e3272 100644 --- a/docker/nocross/docker-compose.yml +++ b/docker/nocross/docker-compose.yml @@ -12,7 +12,7 @@ services: lemmy: build: context: ../../ - dockerfile: docker/pi/Dockerfile + dockerfile: docker/nocross/Dockerfile ports: - "8536:8536" environment: From ab4741f7e3deabd2c287cbe2711ceae3819f7071 Mon Sep 17 00:00:00 2001 From: Igor Velkov Date: Sun, 8 Sep 2019 00:27:33 +0300 Subject: [PATCH 3/3] remove unrelated files, add --frozen flag --- docker/nocross/Dockerfile | 6 ++--- docker/nocross/Dockerfile.org | 50 ----------------------------------- docker/nocross/deploy.sh | 31 ---------------------- 3 files changed, 3 insertions(+), 84 deletions(-) delete mode 100644 docker/nocross/Dockerfile.org delete mode 100644 docker/nocross/deploy.sh diff --git a/docker/nocross/Dockerfile b/docker/nocross/Dockerfile index 47e78490e..8818f2b9f 100644 --- a/docker/nocross/Dockerfile +++ b/docker/nocross/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /app/ui COPY ui/package.json ui/yarn.lock ./ RUN yarn install --pure-lockfile --network-timeout 100000 -# Build +# Build COPY ui /app/ui RUN yarn build @@ -19,7 +19,7 @@ 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 + && echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs RUN cargo build RUN rm -f ./target/debug/deps/lemmy_server* @@ -28,7 +28,7 @@ COPY server/migrations ./migrations/ # build for release #RUN cargo build --frozen --release -RUN cargo build +RUN cargo build --frozen # Get diesel-cli on there just in case # RUN cargo install diesel_cli --no-default-features --features postgres diff --git a/docker/nocross/Dockerfile.org b/docker/nocross/Dockerfile.org deleted file mode 100644 index 0eb5f60d1..000000000 --- a/docker/nocross/Dockerfile.org +++ /dev/null @@ -1,50 +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 - -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 deleted file mode 100644 index e7ab706ff..000000000 --- a/docker/nocross/deploy.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/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