카테고리 Archives: Server engineering

Hyper-v 서버에 연결(원격)

Hyper-V Server 2016 / 2019 free 의 경우 서버 생성 및 관리를 위해서 서버에 접속하여 사용이 되지 않고

자신의 PC 에 Hyper-V를 활성화 한뒤에 “서버에 연결…” 기능을 통해서 관리가 가능 하다. (Hyper-V – 나무위키 (namu.wiki))

즉 자신의 PC 에서 설정을 한뒤 아래와 같이 화면이 나오면 이를 통해서 관리 할 수 있다.

20240710_164937

다만 그냥 연결을 시도 해봐야 연결이 될리가 없고 꽤 번거로운 설정이 필요 하다.

기존 메뉴얼의 경우 찾아 보았으나 IP를 근거로 활용해서 접속하는 방법과 2개 이상 Hyper-V Server 를 접속하는 방법을 찾아서 포스팅을 한다 ‘ㅅ’a

 


 

일단 Hyper-V Server 에 원격으로 접속된 화면 에서 다음과 같이 “7) 원격 데스크톱”이 사용(보안 수준이 높은 클라이언트만) 으로 설정 되어 있어야 한다.
20240710_161201

 


 

자신의 PC 에 Hyper-V를 설치 하고 PowerShell 창을 열어서 다음과 같은 명령어를 실행 한다.

Hyper-v 의 두개 일 경우에 대한 설명이기 때문에 자신에 맞게 하나만 쓴다던가 하자 ‘ㅅ’a

cmdkey 의 경우 자격 증명 관리자에 아래 그림과 같이 windows 자격 증명을 생성하게 된다.

20240710_163851

 


 

로컬 컴퓨터 정책(gpedit.msc) 을 실행해서 컴퓨터 구성 >> 관리 템플릿 >> 시스템 >> 자격 증명 위임 >> 서버 인증이 NTLM 전용일 경우 새로운 자격 증명 허용 으로 이동하고 아래 그림과 같이 진행한다.

20240710_16214420240710_16225620240710_162618

마지막 그림과 같이 WSman/192.168.0.10WSman/192.168.0.20을 추가 해야 한다.

 


 

마지막으로 접속할 PC의 Hyper-V 에서 “서버에 연결…” 버튼으로 연결을 한다.

20240710_163450

 

연결이 된다면 첫번째 스크린샷과 같이 자신의 PC 의 Hyper-V 와 원격 Hyper-V Server 가 목록에 나타나고 관리를 할 수 있다. 🙂

 

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

OCI 에서 제공되는 무료 서버를 이용하여 nginx(x86) – was(arm64) – DB(arm64) 으로 잘 사용하고 있었다. (물론 앞으로도 잘 사용할 예정…)

기존엔 snapd(certbot) 도 arm64에서 정상 동작지 않았고 http3를 구현한 nginx도 베타 였으나 현재는 mainline-quic 으로 되었기 때문에
native-arm64 환경으로 이행을 통해 메모리가 적어서 상대적으로 속도가 느렸던 x86서버를 버리기 위해서 아래와 같은 목표를 구현하는 것을 목표로 잡았다.

  • Docker – Was(http,php-fpm) 의 OS를 amazonlinux2 -> rockylinux9 으로 변경 및 php-8.3 사용
  • Docker – rockylinux9 – nginx-quic(http3) 구축
  • Docker x86_64(amd64), arm64(aarch64) 을 지원

2024-09-24_102141

 


 

 

  • Docker 설치

베이스 OS는 rockylinux 9 (aarch64)이며, 서버에 docker 를 설치하고 활성화 한다. (Install Docker Desktop on RHEL)

 

Was 컨테이너 안에서 웹서비스가 apache:apache 권한 으로 동작 되기 때문에 아래와 같이 베이스 os에 같은 유져를 생성 한다.
(바깥에서 단순 UID 48으로 지정해 운영 해도 된다.)

 


 

  • 배포된 Docker 이미지를 이용한 apache, php 사용

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

웹서버 또는 개발자 PC (windows)에서 공통으로 사용할 수 있도록 생성한 Docker 이미지 이다.

 

