티스토리 뷰
해당 글은 https://blog.naver.com/kbs4674/221425491576 로 부터 게시글이 이전되었습니다.
이번에 블록체인 해커톤에서 개발을 진행하면서 Geth서버를 돌릴 때, 쉬운 방법으로서는 로컬로 돌리는 방법도 있었지만, 외부에서도 접근이 가능할 수 있는 AWS EC2 연동방식을 채택하게 되었습니다.
초반에는 Geth서버를 돌리는데에 있어 구름IDE 채택을 할려 했는데 이번에 저희가 프로젝트를 진행하면서 구름IDE가 막혔는지 계속 CPU가 뻑나는 문제가 있더라구요.. 게다가 AWS EC2에 Geth 설치법을 설명한 글이 제대로된게 없어서 이번 포스팅을 통해 기여를 하고자 합니다.
-
AWS EC2 설정
1. AWS EC2 한국서버 DashBoard로 갑니다.
2. 새로운 EC2 인스턴스를 생성해 주세요.
1) EC2 인스턴스 설정 (단계 1) : Ubuntu OS를 선택합니다. (Ubuntu Server 16.04 LTS (HVM), SSD Volume Type)
참고 참고로 최신버전보다 하위단계로 선택하는 것이 좋습니다. (안정성 고려) / 저는 16.04랑 18.04가 있었는데 16.04로 선택했습니다.
2) EC2 인스턴스 설정 (단계 2) : 인스턴스 유형은 최소 t2.medium 이상으로 선택해주세요.
3) 단계3 ~ 단계5는 그냥 건너뛰어도 됩니다. (개인취향 차)
4) EC2 인스턴스 설정 (단계 6) : 보안 그룹 구성, 즉 허용 포트를 열어주는 곳입니다.
규칙 추가 버튼을 클릭해서 사용자 지정 TCP 규칙을 선택한 후, 포트범위는 50796, 소스는 위치 무관
참고 포트번호는 뭘 해도 상관없으나, 기존 이더리움의 8545 포트는 피해주세요.
8545 포트는 접속이 안될 수도 있다는 얘기가 있습니다.
3. 새 인스턴스를 생성 후, putty를 통해 EC2에 접속해주세요.
참고1 AWS EC2(OS : Ubuntu) 초기 계정 ID는 ubuntu 입니다.
참고2 AWS EC2 계정인증 SSH 접속법은 설명에서 생략하겠습니다, 혹시 궁금하시다면 여기를 클릭해서 참고해주세요.
- AWS EC2 : Ubuntu에 Geth 서버 설치
1. 터미널에 아래 명령어 입력을 통해 go-ethereum 및 go-lang 설치 준비를 해주세요.
git clone https://github.com/ethereum/go-ethereum
sudo apt-get update
2. 터미널에 코드를 입력 해주세요.
sudo apt-get -y upgrade
그럼 중간에 뭐 선택지가 하나 나오는데
keep the local version currently installed 을 선택 후 엔터를 눌러주세요.
3. 이어서 go-lang 설치를 위해 계속 코드 입력해주세요 :
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
sudo tar -xvf go1.10.3.linux-amd64.tar.gz
sudo mv go /usr/local
4. vi .bashrc 명령어를 입력 후 .bashrc 파일 내 아래 코드를 추가해주세요. (go-lang에 대한 환경정의)
export GOROOT=/usr/local/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH\
5. SSH bash(putty)를 나갔다 다시 접속해주세요.
6. make geth를 설치하고자 이어서 순차적으로 명령어 입력해 주세요.
sudo apt-get install -y build-essential
cd go-ethereum
make geth
이어서 geth가 제대로 설치되었는지 확인합니다.
./build/bin/geth version
이 때 잠시 geth를 입력해보겠습니다.
geth
일단 현 시점에서 명령어는 작동이 안 될 것입니다.
7. geth 파일을 Copy and write 합니다.
그리고 which를 통해 명령어 구성 파일의 위치를 확인해보세요!
sudo cp build/bin/geth /usr/local/bin/
which geth
이제
geth
명령어를 입력하면 이전과 달리 명령어가 제대로 작동됨이 확인됩니다.
8. 블록 계정 생성을 해보겠습니다.
참고1 명령어를 입력하는 현재 위치는 go-ethereum 폴더 이어야 합니다.
참고2 현재 위치는 터미널에서 pwd 로 확인해 보세요!
mkdir ethereum
geth --datadir ethereum account new
geth --datadir ethereum account new 명령어를 입력함으로서 새로운 이더리움 계정을 생성을 할 수 있게 되는데,
현재 bash창에서는 계정을 생성하면서 설정할 암호를 묻고 있을겁니다.
이번 실습 때에는 모든 계정의 암호를 간단하게 eth 로 통일합니다.
이어서 한번 더 계정 생성을해주세요 :
geth --datadir ethereum account new
참고 터미널에
geth --datadir ethereum account list
를 입력하면 생성된 계정 목록/정보를 열람할 수 있습니다.
9. go-ethereum 폴더 내에서 터미널에서
vi Genesis.json
을 입력해주고, vi 편집기에 다음 Json 코드를 입력해주세요.
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash":
"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x800000",
"difficulty": "1",
"mixhash":
"0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {
"423d5552b8334430ad6e5ec862e700f139782d60": {
"balance": "10000000000000000000"
},
"c3675b08cdc3c3236daec2fedf378697fff4f01c": {
"balance": "10000000000000000000"
}
}
}
그리고 :wq 로 저장 후, Genesis.json 파일을 생성해 주세요.
Genesis.json 을 실행시키면 지금까지 생성된 계정들에 대해 이더리움 코인을 alloc.balance에 입력된 만큼 지급을 해줍니다. (딱 한번만 실행 가능)
참고 지금 입력된 코인 값은 '1코인' 입니다.
그리고 해당 예제에서는 난이도(difficulty)를 가장 쉬운 1 로 지정했습니다.
(본래 예제 파일에서는 난이도가 0x400 였습니다.)
10. Genesis.json 파일을 실행해주세요.
geth --datadir ethereum init Genesis.json
11. 이어서 Geth 초기 설정을 시행 준비를 합니다.
geth --datadir ethereum --networkid 15 console
참고 여기서 networkid가 15로 지정된게 확인되는데, 이는 Genesis.json 파일 내에서 config.chainId 값을 따른 겁니다.
12. 현재 우리는 Geth 콘솔에 접근을 한 상태입니다.
간단한 명령어 몇 선을 소개하겠습니다.
eth.accounts
eth.accounts[0]
eth.getBalance(eth.accounts[1])
eth.blockNumber
personal.unlockAccount(eth.accounts[0], "eth")
13. 이제 최초 채굴 작업을 진행해보겠습니다.
miner.start()
해당 채굴 작업은 percentage의 100% 수치가 2회 순환되어야 합니다.
14. 채굴이 끝났다면(2회 이상 순환) 채굴을 이만 멈춰주세요.
(작업중인 터미널에 그냥 그대로 입력해주시면 됩니다.)
miner.stop()
15. 채굴 이후 계정들의 잔액을 확인해보겠습니다.
eth.getBalance(eth.accounts[0])
16. 이어서 Ctrl+D 로 Geth Console을 나가주고, 새로운 Console을 열어보겠습니다.
참고로 지금 열어볼 콘솔은 이전 콘솔과는 다르게 이제 외부에서 Geth 서버에 접근이 가능한 Console 입니다.
geth --networkid 15 --nodiscover --maxpeers 0 --datadir ethereum --rpc --rpcaddr "0.0.0.0" --rpcport 50796 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" console 2>> geth.log
참고 명령어 중간에 보면 --rpcport가 50796으로 되어있는게 보이는데, 이는 AWS 허용 포트를 넣은겁니다.
" 이제 AWS의 Geth연동이 모두 끝났습니다. "
17. Option Ruby에서 간단히 통신을 해보겠습니다.
1) 일단, Gemfile에는 gem 'ethereum.rb' 가 깔려 있어야 합니다.
2) Gem 설치 후, rails c 콘솔창을 통해 다음 명령어를 입력보겠습니다.
web3 = Ethereum::HttpClient.new('http://(아마존 서버 IP):50796')
web3.eth_accounts
web3.eth_accounts.values[2]
web3.eth_accounts.values[2][0]
web3.personal_new_account("eth")
참고 Gem에는 이상하게 Geth에서 지원하는 모든 메소드가 지원되지 않습니다..
(대표적으로 ethereum.rb Gem에서는 transaction이 미지원)
- 자료 참고
1. Gem Github 사이트 [클릭]
아마존 AWS 루비온 레일즈 ruby on rails ROR
'프로그래밍 공부 > AWS' 카테고리의 다른 글
AWS : 외부에서도 Cloud9 Preview(DEMO)페이지 접속 (0) | 2020.01.19 |
---|---|
AWS : Ruby on Rails ↔ AWS RDS 서버 연동 (PostgreSQL 기반) (2) | 2020.01.15 |
AWS : 아마존 도메인 구입 및 적용법 (0) | 2019.11.02 |
AWS : 외부 도메인 적용법 (0) | 2019.11.02 |
AWS : 레일즈 - gem 'uglifier' 에러 해결 방법 (0) | 2019.11.02 |