회사 중앙 스토리지가 멈추면 리소스를 다운 받을 수 없는 것을 대비해 IPFS를 구축하려고 한다. IPFS에 대한 자세한 설명은 검색해봤으면 한다.

 

1. 설치 

- 설치법은 사람마다 다양했다. 버전별로 달라지니 아래 링크를 참조하여 버전을 참고하기 바란다. 그리고 윈도우, 맥, 리눅스 설치법도 있으니 참고하기 바란다.

 

    1-1 바이너리 파일 다운로드

$ wget https://dist.ipfs.tech/kubo/v0.15.0/kubo_v0.15.0_linux-amd64.tar.gz

    1-2 파일 압축 해제

$ tar -xvzf kubo_v0.15.0_linux-amd64.tar.gz

> x kubo/install.sh
> x kubo/ipfs
> x kubo/LICENSE
> x kubo/LICENSE-APACHE
> x kubo/LICENSE-MIT
> x kubo/README.md

    1-3 kubo 폴더로 이동하여 설치 스크립트를 실행

cd kubo
sudo bash install.sh

> Moved ./ipfs to /usr/local/bin

    1-4 버전 테스트

$ipfs --version

> ipfs version 0.15.0

 

https://docs.ipfs.tech/install/command-line/#which-node-should-you-use-with-the-command-line

 

Command-line | IPFS Docs

Command-line Installing IPFS through the command-line is handy if you plan on building applications and services on top of an IPFS node. This method is also useful if you're setting up a node without a user interface, usually the case with remote servers o

docs.ipfs.tech

 

2.  저장소 초기화

ipfs init

> initializing ipfs node at /Users/jbenet/.ipfs
> generating 2048-bit RSA keypair...done
> peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z
> to get started, enter:
>
>   ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

맨 밑 줄 ipfs cat을 입력해보면 아래처럼 나온다.

ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/quick-start
Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝

If you see this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------

Check out some of the other files in this directory:

  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes

3. IPFS daemon 실행

ipfs daemon

> Initializing daemon...
> API server listening on /ip4/127.0.0.1/tcp/5001
> Gateway server listening on /ip4/127.0.0.1/tcp/8080

4. IPFS SERVICE 등록(서버 실행시 자동 실행)

    4-1 ipfs.service 파일 생성 및 서비스 정보 입력

sudo vi /etc/systemd/system/ipfs.service

ipfs.service

[Unit]
Description=IPFS Daemon
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub
User=계정명

[Install]
WantedBy=multi-user.target

Service에서 User를 서비스 실행할 계정명으로 바꿔준다.

 

    4-2 실행 명령어 입력

sudo systemctl daemon-reload
sudo systemctl enable ipfs
sudo systemctl start ipfs
//정지
sudo systemctl stop ipfs
//동작상태확인
sudo systemctl status ipfs

 

5. 외부 설정

$ vi ~/.ipfs/config

초기에는 127.0.0.1로 되어있으며 로컬에서만 접속이 가능하다. 아래처럼 바꾸면 외부에서 접근이 가능하며 내부망으로도 변경 가능하다.

  "Addresses": {
    "API": "/ip4/0.0.0.0/tcp/5001",
    "Gateway": "/ip4/0.0.0.0/tcp/8080"
  },

- 127.0.0.1 : 로컬

- 0.0.0.0 : 외부 공개

-192.168.xxx.xxxx : 공유기 및 방화벽 내부망에서만 공개(할당 받은 로컬IP 입력)

 

6. WebUI

자신이 윈도우나 가상장치를 사용하여 개발하고 있다면 localhost:5001/webui 로 가능하다. 그런데 나는 우분투서버를 사용하고 있기 때문에 볼 수 없어서 외부 설정을 해서 외부IP로 들어온다. 들어가면 아래처럼 나온다.

 


6-1 에러

여기서 간혹 아래처럼 에러가 발생하는 경우가 있다. 아마 로컬에서 하는 사람들은 안나오는 것 같은데 나처럼 외부 접속으로 할 경우 생기는 것 같다.

나의 경우는 CORS 허용이 안되있는 것 같았다.

vi ~/.ipfs/config

  "API": {
    "HTTPHeaders": {
      "Access-Control-Allow-Headers": [
        "X-Requested-With",
        "Range",
        "User-Agent"
      ],
      "Access-Control-Allow-Methods": [
        "GET","POST"
      ],
      "Access-Control-Allow-Origin": [
        "http://외부IP:5001",
        "http://localhost:3000",
        "http://127.0.0.1:5001",
        "https://webui.ipfs.io"
        ]
    }
},