도커는 pull 을 별도로 하지 않더라도 정확한 주소를 사용할 경우 자동으로 pull 하는 기능이 있으므로 바로 run 을 실행 한다.
nginx 가 80,443 을 사용할 예정이기 때문에 9000번 포트를 이용해 run 한다.

 

웹소스를 호스트os의 /free/home/project/html 에 넣으면 호출을 할수 있다.
파일을 복사해 넣거나 압축을 해제한 후에는 chown -R apache:apache /free/home/project/html 을 잊지 말자…

 

배포된 rocky8-httpd-php, rocky9-httpd-php 에서 CI4(code igniter 4) 사용법

 

일반적인 CMS테스트를 위할 경우 여기 까지만 진행 하고 웹서버를 서비스 하고자 할때 아래 부분까지 진행 한다.

 


 

  • 배포된 Docker 이미지를 이용한 Nginx 사용

https://hub.docker.com/r/san0123/rocky9-nginx

웹서버에서 http3 를 구현하기 위해서 apache 앞에 nginx를 사용하고 Let’s encrypt(certbot) 을 사용하기 위한 Docker 이미지 이다.

 

Nginx 도커를 이용한 http2를 위해 80/tcp, 443/tcp 그리고 http3를 위해 443/udp 을 파이어월에서 허용 한다.

 

웹용 도커는 베이스OS에서 virtualhost 설정 파일 을 저장해서 버전 업데이트시 설정 파일을 새로 설정 하지 않기 위해 mount 하기 때문에 먼저 생성을 한뒤 docker run 을 해야 한다.

 

Nginx용 도커를 실행 한다. 컨테이너를 재 생성 할때마다 인증서나 가상호스트 파일을 수정하지 않도록 두개의 마운트 포인트를 추가해서 실행한다.

 

도메인을 서버에 연결 한 뒤에 Let‘s encrypt 를 생성하는 명령어는 다음과 같다. (email, domain 은 자신에 맞게 수정해서 사용한다.)

 

베이스OS 에서 /var/www/conf/virtual.conf 를 자신의 url에 맞게 수정하고 발급된 인증서가 동작할 수 있도록 수정을 한다.

 

nginx를 재시작 하기 위해서 컨테이너를 재시작 한다.

 

