npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@chuseok22/infra-automation

v0.1.2

Published

PostgreSQL/MongoDB/Redis Docker 컨테이너 자동 세팅을 포함한 인프라 자동화 CLI

Readme

Infra Automation

infra-automation은 외부 서버 또는 로컬 개발 환경에서 Docker 기반 데이터베이스 컨테이너를 빠르게 구성하기 위한 자동화 스크립트 저장소입니다.

현재 제공하는 자동화는 다음 DB를 대상으로 합니다.

  • PostgreSQL
  • MongoDB
  • Redis

이 스크립트는 실행 시 사용자에게 필요한 값을 입력받고, 사용자 홈 경로 아래에 ContainerData 디렉터리와 DB별 docker-compose.yml 파일을 자동 생성합니다. 설정 완료 후 선택에 따라 컨테이너 실행까지 진행합니다.


1. 주요 기능

  • 사용자 홈 경로에 ContainerData 자동 생성
  • PostgreSQL, MongoDB, Redis 설치 대상 선택 가능
  • 기본값은 전체 설치
  • DB별 username, password, database, port, image name, container name 입력 가능
  • Docker Compose v2 docker compose / v1 docker-compose 자동 감지
  • 기존 compose 파일 존재 시 덮어쓰기 여부 확인
  • 덮어쓰기 전 백업 여부 확인
  • 기존 container name 충돌 검사
  • host port 충돌 검사
  • PostgreSQL custom image 자동 빌드
  • PostgreSQL pgvector, PostGIS 사용 가능 이미지 생성
  • PostgreSQL extension 생성 여부 선택
  • MongoDB root 계정 생성
  • Redis password 설정
  • Redis localhost-only 바인딩 기본값 제공
  • Redis AOF 영속성 설정 선택 가능

2. 생성되는 폴더 구조

스크립트 실행 후 기본적으로 사용자 홈 경로에 아래 구조가 생성됩니다.

~/ContainerData
├── docker-compose
│   ├── postgres
│   │   ├── docker-compose.yml
│   │   └── Dockerfile
│   ├── mongodb
│   │   └── docker-compose.yml
│   └── redis
│       └── docker-compose.yml
└── volumes
    ├── postgres
    ├── mongodb
    │   ├── db
    │   └── configdb
    └── redis

각 역할은 다음과 같습니다.

| 경로 | 역할 | |---|---| | ~/ContainerData/docker-compose/postgres | PostgreSQL 실행 설정 및 custom image Dockerfile | | ~/ContainerData/docker-compose/mongodb | MongoDB 실행 설정 | | ~/ContainerData/docker-compose/redis | Redis 실행 설정 | | ~/ContainerData/volumes/postgres | PostgreSQL 실제 데이터 저장소 | | ~/ContainerData/volumes/mongodb/db | MongoDB 실제 데이터 저장소 | | ~/ContainerData/volumes/mongodb/configdb | MongoDB 내부 config 데이터 저장소 | | ~/ContainerData/volumes/redis | Redis AOF/RDB 데이터 저장소 |


3. 사전 요구사항

실행 대상 서버 또는 로컬 환경에 다음이 설치되어 있어야 합니다.

  • Docker
  • Docker Compose
  • Node.js 18.18 이상 (npx 실행에 필요)

스크립트는 아래 명령어 중 사용 가능한 것을 자동으로 감지합니다.

docker compose

또는

docker-compose

Docker daemon이 실행 중이어야 합니다.


4. 실행 방법

Node.js와 Docker/Docker Compose가 설치되어 있다면 OS에 관계없이 동일한 명령으로 실행합니다.

npx @chuseok22/infra-automation docker-db

특정 버전을 고정해서 실행하려면 다음과 같이 버전을 명시합니다.

npx @chuseok22/[email protected] docker-db

macOS, Linux, Windows(PowerShell/cmd), WSL2, Git Bash 모두 동일한 명령으로 동작합니다.


5. 설치 대상 선택

스크립트 실행 시 설치할 DB를 선택할 수 있습니다.

기본값은 all입니다.

설치할 DB [all]:

사용 가능한 값:

all
postgres
mongodb
redis
postgres,mongodb
postgres,redis
mongodb,redis

예시:

설치할 DB [all]: redis

위처럼 입력하면 Redis 관련 폴더와 compose 파일만 생성됩니다.


6. PostgreSQL 설정

PostgreSQL 선택 시 다음 값을 입력받습니다.

| 항목 | 기본값 | 설명 | |---|---:|---| | username | root | PostgreSQL 기본 사용자 | | password | postgres_password | PostgreSQL 비밀번호 | | database | postgres | 최초 생성할 기본 DB | | host port | 5432 | host에서 접근할 포트 | | image name | postgres-chuseok22:17-pgvector-postgis | custom PostgreSQL image 이름 | | container name | postgres | 컨테이너 이름 |

