참고:

Oracle Cloud Infrastructure에 다음 클라우드 배포: Ampere A1

이 사용지침서에서는 OCI(Oracle Cloud Infrastructure)에서 인기 있는 오픈 소스 협업 플랫폼인 Nextcloud를 설치합니다. 다음 클라우드 서버에 단일 Ampere A1 컴퓨트 인스턴스를 사용합니다. 또한 Podman을 사용하여 Nextcloud를 컨테이너 집합으로 실행해야 합니다. Podman은 Open Container Initiative 표준을 사용하여 컨테이너를 관리하고 실행하기 위한 컨테이너 엔진입니다. Docker와의 완전한 API 호환성을 제공하며 docker 명령 대신 역할을 수행합니다. 그러나 데몬 없는 아키텍처와 루트가 없는 컨테이너 지원, cgroupsv2 지원 등의 Docker에 비해 몇 가지 이점을 제공합니다.

다음 클라우드는 Arm 아키텍처를 지원하는 도커 컨테이너 이미지를 제공합니다. 다음 클라우드에는 MySQL 또는 MariaDB를 사용할 수 있는 데이터베이스도 필요합니다. 확장성이 뛰어난 구축의 경우, OCI에서 MySQL 데이터베이스 서비스를 이용하면 MySQL 데이터베이스를 손쉽게 확장, 백업, 관리할 수 있습니다.

컨테이너 내에 생성된 데이터는 지속되지 않으며, Nextcloud는 업로드한 파일을 저장하고 내부 상태를 위해 영구 스토리지를 필요로 합니다. 데이터를 지속하기 위해 OCI 블록 스토리지 서비스를 사용하여 볼륨을 사용할 수 있습니다. 볼륨은 Podman이 생성하고 관리하는 스토리지 장치입니다. 볼륨은 podman volume 명령을 사용하거나 컨테이너를 생성하는 동안 직접 생성됩니다.

Nextcloud 웹 기반 UI 및 서비스를 활성화하려면 트래픽을 허용하도록 OCI Network 보안 목록을 변경해야 합니다.

이러한 구성요소에서는 배치에 대한 기본 토폴로지를 제공합니다.

구조

arch.png에 대한 설명

소개

목표

이 자습서에서는 다음을 수행합니다.

필요 조건

  1. 유료 Oracle Free Tier(Trial), LiveLabs 클라우드 계정
  2. OCI 콘솔에 대한 이해
  3. 네트워킹 개요
  4. 구획에 대한 기본적인 이해
  5. 컨테이너 및 Podman에 대한 기본 개념 지식

환경 설정

먼저 Java EE 애플리케이션을 생성 및 배치하는 데 사용할 Oracle 클라우드 환경을 시작합니다. 이 환경은 클라우드 구획 내에 포함되어 있으며, 구획 내의 통신은 VCN(가상 클라우드 네트워크)을 통해 이루어집니다. 구획과 VCN은 전체 환경을 격리하고 보호합니다. 다음 클라우드 서버를 호스팅하기 위해 Ampere A1 컴퓨트 인스턴스를 배포합니다. 컴퓨트 인스턴스가 생성되면 애플리케이션을 노출하고 인스턴스에 Nextcloud를 설치할 액세스 정책을 설정합니다.

기본 OCI 인프라 설정

  1. 탐색 메뉴를 엽니다. 거버넌스 및 관리에서 ID로 이동하고 구획을 누릅니다. 이 화면에서 구획 목록이 표시됩니다. 구획 생성을 누릅니다.

  2. 다음을 입력합니다.

    • 이름: "AppDev"를 입력합니다.
    • 설명: (필수) 설명을 입력합니다(예: "시작하기 자습서용 AppDev 구획"). 기밀 정보를 입력하지 마십시오.
    • 상위 구획: 이 구획이 상주할 구획을 선택합니다. 기본값은 루트 구획(또는 테넌시)입니다.
    • 구획 생성을 누릅니다.
    • 구획이 목록에 표시됩니다.

