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
728x90
'Linux' 카테고리의 다른 글
WebDAV 파일시스템 마운트 in Ubuntu (0) | 2024.05.22 |
---|---|
Ubuntu NFS Mount (0) | 2024.04.03 |
Ubuntu 날짜/시간 변경하기(timedatectl, dpkg-reconfigure) (0) | 2023.07.19 |
[Linux] 수동으로 ADB/Fastboot 버전 업그레이드 하기 (0) | 2023.04.20 |
Ubuntu hostname 확인/변경 (0) | 2023.03.06 |