'Server/Ubuntu'에 해당하는 글 21건

반응형



요즘 리눅스 문서에 apt-get 대신 apt 를 주로 사용하는 것 같아 검색해 보니, apt-get 을 사용하면 아재라는...;;; man 페이지를 찾아보면,


 apt-get 

apt-get 나 apt-cache 등은 알다시피 RPM 기반 배포판에서 사용되는 APT 패키지 핸들링 도구들이고,


 apt 

Advanced Package Tool 의 약자로 high-level 의 고급 패키지 도구이다. 최종 사용자를 위해 개발되고 apt-get 나 apt-cache 를 대체한다.


다른 프로그램이지만 apt 를 apt-get 과 apt-cache 의 alias 정도로 간주하고 사용해도 무방할 듯 싶다. 저수준 옵션들을 완벽하게 지원하지는 않지만, apt 역시 지속적으로 개발되고 있으니, apt-get 과 apt-cache 를 직접 사용할 일은 점점 더 적어질 것이다. 


apt 가 나온 이유는 apt-get 과 apt-cache 의 명령 더 편하게 사용하라고 나온 것이다. 4자에서 5자리를 덜 쓰게 해주는 편의와 stdout 에서의 컬러풀함? 쓰지 않을 이유가 없다.ㅎ



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Snappy 패키지

Server/Ubuntu 2019. 3. 13. 20:47
반응형



간만에 우분투에서 도커를 설치하려고 했는데, apt 가 docker 를 찾지 못하자 추천해 주는 다른 패키지? 


# apt-get install docker

Reading package lists... Done

Building dependency tree

Reading state information... Done


No apt package "docker", but there is a snap with that name.

Try "snap install docker"


E: Unable to locate package docker


이건 뭥미.


검색해 봤더니 우분투 16.04 버전 부터 도입된 또 다른 패키지 관리자이며, 다른 모든 Linux 배포판에서도 snappy 를 설치해 사용할 수 있다. snap 으로 만들어진 어플리케이션은 의존하는 라이브러리들을 포함시켜 빌드하는 패키지 형태라서 설치시 버전 충돌 등의 걱정을 할 필요가 없다는 장점이 있다. 단점은 그만큼 용량은 조금 더 늘어나겠지... 지금껏 많은 어플리케이션을 apt 나 yum 패키지 매니저를 사용해서 설치했었고, 검색이 되지 않거나 특정 버전을 원할 경우는 해당 프로그램의 웹사이트 등에서 소스를 다운받거나 하는 식으로 설치해 왔다. snappy 는 딱 그 작업을 대신할 수 있을 정도인 것 같다. apt 나 yum 에 없는 프로그램을 설치하는 방법 중 하나. 용량이 늘어나는데 굳이 snappy 만을 사용해서 어플리케이션을 설치할 필요는 없잖아용?? apt, yum 을 대체하는 무시무시한 패키지 매니저 인 줄 알았는데 그건 아니거 같음...


snappy - 패키지 프로그램 이름

snapcraft - 어플리케이션을 .snap 패키지로 만드는 도구

snapd - .snap 패키지를 사용하기 위한 데몬



snap 명령어


  • snap find - 설치할 snap package 찾아보기
  • snap install <package> - snap package 설치
  • snap list - 설치한 snap package 보기
  • snap changes - 시스템 변경 목록 보기
  • snap refresh - 최신 snap package 로 업그레이드
  • snap remove <package> - snap package 제거



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
반응형

parse-server, parse-dashboard 를 실행시키고 터미널을 계속 켜고 있을 것이 아니라면, 둘 다 background 에서 실행시켜야 한다.


- 자동실행 스크립트 생성


# vi /etc/init.d/parse-server
 
#!/bin/sh
nohup parse-server \
/usr/lib/node_modules/config-server.json \
--port 1337 &
cs


# vi /etc/init.d/parse-dashboard
 
#!/bin/sh
nohup parse-dashboard \
--config /usr/lib/node_modules/parse-dashboard-config.json \
--port 80 \
--allowInsecureHTTP=1 &
cs


- 실행 권한 부여


# chmod u+/etc/init.d/parse-server
# chmod u+/etc/init.d/parse-dashboard
cs


- 부팅시 실행


# update-rc.d parse-server defaults
# update-rc.d parse-dashboard defaults
cs


이제 서버가 재부팅되어도 parse-dashboard 는 80 포트 백그라운드로 실행된다.

