카테고리 Archives: OCI

mobaxtrem 을 통한 원격지 서버에서 firefox 실행

서버에서 GUI환경이 필요가 있을 때 xwindows 를 설치하고 vnc 또는 xrdp 를 이용한 접속을 해서 사용할 수 있다.

다만 그렇게 할 경우 불필요한 많은 프로그램을 서버에 설치해야 하기 때문에 ssh 접속을 통해 X11-forwarding 기능을 이용해서

프로세스는 서버에 떠있고 GUI 화면은 접속한 컴퓨터에서 사용할 수 있다.

 

서버의 OS 는 OCI – oraclelinux 8 버전이다.

 

서버 sshd 설정 변경

sshd 재 시작

!!!!!주의!!!!!: sshd 관련 설정을 변경한 뒤 재 시작할 경우 이미 접속한 세션은 문제가 없지만 새로운 ssh 접속이 불가능 하다.

때문에 sshd를 재 시작한 경우 새로운 터미널 창으로 ssh를 접속해서 문제가 없는지 확인 해야 한다.

 

관련 프로그램 및 라이브러리 설치

설치되는  xterm 은 간단한 테스트를 위한 프로그램(GUI  터미널 프로그램) 이다.

mesa-* 은 firefox를 실행 하기 위한 그래픽 관련 프로그램 이다.

 

위와 같이 설치 후에 ssh 아래와 같이 xtrem 을 실행하면 아래와 같이 gui 터미널 창이 실행 되는 것을 확인 할 수 있다.

2024-10-10_112043

ssh 접속을 해서 GUI 터미널을 열은 쓸모 없는 짓(=_=)이지만 검증을 위해 사용한다.

 


 

mobaxterm 설정 변경 및 실행

2024-10-10_1055252024-10-10_113739

 

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

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의 /var/www/html에 넣으면 호출을 할수 있다.
파일을 복사해 넣거나 압축을 해제한 후에는 chown -R apache:apache 파일명or폴더 을 잊지 말자…

 

배포된 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 를 이용한 데이터베이스 사용법

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

 

OCI 의 VCN (Virtual Cloud Network)

AWS 의 VPC 와 대응 되는 네트워크의 기본이라고 볼수 있다.

 

OCI의 경우 공용(Public) IP 를 부여된 경우 정상적인 사용이 가능하다.

다만 사설 (Private) IP 만 부여 된 경우 dnf(yum) 설치 조차 되지 않는다. (외부 통신(in/out) 완벽 차단 =_=aa)

 

보통 망분리를 생각 한 경우 서버내 프로그램 업데이트 등을 위해 Inbound 트래픽을 막고 Outbound 트래픽은 열어 두어야 한다.

해결 방법은 사설망 서브넷(subnet)을 추가 하고 NAT 게이트웨이 연결 해준뒤 그 서브넷 아래에 서버를 생성 해야 한다.

(생성된 인스턴스의 서브넷 변경 방법을 찾을수 없다. 한개의 서브넷엔 인터넷 게이트웨이와 NAT 게이트웨이가 공존할 수 없다.)

 

이해를 돕기 위해 네트워크 쪽에 가면 아래 그림과 같이 마법사를 통해 설명을 볼 수 있다.

2022-05-09_191244

네트워크 무지성 + 환상적인 발번역 의 결과로 매우 이해하기 어렵지만 다음과 같이 생각 하면 된다.

(사설망은 오라클 기본 사설망 대역인 10.0.x.x 기준 설명이 지만 192.168.x.x 대역이나 172.16.x.x 대역 지정도 가능.)

  • 공용 서브넷 = 퍼블릭 대역 (10.0.0.1 ~ 10.0.0.255)
  • 전용 서브넷 = 사설망 대역 (10.0.1.1 ~ 10.0.1.255)

OCI 아이디를 생성 후 최초 기본 상태에서는 위의 사설망용 전용 서브넷(10.0.1.1 ~ 10.0.1.255)은 기본 개설 되어 있지 않다.

 

아래 순서대로 사설망 추가를 진행한다.

  1. 먼저 보안 목록(SecurityList-enteroa-private)을 생성 한다.
  2. NAT, 서비스 게이트웨이를 생성 한다. (NatGateway-enteroa, ServiceGateway-enteroa)
  3. 경로테이블 디폴트 외에 추가 생성(Private Route Table for vcn-enteroa)을 한다.
  4. 경로테이블에 상세로 들어가서 (NatGateway-enteroa, ServiceGateway-enteroa) 을 추가 한다.
  5. 서브넷(subnet-enteroa-private)을 생성한다. (생성할때 사용할 보안 목록, 경로테이블을 설정한다.)
  6. 신규 서버를 생성할때 서브넷을 프라이빗 서브넷을 선택하여 생성 한다. (기존 인스턴스의 서브넷 변경은 아직 기능이 없는듯…)

위와 같은 과정으로 VCN 네트워크 구성 목표는 아래 그림과 같이 구성되도록 한다.

2022-05-18_110501

서버중 WAS 또한 Private 쪽에 있는것이 보안에는 좀더 유리 하다.

위와 같은 구조를 선택한 이유는 mariaDB 에 ssh 또는 mysql_con 접속을 위해서 web 또는 was 를 경유 해서 접속 했을때 ssh 속도 저하가 심해서

사양이 좋은 ARM64 서버 중 WAS 서버를 ssh 접속 경유지로 사용 하기 위해서 이다.


참고로 OCI 에서 일반적인 네트워크 초기 세팅 진행 순서는 아래와 같다.

  1. VCN 생성
    vcn-enteroa (172.16.0.0./16)
  2. 보안목록 2개 생성
    SecurityList-enteroa-private
    SecurityList-enteroa-public
  3. 경로테이블 추가 생성 (vcn 생성시 디폴트가 생성됨)
    Private Route Table for vcn-enteroa
  4. 서브넷 생성
    subnet0enteroa (172.16.0.0/24)
    subnet1enteroa (172.16.1.0/24)
  5. 인터넷 게이트웨이 생성
    InternetGateway-enteroa
  6. NAT 게이트웨이 생성
    NatGateway-enteroa
  7. 서비스 게이트웨이 생성(OCI PaaS 서비스와 연계가 필요할경우 진행)
    ServiceGateway-enteroa
  8. 경로테이블 설정
    Default Route Table for vcn-enteroa – 인터넷 게이트웨이 연결 (InternetGateway-enteroa)
    Private Route Table for vcn-enteroa – Nat, 서비스 게이트웨이 연결 (NatGateway-enteroa, ServiceGateway-enteroa)