Github: https://github.com/samuelclay/NewsBlur
NewsBlur
- NewsBlurは人々を集めて世界を語る個人的なニュースリーダーです。 古い楽器の新しい音。
- www.newsblur.com 。
- Samuel Clayによって作成されました。
- Twitter: @samuelclayと@newsblur 。
特徴
- 元のサイトを表示します(あなたはそれを見なければなりません)。
- タグ、キーワード、著者などに基づいて読んでいない物語を非表示にします。
- 同じ基準に基づいて、読みたいストーリーを強調表示します。
テクノロジー
サーバ側
- Python 2.7+ :選択した言語。
- Django :Pythonで書かれたWebフレームワークで、すべてのページを提供していました。
- Celery & RabbitMQ :RSSフィードの取得と解析に使用される非同期キューイングサーバー。
- MongoDB 、 Pymongo 、& Mongoengine :ストーリーの格納、ストーリーの読み込み、フィード/ページのフェッチの履歴、およびプロキシされたサイトに使用される非リレーショナルデータベース。
- PostgreSQL :フィード、購読、およびユーザーアカウントの格納に使用されるリレーショナルデータベース。
クライアントサイドとデザイン
- jQuery :クロスブラウザ準拠のJavaScriptコード。 IEは努力なしで動作します。
- Underscore.js :JavaScriptの機能プログラミング。 不可欠です。
- その他のjQueryプラグイン:サイズ変更可能なレイアウトからプログレスバー、ソート可能なアイテム、日付処理、色、コーナー、JSON、アニメーションまですべて。 完全なリストを参照してください 。
インストール手順
前提条件
安全に無視できるもの
NewsBlurを実行するためには、前提条件のセクションに記載されているすべてのプログラムが必要ではありません。
-
Elasticsearch
はJavaを必要とする唯一のモジュールです。 フィードを検索せずに、または記事を検索しなくても、それを無視することができれば、NewsBlurはあなたがログに検索サーバーを持っていないと吐き出すだけです。 -
Jammit
は資産圧縮用です。 代わりに、圧縮せずに個々のファイル内のすべてのjsとcssファイルを提供するだけなので、これを使用するのは煩わしいことではありません。 また、nginxは組み込みのnginx設定を使用すると自動的にそれらのファイルをgzipsします。 あなたのlocal_settings.pyにDEBUG_ASSETS = True
を設定するだけです(これもlocal_settings.py.templateにあります)。 - サイト全体で使用されている色に
numpy
とscipy
が使用されています。 すべてのサイトのファビコンがその支配的な色について分析され、その色が各サイトにその感じを与えるものです。 あなたはすべての物語すべてでそれを見るでしょう。 私はそれをインストールすることをお勧めします。単にビルドされたパッケージを使うことができ、ソースからインストールする必要はありませんが、これは可能ですが簡単なことではありません。
リレーショナルデータベース(MySQL、PostgreSQL)
インストールを開始する前に、データベースをセットアップする必要があります。 FabricはあなたのためにPostgreSQLとMongoDBの両方をインストールできますが、Ubuntuのみにインストールできます。 Mac OS XユーザーはMySQLまたはPostgreSQLを既にインストールしておきたいでしょう。 MySQLをダウンロードしたり、PostgreSQLを ダウンロードしたりすることができます 。 さらに、Mac OS X上で開発マシンとして実行している場合は、 Sequel ProをGUIとして使用することをお勧めします。
MySQLをインストールする場合は、MySQLDBのPythonライブラリも必要です。
sudo easy_install mysql-python
ファブリック
Mac OS XとLinuxの両方でFabricをインストールする必要があります。 依存関係のインストール、サーバーの展開、移行、構成など、多くの一般的な作業はfabfile.py
ます。
sudo easy_install fabric
XCode 4を使用したMac OS Xの最近のインストールでは、 ppc
アーキテクチャに関する問題が発生する可能性があります。 これを修正するには、次のコマンドを実行します。
sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc \
/Developer/usr/libexec/gcc/darwin
sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc \
/usr/libexec/gcc/darwin
Symcのリンクは、 ” Mac OSにインストールされていないアーキテクチャのためのアセンブラ “に関するこのStackOverflowの回答から来ています。
MongoDB
MySQL / PostgreSQLの上で、NewsBlurはMongoDBを使用して非リレーショナルデータを格納します。 MongoDBをダウンロードしたいと思うでしょう。 あなたがUbuntuにいる場合は、 setup_mongo
Fabricコマンドが自動的にこれを行いますが、Mac OS Xでは手動でインストールする必要があります。
ナンシーとサイフィ
インストールするのが一番簡単ではありません。 Mac OS Xを使用している場合、いくつかのオプションがあります:
- Chris FonnesbeckのSuperpackを使う
- MacPortsを使う:
sudo port install py26-numpy py26-scipy
- ソースからインストールする(厄介): http ://www.scipy.org/ダウンロード
- pip、easy_install、 homebrewの組み合わせを使用してください:
pip install numpy && brew install gfortran && easy_install scipy
ジャムミット
Jammitを実行するには、Java 7がインストールされている必要があります。
-
OS XにJava 7をインストールするには、 http://www.cc.gatech.edu/~simpkins/teaching/gatech/cs2340/guides/java7-macosx.htmlの指示に従ってください。
-
次の宝石もインストールしてください:
sudo gem install closure-compiler jsmin cssmin uglifier
その他の各種パッケージ
リポジトリの内部から次のコマンドを実行します。
pip install -r requirements.txt
パスの設定
fabfile.py
には、2つのパスを設定する必要があります。
-
env.paths.NEWSBLUR
は、NewsBlurリポジトリへの相対パスです。 -
env.paths.VENDOR
は、ダウンロードされたすべてのコードがどこに行くべきかを示す相対パスです。
local_settings.py
には、設定が必要ないくつかのパスがあります。 以下のインストール後にこれらを設定します。
Mac OS Xでのインストール
-
Mac OS Xを開発環境として使用すると、同じシステム上で3つのサーバ(app、db、task)をすべて実行できます。
fabfile.py
を実行するには、 Fabricがインストールされている必要がありfabfile.py
。 また、MySQL / PostgreSQLとMongoDBがすでにインストールされている必要があります。fab -R local setup_python fab -R local setup_imaging fab -R local setup_mongoengine fab -R local setup_forked_mongoengine fab -R local setup_repo_local_settings fab -R local compress_assets
インストールに失敗したパッケージ(
lxml
など)がある場合は、fabfile.py
を調べ、easy_installプロセスが壊れるのを防ぐために使用できる機能があるかどうかを確認します。 たとえば、lxmlにlibxsltとlibxml2がインストールされている必要があります。 これは、次のFabricコマンドを使用して自動化されます。fab -R local setup_libxml_code
-
newsblur
ユーザとnewsblur
データベースを追加してMySQL / PostgreSQLを設定してnewsblur
。 MySQLの例を次に示します。mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/path/to/var/mysql --tmpdir=/tmp mysql.server start mysql -u root > CREATE USER 'newsblur'@'localhost' IDENTIFIED BY ''; > GRANT ALL PRIVILEGES ON *.* TO 'newsblur'@'localhost' WITH GRANT OPTION; > CREATE DATABASE newsblur; > exit
空のNewsBlurテーブルをデータベースにロードし、データベースをブートストラップします。
./manage.py syncdb --all ./manage.py migrate --fake ./manage.py migrate ./manage.py loaddata config/fixtures/bootstrap.json
syncdb
間にユーザーを作成しないと、bootstrap.json
ファイルはパスワードなしのニュースブラーユーザーを作成します。 -
mongodbを起動します(まだ実行していない場合)。
mongod run
-
開発サーバーを実行します。 この時点で、すべての依存関係をインストールし、追加の構成は必要ありません。 この時点で何かが動作していない場合は、結果をSamuel Clay( samuel@newsblur.com)に電子メールで送信してください。
./manage.py runserver
-
案内する:
http://localhost:8000/
アカウントを作成する。 アカウント作成プロセスの最後に、 https:// localhost / profile / stripe_formにリダイレクトされます 。 戻るボタンを数回押すと、アプリの中にいます。
Linux / Ubuntuにインストールする
あなたがUbuntuにいる場合は、単にFabricを使ってNewsBlurとその多くのコンポーネントをインストールすることができます。 NewsBlurは、アプリケーションサーバー、dbサーバー、および各種のタスクサーバーの3つの独立したサーバー上で動作するように設計されています。 1台のマシンにすべてをインストールするには、 setup_common
手順を繰り返さずにfabfile.py
を読んで3台のサーバーをすべてセットアップします。
インストールの終了
さまざまなシステムをすべて結びつけるために、いくつかのタスクを実行する必要があります。
-
まず、local_settings.pyをコピーし、OAuthキー、S3キー、データベース名(
newsblur
ないnewsblur
)、タスクサーバー/ブローカーアドレス(RabbitMQ)、およびパスを入力します。cp local_settings.py.template local_settings.py
あなたが持っているキーを変更するには、local_settings.pyを編集してください。
-
MySQL / PostgreSQLで
newsblur
データベースを作成するMySQL / PostgreSQL
./manage.py syncdb
アプリサーバー
fab -R local setup_app
データベースサーバー
fab -R local setup_db
タスクサーバー
fab -R local setup_task
NewsBlurの実行を維持する
これらのコマンドはNewsBlurを最新の状態に保ちます。 開発サーバー上では、これらのコマンドを複数回実行する必要はありません。 ただし、定期的にrefresh_feeds
コマンドを実行して、テストして読む新しいストーリーがあるようにすることをお勧めします。
フィードの取得
フィードを一度だけ取得したい場合は、 refresh_feeds
管理コマンドを使用できます:
./manage.py refresh_feeds --force
特定のユーザーのフィードを取得することもできます。
./manage.py refresh_feeds --user=newsblur --force
フィードバック
フィードバック・テーブルをホームページに取り込むには、 collect_feedback
管理コマンドを数分おきに使用します。
./manage.py collect_feedback
統計
統計グラフをホームページに取り込むには、数分ごとにcollect_stats
管理コマンドを使用します。
./manage.py collect_stats
ブートストラップ検索
elasticsearchサーバーを実行したら、フィード索引とストーリー索引を使用してブートストラップします。
./manage.py index_feeds
ストーリーは自動的に索引付けされます。
検索サーバーを移動し、検索データベースのすべてを削除する必要がある場合は、MUserSearchテーブルをリセットする必要があります。
>>> from apps.search.models import MUserSearch
>>> MUserSearch.remove_all()
ユニットと統合テストの実行
NewsBlurには、rss_feeds、reader、およびfeed importerの機能をテストするテストスイートが用意されています。 テストスイートを実行するには:
./manage.py test --settings=utils.test-settings
ダウンタイムの場合
電子メールまたはSMSのいずれかを使用してダウンタイムメッセージが表示されます。 これは、何が間違っているかを判断するための操作の順序です。
0a。 ダウンタイムが5分以上かかる場合は、Twitterに行き、あなたがそれを処理していると言います。 NewsBlurのフォロワーは技術的に大変です。 また、502ページではユーザーをステータス更新のためにTwitterに誘導します。
0b。 /etc/hosts
secrets-newsblur/configs/hosts
インストールされていることを確認して、サーバのホスト名が機能/etc/hosts
ようにしてください。
-
それがダウンしていることを確認するにはwww.newsblur.comをチェックしてください。
あなたが502ページを取得しない場合、NewsBlurに到達することさえできず、あなたはホスティングプロバイダに連絡して、彼らに叫ぶ必要があります。
-
Sentryをチェックして、答えがリストの一番上にあるかどうかを確認します。
これは、データベース(redis、mongo、postgres)が見つからない場合に表示されます。
-
HAProxyの統計ページで到達できないサーバーを確認します。 基本認証は、secrets / configs / haproxy.confにあります。
通常、それはmongoになりますが、redisまたはpostgresのいずれかのサーバーは、神の行為のために到達不能になる可能性があります。 それ以外の場合、頻繁な原因はディスク領域の不足です。 ディスクスペースを監視するモニターがすべてのDBサーバー上にあり、稼働率が低いときに私に電子メールを送信しますが、それでも問題は発生します。
-
さまざまなデータベースをチェックしてください:
a。 Redisサーバー(db_redis、db_redis_story、db_redis_pubsub)が接続できない場合、redisはおそらくダウンしています。
SSH into the offending server (or just check both the `db_redis` and `db_redis_story` servers) and check if `redis` is running. You can often `tail -f -n 100 /var/log/redis.log` to find out if background saving was being SIG(TERM|INT)'ed. When redis goes down, it's always because it's consuming too much memory. That shouldn't happen, so check the [munin graphs](http://db_redis/munin/). Boot it with `sudo /etc/init.d/redis start`.
b。 mongo(db_mongo)が接続できない場合は、mongoがダウンしている可能性があります。
This is rare and usually signifies hardware failure. SSH into `db_mongo` and check logs with `tail -f -n 100 /var/log/mongodb/mongodb.log`. Start mongo with `sudo /etc/init.d/mongodb start` then promote the next largest mongodb server. You want to then promote one of the secondaries to primary, kill the offending primary machine, and rebuild it (preferably at a higher size). I recommend waiting a day to rebuild it so that you get a different machine. Don't forget to lodge a support ticket with the hosting provider so they know to check the machine. If it's the db_mongo_analytics machine, there is no backup nor secondaries of the data (because it's ephemeral and used for, you guessed it, analytics). You can easily provision a new mongodb server and point to that machine. If mongo is out of space, which happens, the servers need to be re-synced every 2-3 months to compress the data bloat. Simply `rm -fr /var/lib/mongodb/*` and re-start Mongo. It will re-sync. If both secondaries are down, then the primary Mongo will go down. You'll need a secondary mongo in the sync state at the very least before the primary will accept reads. It shouldn't take long to get into that state, but you'll need a mongodb machine setup. You can immediately reuse the non-working secondary if disk space is the only issue.
c。 postgresql(db_pgsql)が接続できない場合、postgresはおそらくダウンしています。
This is the rarest of the rare and has in fact never happened. Machine failure. If you can salvage the db data, move it to another machine. Worst case you have nightly backups in S3. The fabfile.py has commands to assist in restoring from backup (the backup file just needs to be local).
-
新しい/異なるマシンを指す
a。
fab list_do
使用して新しいマシンのIPアドレスを確認します。b。 新しいマシンを反映するように
secrets-newsbur/config/hosts
を変更してください。c。 新しい
hosts
ファイルを以下のものを持つすべてのマシンにコピーhosts
ます。fab all setup_hosts
d。 変更は瞬時に行われるはずですが、すべてのマシンをバウンスすることもできます:
fab web deploy:fast=True # fast=True just kill -9's processes. fab task celery
e。
utils/tlnb.py
とutils/tlnbt.py
を読んで多くの読み込みとフィードの取得をutils/tlnbt.py
します。 -
フィードが取得されない場合は、
tasked_feeds
キューが空であることを確認します。 以下を実行して排水することができます:
```
Feed.drain_task_feeds()
```
This happens when a deploy on the task servers hits faults and the task servers lose their
connection without giving the tasked feeds back to the queue. Feeds that fall through this
crack are automatically fixed after 24 hours, but if many feeds fall through due to a bad
deploy or electrical failure, you'll want to accelerate that check by just draining the
tasked feeds pool, adding those feeds back into the queue. This command is idempotent.
著者
- Samuel Clayによって作成されました。
- メールアドレス: samuel@newsblur.com
- Twitterで@samuelclay
ライセンス
NewsBlurはMITライセンスの下でライセンスされています。 (ライセンスを参照)