Optimism 호스트 설치 가이드
OP Stack은 바이너리 실행도 가능하지만 두 프로세스(op-geth + op-node)를 각각 관리해야 하므로 대부분 Docker Compose를 사용합니다. 본 문서는 소스 빌드·systemd 기반 구성 개요입니다.
- 공식 문서: https://docs.optimism.io/builders/node-operators/tutorials/mainnet
- 공식 저장소: https://github.com/ethereum-optimism/optimism
시스템 요구사항
| 항목 | 권장 |
|---|---|
| CPU | 8 vCPU+ |
| RAM | 32 GB+ |
| Disk | 2 TB NVMe (Full), Archive는 10 TB+ |
| Network | 100 Mbps+ |
빌드
sudo apt update && sudo apt install -y git curl build-essential
# Go 1.21+
wget https://go.dev/dl/go1.21.13.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.13.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# op-geth
git clone https://github.com/ethereum-optimism/op-geth.git
cd op-geth
git checkout v1.101411.0
make geth
sudo cp build/bin/geth /usr/local/bin/op-geth
cd ..
# op-node
git clone https://github.com/ethereum-optimism/optimism.git
cd optimism/op-node
git checkout op-node/v1.10.2
make op-node
sudo cp bin/op-node /usr/local/bin/
cd ../..
Genesis / Rollup config
mkdir -p ~/op/data
cd ~/op
wget https://networks.optimism.io/op-mainnet/genesis.json
wget https://networks.optimism.io/op-mainnet/rollup.json
# JWT secret (op-geth <-> op-node Engine API)
openssl rand -hex 32 > ~/op/jwt.txt
op-geth 초기화 및 실행
op-geth init --datadir=$HOME/op/data $HOME/op/genesis.json
op-geth \
--datadir $HOME/op/data \
--http --http.port=8545 --http.addr=0.0.0.0 --http.api=net,web3,eth,debug \
--ws --ws.port=8546 --ws.addr=0.0.0.0 --ws.api=net,web3,eth \
--authrpc.addr=127.0.0.1 --authrpc.port=8551 \
--authrpc.jwtsecret=$HOME/op/jwt.txt \
--syncmode=full --rollup.sequencerhttp=https://mainnet-sequencer.optimism.io
op-node 실행
op-node \
--l1=<L1_GETH_RPC> \
--l1.beacon=<L1_BEACON_API> \
--l2=http://127.0.0.1:8551 \
--l2.jwt-secret=$HOME/op/jwt.txt \
--rollup.config=$HOME/op/rollup.json \
--rpc.addr=0.0.0.0 --rpc.port=9545 \
--p2p.listen.ip=0.0.0.0 --p2p.listen.tcp=9003 --p2p.listen.udp=9003
systemd 서비스 (두 개 구성)
# /etc/systemd/system/op-geth.service
[Unit]
Description=Optimism op-geth (EL)
After=network-online.target
[Service]
User=op
Environment="HOME=/home/op"
ExecStart=/usr/local/bin/op-geth \
--datadir /home/op/data \
--http --http.port=8545 --http.addr=0.0.0.0 --http.api=net,web3,eth \
--authrpc.addr=127.0.0.1 --authrpc.port=8551 \
--authrpc.jwtsecret=/home/op/jwt.txt \
--syncmode=full
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/op-node.service
[Unit]
Description=Optimism op-node (rollup)
After=op-geth.service
Requires=op-geth.service
[Service]
User=op
Environment="HOME=/home/op"
ExecStart=/usr/local/bin/op-node \
--l1=<L1_GETH_RPC> \
--l1.beacon=<L1_BEACON_API> \
--l2=http://127.0.0.1:8551 \
--l2.jwt-secret=/home/op/jwt.txt \
--rollup.config=/home/op/rollup.json \
--rpc.addr=0.0.0.0 --rpc.port=9545
Restart=on-failure
[Install]
WantedBy=multi-user.target
상태 확인
# L2 최신 블록
curl -s -X POST http://localhost:8545 \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' | jq
# op-node sync status
curl -s -X POST http://localhost:9545 \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"optimism_syncStatus","params":[],"id":1}' | jq