[TIL_Carrotww] 115 - 23/05/31

유형석·2023년 5월 31일
0

TIL

목록 보기
130/138
post-thumbnail

📝Carrotww의 코딩 기록장

🧲 Ubuntu에서 docker-compose로 postgresql 올려놓기

🔍 OCI 기본 설정

오라클 계정을 얻게되어서 오라클에서 많은 테스트를 진행할 예정이다.
일단 나는 2코어 짜리 Ubuntu 22.04로 올려놨다.
인스턴스 이름은 Postgresql로 대충 적고

private key를 받아서 고이 모셔둔다.
원래는 다 테스트용이고 하니 귀찮아서 key 없이 실행하는 편이다.
하지만 이번에는 DB를 올려놓고 spring boot로 연결하여 테스트할것이기 때문에 나름의 보안을 생각해서 key를 받아뒀다...

나는 cpu 4코어까지 꽁짜이기 때문에 2코어짜리 하나 테스트용으로 빌렸다.

잘 생성되고 돌아가는 모습

다음으로 ssh 키를 사용해 접속한 후 아래 명령을 쳐준다.

sudo passwd root
# root 비밀번호 초기 설정

root pw를 설정해준다.

🧲 docker compose 설정

🔍 docker

# 키 생성 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# repository 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

sudo apt update

# docker 설치
sudo apt install docker-ce

# 동작 확인
sudo systemctl status docker

🔍 docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/dockercompose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose  # 권한 설정

docker compose version --short # 동작 확인

sudo chmod 666 /var/run/docker.sock

or

sudo chown root:docker /var/run/docker.sock
# 나중에 docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우가 있을 수 있음 위 두가지중 하나 실행

🧲 PostgreSQL

🔍 OCI에 postGIS 올리기

위에서 한대로 docker를 받은 후 폴더를 하나 만들어준다.

/home/ubuntu/postgre

로 만들고 여기에 docker-compose.yml 파일을 만들었다.

version: '3.1'

services:
  db:
    image: postgis/postgis
    restart: always
    volumes:
      - ./data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: passwd
      POSTGRES_USER: user
      POSTGRES_DB: test_db
    ports:
      - 5432:5432

  pgadmin:
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: user@gmail.com
      PGADMIN_DEFAULT_PASSWORD: user
    ports:
      - 8080:80
    depends_on:
      - db

난 이렇게 썼다.
하나하나 옵션을 뜯어보겠다.

  • version : 3.1 -> docker compose의 파일 형식
  • services : Docker 컨테이너를 구분짓는 부분이다
  • db : 서비스의 이름이다. 컨테이너와 네트워크의 이름으로 사용된다.
  • image : 실행되는 Docker 이미지이다. Docker Hub에서 원하는 이미지를 찾으면 된다. 나는 postgreSQL이 아닌 위치관련한 extension을 써볼라고 해당 extension 이미지를 썼다.
  • restart : always -> 컨테이너가 종료되면 항상 다시 시작된다는 뜻이다. Docker 가 시작되면 컨테이너가 자동으로 시작된다.
  • volumes : 현제 docker-compose 파일이 있는 디렉터리에 ./data라는 디렉터리와 컨테이너의 /var~ 마운트한다는 뜻이다.
    이렇게하면 외부에서 데이터에 접근할 수 있다.
  • enviroment, passwd, user, db : 해당 이미지에 사용될 아이디 패스워드를 지정한다
  • ports : 왼쪽이 호스트 OS의 포트이고 오른쪽이 컨테이너의 포트이다. 포트포워딩을 해주는 것이다.
  • depends_on : db: pgadmin 서비스는 db 서비스에 의존한다. 즉, Docker는 db 서비스가 시작된 후에 pgadmin 서비스를 시작한다. 이 설정은 서비스의 시작 순서를 제어한다.

DB를 공인 아이피로 접근 가능하게 해놓은 만큼 id, passwd는 각별히 신경써야된다.
그리고 외부에서 접근하게 하려는 목적이였으니 ubuntu의 방화벽을 8080과 5432 포트를 열어주고 OCI의 보안 그룹에도 해당 포트는 열어주어야 한다.

docker compose up -d

위 명령어를 친 후 인스턴스의 http://공인ip:8080
으로 검색하면

어디서든 접근 가능한 DB 완성

왜 로컬에 안하고 굳이 이렇게 했냐...하면
집과 센터(소마) 를 왔다갔다 하기때문에 spring boot 테스트를 꾸준히 할? db가 필요했다. (원래는 로컬에만 하려고했는데 하다보니...)

아무튼 오늘 끝!

profile
Carrot_hyeong

0개의 댓글