mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			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 }}
 | 
			
		||||
							
								
								
									
										87
									
								
								Dockerfile
								
								
								
								
							
							
						
						
									
										87
									
								
								Dockerfile
								
								
								
								
							| 
						 | 
				
			
			@ -1,70 +1,43 @@
 | 
			
		|||
FROM golang:1.17.7-alpine as cloudreve_builder
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
WORKDIR /cloudreve_builder
 | 
			
		||||
RUN git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git
 | 
			
		||||
 | 
			
		||||
# build frontend
 | 
			
		||||
FROM node:lts-buster AS fe-builder
 | 
			
		||||
 | 
			
		||||
COPY ./assets /assets
 | 
			
		||||
 | 
			
		||||
WORKDIR /assets
 | 
			
		||||
 | 
			
		||||
# If encountered problems like JavaScript heap out of memory, please uncomment the following options
 | 
			
		||||
ENV NODE_OPTIONS --max_old_space_size=4096
 | 
			
		||||
 | 
			
		||||
# yarn repo connection is unstable, adjust the network timeout to 10 min.
 | 
			
		||||
RUN set -ex \
 | 
			
		||||
    && yarn install --network-timeout 600000 \
 | 
			
		||||
    && yarn run build
 | 
			
		||||
WORKDIR /cloudreve_builder/Cloudreve/assets
 | 
			
		||||
RUN yarn install --network-timeout 1000000
 | 
			
		||||
RUN yarn run build
 | 
			
		||||
 | 
			
		||||
# build backend
 | 
			
		||||
FROM golang:1.17.7-alpine3.12 AS be-builder
 | 
			
		||||
 | 
			
		||||
ENV GO111MODULE on
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
WORKDIR /cloudreve_builder/Cloudreve
 | 
			
		||||
RUN go get github.com/rakyll/statik \
 | 
			
		||||
    && statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \
 | 
			
		||||
    && tag_name=$(git describe --tags) \
 | 
			
		||||
    && export COMMIT_SHA=$(git rev-parse --short HEAD) \
 | 
			
		||||
    && export VERSION=$(git describe --tags) \
 | 
			
		||||
    && 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"
 | 
			
		||||
    && 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'"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# build final image
 | 
			
		||||
FROM alpine:3.12 AS dist
 | 
			
		||||
FROM alpine:latest
 | 
			
		||||
 | 
			
		||||
LABEL maintainer="mritd <mritd@linux.com>"
 | 
			
		||||
WORKDIR /cloudreve
 | 
			
		||||
 | 
			
		||||
# we use the Asia/Shanghai timezone by default, you can be modified
 | 
			
		||||
# by `docker build --build-arg=TZ=Other_Timezone ...`
 | 
			
		||||
ARG TZ="Asia/Shanghai"
 | 
			
		||||
RUN apk update && apk add --no-cache tzdata
 | 
			
		||||
 | 
			
		||||
ENV TZ ${TZ}
 | 
			
		||||
# we using the `Asia/Shanghai` timezone by default, you can do modification at your will
 | 
			
		||||
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
 | 
			
		||||
    && echo "Asia/Shanghai" > /etc/timezone
 | 
			
		||||
 | 
			
		||||
COPY --from=be-builder /go/bin/Cloudreve /cloudreve/cloudreve
 | 
			
		||||
COPY docker-bootstrap.sh /cloudreve/bootstrap.sh
 | 
			
		||||
COPY --from=cloudreve_builder /cloudreve_builder/Cloudreve/cloudreve ./
 | 
			
		||||
 | 
			
		||||
RUN apk upgrade \
 | 
			
		||||
    && apk add bash tzdata aria2 \
 | 
			
		||||
    && ln -s /cloudreve/cloudreve /usr/bin/cloudreve \
 | 
			
		||||
    && 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
 | 
			
		||||
# prepare permissions and aria2 dir
 | 
			
		||||
RUN chmod +x ./cloudreve && mkdir -p /data/aria2 && chmod -R 766 /data/aria2
 | 
			
		||||
 | 
			
		||||
# cloudreve use tcp 5212 port by default
 | 
			
		||||
EXPOSE 5212/tcp
 | 
			
		||||
EXPOSE 5212
 | 
			
		||||
VOLUME ["/cloudreve/uploads", "/cloudreve/avatar", "/data"]
 | 
			
		||||
 | 
			
		||||
# cloudreve stores all files(including executable file) in the `/cloudreve`
 | 
			
		||||
# directory by default; users should mount the configfile to the `/etc/cloudreve`
 | 
			
		||||
# directory by themselves for persistence considerations, and the data storage
 | 
			
		||||
# directory recommends using `/data` directory.
 | 
			
		||||
VOLUME /etc/cloudreve
 | 
			
		||||
 | 
			
		||||
VOLUME /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