Ampere A1 컴퓨트 인스턴스 생성

  1. Ampere A1 컴퓨트 인스턴스를 생성하려면 콘솔의 왼쪽 상단 모서리에 있는 탐색 메뉴를 사용하고 컴퓨트 > 인스턴스로 이동합니다.

  2. 인스턴스 생성 플로우를 엽니다.

    1. AppDev 구획에 있는지 확인합니다.
    2. 인스턴스 생성을 누릅니다.
  3. 인스턴스 생성 페이지에서 VCN(가상 클라우드 네트워크), IG(인터넷 게이트웨이) 등과 같은 새 네트워크 리소스와 함께 새 인스턴스를 생성합니다.

    1. 인스턴스 이름을 Nextcloud로 지정합니다.
    2. Oracle Linux 8 이상을 사용하도록 이미지 선택 업데이트
    3. 사용 가능한 컴퓨트 구성을 보려면 구성 변경 단추를 누릅니다.

     인스턴스 생성

    03_create_instance02.png 그림에 대한 설명

  4. 인스턴스에 대한 이미지를 구성합니다.

    1. 사용 가능한 OS 이미지를 보려면 이미지 변경 단추를 누릅니다.
    2. Oracle Linux 8 이상을 선택합니다.

    Oracle Linux 8 선택

    03_create_instance02_1.png 그림에 대한 설명

  5. 인스턴스에 대한 리소스를 구성합니다.

    1. 모양 계열에 대해 선택한 Ampere Arm 기반 프로세서를 선택합니다.
    2. Ampere Arm 기반 프로세서가 있는 구성 목록에서 VM.Standard.A1.Flex 구성을 선택합니다. A1 구성은 유연하며 코어 수 및 메모리 양을 수정할 수 있습니다. VM용 코어 1개 및 6GB 메모리를 선택합니다.

    구성 선택

    04_create_instance03.png 그림에 대한 설명

  6. 네트워킹 옵션을 선택합니다. 다음 클라우드 배치에 필요한 새 VCN 및 서브넷을 생성합니다. 인스턴스에 대해 공용 IP 주소를 지정하도록 선택해야 합니다.

  7. SSH 키 쌍을 생성하고 다운로드합니다. 이 단계는 선택 사항이지만 나중에 유지 관리 및 업그레이드할 것을 권장합니다. 사용하려는 키 쌍이 이미 있는 경우 공개 키를 가져올 수도 있습니다. SSH 키를 생성하는 방법을 알고 싶으면 SSH 키 생성 자습서의 지침을 따릅니다.

    네트워크 옵션

    06_create_instance05.png 그림에 대한 설명

  8. 네트워킹 리소스를 생성하고 컴퓨트 인스턴스를 실행하려면 생성을 누릅니다. 인스턴스 실행

    07_create_instance06.png 그림에 대한 설명

사용자에게 애플리케이션 포트 노출

인터넷에서 응용 프로그램에 액세스할 수 있으려면 응용 프로그램에서 사용할 포트를 열어야 합니다. 이 섹션에서는 애플리케이션이 트래픽을 보내고 받을 수 있도록 클라우드 네트워크 및 컴퓨트 인스턴스의 방화벽 규칙에 보안 목록을 구성합니다.

VCN(가상 클라우드 네트워크) 구성

보안 목록은 인스턴스에 대한 가상 방화벽으로 작동하며, 수신 및 송신 규칙은 허용되는 트래픽 유형을 지정합니다. 서브넷 레벨에서 구성된 보안 목록으로, 보안 규칙을 해당 서브넷의 모든 네트워크 요소에 적용합니다. 네트워크에는 초기 규칙 세트를 포함하는 기본 보안 목록이 제공됩니다. 기본 보안 목록을 사용하면 SSH를 사용하여 인스턴스에 접속하고 인스턴스에서 모든 대상에 대해 아웃바운드 네트워크 호출을 수행할 수 있습니다.

  1. 생성한 인스턴스에 대한 인스턴스 세부정보 페이지로 이동합니다. 컴퓨트 > 인스턴스 > 생성한 인스턴스를 누르십시오.
  2. 서브넷을 눌러 인스턴스가 연결된 서브넷으로 이동합니다. 서브넷 선택

    01_setup_network_01.png 그림에 대한 설명

  3. 서브넷에서 기본 보안 목록을 선택합니다.
  4. "수신 규칙 추가"를 눌러 규칙과 일치하는 수신 트래픽을 허용하는 새 규칙을 추가합니다.
  5. 포트 8080에서 수신 트래픽을 허용하는 수신 규칙을 추가합니다.
    1. 소스 CIDR0.0.0.0/0으로 설정합니다. 이렇게 하면 모든 소스의 수신 트래픽이 허용됩니다.
    2. Destination Port Range8080로 설정합니다. 그러면 대상이 포트 8080로만 설정됩니다. 이제 모든 소스의 트래픽이 포트 8080를 사용할 수 있습니다. 이는 우리가 필요로 하는 요소이므로 어디에서나 어플리케이션에 도달할 수 있습니다.
    3. 설명을 제공하십시오. 수신 규칙 설정

      01_setup_network_04.png 그림에 대한 설명

