Docker 빌드 ‘ㅅ’a

Docker 의 는 단순한 가상화 OS 이다 ‘ㅅ’a

보통 OS 테스트를 할때 이용 할수 있다.

일반적인 사용 법은 image 를 pull 해서 받아온다음에 run 을 통해 실행을 시킨다.

 

좀더 깊게 들어가면 엔지니어가 세팅할때 쓴 명령어를 Dockerfile 으로 만들어서 build 명령을 통해서 docker image 를 만들고 배포 할 수 있다.

배포된 이미지는 개발자가 pull 해서 잘 쓸꺼라고 생각한다.


윈도우 에서 C:\ 드라이브에 dockerWORK 이란 폴더를 생성 하고, Dockerfile 이라는 확장자가 없는 txt 파일을 만든다.

주된 내용은 서버에서 apache 2.4 와 php-fpm 7.3.x 를 구성하기 위한 명령어 및 설정값을 수정 하는 명령어 모음 이다.

 

cmd 창을 열어서 아래와 같이 빌드명령을 실행한다.

목적이 Docker hub 에 배포 하기 위함 이므로 내docker ID 인 san0123/ 을 넣고 뒷부분에는 사용한 OS 와 설치되는 서비스 명을 붙여 rocky8-http-php 으로 명명 하였다.

설치하는 목적상 php 버전만 변경 되기 때문에 태그로 php 버전을 명시 하였다. :7.3

–no-cache 옵션은 빌드시 캐쉬된 부분을 무시하는 옵션.(테스트로 빌드를 마구 하다보면 필요한 옵션)

빌드는 실제 서버에서 명령을 실행한것처럼 순차 실행이 되기 때문에 시간은 오래 걸린다.

컴퓨터 사양에 따라 틀리겠지만 위 Dockerfile은 약 4분 가량 소요 되었다.

 

아래와 같이 생성된 docker 이미지를 확인할 수 있다.

 

생성된 이미지는 아래 명령어로 점검을 해보고 나서 배포하는것을 추천한다. (검사 안하고 올리면 위험할수 있다고 경고 나온다.)

 

Docker 허브에 배포를 진행 한다.

배포가 완료 되었다 ‘ㅅ’a

 

2022-01-14_195909

생성한 이미지를 업로드 한뒤에 docker 허브 사이트를 접속 하면 자신이 업로드한 Docker 이미지를 확인할 수 있고

사용 설명등을 써준다 ‘ㅅ’a (누구나 검색해볼수 있기 때문에 영어로 ?)

https://hub.docker.com/r/san0123/rocky8-http-php

 


 

배포된 이미지를 다운 받아 사용 하는 방법은 다음과 같다.

또는 아래와 그림과 같이 이미지에서 run 에서 옵션을 주어 실행하면 된다.

2022-01-18_100246

 

실행 명령어상 자신의 PC의 80 포트는 컨테이너의 apache 의 80 포트로 연결 하고

윈도우의 w:\project-1 경로를 서버내 /var/www/html 으로 연결 하기 때문에 w:\project-1\index.php 를 아래와 같이 생성 하고 브라우져로 http://127.0.0.1 으로 접속 하면 phpinfo 를 확인 할 수 있다.

2022-01-14_194515

httpd 의 access_log, error_log 등은 아래 그림과 같이 도커에서 직접 확인이 가능 하다.

2022-01-18_094532

서버의 터미널 접속은 아래와 같이 docker 프로그램에서 클릭을 통해 접속이 가능 하다.

2022-01-14_195252

cli 접속은 php.ini 혹은 httpd.conf 등을 수정 하려고 했을것이고, 적용을 위해 apache 혹은 php-fpm 을 재시작 해야 하는 경우 아래와 같이 재시작 버튼으로 컨테이너를 재시작을 한다.

2022-01-18_162550

컨테이너 재시작을 하는 경우 CLI 가 닫히는것은 어쩔수 없다…..

 

Rocky Linuix(v8.5) – nginx(v1.20.1-6) – php-fpm(v8.0.14) 설정

Rocky Linux 8.5 버전에서 nginx – php – mariadb 설치 방법 이다.

 

먼저 OS의 기본적인 설정을 해야 한다.

NetworkManager 를 여전히 사용중이기 때문에 nmtui 명령어로 아래 화면에서 네트워크 설정을 할 수 있다.

2022-01-13_143039

Minimal 설치 기준으로 일반 적인 설정이라고 보면 되겠다 ‘ㅅ’a

  1. atd 데몬을 사용 중지 한다. (보안 취약점이 될 소지가 있다.)
  2. 서버 타임존을 설정한다.
  3. rsyslogd사 설치되어야 로그 감사를 통한 서버 이상을 확인하기 용이 하다. (vim 은 내 친구이기 때문에 설치한다 = =a)
  4. rsyslog를 실행한다.
  5. selinux 이슈 발생시 사유 추적을 위해 분석 스크립트를 설치 한다.

selinux 이슈 발생 추적은 아래 명령어로 진행 한다.

 


 

서버 목적에 따른 firewalld 를 설정 한다.

firewalld 의 경우 전통적인 iptable 를 사용하지 않고 nftable 이란것을 사용하기 때문에 일시 중지를 위해 iptable -F 명령어로 값을 모두 날려도 작동 하지 않으니 유의 하자 ‘ ‘a

기초 사용법은 아래와 같다.

 


 

epel 레포지토리를 설치 하고 업그레이드를 통해 최신화 한다. (리부팅이 필요할지도 ‘ ‘a)

 

