diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..56335f2 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,33 @@ +name: CI + +on: + push: + branches: [ main ] + tags: + - 'v[0-9]+.[0-9]+.[0-9]+**' +jobs: + build: + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + + name: Build and push image + steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - + name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push + uses: docker/build-push-action@v5 + with: + platforms: linux/amd64,linux/arm64,linux/arm/v7, linux/arm64/v8 + push: true + tags: reply2future/docker-webdav:latest,reply2future/docker-webdav:${{ github.ref_name }} diff --git a/Dockerfile b/Dockerfile index eb3e7de..f2991c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM debian:10.6-slim +FROM debian:stable-slim -LABEL maintainer "ugeek. ugeekpodcast@gmail.com" +LABEL maintainer "6359152+reply2future@users.noreply.github.com" ARG UID=${UID:-1000} ARG GID=${GID:-1000} @@ -15,6 +15,8 @@ RUN apt-get update && \ RUN usermod -u $UID www-data && groupmod -g $GID www-data VOLUME /media +VOLUME /logs + EXPOSE 80 COPY webdav.conf /etc/nginx/conf.d/default.conf diff --git a/README.es.md b/README.es.md new file mode 100644 index 0000000..23b9792 --- /dev/null +++ b/README.es.md @@ -0,0 +1,85 @@ +# Servidor webdav partiendo de debian-testing + +## Clonar el repositorio + +``` +git clone https://github.com/reply2future/docker-webdav.git +``` + +y accedemos al interior de la carpeta: + +``` +cd docker-webdav +``` + +## Construir la imagen +``` +docker build -t reply2future/webdav:arm . +``` + +## Ver el número de imagen: +``` +docker images +``` + +## Montar el contenedor + +### docker-cli +USERNAME: webdav +PASSWORD: webdav +PUERTO: 80 + +--restart=unless-stopped: Iniciar cada vez que iniciemos el servidor + + +``` +docker run --name webdav \ + --restart=unless-stopped \ + -p 80:80 \ + -v $HOME/docker-webdav/media:/media \ + -v $HOME/docker-webdav/logs:/logs \ + -e USERNAME=webdav \ + -e PASSWORD=webdav \ + -e TZ=Europe/Madrid \ + -e UDI=1000 \ + -e GID=1000 \ + -d reply2future/webdab:arm +``` + +### docker-compose con traefik y proxy inverso + +[Este archivo](/docker-compose.yml) es un ejemplo.. + +Introduce el comando... +``` +docker-compose up -d +``` + + +## Logs + +Añadido nuevo registro de logs. + +### Ver logs + +``` +docker exec -it webdav cat /logs/webdav_access.log +``` + +### Logs en tiempo real + +``` +docker exec -it webdav cat /logs/webdav_access.log +``` + + + +### logs con error +``` +docker exec -it webdav /logs/webdav_error.log +``` + +## Agradecimientos +- Gracias a [Germán Martín](https://github.com/gmag11) por añadir la compatibilidad con clientes Windows 10. [Fork](https://github.com/gmag11/docker-webdav) + + diff --git a/README.md b/README.md index 8493df1..b8f8b21 100644 --- a/README.md +++ b/README.md @@ -1,122 +1,66 @@ -# Servidor webdav partiendo de debian-testing -## Clonar el repositorio +# Webdav Server based on debian-testing -``` -git clone https://github.com/uGeek/docker-nginx-webdav.git -``` +## Cloning the repository -y accedemos al interior de la carpeta: +> git clone https://github.com/reply2future/docker-webdav.git -``` -cd docker-nginx-webdav -``` +and we access the inside of the folder : -## Construir la imagen -``` -docker build -t ugeek/webdav:arm . -``` +cd docker-webdav -## Ver el número de imagen: -``` +## Building the image +docker build -t reply2future/webdav:arm . + +## Check the image number: docker images -``` -## Montar el contenedor +## Mounting the container ### docker-cli USERNAME: webdav PASSWORD: webdav -PUERTO: 80 +PORT: 80 ---restart=unless-stopped: Iniciar cada vez que iniciemos el servidor +--restart=unless-stopped: Start each time we start the server - -``` +```bash docker run --name webdav \ --restart=unless-stopped \ -p 80:80 \ - -v $HOME/docker/webdav:/media \ + -v $HOME/docker-webdav/media:/media \ + -v $HOME/docker-webdav/logs:/logs \ -e USERNAME=webdav \ -e PASSWORD=webdav \ -e TZ=Europe/Madrid \ - -e UDI=1000 \ + -e UID=1000 \ -e GID=1000 \ - -d ugeek/webdab:arm + -d uge ek/webdab:arm ``` -### docker-compose con traefik y proxy inverso +### docker-compose with traefik and reverse proxy -``` -version: '2' -services: - webdav: - container_name: webdav - image: ugeek/webdav:arm - ports: - - 80:80 - volumes: - - $HOME/docker/webdav:/media - environment: - - USERNAME=webdav - - PASSWORD=webdav - - UID=1000 - - GID=1000 - - TZ=Europe/Madrid - networks: - - web - labels: - - traefik.backend=webdav - - traefik.frontend.rule=Host:webdav.tu_dominio.duckdns.org - - traefik.docker.network=web - - traefik.port=80 - - traefik.enable=true - # Adding in secure headers - - traefik.http.middlewares.securedheaders.headers.forcestsheader=true - - traefik.http.middlewares.securedheaders.headers.sslRedirect=true - - traefik.http.middlewares.securedheaders.headers.STSPreload=true - - traefik.http.middlewares.securedheaders.headers.ContentTypeNosniff=true - - traefik.http.middlewares.securedheaders.headers.BrowserXssFilter=true - - traefik.http.middlewares.securedheaders.headers.STSIncludeSubdomains=true - - traefik.http.middlewares.securedheaders.headers.stsSeconds=63072000 - - traefik.http.middlewares.securedheaders.headers.frameDeny=true - - traefik.http.middlewares.securedheaders.headers.browserXssFilter=true - - traefik.http.middlewares.securedheaders.headers.contentTypeNosniff=true -networks: - web: - external: true -``` +[this file](/docker-compose.yml) is an example. -Introduce el comando... -``` -docker-compose up -d -``` +Enter the command... +> docker-compose up -d ## Logs -Añadido nuevo registro de logs. - -### Ver logs - -``` -docker exec -it webdav cat /var/log/nginx/webdav_access.log -``` - -### Logs en tiempo real +New log record added. -``` -docker exec -it webdav cat /var/log/nginx/webdav_access.log -``` +### See logs +> docker exec -it webdav cat /logs/webdav_access.log +### Real Time Logs -### logs con error -``` -docker exec -it webdav /var/log/nginx/webdav_error.log -``` +> docker exec -it webdav cat /logs/webdav_access.log -## Agradecimientos -- Gracias a [Germán Martín](https://github.com/gmag11) por añadir la compatibilidad con clientes Windows 10. [Fork](https://github.com/gmag11/docker-webdav) +### Error Logs +> docker exec -it webdav /logs/webdav_error.log +## Acknowledgements +- Thanks to [Germán Martín](https://github.com/gmag11) for adding compatibility with Windows 10 clients. [Fork](https://github.com/gmag11/docker-webdav) \ No newline at end of file diff --git a/docker-compose-build.yml b/docker-compose-build.yml index d40ebab..a65c94b 100644 --- a/docker-compose-build.yml +++ b/docker-compose-build.yml @@ -1,4 +1,4 @@ -version: '2' +version: '3' services: webdav: container_name: webdav @@ -6,7 +6,8 @@ services: ports: - "80:80" volumes: - - "$HOME/docker/webdav:/media" + - "$HOME/docker-webdav/media:/media" + - "$HOME/docker-webdav/logs:/logs" environment: - USERNAME=webdav - PASSWORD=webdav diff --git a/docker-compose.yml b/docker-compose.yml index 1420181..9ae6677 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,13 @@ -version: '2' +version: '3' services: webdav: container_name: webdav - image: ugeek/webdav:arm + image: reply2future/webdav ports: - 80:80 volumes: - - $HOME/docker/webdav:/media + - "$HOME/docker-webdav/media:/media" + - "$HOME/docker-webdav/logs:/logs" environment: - USERNAME=webdav - PASSWORD=webdav diff --git a/webdav.conf b/webdav.conf index c16f535..2747119 100644 --- a/webdav.conf +++ b/webdav.conf @@ -1,12 +1,17 @@ dav_ext_lock_zone zone=a:10m; +map $http_destination $dest_path { + ~^(?https?)://[^/]+(?/.*)$ $xpath; +} + server { #server_name webdav.mashnp.sk; - set $webdav_root "/media/"; + set $webdav_root "/media"; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd; dav_ext_lock zone=a; + location / { root $webdav_root; @@ -15,8 +20,8 @@ server { error_page 597 = @copy_move_handler; open_file_cache off; - access_log /var/log/nginx/webdav_access.log; - error_log /var/log/nginx/webdav_error.log debug; + access_log /logs/webdav_access.log; + error_log /logs/webdav_error.log debug; send_timeout 3600; client_body_timeout 3600; @@ -59,7 +64,15 @@ server { autoindex_exact_size on; autoindex_localtime on; + # Add CORS headers + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization' always; + if ($request_method = OPTIONS) { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization' always; add_header Allow 'OPTIONS, GET, HEAD, POST, PUT, MKCOL, MOVE, COPY, DELETE, PROPFIND, PROPPATCH, LOCK, UNLOCK'; add_header DAV '1, 2'; return 200; @@ -85,12 +98,16 @@ server { root $webdav_root; dav_methods DELETE; } + + location @copy_move_handler { internal; open_file_cache off; + more_set_input_headers 'Destination: $dest_path'; + if (-d $webdav_root/$uri) { # Microsoft specific handle: Add trailing slash to dirs. - more_set_input_headers 'Destination: $http_destination/'; + # more_set_input_headers 'Destination: $http_destination/'; rewrite ^(.*[^/])$ $1/ break; } root $webdav_root;