인스턴스 구성

방화벽 규칙은 인스턴스의 패킷 레벨 트래픽을 제어합니다. 인스턴스 자체에 방화벽 규칙을 직접 구성하고 추가 보안 레벨을 제공합니다.

  1. 생성한 인스턴스에 대한 인스턴스 세부정보 페이지로 이동합니다. 컴퓨트 > 인스턴스 > 생성한 인스턴스를 누르십시오.
  2. 인스턴스의 공용 IP 주소를 복사합니다.
  3. SSH를 사용하여 인스턴스에 로그인합니다. 인스턴스 생성 단계에서 생성하거나 제공한 키를 사용합니다. Oracle Linux 운영 체제를 사용하는 인스턴스의 기본 사용자 이름은 opc입니다.
  4. 방화벽 구성 명령을 실행합니다. 그러면 인스턴스 자체의 방화벽이 8080 포트를 표시하고 수신 트래픽을 수락하도록 수정됩니다.

    sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

다음 클라우드 배포: Ampere A1

이제 Ampere A1 컴퓨팅 플랫폼에서 컨테이너 배포로 Nextcloud를 실행할 수 있습니다. 또한 Oracle Linux 8에 포함된 Podman과 같은 새로운 컨테이너 툴을 사용할 것입니다. Podman은 OCI(Open Container Initiative) 호환 컨테이너를 실행하고 관리할 수 있는 경량 유틸리티를 제공합니다. Podman 배포는 기존 컨테이너 이미지를 다시 사용할 수 있습니다. Podman은 실행 중인 데몬을 필요로 하지 않으며 루트 권한 없이 컨테이너를 시작하고 실행할 수 있도록 합니다. Oracle Linux에서 Podman에 대해 자세히 알아보려면 official documentation를 방문하십시오.

컨테이너 도구 설치

Oracle Linux 8.x로 인스턴스가 생성되면 컨테이너화된 작업 부하를 배포하는 데 필요한 도구로 인스턴스를 준비하는 container-tools 패키지를 설치할 수 있습니다.

  1. SSH를 사용하여 인스턴스에 로그인합니다. 인스턴스 생성 단계에서 생성하거나 제공한 키를 사용합니다. Oracle Linux 운영 체제에서 실행 중인 인스턴스의 기본 사용자 이름은 opc입니다.

  2. 컨테이너 작업에 필요한 모든 도구를 가져오는 container-tools 모듈을 설치합니다.

    sudo dnf module install container-tools:ol8
    
    sudo dnf install git
    

Pod 정의 생성

Podman은 Pods라는 컨테이너 그룹을 관리할 수 있습니다. 일반적으로 Pod는 동일한 네트워크, pid 및 ipc 이름 공간을 공유하는 하나 이상의 컨테이너의 그룹입니다. 이 개념은 처음 Kubernetes 프로젝트에서 소개되었고 Podman Pods는 Kubernetes Pods와 매우 유사합니다.

여러 가지 방법으로 Pod는 각 컨테이너 내의 서비스가 실행되는 가상 호스트처럼 동작합니다. 즉, 각 컨테이너는 동일한 호스트에서 실행되는 것처럼 서로 다른 컨테이너의 서비스에 액세스할 수 있습니다. 이러한 방식으로 컨테이너를 실행하면 네트워킹과 관련된 많은 복잡성이 제거되므로 애플리케이션 자체의 서비스에만 사용되는 포트의 공용 노출을 더 쉽게 제한할 수 있습니다.

