스마트 폰 앱 개발시 갑자기 두드리는 API 서버를 nginx, Let’s encrypt, JSON Server로 구축

목적



스마트 폰 앱 개발의 초기 단계에서 아직 API의 사양 등이 푹 빠져있는 상황에서, 사쿠토 시험용 API 서버를 세우고, API를 조금 꼬아 보면서 앱 개발을하고 싶다.
로컬 머신에 JSON Server로 API 서버 세우는 것이 제일 빨리 보였지만, 어차피라면 네트워크상에 두어 HTTPS로 API 두드려 보고 싶네요, 라고 하는 것으로 구축해 보았다.

완성 예정도



스마트폰 앱 개발용 PC
↓↑
HTTPS(Let’s encrypt)
↓↑
Nginx(:443)
↓↑
JSON 서버(:3000)
※ 서버는 EC2 사용하고 있지만 취향에 맞게 부디

구축 절차



1. AWS 및 도메인 준비



1. 관리 콘솔 등에서 EC2 인스턴스를 시작합니다.


  • 이번에는 OS는 Amazon Linux AMI 2016.03.1 (HVM)을 선택
  • 인스턴스 유형은 t2.micro를 선택
  • Security group에서 22번 포트와 443번 포트는 열린다

  • 2. ElasticIP 1개 지불


  • 내보낸 ElasticIP를 시작한 인스턴스에 asociate
  • 지불 된 ElasticIP 및 API의 도메인 이름을 DNS에 등록합니다 (적절한 도메인 이름이없는 경우 필요).

    2. Node.js 설치


    # nvmをインストールする
    $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
    
    # Node.jsのLTSバージョンをインストールする(ここはお好みで)
    $ nvm install v4.4.4
    
    # インストールしたNode.jsの設定 + デフォルトver.として指定する
    $ nvm use 4.4.4
    $ nvm alias default 4.4.4
    
    # インストールされたNode.jsのver.を確認する
    $ node -v
    

    3. json-server 설치


    $ npm install -g json-server
    

    OK

    API 내용 정의(db.json)

    db.json
    {
      "users": [],
      "keywords": [
        {
          "id": 1,
          "text": "hoge"
        },
        {
          "id": 2,
          "text": "fuga"
        },
        {
          "id": 3,
          "text": "piyo"
        }
      ],
      "articles": []
    }
    

    json-server에 db.json을 주어 시작
    시작시 라우팅 내용이 출력됩니다.
    $ json-server db.json
    
      \{^_^}/ hi!
    
      Loading db.json
      Done
    
      Resources
      http://localhost:3000/users
      http://localhost:3000/keywords
      http://localhost:3000/articles
    
      Home
      http://localhost:3000
    
      Type s + enter at any time to create a snapshot of the database
    

    엔드포인트에 액세스해 보기
    $ curl http://localhost:3000/keywords
    [
      {
        "id": 1,
        "text": "hoge"
      },
      {
        "id": 2,
        "text": "fuga"
      },
      {
        "id": 3,
        "text": "piyo"
      }
    

    OK

    4. Let’s encrypt로 무료 SSL 인증서 획득



    Let’s encrypt 설치
    # install
    sudo yum install git
    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    # confirm
    ./letsencrypt-auto --help
    
    # 証明書の発行
    sudo ./letsencrypt-auto certonly -a standalone -d ドメイン名 --debug
    
    # 発行に成功した場合下記パスに秘密鍵とサーバ証明書と中間証明書が結合されたファイルが出力されているのでnginxのSSL設定時に利用
    # /etc/letsencrypt/live/ドメイン名/privkey.pem
    # /etc/letsencrypt/live/ドメイン名/fullchain.pem
    

    5. nginx(443번 포트)에서 요청을 받고 json-server(3000번 포트)에 액세스를 흘린다


    # nginxのインストール
    $ yum install -y nginx
    
    # nginxの設定
    $ vim /etc/nginx/nginx.conf
    

    설정 파일에서 # Settings for a TLS enabled server.
        server {
            listen       443 ssl;
            listen       [::]:443 ssl;
            server_name  ドメイン名;  # 修正1
            root         /usr/share/nginx/html;
    
            ssl_certificate "/etc/letsencrypt/live/ドメイン名/fullchain.pem”; # 修正2
            ssl_certificate_key "/etc/letsencrypt/live/ドメイン名/privkey.pem”; # 修3
            # It is *strongly* recommended to generate unique DH parameters
            # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
            #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
            ssl_session_cache shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
            ssl_prefer_server_ciphers on;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
                    proxy_pass http://localhost:3000; # 修正4
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    

    nginx 시작
    $ service nginx start
    

    6. HTTPS로 API 서버에 액세스 해보십시오





    흠흠, 좋을 것 같네요.



    좋다.

    그리고는 JSON 서버 의 문서를 보면서 APIKit등으로 가시가시 API 두드리자!

    7. 정리



    nginx·Let’s encrypt·JSON Server를 사용해, 빨리 두드리는 API 서버를 구축해 보았다.
    도메인 주위의 설정만 끝나고 있으면, 10분 전후로 HTTPS로 API를 두드리는 상태까지 이케한다고 생각합니다.

    참고



    Amazon Linux에 Node.js 및 npm 넣기
    【개인 메모】 JSON Server를 사용하여 손쉽게 WebAPI 모형을 만듭니다.
    JSON 서버
  • 좋은 웹페이지 즐겨찾기