생성되는 PostgreSQL 이미지는 다음 기준으로 구성됩니다.

  • postgres:17-bookworm 기반
  • PostgreSQL 17 사용
  • Debian bookworm 계열 고정
  • pgvector v0.8.2 소스 빌드 설치
  • PostGIS PostgreSQL 17용 패키지 설치
  • shp2pgsql, raster2pgsql 등 PostGIS CLI 유틸리티 포함
  • PGDATA=/var/lib/postgresql/data/pgdata 적용

PostgreSQL 데이터는 아래 경로에 저장됩니다.

~/ContainerData/volumes/postgres/pgdata

PostgreSQL extension 생성

컨테이너 실행 후 기본 DB에 extension을 생성할지 선택할 수 있습니다.

기본 DB에 PostgreSQL extension을 생성할까요? [y/N]:

기본값은 N입니다.

생성할 extension 목록도 입력할 수 있습니다.

생성할 extension 목록(comma 구분) [vector,postgis]:

예시:

vector,postgis,pgcrypto,uuid-ossp,pg_trgm

extension 이름은 안전을 위해 다음 형식만 허용됩니다.

영문, 숫자, underscore, hyphen

7. MongoDB 설정

MongoDB 선택 시 다음 값을 입력받습니다.

| 항목 | 기본값 | 설명 | |---|---:|---| | root username | root | MongoDB root 사용자 | | root password | mongodb_password | MongoDB root 비밀번호 | | host port | 27017 | host에서 접근할 포트 | | image name | mongo:8.0 | MongoDB image | | container name | mongodb | 컨테이너 이름 |

MongoDB root 계정은 admin database에 생성됩니다.

접속 URI 예시:

mongodb://root:mongodb_password@localhost:27017/admin?authSource=admin

Spring Boot에서 특정 app database에 root 계정으로 접근하려면 다음 형식을 사용할 수 있습니다.

spring:
  data:
    mongodb:
      uri: mongodb://root:mongodb_password@localhost:27017/app_db?authSource=admin

MongoDB 데이터는 아래 경로에 저장됩니다.

~/ContainerData/volumes/mongodb/db
~/ContainerData/volumes/mongodb/configdb

8. Redis 설정

Redis 선택 시 다음 값을 입력받습니다.

| 항목 | 기본값 | 설명 | |---|---:|---| | password | redis_password | Redis 비밀번호 | | host port | 6379 | host에서 접근할 포트 | | image name | redis:8.0-alpine | Redis image | | container name | redis | 컨테이너 이름 | | external access | no | 외부 접근 허용 여부 | | AOF persistence | yes | AOF 영속성 활성화 여부 |

Redis는 공식 이미지 기준으로 REDIS_PASSWORD 환경변수만으로 비밀번호가 자동 적용되지 않습니다.
따라서 스크립트는 redis-server --requirepass 명령을 사용해 password를 설정합니다.

기본 포트 바인딩은 localhost-only입니다.

127.0.0.1:6379:6379

외부 접근을 허용하면 다음과 같이 설정됩니다.

6379:6379

Redis 데이터는 아래 경로에 저장됩니다.

~/ContainerData/volumes/redis

9. 기존 파일 처리 방식

이미 대상 compose 파일이 존재하면 스크립트가 덮어쓰기 여부를 물어봅니다.

이미 파일이 존재합니다: /home/user/ContainerData/docker-compose/postgres/docker-compose.yml
이 파일을 덮어쓸까요? [y/N]:

덮어쓰기를 선택하면 백업 여부를 추가로 물어봅니다.

덮어쓰기 전에 백업할까요? [Y/n]:

백업을 선택하면 다음 형식으로 백업 파일이 생성됩니다.

docker-compose.yml.bak.YYYYMMDD_HHMMSS

10. 컨테이너 이름 충돌 처리

입력한 container_name과 동일한 컨테이너가 이미 존재하면 스크립트는 즉시 중단됩니다.

예:

ERROR: 이미 'postgres' 컨테이너가 존재합니다. 기존 컨테이너를 삭제하거나 다른 이름으로 다시 실행하세요.

기존 컨테이너를 자동 삭제하지 않는 이유는 데이터 손실이나 예상하지 못한 서비스 중단을 막기 위해서입니다.

기존 컨테이너를 삭제하려면 직접 확인 후 제거합니다.

docker ps -a
docker rm {container_name}

11. 포트 충돌 검사

스크립트는 host port 입력 시 사용 중인 포트인지 검사합니다.

지원하는 검사 도구:

  • lsof
  • ss
  • netstat

이미 사용 중인 포트를 입력하면 다른 포트 입력을 요구합니다.


12. 컨테이너 실행

파일 생성 후 컨테이너를 바로 실행할지 선택할 수 있습니다.

파일 생성 후 docker compose up -d까지 실행할까요? [Y/n]:

기본값은 Y입니다.

PostgreSQL은 Dockerfile 빌드가 필요하므로 아래와 같이 실행됩니다.

docker compose up -d --build

MongoDB와 Redis는 공식 이미지를 사용하므로 아래와 같이 실행됩니다.

docker compose up -d

13. 수동 실행 명령어

자동 실행을 건너뛴 경우 아래 명령어로 직접 실행할 수 있습니다.

PostgreSQL