config 아래쪽에 잘찾아보면 API 가 비워져있다. 자신의 외부IP를 넣고 붙여넣기 해주고 서비스 재시작을 하면된다.

sudo systemctl restart ipfs

7. 기본 사용 포트 정보 (필요에 따라 공유기 및 방화벽에서 포트를 개방)

4001 : SWARM, ip4/0.0.0.0

40000+ : 4만번 이상 포트에서 SWARM 관련 포트가 생성됨

5001 : API, ip4/127.0.0.1

8080 : GATEWAY, ip4/127.0.0.1

 

 

 

https://docs.ipfs.tech/how-to/command-line-quick-start/#web-console

 

Command-line quick start | IPFS Docs

Command-line quick start If you're command-line savvy and just want to get up and running with IPFS right away, follow this quick-start guide. Please note that this guide assumes that you'll be installing Kubo, the reference implementation written in Go. T

docs.ipfs.tech

 

홈 디렉토리의 권한을 주려고 하는데 다른 사용자를 생성해서 들어가려고 하니 권한이 없어서 막힌다. 그렇다고 777 권한을 줄 수는 없기 때문에 사용자 그룹을 만들고 디렉토리 소유를 사용자와 그룹으로 변경하고 하위 디렉토리까지 같이 바뀌는 걸 해봤다. (참고로 파일 권한 등에 대한 것은 다른 포스팅을 참조하길 바란다...)

 

그룹 생성

# groupadd 그룹명

그룹 비밀번호 설정

# gpasswd 그룹명

그룹 사용자 설정  ex) gpasswd -옵션 사용자명 그룹이름 

    옵션 : 

        A :  관리자

        a : 그룹 사용자 추가

        d : 그룹 사용자 제거

# gpasswd -A user group          관리자 지정
# gpasswd -a user group          사용자 추가
# gpasswd -b user group          사용자 제거

 

파일 / 디렉토리 접근 권한

# chmod 옵션 파일or디렉토리명

 

파일 / 디렉토리 소유 변경

소유자 또는 그룹을 한번에 변경 가능하다.

ex) chown 소유자 파일/디렉토리명

     chown 소유자.그룹명 파일/디렉토리명

     chown -hR(옵션) 소유자.그룹명 파일/디렉토리명

#chown user user.txt					user.txt 파일의 소유자 변경
#chown user.group directory				directory의 소유자 및 그룹 변경
#chown -hR user.group directory			directory의 하위 파일까지 소유자 및 그룹 변경

 

서버를 계속 운용하다보니 포트가 제대로 열렸는지 확인해야될 경우가 생겼다. 그래서 간단하게 알아보자

 

netstat -nap

위 명령어는 열려 있는 모든 포트를 확인한다.

 

netstat -nap | grep LISTEN

위 명령어는 현재 LISTEN 중인 포트만 확인할 수 있다.

 

netstat -nap | grep 3306

위 명령어는 특정 포트를 확인할 수 있다.

 

위 명령어를 통해서 포트에 해당하는 프로세스 아이디를 가지고 프로세스를 죽일 수 있다.

kill -9 3306

서버 구축 이후에 FTP로 문제가 많았다. 그 중 하나가 FTP Write가 안된다.

 

550 Permission denied. 뭐 대충 에러 메시지 보니깐 권한 없다고 나온다. 이럴 경우 폴더에 대한 쓰기 권한이 없거나 FTP 자체 쓰기 권한이 없거나 둘 중 하나 같다.

 

그래서 이전에 폴더 권한 문제를 봤으니 이번에는 FTP 쓰기 권한을 봐야될 것 같다.

 

먼저 vsftpd.conf 파일을 들여다 보자 기본적으로 시스템 파일은 root 권한을 사용해야 한다. 안 그러면 수정이 안된다.

sudo vi /etc/vsftpd.conf  

 

그러면 많은 주석 중 #write enable=YES 이게 있을 것이다. 가볍게 주석을 해제해주자

 

그리고 서비스 재시작하면 내 경우는 바로 쓰기가 가능했다.

sudo /etc/init.d/vsftpd restart

그리고 회사 AWS EC2 백업 도중 파일을 업로드 해야되는 경우가 생겼다. 그래서 올리는데 에러가 발생한다.

