시놀로지 NAS는 개발자에게 축복과도 같은 장비입니다. 일반 사용자처럼 사진의 관리나 파일의 관리를 개인용 클라우드처럼 사용할 수 도 있지만 DSM을 활용한다면 다양한 용도로 사용할 수 있기 때문입니다. 더욱이 Docker을 활용한다면 웬만한 Toy프로젝트나 개발용 프로젝트 정도는 쉽게 구현할 수 있습니다.
이번에 STRAPI라는 오픈소스 프로그램에 흥미가 생겨서 시놀로지의 Docker을 활용하여 설치 해보려고 합니다. STRAPI는 아주 쉽게 Restfull 또는 GraphQL API를 생성해주는 MIT라이선스의 오픈소스 프로그램입니다. 자세한 설명은 아래의 경로를 참고해 주세요.
strapi는 backend를 담당하기 때문에 데이터베이스가 꼭 있어야 합니다. 만약 별도의 데이터베이스를 설치하지 않는다면 strapi가 자동으로 SQLite를 설치하게 됩니다. SQLite는 서버가 아니라 응용 프로그램에서 실행되는 비교적 가벼운 데이터베이스로 중소규모의 형태로 운영하기에 좋으나 대규모로 운영한다면 몽고DB, Mysql, MariaDB, postgres 등을 별도로 설치해서 사용해야 합니다.
여기서는 시놀로지의 Docker를 활용하여 설치할 것이며 설치할 Docker는 postgres, adminer, Strapi입니다. postgres는 데이터베이스이고, adminer는 phpmyadmin처럼 데이터베이스를 웹페이지 형태로 관리할 수 있는 툴입니다. 그리고 마지막으로 Strapi를 설치할 예정입니다.
postgres Docker 설치하기
먼저 데이터베이스를 설치합니다.
이미지 다운로드하기
먼저 postgres Docker 이미지를 다운로드하여야 합니다. 아래의 화면에서 찾아서 다운로드하면 됩니다.
- 좌측 메뉴 중 레지스트리를 선택합니다.
- 검색창에서 postgres 를 검색합니다.
- 검색 결과 중 postgres를 선택합니다. 이름 옆에 있는 체크 아이콘은 공식이미지라는 뜻입니다. 공식이미지는 postgres에서 공식적으로 제작한 이미지라는 뜻이니 신뢰성이 있다고 보시면 됩니다.
- 이미지를 다운로드합니다.
이미지로 컨테이너 설치하기
이미지를 다운로드 받았다면 이 이미지로 컨테이너를 띄워야 합니다. 필요하다면 하나의 이미지로 여러 개의 컨테이너를 띄울 수도 있습니다.
- 다운로드한 이미지는 좌측의 이미지 메뉴에서 확인할 수 있습니다.
- 지금 다운로드 받은 postgres:latest 이미지가 보입니다.
- 실행을 시켜서 컨테이너를 띄우는 설정을 합니다.
컨테이너 설정하기
- 컨테이너의 이름을 설정합니다. 컨테이너의 이름은 중복되지만 않으면 마음대로 지어도 상관없습니다.
- 고급설정을 선택합니다.
볼륨 탭으로 이동합니다. 볼륨 탭은 호스트컴퓨터(NAS)의 폴더와 컨테이너의 폴더를 거의 실기간으로 동기화 시키는 작업입니다. 직접 컨테이너에 접속해서 파일을 추가, 삭제, 편집하기가 어려우므로 볼륨탭으로 동기화된 호스트컴퓨터(NAS)의 폴더에 있는 파일로 추가, 삭제, 변경을 하면 자동으로 컨테이너와 동기화가 이루어 져서 목적한 바를 달성할 수 있습니다.
- 먼저 파일 추가 버튼을 클릭합니다.
- 호스트컴퓨터(NAS)의 적당한 위치에 설정값이 적용될 파일이 저장될 위치를 지정합니다.
- 저는
/DOCKER/strapi/postgresDB/config/postgres.conf
에 저장하려고 합니다.postgres.conf
는 빈 파일로 하나 만들면 됩니다.
- 저는
- 2번에 해당하는 파일과 동기화될 도커 내의 파일을 지정합니다.
/etc/postgresql/postgresql.conf
- 이번에는 폴더 추가 버튼을 클릭합니다.
- 데이터가 저장될 임의의 위치를 지정합니다.
/DOCKER/strapi/postgresDB/pgdata
- 5번에 해당하는 폴더와 동기화될 도커 내의 지정된 위치를 지정합니다.
/var/lib/postgresql/data
/DOCKER/strapi/postgresDB/config/postgres.conf
:/etc/postgresql/postgresql.conf
/DOCKER/strapi/postgresDB/pgdata
:/var/lib/postgresql/data
이번에 포트를 설정합니다. 컨테이너 포트와 매핑이 되는 로컬 포트를 지정하면 됩니다. 그렇게 되면 작성한 로컬 포트로 접속을 하게 되면 자동으로 컨테이너의 서비스로 접속이 되어 집니다.
- 로컬 포트는 임의로 지정하면 되나 공교롭게도 시놀로지 NAS의 시스템에서
5432
포트를 사용하고 있기 때문에 다른 포트로 변경을 해야 합니다. 저는15432
로 지정을 해 봤습니다.
이제 마지막으로 환경설정을 해 줍니다.
- 추가를 2개 해 줍니다.
- 2개의 변수에 대해서 값을 입력합니다. 변수명은 변경할 수 없으나 값은 원하는 값을 입력해도 됩니다.
POSTGRES_USER
:strapi
POSTGRES_PASSWORD
:strapi
적용을 하고 저장을 하면 됩니다 이제 좌측 컨테이너 메뉴에 해당 컨테이너가 띄워진 것을 볼 수 있습니다.
- 좌측 메뉴 중 컨테이너를 선택합니다.
- 지금 설정한 strapi_postgres가 실행중으로 나온다면 성공적으로 띄워진 것입니다.
adminer Docker 설치하기
adminer는 phpmyadmin처럼 웹으로 데이터베이스를 관리할 수 있는 툴입니다. phpmyadmin가 Mysql과 MariaDB만 관리할 수 있는데 반해 adminer는 MySQL, SQLite, PostgreSQL, MS SQL, Oracle 등을 다룰 수 있습니다.
위에 설명되어 있는 것처럼 adminer Docker 이미지를 다운로드 받고 컨테이너를 설정합니다.
컨테이너 설정하기
- 컨테이너 이름을 지정합니다. (예: strapi_adminer)
- 고급 설정을 클릭합니다.
다른 설정은 넘어가고 포트 설정으로 이동합니다.
- 로컬 포트에 원하는 포트를 임의로 작성하면 됩니다. 저는 동일한
8080
포트를 작성했습니다.
링크 탭을 선택합니다. 링크는 해당 컨테이너가 실행될 때 자동으로 실행될 컨테이너를 지정합니다. adminer는 꼭 데이터베이스가 있어야 하므로 strapi_postgres를 실행되게 지정했습니다.
적용을 누르고 저장을 합니다. adminer는 간단히 포트와 링크만 설정하면 됩니다.
adminer로 postgres 접속하기
설치가 되고 strapi_adminer와 strapi_postgres 컨테이너가 정상적으로 돌고 있다면 이제 adminer로 postgres를 접속해 봅니다.
- 시놀로지 NAS의 아이피 주소로 접속합니다. 이때 adminer에서 지정한 로컬 포트 번호를 뒤에 붙입니다. (예 :
http://192.168.0.100:8080
) - adminer 로그인 화면에서 PostgresSQL을 선택합니다.
- 서버에는 원래 링크에 지정한 별칭명을 적으면 되나 저는 접속이 되지 않아서 직접 DB의 아이피 주소와 포트번호를 입력했습니다. (예 :
192.168.0.100:15432
) - strapi_postgres의 환경변수에 입력했던 아이디와 패스워드에 작성된 값을 입력합니다. (예 : strapi)
- 로그인 버튼을 클릭합니다.
이렇게 나오면 접속이 된 상태입니다. ^^
strapi Docker 설치하기
DB를 설치했다면 이제 드디어 Strapi를 설치합니다.
위에 설명되어 있는 것처럼strapi 도커 이미지를 다운로드하고 컨테이너를 설정합니다.
컨테이너 설정하기
- 컨테이너 이름은 strapi_strapi라고 지었습니다. (마음대로 지으세요)
- 고급 설정 메뉴를 클릭합니다.
- strapi의 내용이 저장될 폴더를 지정합니다.
- 시놀로지 NAS에 있는 임의 폴더와 컨테이너의 지정된 위치를 작성합니다.
/DOCKER/strapi/app
:/srv/app
- 로컬 포트는 임의의 포트를 지정합니다. 여기서는 그냥 동일한 포트를 지정했습니다.
링크를 지정합니다. Strapi도 DB가 필요하므로 strapi가 실행될 때 strapi_postgres가 실행되도록 지정해 줍니다.
환경변수 6개를 추가해 줍니다.
DATABASE_CLIENT
:postgres
// 사용할 db종류를 작성합니다.DATABASE_NAME
:strapi
// strapi_postgres에서 설정한 DB이름을 작성합니다.DATABASE_HOST
:192.168.0.100
// 시놀로지 NAS의 아이피 주소를 작성합니다.DATABASE_PORT
:15432
// strapi_postgres에서 설정한 Port번호를 작성합니다.DATABASE_USERNAME
:strapi
// strapi_postgres에서 설정한 User를 작성합니다.DATABASE_PASSWORD
:strapi
// strapi_postgres에서 설정한 비밀번호를 작성합니다.
방화벽 열어주기
설치가 완료되었다면 시놀로지 NAS에서 방화벽을 열어줘야 합니다.
방화벽은 제어판의 보안 탭에서 지정합니다.
- 제어판 아이콘 선택합니다.
- 보안 탭을 선택합니다.
- 방화벽 탭을 선택합니다.
- 규칙 편집 버튼을 클릭합니다.
- 3개의 포트를 열어줘야 합니다.
15432
는 postgres의 포트8080
는 adminer의 포트1337
는 strapi의 포트
접속해 보기
이제 strapi를 설치했으니 확인해 봅니다.
접속 주소 : 192.168.0.100:1337
- 시놀로지 NAS의 아이피와 포트번호를 웹브라우저로 열어봅니다.
- 관리자 화면 열기 버튼을 클릭합니다.
처음 접속 시는 관리자를 등록하는 페이지가 나오며 이 과정을 거치면 위의 화면처럼 나옵니다. 저는 이미 관리자 회원이 가입되어 있는 상태라 위의 화면이 나오는 것 입니다.
시놀로지 도커 상태에서 node_modules 의존성 설치하기
시놀로지 도커 상태에서 플러그인을 설치하면 node_modules폴더에 의존성 파일이 설치가 됩니다. 이때 시놀로지 도커 일 경우 설치가 되지 않아 고생을 하는 경우가 있는데 이때는 방화벽을 풀어주고 설치하면 설치가 잘 진행됩니다. 저는 어떤 포트를 사용하고 있는지 까지는 찾지 못해서 방화벽 전체를 해제하고 설치하고 있습니다.
예를 들면 strapi의 플러그인인 GRAPHQL를 설치하는데 애를 먹고 찾아낸 방법입니다.
포트 포워딩해주기
내부에서는 아이피 번호로 접속이 가능하지만 외부에서 해당 서비스를 접속하기 위해서는 공유기에서 포트 포워딩을 해줘야 합니다. 저는 공유기로 아이피타임을 사용합니다.
- NAT/라우터 관리에서 포트 포워딩 설정을 선택합니다.
- adminer와 strapi를 외부에서 열어 볼 수 있으므로 해당 포트를 열어 줍니다.
- adminer : 8080
- strapi 관리자화면 : 1337
이제 외부에서 해당 포트로 접속을 하면 서비스를 열어볼 수 있습니다.