php 의 버전 선택 설치를 위해 Remi 레포지토리를 이용 하여 php 8.0 버전을 선택해서 설치 한다. (nginx 역시 1.20 버전으로 선택함)

php-fpm 설치와 라이브러리 설치를 구분한 이유는 일반 php를 설치하게 되면 의존성으로 httpd 가 설치되고 php-fpm 을 설치해야 nginx가 의존 설치 되기 때문이다.

 

MariaDB 10.6 설치 (레포지토리 생성 URL) CentOS 가 아닌 RHEL8의 레포지토리를 사용하였음.

 

/etc/nginx/conf.d/virtual.conf 파일에 가상호스트를 생성하고 php-fpm 과 sock 으로 연결 한다.

일단 여기 까지 진행된 경우 nginx – php – mariadb 조합의 사용이 가능하다.

내부 공용으로 쓰이는 부분은 params 파일로 별도로 만들어서 include 하는편이 좋다. ‘ㅅ’a

 

사이트용 계정 및 phpinfo() 파일을 생성하고 브라우져로 접속하여 확인 해 본다 ‘ㅅ’a

 

WEB 디렉토리를 기본이 아닌 /free/home/계정 으로 진행 했기 때문에 아래와 같이 selinux 설정 하고 적용 한다.

selinux 는 어렵지만 활성화 해두고 쓰면 보안이 매우 강려크 하다.

문제가 발생한경우 setenforce 0 명령어로 감시모드로 전환 하고 sealert 명령어로 예외 추적 하고, context를 추가한 뒤에 다시 setenforce 1 으로 활성화 하는 습관을 가지는게 좋다.

설정된 t콘텍스트 는 ls -lZ /경로/경로 으로 확인할 수 있다.

 


 

snapd 및 certbot (let’s encrypt) 를 설치 한다.

 

certbot을 활용한 인증서 발급 명령어 (nginx acme-challenge 를 설정한 이유는 디렉토리를 고정 사용하기 위해서이다.)

 

nginx ssl 설정은 일반 server { } 설정 사이에 listen 값을 교체 및 ssl 설정을 추가 하면 된다.

 

우분투 20.04 의 xrdp에서 로그인창 반복 문제

우분투 20.04 버전에서 xrdp 를 설치하고 원격 데스크톱을 연결했을때 로그인을 한 뒤에 아래와 같이

인증이 필요합니다

시스템 저장소를 새로 고치려면 인증해야 합니다

라는 메세지가 나오게 되고 패스워드 입력창이 반복되면 실제 로그인시 로그인을 실패를 하는것이 확인되었다.

2022-01-05_091029

 

실제 ubuntu 계정의 패스워드를 입력해도 정상 로그인이 불가능한 상태 이다.

/var/log/auth.log 파일에서는 아래와 같은 로그가 확인 되었다.


xrdp의 버그인 것으로 아래와 같이 터미널에서 polkit 룰을 추가함으로서  해결 되었다.

위 파일을 터미널을 통해 생성한뒤에 로그아웃 -> 로그인을 하면 사라진다 @_@b

 

출처 : https://devanswers.co/how-to-fix-authentication-is-required-to-create-a-color-profile-managed-device-on-ubuntu-20-04-20-10/

ssh (sftp) 속도 저하 이슈.

ssh 또는 sshd 의 내장된 sftp 를 이용하여 파일을 업로드 할때 가끔 속도가 저하되는 이슈가 있다 ‘ㅅ’a

sftp의 경우 데이터를 암호화 해서 통신을 하기 때문에 cpu와 네트워크(1Gbps)가 좋다면 일반적으로 20Mbps ~ 60Mbps 정도로 측정이 된다.

 

다만 resolve 가 정상적이지 않을때 속도 저하가 발생할 수 있는데 이때 sshd_config를 수정해서 DNS 확인을 하는 옵션을 꺼둠으로서 속도 저하를 예방할 수 있다.

일반적으로 CentOS 에서는 아래와 같은 설정 값을 가진다.

 

이를 수정을 해주고 sshd를 재 시작 한다.

상태 active (running) 을 확인 한뒤에 추가적으로 ssh 접속을 시도해 본다. (sshd 설정을 건들 경우에는 새로운 접속이 가능한지 확인해보는것이 좋다.)

 


 

ubuntu의 경우에는 기본 설정 값이 틀리기 때문에(주석으로 막혀있는 구조) 아래의 명령어를 사용한다.

 

CentOS 8 종료에 따라…

CentOS 8 의 CentOS Stream 전환의 시기가 얼마 남지 않았다. (2021년 12월 31일 까지…)

 

기존의 CentOS 와 같이 RHEL 을 복제한 OS 는 다음과 같다.

Rocky Linux (https://rockylinux.org)

Oracle Linux (https://www.oracle.com/kr/linux/)

Alma Linux (https://almalinux.org/)

Navy Linux (https://navylinux.org/)

 

네이비 리눅스의 경우 업데이트 적용이 늦는듯 하고(업데이트 지원이 늦어질수도??)

오라클 리눅스는 Mysql -> MariaDB 사태를 본 사람으로서 선택하기 어렵다.

 

아무래도 기존에 CentOS 개발자로 참여(Gregory Kurtzer) 했던 Rocky Linux 을 선택 하는게 좋을거 같지 싶다 ‘ ‘a

Rocky 리눅스의 경우에는 AWS, Azure, GCP 에서 OS 이미지로도 선택(물론 소프트웨어 요금 없이)이 가능하다.