open for write: permission denied

현재 유저는 해당 폴더에 쓰기 권한이 없다는 에러다. 간단하게 명령어로 권한을 주면 된다.

sudo chmod -R 777 /var/www/html

 

고작 같은 명령어인데 왤캐 많은지 이해 안가는 중... 시스템 재시작하거나 종료하는 명령어는 ROOT 권한자만 가능하다.  대충 4개정도로 정리할 수 있다.

shutdown

기본 문법

 # shutdown 옵션 시간 (메세지)

옵션을 쓰지 않으면 기본 디폴트가 종료다. 

옵션 내용
-r 재시작
-h 종료
-c 명령 취소
#shutdown -r now   // 즉시 재시작
#shutdown -h now   // 즉시 종료
#shutdown -c       // 예약된 명령어 취소

#shutdown -r 5     // 5분 뒤 재시작
#shutdown -r 22:55 // 22:55에 시스템 재시작

 

reboot

단어에서 딱 느낌이 오듯이 재시작이라는 뜻이지만 옵션으로 종료를 할 수 있다.

문법

# reboot 옵션

옵션 내용
-p poweroff의 약자로 종료
-f 시스템 강제 재부팅

 

halt, poweroff, init 0

마찬가지로 다 종료 다.

# halt
# poweroff
# init 0

init은 시스템의 런레벨을 0으로 변경함으로써 종료시킨다.

런레벨 6은 재부팅이다.

 

참고. 로그아웃

# logout
# exit

 

혹시 이미 jdk 가 있을 수 있으니 기존의 jdk를 먼저 삭제한다.

$ sudo apt-get remove openjdk*
$ sudo apt-get remove oracle*
$ sudo apt-get autoremove --purge 
$ sudo apt-get autoclean

JDK를 처음 설치하는거라면 굳이 할 필요 없다. 

 

다음으로 apt 업데이트를 한다.

$ sudo apt-get update && sudo apt-get upgrade

그리고 나도 한번 에러가 발생했었다. 11 버전부터 사람들이 갈린다.

해외도 마찬가지긴 했는데 나는 서버 4대 설치하는거라서 다 해봤는데 다 잘된다.

 

간혹 어떤사람은 PPA Repository에 openJDK를 추가하고 설치하는경우가 있다.

20.04 버전에서는 추가하지 않아도 설치가 됐다.

$ sudo apt-get install openjdk-11-jdk

설치가 완료가 되면 완료가 정말 됐는지 확인할 수 있다.

$ java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

$ javac -version
javac 11.0.11

환경설정이다. JAVA_HOME 시스템 변수 설정을 해야한다면 ~/.bashrc 파일에 변수들을 추가해주면 된다.

$ vim ~/.bashrc
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME/bin

추가 했으면 현재 변경한 설정을 적용해야한다.

$ source ~/.bashrc

이제는 JAVA_HOME이 잘 설정 되었는지 아래 명령어로 확인해보자

$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64

 

혹시 JRE만 설치하고 싶다면 아래 명령어로 설치할 수 있다.

$ sudo apt-get install openjdk-11-jre

docker repository를 통해 설치하는 방법으로 설치를 할 예정이다. 이 방법 말고도 2가지가 더 있다고 한다.

(수동으로 deb 파일을 다운로드하여 설치하는 방법, 별도의 설치 스크립트를 이용하는 방법)

 

 

 

당연히 apt 설치를 하기 때문에 update를 한번 해준다.

 

1. 필수 패키지를 설치합니다.

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

 

2. Docker GPG key 

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK

3. Docker Repository 등록

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

4. Docker 설치

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

5. 정상 설치 확인

$ sudo docker run hello-world

리눅스를 하다보니 서버를 종료 했을 때 다시 켜야하는 번거로움이 있었다.

사실 생각해보면 PC를 껏다 켰을 때를 생각했어야했다. 그래서 윈도우의 시작프로그램이 리눅스에도 있었다.

 

서비스 시작

systemctl start 서비스명

서비스 재시작

systemctl restart 서비스명

서비스 중지

systemctl stop 서비스명

서비스 상태 확인

systemctl status 서비스명

서비스 실행 확인

systemctl is-enable 서비스명

부팅 시 서비스 자동 시작

systemctl enable 서비스명

부팅 시 서비스 자동 시작 해제

systemctl disable 서비스명

+ Recent posts