Linux

Docker를 이용한 WebDAV Nginx 서버 구축하기

thxxyj 2024. 5. 22. 02:25
728x90

Docker를 통해 WebDAV Nginx 서버를 구축하기

 

1. Dockerfile

FROM ubuntu:20.04

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Seoul
ENV USERNAME ""
ENV USERPWD ""

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt install -y nginx nginx-extras apache2-utils

RUN echo 'server {\n\
listen 80 default_server;\n\
listen [::]:80 default_server;\n\
charset utf-8;\n\
location / {\n\
root /var/webdav;\n\
dav_methods     PUT DELETE MKCOL COPY MOVE;\n\
dav_ext_methods   PROPFIND OPTIONS;\n\
create_full_put_path  on;\n\
dav_access    user:rw group:rw all:rw;\n\
autoindex     on;\n\
auth_basic "restricted";\n\
auth_basic_user_file /etc/nginx/users.pass;\n\
send_timeout  36000s;\n\
proxy_connect_timeout  36000s;\n\
proxy_read_timeout  36000s;\n\
proxy_send_timeout  36000s;\n\
proxy_request_buffering off;\n\
access_log /var/log/nginx/webdav.access.log;\n\
error_log /var/log/nginx/webdav.error.log;\n\
}}\n'\
>>  /etc/nginx/sites-available/webdav

RUN ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/webdav
RUN rm -rf /etc/nginx/sites-enabled/default

RUN mkdir -p /var/webdav
RUN chown www-data /var/webdav && chmod -R 777 /var/webdav

COPY entrypoint.sh /
RUN chmod +x entrypoint.sh

CMD /entrypoint.sh && nginx -g "daemon off;"

 

 

1. nginx 권한 설정

nginx 프로세스에서 동작하는 기본 id 확인 

root@66ff4e277bac:/# ps -ef | grep nginx
....
www-data      13       9  0 02:00 ?        00:00:00 nginx: worker process
www-data      14       9  0 02:00 ?        00:00:00 nginx: worker process
www-data      15       9  0 02:00 ?        00:00:00 nginx: worker process

webdav 연결할 경로의 소유주 변경

chown www-data ${webdav연결경로}
# ex. chown www-data /var/webdav

 

2. nginx 설정파일 

/etc/nginx/sites-available 아래 설정파일을 작성 -> sites-enabled로 심볼릭 링크를 추가하여 활성화

# vi /etc/nginx/sites-available/{설정파일이름}
(설정 파일 추가)

# ln -s /etc/nginx/sites-available/{설정파일이름} /etc/nginx/sites-enabled/{설정파일이름}

 

3. 서버 authentication 유무

# 로그인 없이 접근 가능
auth_basic off;\n\

# 로그인 필요
auth_basic "restricted";\n\
auth_basic_user_file /etc/nginx/users.pass;\n\

 

4. location이 "/" 아닐 때

* "location / { alias /var/webdav;"  로 설정했을때 404 에러 발생했음

# location이 / 가 일 때 -> root
server {\n\
...
  location / {\n\
    root /var/webdav;\n\

# location이 / 가 아닐 때 -> alias
server {\n\
...
  location /webdav {\n\
    alias /var/webdav;\n\

 

 

2. entrypoint.sh 

#!/bin/bash

if [[ -n "$USERNAME" ]] && [[ -n "$USERPWD" ]]
then
    htpasswd -bc /etc/nginx/users.pass $USERNAME $USERPWD
    echo Done.
fi

 

 

3. webdav_nginx.yaml

version: '3'

services:
  webdav:
    image: webdav:1.0
    container_name: webdav
    restart: always
    ports:
      - 8181:80
    volumes:
      - /mnt/webdav:/var/webdav
      - /etc/localtime:/etc/localtime:ro
    environment:
      - USERNAME=YOUR_NAME
      - USERPWD=YOUR_PASSWD

 

 

 

docker container 등록 후 지정한 url을 통해 확인 가능하다

 

 

 

참고

https://alexonepath.github.io/category/docker/guide/container-1-home.html

https://devblog.lazyig.com/76/

728x90