혹시 다른 웹서버가 부팅시 80으로 할당된다면 포트를 변경하던지 웹서버를 중지하는 등의 변경이 필요하다.


# update-rc.d -f apache2 remove
# update-rc.d -f nginx remove
cs



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
반응형

DB 마이그레이션이 성공되었는지 확인하기 가장 좋은 방법은 parse-dashboard 를 설치하는 것이다.

https://dashboard.parse.com/apps 과 거의 동일한 대시보드를 만들 수 있다.

레이아웃은 동일하지만, 기능은 아직...


아래 설치 방법의 결과는 모두 동일하다. 아무거나 초이스.


- https://github.com/ParsePlatform/parse-dashboard

- https://www.npmjs.com/package/parse-dashboard

- http://blog.parse.com/announcements/introducing-the-parse-server-dashboard/



1. nodejs & npm 설치


Node.js 버전 4.3 이상을 요구하므로 4.x 로 설치한다.

함께 설치되는 npm 도 최신버전으로 업데이트한다.


# curl -sL https://deb.nodesource.com/setup_4.x | bash -
# apt-get install -y nodejs
# npm install npm -g
# nodejs -v
v4.4.0
# npm -v
3.8.1
cs



2. parse-dashboard 설치 / 설정


# npm install -g parse-dashboard
cs


위와 같이 npm 글로벌 설치를 하면 /usr/lib/node_modules/parse-dashboard 가 홈디렉토리가 된다.

대시보드에 나타낼 앱들에 대한 설정 파일은 parse-dashboard 디렉토리의 Parse-Dashboard/parse-dashboard-config.json 에 있지만, npm update 시 삭제될 수 있으므로, parse-dashboard 디렉토리 밖에 저장한다.

그리고 설정 파일에는 appId, masterKey, appName 등을 다음과 같이 설정한다.


# vi /usr/lib/node_modules/parse-dashboard-config.json
{
  "apps": [
    {
      "serverURL""http://parse-server-ip:1337/parse",
      "appId""xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "masterKey""xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "appName""OopsProject"
    },
    ...
  ],
  "users": [
    {
      "user":"loginusername",
      "pass":"loginuserpass"
    },
    ...
  ]
}
cs


apps 의 serverURL 은 새로 생성한 parse-server 의 URL 이며,

appId 와 masterKey 는 https://dashboard.parse.com/apps 대시보드의 [App Settings - Security & Keys] 메뉴에 설정된 값을 가져오면 된다.

users 는 현재 구축중인 대시보드에 로그인할 수 있는 정보를 세팅한다.

apps 와 users 모두 여러 개를 등록할 수 있다.



3. parse-dashboard 실행


대시보드 실행할 때는 위에 설정한 config 파일을 매개변수로 전달해야 하며, https 접속이 아니라면 --allowInsecureHTTP=1 매개변수도 전달한다.

파스 대시보드는 기본적으로 4040 포트를 이용하지만 80 포트로 사용하고 싶다면 --port 80 매개변수를 전달한다.

다른 웹서버와 포트가 겹친다면 둘 중 하나는 다른 포트를 사용하던지 사용 중지를 한다.


# parse-dashboard --config /usr/lib/node_modules/parse-dashboard/Parse-Dashboard/parse-dashboard-config.json --allowInsecureHTTP=1 --port 80
The dashboard is now available at http://localhost:80/
cs


이제 해당 주소에 접속하고 로그인하면 위에 설정한 parse 앱들이 나타난다.





반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
반응형

MongoDB 와 Parse server 를 구축하였으므로 실제로 메시지를 보내 푸시가 정상적으로 보내지는지 확인한다.

Parse DB 에는 이미 device 데이터들이 업로드 되어 있다고 가정한다 ^^ 없는 사람들은 installation 활용하여 데이터 업로드.

아래는 appId 와 masterKey 등을 헤더에 넣어 POST 요청으로 android 와 ios 사용자 모두에게 메시지를 보내는 쿼리를 보내는 예제이다.



1. Configure Client Apps


앱 개발자들에게 아래의 링크를 주고 설정하라고 말한다ㅋ


IOS - http://parse.com/apps/quickstart#parse_data/mobile/ios

Android - http://parse.com/apps/quickstart#parse_data/mobile/android


간단히 설명하자면,

해당 개발 언어의 최신 Parse SDK 를 다운받아 추가하고, AppId 와 Parse server 를 세팅하여 해당 앱에서 Parse 서버에 연결할 수 있게 한다.



