카테고리 Archives: linux

Docker 와 firewall-cmd 사용법

Rockylinux(OracleLinux) 8.x 에서 Docker 는 run/start/stop 을 할때
Docker-proxy 가 iptables 를 이용해서 DOCKER, DOCKER-USER, DOCKER-ISOLATION-STAGE-1, DOCKER-ISOLATION-STAGE-2 등의 Chain을
만들어 관리 하기 때문에 기존에 설정된 firewall 설정을 무시하고 호출이 가능한 상태가 된다.

OCI 에서는 인스턴스에 시큐리티 리스트에서 아이피/포트를 관리할 수 있으나
스위치의 access_list 처럼 같은 서브넷에 속한 모든 서버가 영향을 받기 때문에 firewall 에서
설정한 포트만 오픈을 하고자 할때 사용할 수 있는 방법이다.(OCI 안에서 여러 인스턴스를 운영하거나 로컬에서 Docker 서버를 운영할때..)

AWS 의 보안 그룹은 각 인스턴스 별로 작동하기 때문에 불필요 하다.


  1. 먼저 도커의 iptables 사용 옵션을 끄고 docker 를 재시작 한다.
  2. firewalld 에서 설정된 값을 모두 초기화 한다.
  3. Docker 의 네트워크 정보를 확인 한다.
  4. Container 에서 호스트롤 통해 outbound 를 위한 설정을 추가 한다. (첫번째줄에 Docker의 네트워크 정보를 입력해서 실행 해야 한다.)
  5. inbound 를 위한 설정을 추가 한다.
  6. 필요에 따라 아래와 같이 inbound 설정을 추가 한다. (nginx-docker 를 위한 80(tcp), 443(tcp/udp) 을 연다.)

 

마지막에 여는 명령어를 보면 알겠지만 열려고 하는 컨테이너의 IP를 알아야 한다.

때문에 Container 으로 진입해서 ifconfig 를 보면 알 수 있겠지만 매우 귀찬은 관계로 스크립트를 작성 하였다.

실행하면 아래와 같이 나오는데 필요한 Container 부분만 실행을 해서 사용하면 된다.

20240620_131234


출처: https://firewalld.org/2024/04/strictly-filtering-docker-containers

Docker 를 이용한 데이터베이스 사용법

Web / Was 만 도커를 이용해 배포하는 이유는 Mysql, MariaDB 등의 공식 도커가 너무 잘되어 있어서 이다.

그래서 이용하는 법만 알면 되는데.  ‘ㅅ’a

공식 소개 페이지에 잘 나와 있긴 하지만 docker 사전 지식 없이 사용을 하기엔 설명을 건너 뛴 부분이 많다.

 

여기서는 MariaDB 공식 도커이미지를 가지고 간단히 DB를 띄우는 방법에 대한 부분만 설명 한다.