Pods는 애플리케이션이 여러 컨테이너로 구성된 경우처럼 관련 컨테이너를 관리할 수 있는 좋은 방법입니다. 이 자습서에서는 다음 클라우드를 Pod로 배포해야 합니다. NextCloud에 필요한 컨테이너가 Pod에 포함되어 있으며 함께 시작 및 중지됩니다. Pod로 응용 프로그램을 관리하는 첫 단계는 빈 Pod 정의를 생성하는 것입니다.

아래 명령으로 Pod를 생성합니다.

podman pod create --hostname nextcloud --name nextcloud --publish 8080:80 --infra-image k8s.gcr.io/pause:3.1
  1. podman pod create - Pod를 생성합니다.
  2. --hostname nextcloud - Pod에 대한 호스트 이름을 nextcloud로 설정합니다.
  3. --name nextcloud - Pod의 이름을 nextcloud로 설정합니다.
  4. --publish 8080:80 - pod의 포트 80을 호스트의 포트 8080에 게시합니다.

저장 영역 볼륨 정의

이제 Pod를 정의했으므로 Pod를 컨테이너로 채우기 전에 몇 가지 저장 영역 옵션을 정의해야 합니다. 컨테이너는 기본적으로 컨테이너 내에 생성된 모든 파일에 쓰기 가능한 컨테이너 레이어를 사용합니다. 즉, 컨테이너에서 프로세스에서 생성한 파일과 데이터는 지속되지 않으며 컨테이너를 제거하거나 종료할 때 손실됩니다. 또한 컨테이너 간에 데이터를 공유하기가 어렵습니다. 볼륨은 컨테이너에 의해 생성된 데이터를 보관하는 기본 방법입니다. 호스트 시스템의 스토리지 위치에 대한 스토리지 추상화라고 생각할 수 있지만 컨테이너의 수명 주기에 관계없이 관리됩니다. 또한 컨테이너를 여러 컨테이너에 동시에 마운트하여 컨테이너 간에 데이터를 쉽게 공유할 수 있습니다.

다음 클라우드 권장 사항에 따라 3개의 볼륨을 사용하여 데이터를 관리합니다.

  1. 이름이 nextcloud-appdata인 볼륨은 다음 클라우드에 대한 기본 애플리케이션 상태를 저장합니다.

  2. 이름이 nextcloud-files인 볼륨은 사용으로 업로드되고 생성된 파일을 저장합니다.

  3. 이름이 nextcloud-db인 볼륨은 MySQL 데이터베이스에 대한 데이터베이스 파일을 저장합니다.

    podman volume create nextcloud-appdata 
    podman volume create nextcloud-files
    podman volume create nextcloud-db
    

MySQL Database 실행

이제 볼륨이 연결된 다음 클라우드에 대한 데이터베이스를 시작할 수 있습니다. 데이터베이스 컨테이너는 이미 생성된 포드에서 시작됩니다. Nextcloud에서 사용하는 데이터베이스는 MySQL입니다. 여기서 우리는 이 데이터베이스를 Pod의 컨테이너로 실행합니다. 보다 강력하고 전담 관리되는 배포를 위해 이 컨테이너를 OCI MySQL 데이터베이스 서비스로 대체할 수 있습니다.

데이터베이스 시작 명령은 아래와 같으며 각 옵션에 대해 설명합니다.

: 아래의 MYSQL_PASSWORDMYSQL_ROOT_PASSWORD 변수에 대해 강력한 암호를 제공해야 합니다.

