졸업 작품으로 진행한 라즈베리파이가 남아서 개인 클라우드로 쓸 수 있지 않을까 싶어 진행했다.
진행한 장치 및 환경은 라즈베리파이 5 8GB에 운영체제 Ubuntu Server 24.04.01 LTS (ver. Raspberry pi)에서 진행했다.
해당 포스트는 이해를 돕기 위해 다른 환경인 Laptop의 Ubuntu 22.04 LTS 환경에서 작업한 내용을 보여준다.
(따라서 GUI는 없고 명령어로만 조작한다.)
진행 순서
진행 순서는 아래와 같이 진행된다.
1. NextCloud 컨테이너 생성 및 구동 확인 (해당 포스트)
2. 도메인 생성 및 Cloudflare 연동
(https://was564.tistory.com/11)
3. 도메인을 이용하여 Caddy 컨테이너 생성 및 SSL 인증 (와일드 카드까지)
(https://was564.tistory.com/12)
4. 페이지 정상 작동 확인
(https://was564.tistory.com/13)
Requirements (필요한 것들)
Docker
여기서는 NextCloud 및 Caddy를 컨테이너에서 실행시키기 위해 Docker를 설치한다.
Docker를 설치하지 않고 로컬에 설치하여 진행할 수 있지만
오류가 생겼을 때 컨테이너를 다시 만들어 깔끔하게 환경을 재구성할 수 있어 사용했다.
https://docs.docker.com/engine/install/ubuntu/
위 사이트에서 도커 설치(우분투) 방법을 안내하니 참고하자.
개인 도메인
이 부분은 내부 접근만을 허용할 것이면 사용할 필요가 없으며 외부 접근을 위해서 필요하다.
개인 도메인은 Caddy를 통한 SSL 인증을 하기 위해서 필요한 정보이다.
따라서 외부 접근을 허용하지 않거나 SSL 인증을 하지 않을 것이라면 없어도 된다.
(이렇다면 NextCloud 설치하고 포트만 열어 두면 될 것이다.)
필자는 개인 도메인을 가비아에서 구매했으며 이벤트로 년에 1000원 정도 하는 도메인이 있어서 구매했다.
포트 포워딩
포트 포워딩은 외부의 접근이 가능하게 해 주며 해당 포스트에서는 80 포트와 443 포트를 사용할 것이다.
따라서 미리 서버의 IP를 조회하고 공유기에서 해당 IP의 80 포트와 443 포트를 열어 놓자.
네트워크 구조에 따라 공유기에서 포트포워딩을 했음에도 불구하고 개봉이 안될 수도 있다.
선택 사항
Cloudflare
Cloudflare는 도메인 관리를 위하여 사용하며 개인적으로는 외부 접속을 허용시킨 도메인이 있다면 쓰는 걸 추천한다.
추천하는 이유는 DDOS 공격 방지 기능과 프록시 기능을 지원해 주기 때문이다. (그것도 무료로)
DDOS 공격 방지 기능은 접속이 너무 빈번하게 이루어지면 봇인지 검사를 하며 접속을 차단한다.
프록시 기능은 해당 사이트에서 연결되는 IP 주소를 가려주는 효과가 있다. (자기 서버 IP의 직접 노출을 피할 수 있다.)
NextCloud 컨테이너 생성
먼저 Docker Container 구성을 자동으로 진행하도록 docker-compose.yml 파일과 .env 파일을 한 폴더에 집어넣었다.
docker-compose.yml
version: '3'
services:
db:
image: mariadb:latest
container_name: next_db
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- next_db:/var/lib/mysql
env_file: .env
environment:
- MYSQL_DATABASE=nextcloud
networks:
- next-network
ports:
- 3380:3306
app:
image: nextcloud:latest
container_name: nextcloud
ports:
- 8090:80
- 8440:443
volumes:
- nextcloud:/var/www/html
#- /media/ex/nextcloud-data:/var/www/html/data # 외장 하드 연결
restart: always
env_file: .env
environment:
- MYSQL_HOST=db:3306
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASSWORD
- MYSQL_DATABASE=nextcloud
- NEXTCLOUD_UPLOAD_LIMIT=100G
networks:
- next-network
volumes:
next_db:
nextcloud:
networks:
next-network:
여기서 docker-compose 파일에서 설정할 수 있는 부분은 아래와 같다.
파일에서 ports는 {외부 포트} : {내부 포트} 이므로 자기의 설정에 맞게 외부 포트를 바꾸어 사용하면 된다.
app에서 volumes 중 주석으로 "외장 하드 연결"로 표시한 부분이 있는데 외장 메모리에 연결시킬 경우 외장 메모리에 폴더로 연결시켜놓으면 된다.
.env
MYSQL_ROOT_PASSWORD=000 #{ROOT_PASSWORD}
MYSQL_USER=test #{DB USER}
MYSQL_PASSWORD=000 #{DB USER PASSWORD}
위의 과정을 거쳐 docker-compose.yml 파일과 .env 파일이 있는 폴더로 이동하여 아래 명령어를 입력하여 docker compose를 실행한다.
그리고 잘 실행되었는지 확인한다.
sudo docker compose up -d # docker compose
sudo docker ps # docker container check
만약 여기서 컨테이너가 정상적으로 만들어지지 않으면 아무런 컨테이너가 뜨지 않을 때가 있다.
그때는 아래 명령어를 실행하여 컨테이너를 삭제하고 파일을 다시 확인한 후 docker compose를 진행하자.
sudo docker ps -a # 정지된 컨테이너도 조회
# 정지된 컨테이너 삭제
sudo docker rm nextcloud
sudo docker rm next_db
컨테이너가 정상적으로 실행이 되었다면 서버의 포트 8090이 접속이 되는지 확인해 보자.
정상적이라면 아래와 같은 홈페이지가 뜰 것이다.
만약 뜨지 않았다면 ufw 방화벽에서 8090 포트에 한해 해제해 보도록 하자. (자세한 건 검색)
그 후 account와 password를 설정한 후 Install을 진행하면 아래와 같은 창이 반겨줄 것이다.
맞닥뜨린 문제
NextCloud 외장 메모리 연결 문제
위와 같이 다른 유저가 건드릴 수 없도록 permission을 제한하라는 경고 문구가 떴다.
외장 메모리에 Permission 부여 및 Windows에서도 외장 메모리로 활용하기 위해 ntfs 형식으로 초기화하였으며 Permissions까지 지정하였다.
이에 대한 외장 메모리 연결 구성은 아래와 같다. ( /etc/fstab 파일 )
이와 같이 진행하고 docker compose를 다시 진행했다.
만약 permission 문제를 해결한 경우에도 문제가 생겼다면 아래와 같이 소유자가 root로 지정되어 접근이 불가한 것일 수 있다.
이를 해결하기 위해 아래 명령어를 이용하여 소유자를 www-data로 변경해 준다.
sudo chown -R www-data:www-data nextcloud-data # {외장 메모리 연결 폴더}
그 후 잘 작동하는지 확인하자.
다음은 도메인 생성 및 Cloudflare 연동 부분을 수행할 차례이다.
https://was564.tistory.com/11
참고 사이트
https://lucas-owner.tistory.com/73
https://help.nextcloud.com/t/change-ownership-of-nextcloud-files-root-to-www-data/150657
'개인 공부' 카테고리의 다른 글
Ubuntu Server Netplan 설정 (유선 eth0, 무선 wlan0) (0) | 2025.02.02 |
---|---|
NextCloud와 Caddy를 이용한 개인 드라이브 구축 4 (with Docker) (0) | 2025.01.23 |
NextCloud와 Caddy를 이용한 개인 드라이브 구축 3 (with Docker) (0) | 2025.01.23 |
NextCloud와 Caddy를 이용한 개인 드라이브 구축 2 (with Docker) (0) | 2025.01.23 |
운영체제 공부 혼자 요약 (Operating-Sysyem) (0) | 2024.06.26 |