개인 공부

NextCloud와 Caddy를 이용한 개인 드라이브 구축 4 (with Docker)

was564 2025. 1. 23. 15:48

저번 포스트에서는 Caddy 컨테이너를 생성하고 SSL 인증까지 하였다.

 

이번 포스트에서는 지금까지 구축 했던 NextCloud와 Caddy를 연동시켜 배포를 목표로 한다.

 

진행 순서

진행 순서는 아래와 같이 진행된다.

1. NextCloud 컨테이너 생성 및 구동 확인

(https://was564.tistory.com/10)

2. 도메인 생성 및 Cloudflare 연동

(https://was564.tistory.com/11)

3. 도메인을 이용하여 Caddy 컨테이너 생성 및 SSL 인증 (와일드 카드까지)

(https://was564.tistory.com/12)

4. 페이지 정상 작동 확인 (해당 포스트)

 

NextCloud와 Caddy 연동

이전 포스트에서 구축했던 NextCloud 컨테이너와 Caddy 컨테이너를 Caddyfile을 통해 프록시를 시킨다.

 

현재 개인 환경에서는 NextCloud 컨테이너는 로컬에서 8090 포트로 (http)제공하고 있는 상태이고

Caddy 컨테이너는 Docker의 network_mode를 host로 지정하여 로컬 포트와 매핑되어 있다.

 

먼저 연동을 시키기전에 NextCloud를 제공할 사이트를 Cloudflare를 통해 지정한다.

필자는 testdrive.my_domain 형식으로 제공해본다.

(와일드 카드 SSL 인증은 이미 되었다고 가정한다.)

 

이를 위해 Cloudflare에서 DNS 레코드를 추가한다.

1. 유형 : A

2. 이름 : testdrive

3. IPv4 주소 : 자신의 서버 ip 주소

4. 프록시 상태 : O

 

추가가 완료되면 쉘에서 아래 명령어를 통해 caddy 컨테이너와 nextcloud, next_db 컨테이너가 잘 작동중인지 확인하자.

sudo docker ps

 

위와 같이 컨테이너의 STATUS가 Up으로 표시되면 정상적으로 구동되고 있는 것이며

로컬에서 서버의 8090포트로 접속하면 위와 같이 NextCloud 사이트에 정상적으로 접속되는 것을 확인할 수 있다.

 

여기까지 준비가 되었으면 Caddyfile을 수정하여 NextCloud를 배포 해보도록 하자.

먼저 /etc/caddy에 있는 Caddyfile을 아래와 같이 수정한다.

 

Caddyfile

my_domain {
	root * /usr/share/caddy
	file_server
}

*.my_domain {
	tls {
	 	dns cloudflare {env.CF_API_KEY}
	}
    
	@drive host testdrive.my_domain
	handle @drive {
		reverse_proxy localhost:8090
	}
}

# 예시
# was564.site {
# 	root * /usr/share/caddy
# 	file_server
# }
#
# *.was564.site {
# 	tls {
# 		dns cloudflare {env.CF_API_KEY}
# 	}
#
# 	@drive host testdrive.was564.site
# 	handle @drive {
#    	reverse_proxy localhost:8090
# 	}
# }

 

그 후 Caddyfile 적용을 위해 caddy 컨테이너를 재실행한다.

sudo docker restart caddy

 

그러면 testdrive.my_domain에 접속하면 아래와 같이 창이 뜬다.

 

 

여기까지가 Caddy와 NextCloud 연동이다.

 

정상적인 이용을 위한 NextCloud 세팅

연동만 하고 쓰지 못하면 의미가 없다.

위 사진과 같이 untrusted domain이 떴을 때는

NextCloud 컨테이너의 Config를 들어가 설정을 바꿔야한다.

 

 

필자가 구성한 NextCloud 컨테이너는 아래와 같이 구성되었으며

Debian Linux로 운용되며 텍스트 Editor를 가지고 있지 않아서 직접 Docker volume 파일에 접근하여 수정한다.

version: '3'

services:
	...
	app:
		image: nextcloud:latest
		container_name: nextcloud
		ports:
	  	- 8090:80
	  	- 8440:443
	volumes:
		- nextcloud:/var/www/html
	...
	networks:
		- next-network

volumes:
	next_db:
	nextcloud:
networks:
	next-network:

 

일반적으로 Docker volume은 /var/lib/docker/volumes에 위치해있다.

그리고 docker는 일반 사용자에게 공개가 되어있지 않으므로 sudo 권한이 필요하다.

 

따라서 아래와 같은 명령어를 사용하여 수정한다.

sudo vim /var/lib/docker/volumes/nextcloud_docker_nextcloud/_data/config/config.php
# volumes 폴더 안에는 볼륨 폴더가 존재하며 명명법은
# "{volume_name}_docker_{container_name}"이다.

 

명령어를 수행하면 위와 같은 화면이 뜰 것이다.

여기 trusted_domains를 아래와 같이 수정한다.

'trusted_domains' => 
array (
  0 => '127.0.0.1:8090',
  1 => 'testdrive.my_domain',
),

# 예시
# 'trusted_domains' => 
# array (
#   0 => '127.0.0.1:8090',
#   1 => 'testdrive.was564.site',
# ),

 

그 후 nextcloud 컨테이너를 재실행한다.

sudo docker restart nextcloud

 

그리고 다시 testdrive.my_domain에 접속하면 아래와 같은 창이 맞이할 것이다.

 

초기에 지정했던 ID 와 Password를 입력하면 정상적으로 로그인 되는 것을 볼 수 있다.

 

 

이로써 NextCloud와 Caddy를 이용하여 외부로 웹 배포를 진행해 보았다.

 

 

 

맞닥뜨린 문제

 

 

Nextcloud Upload 중 Chunk Size 문제

Nextcloud 업로드 중 중간에 중단되는 문제가 발생하며 찾아봤다.

문제점은 2가지가 있었으며 아래와 같다.

1. 라즈베리파이 5 8GB 스펙에 비해 너무 큰 Chunk Size

2. Cloudflare가 Free 요금제에서 제공하는 Chunk Size 100MB 제한

 

위와 같은 이유로 Chunk Size를 5MB로 설정하였으며 아래 명령어를 이용하였다.

sudo docker exec --user www-data nextcloud php occ config:app:set files max_chunk_size --value 5242880
# 5242880 = 5 * 1024^2

sudo docker restart nextcloud

 

 

 

참고 사이트

https://help.nextcloud.com/t/experiencing-unwanted-1gb-upload-hard-limit-unable-to-find-the-culprit/157243

https://help.nextcloud.com/t/documentation-inconsistency-how-to-set-chunk-size/207989

https://github.com/nextcloud/docker?tab=readme-ov-file#accessing-the-nextcloud-command-line-interface-occ