2. Push Test


$ curl -X POST \
    -"X-Parse-Application-Id: you_app_id" \
    -"X-Parse-Master-Key: your_master_key" \
    -"Content-Type: application/json" \
    -'{
          "where": {
            "deviceType": {
              "$in": [
                "ios",
                "android"
              ]
            }
          },
          "data": {
            "title": "The Shining",
            "alert": "All work and no play makes Jack a dull boy."
          }
        }'\   http://your_server_address/parse/push
cs


요청에 문제가 없다면 JSON 방식의 응답 {"result":true} 를 전달받을 것이고, 문제가 있다면 error code 와 에러 내용이 출력된다.

{"result":true} 가 출력되었다면 Parse 서버에는 다음과 유사한 로그가 기록된다.


GCM request and response {"request":{"params":{"priority":"normal","data":{"time":"2016-02-10T03:21:59.065Z","push_id":"NTDgWw7kp8","data":"{\"alert\":\"All work and no play makes Jack a dull boy.\"}"}}},"response":{"multicast_id":5318039027588186000,"success":1,"failure":0,"canonical_ids":0,"results":[{"registration_id":"APA91bEdLpZnXT76vpkvkD7uWXEAgfrZgkiH_ybkzXqhaNcRw1KHOY0s9GUKNgneGxe2PqJ5Swk1-Vf852kpHAP0Mhoj5wd1MVXpRsRr_3KTQo_dkNd_5wcQ__yWnWLxbeM3kg_JziJK","message_id":"0:1455074519347821%df0f8ea7f9fd7ecd"}]}}
APNS Connected  APNS Notification transmitted to:7a7d2864598e1f65e6e02135245b7daf8ea510514e6376f072dc29d53facaa41
cs



3. Troubleshooting


만약 위 예제처럼 테스트를 했는데 푸시가 정상적으로 전달되지 않았다면 다음 사항들을 순서대로 확인한다.


- PUSH 요청시 {"result":true} 가 출력되지 않았다면, AppId, MasterKey, 요청 타입, 쿼리를 다시 한번 확인한다.

- 요청 URL (http://your_server_address:port/parse/push) 이 올바르지 않거나 포트가 막혀 있거나 parse-server 데몬이 running 상태가 아니라면 응답이 오지 않을 수도 있다.

- parse-server 데몬 상태 확인 : $ ps ax | grep parse

- PUSH 요청시 {"result":true} 가 출력되었다면, 그 다음 처리 로그는 parse-server 에서 확인할 수 있다.

- Parse 서버 로그에서 (예, GCM request and response {"request"... ) "response" 가 없다면 configuration.json 파일에 값이 올바른지 체크한다.

- "response" 는 있지만 푸시 상태가 fail 이라면 보통 {"error":"MismatchSenderId"} 이란 메시지를 볼 수 있는데, 클라이언트 앱 설정을 확인한다.

반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  4개가 달렸습니다.
  1. 제우스 2016.11.02 20:05
    기존 parse의 installation 정보를 활용해서 푸시 발송이 가능한가요?
    하기와 같이 해보면 모두 정상으로 나오는데 실제 푸시는 발송 되지 않습니다
    기존 그대로 활용이 가능한지요?

    <서버 셋팅 환경>
    1. ssl을 사용하지 않음
    2. 기존 parse installation 데이터 사용
    3. ios의 경우 기존 parse.com의 p12 파일 사용
    4. 기존 ios앱 사용
    • 이관 작업 하시나봅니다.. result 는 true 인데 실제 푸시 발송이 안되었다면 세팅은 정상적으로 된거 같구요. 기존 installation 정보를 그대로 가져왔다면 될 것 같은데... DB 구조만 동일하게 하나 더 생성하셔서 테스트 해보는 것도 좋겠네요.
  2. 현재 parse 서버를 이관하여 작업중인데, 클라이언트단(안드로이드)을 수정하지 않은 채로 서버상의 키값만 변경하여 테스트를 할 수 있는 방법이 없을까요?
    클라이언트단(안드로이드)에는 키가 등록되어있지 않은 상황입니다.(sender-id, api-key)
    • 글쎄요... ios 에는 잘된다는 말씀이시죠? 안드로이드에 키가 등록이 되지 않았는데 테스트를 하신다는 말씀이 잘 이해가 안되네요; push 가 되려면 키 등록이 되야 하는걸로 알고 있습니다만...ㅜ 그 이상은 잘 모르겠네요.
secret