간단하게 쓸 홈서버 세팅 - 1

sunken_ahn·2022년 5월 11일
0

홈서버

목록 보기
1/1

목차

서론

노트북으로 프로그래밍 하던 작업물을 다른 컴퓨터로 옮기는데 이메일 또는 sd 카드로 일일히 옮기는게 귀찮아져서 이참에 창고에 보관하던 미니 피씨로 홈서버로 클라우드 스토리지 서버를 돌릴 생각을 하게 되었고, 나중에 다시 세팅할때 까먹지 않고 글로 작성하기로 했다.

실행환경

  • 운영체제 : debian 11

podman 설치

데비안 설치직후 실행하면 sudo가 설치가 안되어있으니, 바로 root계정으로 변경하여 사용한다

#이 명령어로 root계정으로 변경
su

데비안 공식 저장소에 podman이 있으니 apt로 설치가 된다

apt install podman

그후 서비스에 등록을 한다.

systemctl enable podman
  • etc
    만약 podman를 콘솔창에 쳤는데 해당 프로그램이 없다고 실행이 안되면, echo $PATH 명령어로 PATH 변수 안에 usr/bin이 경로에 포함되었는지 확인후,만약 없으면 etc/profile 수정 혹은 export를 사용해 경로를 추가하면 된다

이미지 pull 그리고 컨테이너 실행

사용할 서버는 nextcloud 이다.
그렇기에 해당 이미지를 pull하면 되나, 데비안에서 podman는 도커허브에 있는 대부분의 이미지는 pull이 되지 않는다. 해당 문제를 해결하기 위해선 podman의 저장소 설정파일을 수정하면 된다.

에러창
error message

#vim /etc/containers/registries.conf.d/shortnames.conf
#`"nextcloud"="docker.io/library/nextcloud"` 내용 추가 후 저장

#그후 pull명령어를 실행하면 된다.
#podman pull nextcloud

자세한건 podman issue에 있으니 참고하면 된다.

btrfs 파티션

nextcloud의 데이터를 저장할 곳을 btrfs 파티션으로 포맷할려면 우선 btrfs-progs를 설치해야한다.

apt install btrfs-progs

그다음 사용할 파티션을 btrfs로 포맷한다.

mkfs.btrfs -d raid1 -m raid1 /dev/sdb[number] /dev/sda[number]

그리고 nextcloud 데이터를 저장할 파티션 하나를 선택후 마운트 한다.

mkdir '사용할 디렉토리 이름'
mount '사용할 파티션 경로' '생성한 디렉토리 이름'

또는 재시작시 자동으로 마운트를 원한다면 etc/fstab 파일을 수정하면 된다.

#vim /etc/fstab
...
...
...
`파티션 경로` `디렉토리 경로` btrfs defaults 0 0
#이후 저장후,만약 아직 마운트를 안했으면 'systemctl daemon-reload'을 실행해주자

자세한건 우분투 위키를 참고하자

컨테이너 설정

podman 으로 컨테이너를 생성해준다

podman run -d -v 'btrfs파티션 마운트 경로':'컨테이너에서 사용할 디렉토리 경로' -p 8080:80 --name `컨테이너 이름` nextcloud

만약 sqlite를 사용할거면 해당 목차를 스킵하면 된다.

  • 컨테이너 안에 mysql 설치 및 설정

mysql 돌리는 방법은 여러가지가 있지만, mysql를 해당 컨테이너만 사용할 생각이기에 그냥 컨테이너안에 설치하는 방향으로 갈것이다.

podman exec -it '컨테이너 이름' bash
#컨테이너 접속후
apt update
apt install net-tools
apt install default-mysql-server

해당 컨테이너 에서는 systemd를 이용한 mysql 실행이 안되니, 다음 명령어를 실행하면 된다

mysql start &
#mysql server 실행 확인
#3306 포트가 열러있으면 성공이다.
netstat -ntlp

etc
만약 /run/mysqld 관련 에러가 뜨면, mkdir /run/mysqld로 디렉토리 생성 후, 해당 디렉토리를 777 퍼미션 혹은 원하는 권한 및 소유자로 변경하면 해결된다.

폴더 권한

현재 컨테이너는 호스트에 있는 파티션 디렉토리를 바인드 마운트 해서 데이터 디렉토리로 쓸 예정이기에, 별도로 권한도 설정해야한다.
nextcloud 컨테이너는 아파치 + php로 서버가 돌아가는데, 아파치는 데비안에서 www-data계정으로 돌아가게 되었있다. 그렇기에 서버는 www-data계정으로 쓰기,읽기를 시도하는데, 호스트에선 파티션 디렉토리가 root 소유로 되어있다. 그러히게 권한이 안되서 접근이 안된다.

여러 방법이 있겠지만 지금 사용할 방법은 호스트에서 www-data 계정이 있고, 컨테이너의 www-data의 uid가 동일한다는 가정하에, 호스트의 btr파티션 마운트 디렉토리를 www-data 소유를 변경하는걸로 한다.

chown `btrfs 마운트 디렉토리` www-data
#파티션은 770으로 설정
chmod 770 -R `btrfs 마운트 디렉토리`

방화벽 설정

방화벽은 iptables이 아닌 ufw로 설정할것이며,그렇기에 호스트에서 ufw를 설치한 후에 설정하면 된다.

apt install ufw
# 방화벽 설정
ufw allow 22 #ssh 접속이 필요할시
#예시 : ufw aloow from 192.168.100.0/24 to any port 8080
ufw allow from 'ip'/'subnet mask' to any port 'port number'
#설정 적용, systemctl 시작 프로세스 등록
ufw enable
systemctl enable ufw

etc
만약 이상태에서 접근이 안되면, 로그창에 이런 메세지가 있는지 확인하자
error

보통 ufw는 포워딩은 기본적으로 차단한다. 그렇기에 저런 메세지가 뜨면 etc 설정을 수정하고 다시 적용하면 된다.

#vim /etc/default/ufw
...
...
...
#DROP으로 설정되있는걸 ACCEPT로 변경하자
DEFAULT_FORWARD_POLICY="ACCEPT"
...
#:wq
#그후 ufw를 리로드 하면된다.
ufw reload

자세한건 여기를 참고하면 좋을것이다.

사이트 설정

이제 ip주소로 서버에 접속하면 화면이 나오고 설정창이 보일거다. 여기서 mysql로 설정을 진행하다가 에러가 날수 있는데, 이때 만약 localhost로 했으면, 그걸 127.0.0.1로 변경하고 설정 하면, 설정 완료후 메인창이 나올것이다.

profile
초보 개발자

0개의 댓글