Installing Bookie

The short version

This assumes you’re on Ubuntu or can figure out the difference between Ubuntu and your distro for the following:

$ git clone git://github.com/bookieio/Bookie.git
$ cd Bookie && make sysdeps && make install
# THIS WILL TAKE A WHILE, GET A COFFEE
$ make run
$ (YOUR BROWSER) http://127.0.0.1:6543/

You should have JavaScipt enabled.

Login as admin

user: admin
pass: admin

You can create new users by writing a script or going through the signup process. You just need to install inbox (bin/pip install inbox) and run make smtp to get a fake email server to catch the activation emails.

Where to go from here

Getting your bookmarks into Bookie

Well, you might want to import a backup of your delicious bookmarks. You can do that by visiting the Import link in the footer of your site installation. Make sure you know the API key that you’ve set in your bookie install’s .ini configuration file.

You can view your recent bookmarks at: http://127.0.0.1:6543/recent

Installing Extension

You probably also want to install a browser extension to be able to store new bookmarks going forward. Once you install the extension, you’ll need to set the options for it to work. See the browser extension docs for those settings.

Hosting Bookie

You can setup Bookie to run in a variety of ways. Make sure to check out some samples in the hosting docs

More details than you can shake a stick at

OS Packages

There are some required packages that need to be installed so you can build bookie. These are:

  • build-essential
  • libxslt1-dev
  • libxml2-dev
  • python-dev
  • libpq-dev
  • git
  • python-virtualenv
  • redis-server
  • unzip

Note: right we we support three databases - mysql, postgres, and sqlite - and the database bindings need to be built into the virtualenv. Out of the box, Bookie will setup a Sqlite version for you to get started with.

Celery backend task processing

Bookie uses the Celery library to handle background processing tasks that might be expensive. Currently, it’s setup to use redis as the backend for this. Please check the bookie.ini for the connection string to the redis database. Any time a bookmark is saved it will background fulltext indexing for the bookmark. During import, it will attempt to fetch content for the imported urls as well. Emails and stats generation also go through this system. By default, make run will start up celery in the background. An exmaple manual command to run celery safely with the sqlite default database is:

celery worker --app=bookie.bcelery -B -l info  --purge -c 1

Adjust the command to your own needs. You might need to increase or lower the debug level, for instance, to suit your needs.

MySQL & Postgresql Users

If you’re using Postgres or MySQL as your database for Bookie you’ll also want to grab the dev package for your db so that the Python drivers for them can compile.

  • libmysqlclient-dev (Mysql)
  • postgresql-server-dev-8.4 (Postgres)
$ sudo apt-get install libmysqlclient-dev
- OR -
$ sudo apt-get install postgresql-server-dev-8.4

You will also need to install python db drivers for MySql.

  • MySQL-python
$ bin/pip install MySQL-python

Then you’ll need to update the database connection string in your bookie.ini file. The database and user account need to exist in order for it to bootstrap the database for you. Once you’re ready run:

$ make db_up

Migrate from SQLite to MySQL or Postgresql

First, follow the steps above to set up an empty MySQL/Postgresql database.

To prepare for the migration, we first need to empty the alembic_version and users tables which are not fully empty. To do this in MySQL:

TRUNCATE `alembic_version`;
DELETE FROM `users` WHERE 1;

Then, install the migration tools:

$ apt-get install ruby-sqlite3 ruby-mysql
- OR -
$ apt-get install ruby-sqlite3 ruby-pg

$ gem install rack -v 1.4.5
$ gem install taps

Next, let’s publish our existing sqlite database:

$ taps server sqlite:///home/user/bookie/bookie/bookie.db tmpuser tmppass &

And finally we pull the data into our new MySQL/Postgresql database:

$ taps pull -s mysql://bookie:***@localhost/bookie http://tmpuser:tmppass@localhost:5000
- OR -
$ taps pull -s postgres://bookie:***@localhost/bookie http://tmpuser:tmppass@localhost:5000