Post

[ETC]Home server 구축기

드디어 해보고 싶었던 홈서버를 만들게 되었습니다.

기존의 노트북으로 WSL2를 실행하여 Linux 환경에서 블로그나 코드들을 관리해왔으나 노트북에서만 접속이 가능하고, 파일 관리가 용이치 않아 홈서버를 생각하고 있었습니다.

그러던 얼마전 Mac mini 14 late를 운좋게 얻게 되어 작성하게 되었습니다.

Ⅰ. Ubuntu

현재까지 사용하던 Linux 기반 os도 Ubuntu였고 대부분의 linux 사용자들이 ubuntu를 사용하기에 저도 대세에 따르게 되었습니다.

2 Figure 1 : https://truelist.co/blog/linux-statistics

USB 부트 로더 만든 후 Mac 미니에 Ubuntu를 설치하고 이전 Linux 관련 포스트처럼 세팅을 했습니다.

홈서버를 구축하는 과정에서 권한 설정이 꼬이거나 재설치하는 과정이 필요했었는데 Mac OS에서 부팅 USB가 인식이 안되는 경우가 발생했는데, 해당 경우 GRUB에서 설정하는 방법을 찾아 재설치를 진행했습니다.

Ⅱ. Domain

집의 ip주소를 외워서 사용할까 하였으나, 가비아라는 곳에서 domain을 싸게 판매하는 것을 보아서 한번 구매해보고자 맘을 먹어 구매해보았습니다. 1년뒤에 다시 도메인을 재구매해야하긴 하지만 재미삼아 만들어 본 것이기 떄문에 나중에 다른 도메인을 구매하거나 도메인 없이 사용하도록 하겠습니다.

2 Figure 2 :

위와 같이 설정을 마쳐야 활용이 가능합니다.

Ⅲ. Nextcloud

그리고 추가적으로 NAS도 만들기 위해 Opensource인 Nextcloud와 Xpenology를 고려해 Docker를 활용하여 구축했습니다.

결국은 Nextcloud를 선택했는데 둘 다 사용해보니 Nextcloud가 Markdown 기반의 Memo나 .docx, .pptx 등 수정이 가능하다는 이점들이 있어서 저에게 더 맞다고 생각해 선택하게 되었습니다.

3 Figure 3 : Nextcloud 화면

해당 파일들을 /data/nextcloud 폴더에 넣어 아래와 같은 compose 파일을 통해 실행하였고, Caddyfile을 통해

이 중 portainer와 speedtest도 더 설치했습니다.

ⅰ. docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
services:
nextcloud:
    image: nextcloud/all-in-one:latest
    restart: always
    init: true
    container_name: nextcloud-aio-mastercontainer
    volumes:
    - nextcloud_aio_mastercontainer:/mnt/docker-aio-config 
    - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
    - port:port
    environment:
    - APACHE_BODY_LIMIT=0
    - SKIP_DOMAIN_VALIDATION=true
    - APACHE_PORT=reverse_proxy_port 
    - APACHE_IP_BINDING=0.0.0.0
    - NEXTCLOUD_MOUNT=/mnt/hdd1
    - NEXTCLOUD_UPLOAD_LIMIT=20G
    - NEXTCLOUD_MAX_TIME=3600
    - NEXTCLOUD_MEMORY_LIMIT=2024M

caddy:
    image: caddy:alpine
    init: true
    restart: always
    container_name: caddy
    volumes:
    - ./Caddyfile:/etc/caddy/Caddyfile
    - ./certs:/certs
    - ./config:/config
    - ./data:/data
    - ./sites:/srv
    network_mode: "host"

portainer-ce:
    image: portainer/portainer-ce:latest
    container_name: portainer_agent
    privileged: true  
    restart: always
    ports:
    - port:port
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./portainer_data:/data

speedtest:
    container_name: speedtest

    image: henrywhitaker3/speedtest-tracker

    ports:
    - port:port

    volumes:
    - /data/speedtest-tracker:/config

    logging:
    driver: "json-file"
    options:
        max-file: "10"
        max-size: "200k"

    restart: unless-stopped

volumes:
nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer


ⅱ. Caddy file

1
2
3
4
5
https://own-domain:port {

    reverse_proxy localhost:reverse_proxy_port
    
}

Xpenology는 아래 .yaml 파일을 통해 사용가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3"
services:
  dsm:
    container_name: dsm
    image: vdsm/virtual-dsm
    environment:
      DISK_SIZE: "16G"
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 5000:5000
    volumes:
      - /var/dsm:/storage
    restart: on-failure
    stop_grace_period: 2m

Update. Error fix(24.04.07)

당일 아침 VSC와 nextcloud에 접속을 했더니 502 Error와 ssh 연결이 불안정하게 끊김을 확인했고, 각 컨테이너에서 디버깅하면서 오류를 해결했다. 결론적으로는 backup 파일이 SSD에 생성되면서 disk 용량을 꽉채우는 문제였고 해당 백업파일들을 삭제했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 각 컨테이너 디버깅.
docker logs container

# 아래 위치에 backup 데이터 위치했었음.
# var/lib/docker/volumns/nextcloud-aio-nextcloud_data/_data/appdata

# 컨테이너 다 삭제하고 새로 시작할때
# systemctl status apache2, nginx 등이 돌아가는 상태였었음.
netstat -nltp
# caddy를 재실행 할때, port가 already use여서.
docker network prune
docker system prune

# 'maintenance' => false로 재설정
# /var/lib/docker/volumns/nextcloud_aio_nextcloud/_data/_config/config.php

# nextcloud-aio-databse 컨테이너에서 postgreSQL에서 pwd 에러가 떠 수정함.
# VSC에 postgresql 깔아서 비번 변경함.

Ⅳ. REFERENCES

  1. 시놀/헤놀에 Nextcloud AIO(All In One)을 이용한 Nextcloud 구축하기.
  2. Ubuntu booting USB로 우분투 설치하기
  3. How to boot system from USB using GRUB
  4. Virtual DSM in docker



This post is licensed under CC BY 4.0 by the author.