cd ~/ContainerData/docker-compose/postgres
docker compose up -d --build

MongoDB

cd ~/ContainerData/docker-compose/mongodb
docker compose up -d

Redis

cd ~/ContainerData/docker-compose/redis
docker compose up -d

Docker Compose v1 환경에서는 docker compose 대신 docker-compose를 사용합니다.


14. 접속 확인

PostgreSQL

docker exec -it postgres psql -U root -d postgres

사용 가능한 extension 확인:

docker exec -it postgres psql -U root -d postgres -c "SELECT name, default_version FROM pg_available_extensions ORDER BY name;"

현재 DB에 생성된 extension 확인:

docker exec -it postgres psql -U root -d postgres -c "SELECT extname, extversion FROM pg_extension ORDER BY extname;"

MongoDB

docker exec -it mongodb mongosh "mongodb://root:mongodb_password@localhost:27017/admin?authSource=admin"

접속 후:

db.adminCommand({ ping: 1 })

Redis

비밀번호 없이 접근하면 실패해야 정상입니다.

docker exec -it redis redis-cli ping

비밀번호 포함 접근:

docker exec -it redis redis-cli -a redis_password ping

정상 응답:

PONG

15. 데이터 초기화

컨테이너만 제거하려면 각 DB compose 폴더에서 다음 명령을 실행합니다.

docker compose down

데이터까지 삭제하려면 ~/ContainerData/volumes 아래의 해당 DB 폴더를 삭제해야 합니다.

PostgreSQL 데이터 초기화

cd ~/ContainerData/docker-compose/postgres
docker compose down
rm -rf ~/ContainerData/volumes/postgres
mkdir -p ~/ContainerData/volumes/postgres
docker compose up -d --build

MongoDB 데이터 초기화

cd ~/ContainerData/docker-compose/mongodb
docker compose down
rm -rf ~/ContainerData/volumes/mongodb/db
rm -rf ~/ContainerData/volumes/mongodb/configdb
mkdir -p ~/ContainerData/volumes/mongodb/db
mkdir -p ~/ContainerData/volumes/mongodb/configdb
docker compose up -d

Redis 데이터 초기화

cd ~/ContainerData/docker-compose/redis
docker compose down
rm -rf ~/ContainerData/volumes/redis
mkdir -p ~/ContainerData/volumes/redis
docker compose up -d

데이터 삭제 명령은 되돌릴 수 없습니다. 실행 전에 반드시 필요한 데이터인지 확인해야 합니다.


16. 보안 주의사항

이 스크립트는 로컬 개발 환경 또는 개인 서버 초기 세팅 편의를 목적으로 합니다.

주의할 점:

  • 비밀번호는 숨김 입력하지 않습니다.
  • 생성된 docker-compose.yml에 비밀번호가 평문으로 저장됩니다.
  • 외부에 repository나 compose 파일을 공유할 경우 비밀번호가 노출될 수 있습니다.
  • Redis는 기본적으로 127.0.0.1에만 바인딩합니다.
  • 외부 접근을 허용할 경우 방화벽, 보안 그룹, 네트워크 접근 제어를 별도로 설정해야 합니다.
  • 운영 환경에서 그대로 사용하려면 secret 관리, 백업 정책, 네트워크 접근 정책을 별도로 설계해야 합니다.

17. 현재 설계 기준

이 자동화는 다음 기준으로 작성되었습니다.

| 기준 | 결정 | |---|---| | 설치 위치 | 사용자 홈 경로의 ~/ContainerData | | 스크립트 형태 | TypeScript 기반 npm CLI (@chuseok22/infra-automation) | | 실행 방식 | npx @chuseok22/infra-automation docker-db | | DB 구조 | PostgreSQL, MongoDB, Redis compose 분리 | | volume 관리 | DB별 bind mount 사용 | | PostgreSQL image | custom image build | | MongoDB image | official mongo:8.0 | | Redis image | official redis:8.0-alpine | | Redis password | redis-server --requirepass | | Redis network | localhost-only 기본 | | 기존 파일 | 덮어쓰기 전 사용자 확인 | | 기존 컨테이너 충돌 | 자동 삭제하지 않고 중단 | | 포트 충돌 | 사전 검사 | | 자동 실행 | 기본값 yes |


18. Repository 구조

이 저장소는 @chuseok22/infra-automation이라는 단일 npm CLI 패키지로 관리되며, 기능은 서브커맨드로 구분됩니다.

infra-automation
├── src/
│   ├── index.ts
│   ├── commands/
│   │   └── docker-db/
│   └── lib/
├── tests/
├── package.json
└── README.md

향후 server-init, deploy, backup 등이 추가되면 동일 패키지의 서브커맨드로 확장됩니다.

npx @chuseok22/infra-automation docker-db
npx @chuseok22/infra-automation server-init   # 추후 추가

19. 라이선스

필요에 따라 repository에 라이선스를 추가할 수 있습니다.

개인/팀 내부용이면 라이선스를 생략할 수 있습니다.
공개 repository로 배포할 계획이면 MIT License 같은 permissive license를 고려할 수 있습니다.