podman run --detach --pod=nextcloud \
--env MYSQL_DATABASE=nextcloud \
--env MYSQL_USER=nextcloud \
--env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
--env MYSQL_ROOT_PASSWORD=MYSQL_ROOT_PASSWORD \
--volume nextcloud-db:/var/lib/mysql:Z \
--restart on-failure \
--name nextcloud-db \
mysql/mysql-server:8.0 
  1. podman run - run 명령은 podman에게 지정된 매개변수를 사용하여 컨테이너에서 명령을 실행하도록 지시합니다. 실행할 명령은 일반적으로 이미지 자체에 정의되어 있습니다.
  2. --detach - 분리된 모드: 백그라운드에서 컨테이너를 실행하고 새 컨테이너 ID를 인쇄합니다.
  3. --pod=nextcloud - 기존 Pod에서 컨테이너를 실행합니다. 여기서는 이전에 Nextcloud를 위해 생성한 컨테이너 의 실행을 선택했습니다.
  4. --env - 임의의 환경 변수를 설정합니다. 이러한 환경 변수는 컨테이너 내부에서 실행되는 프로세스에서 액세스할 수 있습니다.
  5. --volume nextcloud-db:/var/lib/mysql:Z - MySQL 데이터 파일의 기본 위치인 /var/lib/mysql 위치에 nextcloud-db라는 볼륨을 마운트합니다. Z 옵션은 개인 비공유 레이블로 컨텐츠에 레이블을 지정하도록 Podman에 지시합니다.
  6. --restart on-failure - 컨테이너가 종료될 때 따르도록 정책을 다시 시작합니다. 컨테이너는 실패할 때 다시 시작됩니다. 실패란 컨테이너에 상태가 0이 아닌 프로세스가 존재하는 경우입니다.
  7. --name nextcloud-db - nextcloud-db 이름을 컨테이너에 지정합니다.
  8. mysql/mysql-server:8.0 - 컨테이너 생성에 사용할 이미지

분리된 모드에서 컨테이너를 실행하므로 Podman이 백그라운드에서 시작하고 종료됩니다. 시작 및 로그의 상태를 보려면 다음 명령을 실행하면 됩니다. Ctrl+C를 눌러 로그 따르기를 정지합니다.

podman logs -f nextcloud-db

다음 클라우드 배포

이제 같은 포드의 다른 컨테이너로 Nextcloud 자체를 배포할 수 있습니다. 매개변수는 이전 명령과 유사하며 여기서 Nextcloud에서 사용해야 하는 데이터베이스에 대한 데이터베이스 연결 세부정보를 전달합니다.

: MYSQL_DATABASE, MYSQL_USERMYSQL_PASSWORD 변수의 값이 데이터베이스를 시작할 때 제공한 값과 동일한지 확인합니다. NEXTCLOUD_ADMIN_USERNEXTCLOUD_ADMIN_PASSWORD에 대한 값을 원하는 값으로 업데이트해야 합니다.

podman run --detach --pod=nextcloud \
  --env MYSQL_HOST=127.0.0.1 \
  --env MYSQL_DATABASE=nextcloud \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=NEXTCLOUD_PASSWORD \
  --env NEXTCLOUD_ADMIN_USER=NC_ADMIN \
  --env NEXTCLOUD_ADMIN_PASSWORD=NC_PASSWORD \
  --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> \
  --volume nextcloud-appdata:/var/www/html:Z \
  --volume nextcloud-files:/var/www/html/data:Z \
  --restart on-failure \
  --name nextcloud-app \
  docker.io/library/nextcloud:21
  1. --env MYSQL_HOST=127.0.0.1 - 데이터베이스와 응용 프로그램이 모두 동일한 POD에 있으므로 응용 프로그램은 동일한 호스트에서 모두 실행 중인 것처럼 127.0.0.1를 사용하여 데이터베이스 컨테이너에 액세스할 수 있습니다.
  2. --env NEXTCLOUD_TRUSTED_DOMAINS=<your public IP> - Trusted Domain은 Nextcloud에서 사용하는 보안 기능이며 Nextcloud에 액세스할 수 있는 모든 도메인 목록을 제공해야 합니다. 이 경우, 다음 클라우드가 실행될 것이므로 인스턴스의 공용 IP 주소가 됩니다.

시작 로그를 보려면 다음을 사용합니다.

podman logs -f nextcloud-app

시작이 완료되면 http://<your_public_ip>:8080로 이동하여 다음 클라우드 서버에 연결할 수 있습니다. NEXTCLOUD_ADMIN_USERNEXTCLOUD_ADMIN_PASSWORD에 대해 제공한 값을 사용하여 로그인합니다.

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.