今ココなう!互換のサーバを作るプロジェクト
- 今ココなうがOverQuota連発で息していないの!助けて!
- APIまわりを解析するとそんなに難しくなさそう
- だったらNode.jsとMongoDBの勉強も兼ねて実用的なものを作ってみよう
- 最低限のサーバ機能とリプレイ機能できたところでちょっと飽きてきた←いまここ
- Node.js と MongoDBの動くマシン
- ストレージを積めるだけ
1ユーザが8,640Post/Day(10秒に一回で24時間)データを送信した場合に、約1.3MBのストレージが必要です。
###環境構築方法(Debianの場合)
- nvmとNode.jsをインストール
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | sh
. ./.bashrc
nvm install 5.6.0
npm install node-dev -g
npm install pm2 -g
- MongoDBをインストール
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org
- node-canvas用
apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev build-essential g++
git clone https://github.com/hamache9821/ImacocoServer.git
cd ImacocoServer
npm install
npm start
cd ImacocoServer
pm2 start processes.json
pm2 startup
pm2 save
必要ならlogrotateを設定(後で書く)
pm2 install pm2-logrotate
MongoDBのindex作成
db.locinfos.createIndex({time : 1, user : 1});
db.locinfos.createIndex({time : -1, user : 1});
db.locinfos.createIndex({"location" : "2dsphere"});
db.geocoders.createIndex({"location" : "2dsphere"});
ログを残したくないならttl-indexしちゃったほうがよさげ
db.locinfos.createIndex({time : 1}, { expireAfterSeconds: 600 });
https対応 (let's encryptで証明書取得する場合)
let's encryptの使い方はググってください
git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt
./certbot-auto certonly --standalone -m admin@example.com -d imacoco.example.com
ln -s /etc/letsencrypt/live/example.com/privkey.pem /usr/ImacocoServer/cert/private_key.pem
ln -s /etc/letsencrypt/live/example.com/cert.pem /usr/ImacocoServer/cert/certificate.pem
"listen_type" : ["http"],
を
"listen_type" : ["https"],
または
"listen_type" : ["http", "https"],
に設定
基本的には今ココなう!(β):APIの仕様を踏襲していますので、
各クライアントツールとproxyの接続先サーバを自前のものに変えるだけで動きます。素敵!
※googleMap API Key等は各自で用意してください。
現時点で実装しているAPI
- home/
- view
- create_user
- user
- /
- /update_userinfo
- /getuserinfo
- api
- /post
- /user_list
- /latest
- /getuserinfo
- /logintest
create_userを呼び出すことで、登録フォームが出るので、そちらで登録してください。
またはmongoのconsoleで適当に追加してください。
> use ImacocoDB
> db.users.insert({userid : "testuser", password : "hashed_password", email : "testuser@example.com", nickname : "testuser",
ust : "", jtv : "", nicolive : "", show : "1", web : "http://example.com", description : "", popup : "", speed : "0", twitter : ""});
こんなかんじ
※パスワードは適当にハッシュ化してね
MIT
なので、商用利用したいとか、こういう機能が欲しいとかは勝手にforkしてやればいいと思うよ。
###その他
Q.インストール方法教えて!
A.お 前 の 目 は 節 穴 か
Q.なんかおかしいんだけど
A.エスパーじゃないので、何がおかしいか具体的に言ってもらわないとわかんないです。
というか、現段階ではソース読んで何が起きるのかわからない人にはお勧めできません。