Docker에서 PostgreSQL 및 OwnCloud

지난번: VM의 gitlab을 컨테이너에 (이어서 버전 업 12.0.3 → 13.2.4) (이어서 docker-compose)
이것은 이제 Docker를 사용할 수있게되고 싶은 필자의 시행 착오의 궤적입니다.

DB와 ownCloud를 VM에서 Docker 컨테이너로 마이그레이션



마지막으로 VM의 gitlab을 Docker 컨테이너로 마이그레이션했습니다.


이번에는 VM 서버 군의 애플리케이션 중 postgreSQL과 ownCloud를 Docker 컨테이너로 마이그레이션하고 Resource를 닫습니다.


컨테이너 구성



docker-compose.yml은 다음과 같이 만들었습니다.

docker-compose.yml 발췌
    db:
        image: postgres:9.6.19
        environment:
            POSTGRES_USER: psql
            POSTGRES_PASSWORD: xxxx
        volumes:
            - /home/fclef/docker/server/db/data:/var/lib/postgresql/data
            - /home/fclef/docker/server/db/init:/docker-entrypoint-initdb.d
            - /home/fclef/docker/server/db/backup:/tmp/backup
        ports:
            - 5432:5432

    owncloud:
        image: owncloud:latest
        restart: always
        volumes:
            - /home/fclef/docker/server/owncloud:/var/www/html
        ports:
            - 51080:80

PostgreSQL 이미지를 latest로 지정하면 owncloud 초기화에서 오류가 발생했습니다.
PostgreSQL을 9.6 이전 버전이어야 하는 것 같습니다.
참고: Install fails on pg 10.5

PostgreSQL 백업 및 복원



참고: PostgreSQL backup, restore 방법 요약

백업



백업할 데이터베이스 이름을 지정하여 실행합니다.
$ pg_dump <database> > <buckup file>

복원



복원도 명령은 간단합니다.
psql <database> < <buckup file>

그러나 복원 전에 데이터베이스를 작성해야 합니다.
그래서 백업 파일에 해당하는 데이터베이스를 만들고 복원하는 쉘 스크립트를 만들었습니다.

1_init.sh
files=`ls -1 /tmp/backup/*`
for file in ${files[*]}; do
    database=`echo ${file} | sed -r 's@.*/(.*).backup.sql@\1@g'`
    echo "init ${database}."
    psql -c "create database ${database};"
    psql ${database} < ${file}
done

이 스크립트를 /docker-entrypoint-initdb.d에 마운트합니다.
이 디렉토리 아래의 .sql.sh 파일은 컨테이너 시작시 실행됩니다.
파일명의 선두에 숫자를 붙여 두면, 숫자순으로 실행해 줍니다.

ownCloud 설정



nginx 컨테이너에서 owncloud 컨테이너로 리버스 프록시를 설정하고 액세스하면,
초기 설정 화면이 열립니다.
※스쿠쇼 잊었으므로 픽업입니다.


로그인 ID, 비밀번호 설정 창 아래에 있는 "스토리지와 데이터베이스"라는 라벨을 클릭하면 데이터베이스의 상세 설정을 할 수 있으므로,
PostgreSQL을 선택하고 다양한 항목을 입력합니다.
최하부의 DB의 호스트 정보에 대해서는, PostgreSQL 컨테이너의 서비스명과 포트 번호를 입력하면 OK입니다.
위의 yml 파일의 경우 "db:5432"를 입력합니다.

ownCloud 업로드 한도 설정



기본적으로 파일당 수백 MB까지만 업로드할 수 있습니다.
ownCloud 컨테이너측은 벌써 큰 파일을 받아들이는 설정이 되어 있으므로, 리버스 프록시측에서 제한을 풀어 줄 뿐입니다.

nginx 컨테이너의 owncloud 역방향 프록시 설정
client_max_body_size 10G; # これを追記

ownCloud 백업 및 복원



ownCloud의 백업 및 복원 방법을 살펴보면 확실하지 않았습니다.
조금만 업로드하는 파일이 없었으므로 데이터 디렉토리의 파일을 직접 복사하여 업로드했습니다.
정공법을 아는 분이 계시면 가르쳐 주시면 다행입니다.

크게 막히지 않고, 조사하면서도 몇 시간에 끝낼 수 있었습니다.
VM 설정에 비해 극적인 속도입니다. .
Docker 굉장히 오늘도 생각했던 것이었습니다.

다음 번: Docker의 Ghost

좋은 웹페이지 즐겨찾기