> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-tokenization-section.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Injective 네트워크를 위한 Cosmovisor 설정 가이드

Cosmovisor는 바이너리(체인) 업그레이드 관리를 단순화하는 Cosmos SDK 기반 블록체인용 프로세스 관리자입니다. 이 가이드는 Injective 네트워크 노드에 Cosmovisor를 설정하는 단계별 지침을 제공합니다.

> **참고:** 이 지침은 기존 체인 바이너리(예: `injectived`)와 소스에서 Cosmovisor를 설치하려는 경우 작동하는 Go 환경이 이미 있다고 가정합니다. 특정 설정에 맞게 이름과 경로를 조정하세요.

***

## 목차

1. [설치](#installation)
   * [Go를 통한 설치](#installing-via-go)
2. [환경 변수](#environment-variables)
3. [디렉터리 구조](#directory-structure)
4. [Cosmovisor 실행](#running-cosmovisor)
5. [체인 업그레이드 처리](#handling-chain-upgrades)
6. [Systemd 서비스로 Cosmovisor 실행](#running-cosmovisor-as-a-systemd-service)

***

## 설치

### Go를 통한 설치

Go가 설치되어 있으면 다음 명령으로 Cosmovisor를 설치할 수 있습니다:

```bash theme={null}
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0
```

> **팁:** Go 바이너리 설치 경로(일반적으로 `$GOPATH/bin` 또는 `$HOME/go/bin`)가 시스템의 `PATH`에 추가되어 있는지 확인하세요. 다음을 실행하여 설치를 확인할 수 있습니다:
>
> ```bash theme={null}
> which cosmovisor
> ```

## 환경 변수

Cosmovisor가 실행할 바이너리와 위치를 알 수 있도록 다음 환경 변수를 설정합니다:

* **`DAEMON_NAME`**\
  체인 바이너리의 이름입니다(예: `injectived`).

* **`DAEMON_HOME`**\
  노드의 홈 디렉터리입니다(예: `~/.injectived`).

이러한 변수를 쉘의 프로필(`~/.bashrc` 또는 `~/.profile`)에 설정하거나 터미널 세션에서 직접 내보낼 수 있습니다:

```bash theme={null}
export DAEMON_NAME=injectived
export DAEMON_HOME=~/.injectived
```

***

## 디렉터리 구조

Cosmovisor는 노드의 홈 디렉터리에서 특정 폴더 구조를 예상합니다:

1. **Genesis 디렉터리 생성**

   이 디렉터리는 초기(genesis) 바이너리를 보관합니다.

   ```bash theme={null}
   mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
   ```

2. **현재 바이너리 복사**

   현재 체인 바이너리(예: `injectived`)를 genesis 폴더에 넣습니다. 파일 이름이 `DAEMON_NAME` 값과 일치하는지 확인하세요(다음 섹션 참조).

   ```bash theme={null}
   cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived
   ```

***

## Cosmovisor 실행

체인의 바이너리를 직접 실행하는 대신 다음을 실행하여 Cosmovisor로 노드를 시작합니다:

```bash theme={null}
cosmovisor run start
```

Cosmovisor는:

* `$DAEMON_HOME/cosmovisor/genesis/bin`(또는 적절한 업그레이드 폴더)에서 바이너리를 찾습니다.
* 해당 바이너리를 사용하여 노드를 시작합니다.
* 온체인 업그레이드 신호를 모니터링하고 필요할 때 자동으로 바이너리를 전환합니다.

***

## 체인 업그레이드 처리

업그레이드가 온체인에서 발표되면 Cosmovisor가 자동으로 전환할 수 있도록 새 바이너리를 준비합니다:

1. **업그레이드 디렉터리 생성**

   온체인에서 제공된 업그레이드 이름을 사용합니다(예: `v1.14.0`):

   ```bash theme={null}
   mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
   ```

2. **새 바이너리 배치**

   새 바이너리를 컴파일하거나 다운로드한 다음 업그레이드 디렉터리에 복사합니다. 바이너리 이름이 `DAEMON_NAME`과 일치하는지 확인하세요.

   ```bash theme={null}
   cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
   cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
   ```

> **팁:** GitHub에서 `injectived` 바이너리 패키지를 다운로드한 경우 `libwasmvm.x86_64.so`를 업그레이드 `bin` 디렉터리에 복사합니다. 이 디렉터리를 `LD_LIBRARY_PATH`에 추가하는 환경 변수가 나중에 systemd 서비스에 추가됩니다.

3. **업그레이드 프로세스**

   업그레이드 높이에 도달하면 Cosmovisor가 예약된 업그레이드를 감지하고 해당 업그레이드 폴더에 있는 바이너리로 자동 전환합니다.

***

## Systemd 서비스로 Cosmovisor 실행

프로덕션 환경에서는 노드를 systemd 서비스로 실행하는 것이 일반적입니다. 아래는 예시 서비스 파일입니다.

1. **서비스 파일 생성**

   다음 내용으로 파일(예: `/etc/systemd/system/injectived.service`)을 생성합니다. 경로와 `<your_username>`을 적절히 조정하세요:

   ```ini theme={null}
   [Unit]
   Description=Injective Daemon managed by Cosmovisor
   After=network-online.target

   [Service]
   User=<your_username>
   ExecStart=/home/<your_username>/go/bin/cosmovisor run start
   Restart=always
   RestartSec=3
   Environment="DAEMON_NAME=injectived"
   Environment="DAEMON_HOME=/home/<your_username>/.injectived"
   Environment="PATH=/usr/local/bin:/home/<your_username>/go/bin:$PATH"
   Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
   Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
   Environment="UNSAFE_SKIP_BACKUP=true"
   Environment="LD_LIBRARY_PATH=/home/<your_username>/.injectived/cosmovisor/current/bin"

   [Install]
   WantedBy=multi-user.target
   ```

2. **서비스 활성화 및 시작**

   ```bash theme={null}
   sudo systemctl daemon-reload
   sudo systemctl enable injectived.service
   sudo systemctl start injectived.service
   ```

3. **로그 확인**

   서비스가 원활하게 실행되는지 확인합니다:

   ```bash theme={null}
   journalctl -u injectived.service -f
   ```

***