사용할 버전은 10.11 버전이다. 10.11을 사용하는 이유는 LTS 이기 때문에 지금 당장은 가장 오랜 업데이트가 지원될 예정이기 때문이다. (https://endoflife.date/mariadb)

 

사용할 도커 이미지: mariadb – Official Image | Docker Hub

 

1. 이미지 pull 및 run을 한다.

 

2. mysql을 이용 한다. = _ =..

 

3. 그냥 글을 마무리 하기 심심하니.. 데이터베이스 생성, 유져 생성 쿼리…

 


 

PS. docker run 에 대한 옵션에 대한 설명.

--restart unless-stopped : stop 명령을 내린게 아니라면 (재부팅 또는 도커를 스탑 한경우..) 자동으로 시작 하는 옵션.

-v /etc/mysql/mariadb.conf.d/:/etc/mysql/mariadb.conf.d/ : my.cnf 수정이 필요한 DB 튜닝의 경우 /etc/mysql/mariadb.conf.d/custom.cnf 파일을 만들고 내용을 넣고 컨테이너를 재시작 하면 적용 된다.

-v /var/lib/mysql:/var/lib/mysql : mysql 의 데이터 폴더를 마운트 한다.

docker를 이용한 데이터베이스 사용은 업데이트를 편하게 하기 위함이기 때문에 container 를 다시 run 하면 안의 내용을 모두 유실 하게 된다. 때문에 이와 같이 주요 폴더는 호스트OS 와 연결 하여 사용 하면 된다.

 


 

연결할 WEB / WAS 구현은 아래 글을 확인합니다 ‘ㅅ’a

OCI arm 인스턴스에서 docker로 web, was 사용

 

GEOIP database 파일 업데이트

기존 GeoIP 스크립트에서 GeoIP.dat 파일이 0 으로 생성을 하게 되어서 Apache에 에러가 발생 하였다.

에러 메세지는 아래와 같이 /var/log/httpd/error_log 파일과 /var/log/messages 파일 에서 확인 되었다.

 

내용 확인 결과 maxmind 에서 배포 되는 csv 파일이 2024년 5월 1일 부로 S3 presigned 를 이용하여 배포 하는 형태로 바뀐것으로 확인이 되었다.

오랜만에 maxmind 사이트에 로그인을 해보니 라이선스 키 길이도 바뀌어서 같이 바꾸는게 좋겠다. 🙂

중간에 주석 처리된 3줄은 python2를 사용하는 서버(centos 7 이하)에서는 주석을 제거 하고 사용해야  한다.

 

몇가지 로직 개선 및 mmdb 파일까지 갱신 하도록 geoipupdate 명령을 중간에 실행 하도록 하였다.

때문에 /etc/GeoIP.conf 파일에 자신의 어카운트 및 라이선스키를 넣어줘야 한다.

그냥 사용 할경우 www.enteroa.com 에서 생성하고 재배포 하는 파일을 다운 받아 사용 한다.

자신의 서버에서 스스로 dat파일을 생성 하고 싶을 경우 Maxmind_Licensekey 부분과 PRIMARY_SERVER_HOSTNAME 부분 또 PRIMARY_DEPLOY_URL 부분을 수정 해서 사용해야 한다.

 

라이선스키 발급 방법은 같기 때문에 maxmind 에서 라이선스 발급을 원하면 아래 역인글을 확인 한다.

역인글 : GEOIP database …

RockyLinux 8 미사용 커널 삭제

Linux 상에서 dnf update 를 한  경우 보통은 새로운 업데이트 버전이 설치 되면서 기존 버전을 삭제 하게 되어있다.

다만 일반적인 범주를 벗어나는 java 라든가 python 은 기존 버전의 삭제 없이 다른 이름으로 설치 되어 alternatives에 의해 선택되어 사용 된다.

그리고 또 다른 하나의 경우는 kernel 이 업데이트 된 경우 인데 (8.5 -> 8.9) 이경우 /boot 파티션에 기존 부분 삭제없이 누적 되기 때문에

업데이트를 꾸준히 한경우 /boot 파티션의 용량이 부족한 경우가 발생한다.

 

요점은 /boot 폴더는 보통 용량이 작기 때문에 용량 확보를 위해서 기존 커널을 지워야 한다 ‘ ㅅ’a

손쉽게 삭제가 된다. 🙂

20240304_142946

OCI 구성 서버중 update를 많이 한 웹서버 용량이 73%를 쓰고 있어서 삭제 후 43% 으로 감소 하였음 :).

nginx 설정파일을 vim 으로 변경시 색상 표시

nginx 의 경우 vim 을 이용한 편집시 색상 표기가 되지 않아 눈에 잘 들어오지 않는다.

이는 vim 이 가지고 있는 syntax중 nginx 에 맞는 색상 코드가 존재 하지 않기 때문이고 이를 추가해 줄 경우

색상이 정상적으로 표시가 된다.

 

먼저 아래 와 같이 경로 이동 및 파일 다운로드를 진행한다. (경로 이동중 vim80 부분은 설치된 vim의 버전에 따라 변경 될 수 있다.)

 

이후 filetype.vim 에서 어떤 파일에 해당 syntax를 사용할지 설정해야 한다.

vi /usr/share/vim/vim80/filetype.vim 를 이용해 파일 편집을 진행 한다.

99번째 줄에 apache(httpd) 에 대한 설정이 있는데 그 아래 추가를 하고 저장 한다.

 

nginx.conf 를 vi 로 열었을때 아래와 같이 나온다면 잘 설정이 된것이다.

20240208_133533

 

출처: https://gist.github.com/ralavay/c4c7750795ccfd72c2db

ps. 출처에서는 vim.org 에서 다운받게 하였으나 다운로드 시 잘 안되는 경우가 발생했고, 일부 ssl 관련 설정을 추가해서 nginx.vim.tgz 에 담았음.