feat: docker/docker-compose support (#1203)
* Feat: add official Dockerfile * Feat: add dev docker build actions * update github actions for docker * update docker actions * update docker actions * update docker actions * update docker actions * update docker actions * update docker actions * fix: add npm default registry * fix: remove yarn.lock * fix: update frontend checksum * remove set registry * update Dockerfile * feat: basic docker-compose solution * remove old Dockerfile * fix typo * fix: frontend version * fix: remove unused commentspull/1217/head
parent
23dc7e370e
commit
b50756dbcb
@ -0,0 +1,50 @@
|
|||||||
|
name: Build and push docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 3.* # triggered on every push with tag 3.*
|
||||||
|
workflow_dispatch: # or just on button clicked
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker-build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- run: git fetch --prune --unshallow
|
||||||
|
- name: Setup Environments
|
||||||
|
id: envs
|
||||||
|
run: |
|
||||||
|
CLOUDREVE_LATEST_TAG=$(git describe --tags --abbrev=0)
|
||||||
|
DOCKER_IMAGE="cloudreve/cloudreve"
|
||||||
|
|
||||||
|
echo "RELEASE_VERSION=${GITHUB_REF#refs}"
|
||||||
|
TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${CLOUDREVE_LATEST_TAG}"
|
||||||
|
|
||||||
|
echo "CLOUDREVE_LATEST_TAG:${CLOUDREVE_LATEST_TAG}"
|
||||||
|
echo ::set-output name=tags::${TAGS}
|
||||||
|
- name: Setup QEMU Emulator
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
- name: Setup Docker Buildx Command
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
- name: Login to Dockerhub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
- name: Build Docker Image and Push
|
||||||
|
id: docker_build
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
push: true
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
tags: ${{ steps.envs.outputs.tags }}
|
||||||
|
- name: Image Digest
|
||||||
|
run: echo ${{ steps.docker_build.outputs.digest }}
|
@ -1,70 +1,43 @@
|
|||||||
# build frontend
|
FROM golang:1.17.7-alpine as cloudreve_builder
|
||||||
FROM node:lts-buster AS fe-builder
|
|
||||||
|
|
||||||
COPY ./assets /assets
|
|
||||||
|
|
||||||
WORKDIR /assets
|
# install dependencies and build tools
|
||||||
|
RUN apk update && apk add --no-cache wget curl git yarn build-base gcc abuild binutils binutils-doc gcc-doc
|
||||||
|
|
||||||
# If encountered problems like JavaScript heap out of memory, please uncomment the following options
|
WORKDIR /cloudreve_builder
|
||||||
ENV NODE_OPTIONS --max_old_space_size=4096
|
RUN git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git
|
||||||
|
|
||||||
# yarn repo connection is unstable, adjust the network timeout to 10 min.
|
# build frontend
|
||||||
RUN set -ex \
|
WORKDIR /cloudreve_builder/Cloudreve/assets
|
||||||
&& yarn install --network-timeout 600000 \
|
RUN yarn install --network-timeout 1000000
|
||||||
&& yarn run build
|
RUN yarn run build
|
||||||
|
|
||||||
# build backend
|
# build backend
|
||||||
FROM golang:1.17.7-alpine3.12 AS be-builder
|
WORKDIR /cloudreve_builder/Cloudreve
|
||||||
|
RUN go get github.com/rakyll/statik \
|
||||||
ENV GO111MODULE on
|
&& statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \
|
||||||
|
&& tag_name=$(git describe --tags) \
|
||||||
COPY . /go/src/github.com/cloudreve/Cloudreve/v3
|
|
||||||
COPY --from=fe-builder /assets/build/ /go/src/github.com/cloudreve/Cloudreve/v3/assets/build/
|
|
||||||
|
|
||||||
WORKDIR /go/src/github.com/cloudreve/Cloudreve/v3
|
|
||||||
|
|
||||||
RUN set -ex \
|
|
||||||
&& apk upgrade \
|
|
||||||
&& apk add gcc libc-dev git \
|
|
||||||
&& export COMMIT_SHA=$(git rev-parse --short HEAD) \
|
&& export COMMIT_SHA=$(git rev-parse --short HEAD) \
|
||||||
&& export VERSION=$(git describe --tags) \
|
&& go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$tag_name' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'"
|
||||||
&& go install -ldflags "-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=${VERSION}' \
|
|
||||||
-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=${COMMIT_SHA}'\
|
|
||||||
-w -s"
|
|
||||||
|
|
||||||
# build final image
|
|
||||||
FROM alpine:3.12 AS dist
|
|
||||||
|
|
||||||
LABEL maintainer="mritd <mritd@linux.com>"
|
|
||||||
|
|
||||||
# we use the Asia/Shanghai timezone by default, you can be modified
|
# build final image
|
||||||
# by `docker build --build-arg=TZ=Other_Timezone ...`
|
FROM alpine:latest
|
||||||
ARG TZ="Asia/Shanghai"
|
|
||||||
|
|
||||||
ENV TZ ${TZ}
|
WORKDIR /cloudreve
|
||||||
|
|
||||||
COPY --from=be-builder /go/bin/Cloudreve /cloudreve/cloudreve
|
RUN apk update && apk add --no-cache tzdata
|
||||||
COPY docker-bootstrap.sh /cloudreve/bootstrap.sh
|
|
||||||
|
|
||||||
RUN apk upgrade \
|
# we using the `Asia/Shanghai` timezone by default, you can do modification at your will
|
||||||
&& apk add bash tzdata aria2 \
|
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
&& ln -s /cloudreve/cloudreve /usr/bin/cloudreve \
|
&& echo "Asia/Shanghai" > /etc/timezone
|
||||||
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
|
||||||
&& echo ${TZ} > /etc/timezone \
|
|
||||||
&& rm -rf /var/cache/apk/* \
|
|
||||||
&& mkdir /etc/cloudreve \
|
|
||||||
&& ln -s /etc/cloudreve/cloureve.db /cloudreve/cloudreve.db \
|
|
||||||
&& ln -s /etc/cloudreve/conf.ini /cloudreve/conf.ini
|
|
||||||
|
|
||||||
# cloudreve use tcp 5212 port by default
|
COPY --from=cloudreve_builder /cloudreve_builder/Cloudreve/cloudreve ./
|
||||||
EXPOSE 5212/tcp
|
|
||||||
|
|
||||||
# cloudreve stores all files(including executable file) in the `/cloudreve`
|
# prepare permissions and aria2 dir
|
||||||
# directory by default; users should mount the configfile to the `/etc/cloudreve`
|
RUN chmod +x ./cloudreve && mkdir -p /data/aria2 && chmod -R 766 /data/aria2
|
||||||
# directory by themselves for persistence considerations, and the data storage
|
|
||||||
# directory recommends using `/data` directory.
|
|
||||||
VOLUME /etc/cloudreve
|
|
||||||
|
|
||||||
VOLUME /data
|
EXPOSE 5212
|
||||||
|
VOLUME ["/cloudreve/uploads", "/cloudreve/avatar", "/data"]
|
||||||
|
|
||||||
ENTRYPOINT ["sh", "/cloudreve/bootstrap.sh"]
|
ENTRYPOINT ["./cloudreve"]
|
@ -0,0 +1,33 @@
|
|||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
cloudreve:
|
||||||
|
container_name: cloudreve
|
||||||
|
image: cloudreve/cloudreve:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "5212:5212"
|
||||||
|
volumes:
|
||||||
|
- temp_data:/data
|
||||||
|
- ./cloudreve/uploads:/cloudreve/uploads
|
||||||
|
- ./cloudreve/conf.ini:/cloudreve/conf.ini
|
||||||
|
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
|
||||||
|
- ./cloudreve/avatar:/cloudreve/avatar
|
||||||
|
depends_on:
|
||||||
|
- aria2
|
||||||
|
aria2:
|
||||||
|
container_name: aria2
|
||||||
|
image: p3terx/aria2-pro # third party image, please keep notice what you are doing
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- RPC_SECRET=your_aria_rpc_token # aria rpc token, customize your own
|
||||||
|
- RPC_PORT=6800
|
||||||
|
volumes:
|
||||||
|
- ./aria2/config:/config
|
||||||
|
- temp_data:/data
|
||||||
|
volumes:
|
||||||
|
temp_data:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: $PWD/data
|
||||||
|
o: bind
|
Loading…
Reference in new issue