http3가 잘 활성화 되어있는지 확인 한다. ( https://http3check.net/)

2024-04-27 17 14 57

 

인증서가 약 2-3개월 마다 갱신해야 하기 때문에 cronatb에 아래와 같이 등록해서 주기적인(주1회) 인증서 업데이트 및 적용을 위한 재시작을 한다. (매주 월요일 오전 8시)

 


 

데이터베이스 사용법 까지 필요 하면 아래 포스트를 확인 하자 ‘ㅅ’a

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

Synology DS420+ 메모리 증설 (PC4-3200AA 1Rx8 8GB)

하이마트에서 라이브커머스로 할인이 많이 되어서 50만원 후반대 가격에 DS420+ 를 사게 되었음.

2022-06-02_103859

 

듀얼코어 x86 cpu에 기본 메모리 2GB + 노트북용 메모리 슬롯 한개가 존재함.  아래는 시놀로지 측에서 제공 되는 DS420+ 의 스펙표.

2022-06-02_104059

원활한 사용을 위해서 메모리를 증설 하고자 커뮤니티를 검색해 보았지만 DDR4-2133 ~ DDR4-2666 성공 사례가 있었지만

온라인몰 가격 검색을 해보니까 3200 보다 2133을 더 비싸게 팔고 있는 어이 없는 상황이 확인됨.


보통 상급 메모리는 하급 메모리의 세팅 값을 하위 호환으로 지원 하기 때문에 굳이 아래 등급인 2133을 사용할 필요는 없음. (본인의 H/W 지식)

2022-06-02_105125

위 스크린샷은 시놀로지에 사용할 예정인 메모리의 다른 windows pc 에 작창 해서 CPU-Z 의 SPD 항목임.

 

CPU-Z 의 SPD 항목을 보면 지원 하는 JEDEC 를 표기 하고 있는데 2133에 해당하는 JEDEC 표준이 보이지는 않지만 Report 를 TXT 파일로 저장 해보면 아래와 같은 부분을 찾을수 있음.

리포트 파일에 잘 나와 있지만 DDR4-3200 은 Max bandwidth 일뿐…

 

메모리 콘트롤러는 CPU 내장(SoC)이기 때문에

Intel 제공 J4025 의 스펙뷰 https://www.intel.co.kr/content/www/kr/ko/products/sku/197307/intel-celeron-processor-j4025-4m-cache-up-to-2-90-ghz/specifications.html

확인 결과 DDR4-2400 까지 8GB 까지 된다고 되어 있음.

CPU 스펙뷰는 보통 발표 시점의 메모리 테스트의 호환성 테스트 결과 값이지 제한 값이 아니기 때문에

기존에 보유하고 있는 미니 PC의 16GB (8GB x 2개) 중 1개를 빼서 가져다 쓰기로 함. (그냥 봇용 PC 라 큰 메모리가 필요 없는듯 하여…)

IMG_0760IMG_0762

장착하는 메모리는 삼성의 1Rx8 8GB PC4-3200 메모리 이다.

메모리는 1R, 2R 뿐 아니라 고용량으로 가게 될경우 4R 까지도 있다.(이건 보통 서버용…)

다만 국내에서 메모리를 팔때 랭크(1R or 2R) 까지 공개를 하지 않고 있기 때문에…. 판매하는곳에 랭크를 문의 하시고 구입하시는 편이 좋다.

 

위와 같이 장착 후 시놀로지 부팅 고고…

KakaoTalk_20220601_101500867

 

정상적으로 인식이 되었으며 DSM 도 기본 415play 와 다르게 빠릿빠릿 하게 반응 해줌…

 

아래는 메모리 설치 완료 후 시놀로지에 SSH 접속을 통해 확인한 메모리의 정보. (DDR4-3200 메모리를 넣었지만 다른 메모리에 맞춰 DDR4-2400 으로 작동하는 모습.)


데이터 이전은 마이그레이션 툴을 쓰면 좋으나 415play  가 지원되지 않아서.

파일 스테이션에서 다음과 같이 연결 설정 한뒤에 웹콘솔로 옴기기를 추천함.

구 시놀로지에서 신규 시놀로지를 마운트 해서 데이터를 밀어 넣는게 효과적임. (백그라운드 카피로 진행됨)

KakaoTalk_20220601_234711111_01


메모리가 커지면 무었지 좋은가에 대한 대답은 시놀로지내 Docker 사용시에도 자원이 되고 속도도 빨라진다고 하지만.

DSM도 리눅스 시스템이다. 기본적으로 리눅스든 윈도우든 메모리는 절대 놀리지 않는다.

네트워크 속도가 빠른 요즘엔 SSD/HDD 가 속도를 못따라 가는데 이때 I/O 버퍼로 쓰인다.

(모니터링 툴에서는 보통 이 버퍼로 사용되는 메모리는 free 메모리로 보여 주는 경우가 많다.)

 

PS. PC4-3200 1Rx8 16GB 를 구매해서 DS420+ 에 장착 후 켜 보았지만 부팅이 되지 않았다.

외국 리뷰어에 따르면 (2Rx8 16G) 일 경우 정상 동작을 하는 경우가 있다고 한다.

Oracle Linux 8 (x86_64) 서버에서 dnf(yum)을 이용한 nginx 설치 및 http3 구현

아래 글은 오래 되어 도커 이미지 등이 삭제 되었으니 공부 차원이 아니라 이용을 하려면 아래 확인 하세요 ‘ㅅ’a

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


OCI 에서 제공 되는 “항상 무료 적격” 서비스에 ARM64 서버로 Apache, Php, MariaDB 를 운영 하고자 하였으나

aarch64 커널에서는 snapd 설치가 가능하지만 lets encrypt 사용이 불가능 하여 불가피 하게 x86_64 서버를 앞에 하나 두어

reverse proxy 할 계획을 세우다 보니 HTTP/3 를 적용하는 부분도 포함해 진행 한다.

알고 가야 하는 부분은 http3 를 구현 하는 nginx-quic 의 경우 아직 테스트 레벨이라는 점이다.


tier 1 = x86_64 – oracle linux 8 – nginx

tier 2 = arm64 – oracle linux 8 – memcache, docker – amazon linux – httpd, php-fpm

tier 3 = arm64 – oracle linux 8 – mariadb


아래 두 글에 이어서 익숙하겠지만 그것을 한다.

 

편리한 dnf(yum) 설치를 위해 codeit.guru 레포지토리를 추가 한뒤에 nginx:codeit-quic 설치를 한다.

 

snapd 를 활용하여 Let’s encrypt 를 설치 한다.


웹서버의 보안 향상을 위해 Diffie-Hellman param 파일을 생성한다.

 

서버 내부의 파이어월에 사용할 서비스 및 포트를 등록 하고 확인 한다.

 

nginx.pid 생성, /var/www/html  엑세스(Let’s encrypt 인증서 http 인증) 및 리버스 프록시 구현을 위한 selinux 를 설정 한다.

 

OCI 클라우드 내에서의 보안 목록(Security List) 에서 아래와 같이 UDP :443 을 허용해 준다.

2022-05-12_121444


/etc/nginx/nginx.conf 파일을 수정 한다.

 

Let’s encrypt 인증서 발급을 위한 http 가상호스트를 수정 한다. vi /etc/nginx/conf.d/default.conf

conf 파일을 설정한 뒤 nginx 를 활성화 및 시작 한다.

 

Let’s encrypt 인증서를 발급 한다. (성공시 Successfully received certificate 메세지 가 확인 된다.)

 

https 가상호스트 설정 파일을 추가 생성 한다. vi /etc/nginx/conf.d/default-ssl.conf

default.conf 파일과 default-ssl.conf 파일은 하나로 병합해서 사용 해도 관계는 없다.

 

가상 호스트를 생성 한 뒤 nginx 를 reload 한다.


위까지 진행 한 경우 http3 를 지원 하는 웹서버의 설정이 모두 끝난다.

다만 구성상 외부서비스 제공은 https 내부에서의 통신은 http 프로토콜을 사용하기 때문에 기본 상태의 wordpress 의 에러메세지를 볼 수 있다.

was 서버에서 운영되는 워드프레스의 wp-config.php 파일에 /* That's all, stop editing! Happy blogging. */ 위 부분에 아래 소스를 삽입 해야 한다.


브라우져 접속 및 체크 사이트(https://http3check.net/) 접속을 통해 HTTP/3 이 활성화 되었는지 확인 한다.
2022-05-11_1117222022-05-12_121827

 

Oracle Linux 8 (arm64) 서버에 httpd, php 설치

아래 글은 오래 되어 도커 이미지 등이 삭제 되었으니 공부 차원이 아니라 이용을 하려면 아래 확인 하세요 ‘ㅅ’a

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

 


오라클 클라우드의 무료 서버중 x86 서버인 VM.Standard.E2.1.Micro 의 경우 1/8 OCPU 및 1GB 메모리를 제공 한다.

2022-05-04_150958

1/8 OCPU 이는 cpu중 12% 점유율 사용량을 허용 한다는 말이다.

서버 내부에서는 2 논리 core 으로 확인 되기 때문에 각각의 cpu당 25% 의 점유율을 사용할 수 있다고 본다.

초과해서 사용할경우 과금 이 되거나 사용이 제한될 수 있는 요소이다.

 

메모리의 경우에는 dmesg 명령어로 아래와 같이 확인이 되었다.

즉 전체 용량 1018MB 에서 커널 보호를 위해 280MB 를 제외한 678MB를 쓸수 있다.

linux 커널에서 일반적으로 약 500MB정도를 사용한다고 보면 가용 메모리가 278MB 정도 밖에 되지 않는다.

쓰다보면 메모리가 swap 처리 되어서 WEB/WAS 사용가능한 메모리는 약 270~500MB 사이 정도가 될 것이다.

현재 블로그와 같이 구글 애드센스가 도입된 wordpress 사이트는 약 1.2초 대의 로딩 속도가 나오는 정도의 성능으로 확인되었다.

 

다만 방문객이 일정량 이상 늘어날 경우 급격히 느려지고, php-fpm이 메모리 과점으로 php-fpm 장애가 발생하는등의 문제가 발생 하였다.

그래서 ARM cpu 를 사용하는 VM.Standard.A1.Flex 를 이용해 was 서버를 운영하는 방법으로 구성을 해보았다.

아래는 OCI의 oracle linux 를 설치 했을때 기본적으로 진행해야 하는 명령어 모음 이다.

 

aarch64(ARM64) CPU를 사용 하는 경우 다음과 같은 문제가 있다.

  1. ARM64용 서드 파티 레포지토리는 거의 없는 편이다. (최신 php 버전을 제공 하는 remi 레포 또는 webtatic 등등)
  2. OS공식 레포지토리에서 제공 되는 httpd 버전은 2.4.37 버전 php 버전은 7.4.19 버전 이다.
  3. Let’s encrypt 에서 제공 되는 snapd(certbot) 이 동작을 하지 않는다. (x86_64 에서는 동작한다.)

 

위와 같은 사유로 3 티어 방식으로 운영이 되도록 구성 한다.

WAS 서버에 docker 에 amazon linux 2 (aarch64)를 이용 해서 apache + php-fpm 구성을 할 경우 최신 버전의 php 를 사용할 수 있고,

.htaccess 를 apache 문법으로 사용이 가능 하다는 장점이 있고, was 의 빠른 처리를 위한 갯수를 늘리거나 php 버전 교체도 쉬울 예정이기 때문에 채택 하였다.

 

3tier_20220511

tier 1 = x86_64 – oracle linux 8 – nginx (Let’s encrypt SSL 구성 및 리버스프록시 설정)

tier 2 = arm64 – oracle linux 8 – memcache (session 적재 용도), docker – amazon linux – httpd, phpfpm(amazon linux 가 arm64 에서 최신 php 버전을 지원한다.)

tier 3 = arm64 – oracle linux 8 – mariadb

 


 

티어2 의 구성을 위해 ARM 인스턴스에 docker 레포지토리를 추가 하고, docker 와 memcache 를 설치 하고 활성화 한다.

 

위에서 언급 했지만 ARM64 cpu는 지원 하는 서드 파티 레포지토리가 없다.

AWS 에서 사용하는 Amazon Linux 2 의경우 내장된 명령어(repo) amazon-linux-extras 를 이용하여 최신 버전의 php 7.4 및 8.0 을 사용할 수 있다.

Amazon Linux 2 는 RHEL 또는 Fedora 와 같은 계열 이라고 볼 수 있다.

 

ARM64 서버에서 http 및 php를 구동하는 도커 이미지는 기존과 같은 방법으로 생성 하였다.

 

docker 내부에서 apache 및 php-fpm 은 apache:apache 권한으로 작동을 하게 되어 있다.

아래와 같이 docker 호스트 서버에 apache 그룹 및 apache 유져를 생성 해두면 권한 문제가 맞추어 지기 때문에 퍼미션 지정이 필요 없어 진다.

 

도커 프록시로 처리되어 http 포트를 firewall-cmd 명령어로 방화벽에 열 필요는 없지만 컨테이너 안에서 ARM 호스트 서버쪽으로 session 적재를 위해 접근 하기 때문에 방화벽을 허용 처리 한다.

 

도커 명령어를 이용해 컨테이너를 생성 한다.

 

포트 매칭(:80) 및 볼륨 매칭(/free/home/project/html)을 해서 컨테이너는 생성 했기 때문에

docker 내부가 아닌 Oracle Linux 상의 /free/home/project/html 폴더로 이동 하여 아래의 내용과 같이 index.php 를 만들고 http(:80) 포트로 접속하여 확인 한다.

2022-05-04_144251

 

다음은 x86_64 인스턴스에 nginx 으로 Lets’encrypt 으로 보안서버 SSL 을 구현 하고

reverse proxy 를 해서 현재 was 서버 쪽으로 접속 시키는 부분이 남았다. (Tier 1)

하지만 was 서버도 apache를 가지고 있기 때문에 사이트를 단순히 구동 시키는건 가능 하다 ‘ㅅ’a

 

docker 를 만들때 httpd 가 생성 하는 로그는 stdout/stderr 으로 연결 해두었다.

이는 json 형태로 저장 되며 /var/lib/docker/containers/컨테이너풀아이디/컨테이너풀아이디-json.log 경로에 json 형태로 존재 한다.

명령어로 확인 하는 방법은 아래 방법으로 확인할 수 있다. [apache(httpd), php-fpm]


아래는 위에서 pull 받은 도커이미지를 구축할때 사용된 Dockerfile  이다.