Ego (unconfigured) · Journal · Manual · FAQ
Nota bene: the manual pages have not been updated completely from the prototyped version to the current version.

Installing the Ego database

Eventually there will probably be a web panel to handle the details behind the scenes, but for now, you'll have to get your hands dirty. MySQL is the only tested engine so far.

Steps to get the database ready for Ego

  1. Install the database and its tables with the raw SQL below.
  2. Setup your site owner.
  3. Configure the database connection.

Database definition

CREATE DATABASE ego;

It is possible to name your database something besides "ego" but you shouldn't unless for some strange reason you're forced. If you do use a different name, change the "USE ego" below as well.

USE ego;

SET FOREIGN_KEY_CHECKS = 0;

# image categories too?
DROP TABLE IF EXISTS `media`;
CREATE TABLE `media` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `parent` int(8) unsigned default NULL,
  `shortname` varchar(200) NOT NULL default '',
  `alt` tinytext NOT NULL,
  `longdesc` tinytext,
  `data` LONGBLOB NOT NULL,
  `user` int(8) unsigned NOT NULL default '0',
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `parent` (`parent`),
  UNIQUE KEY `shortname` (`shortname`),
  CONSTRAINT `media_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `media` (`id`),
  CONSTRAINT `media_ibfk_2` FOREIGN KEY (`user`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `category_info`;
CREATE TABLE `category_info` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `parent` int(8) unsigned default NULL,
  `title` tinytext NOT NULL,
  `description` text,
  `user` int(8) unsigned NOT NULL default '0',
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `parent` (`parent`),
  KEY `user` (`user`),
  UNIQUE KEY `title` (`title`),
  CONSTRAINT `category_info_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `category_info` (`id`),
  CONSTRAINT `category_info_ibfk_2` FOREIGN KEY (`user`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `post` int(8) unsigned default NULL,
  `info` int(8) unsigned default NULL,
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `post` (`post`),
  KEY `info` (`info`),
  CONSTRAINT `category_ibfk_1` FOREIGN KEY (`post`) REFERENCES `post` (`id`),
  CONSTRAINT `category_ibfk_2` FOREIGN KEY (`info`) REFERENCES `category_info` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `post` int(6) unsigned NOT NULL default '0',
  `parent` int(8) unsigned default NULL,
  `user` int(8) unsigned NOT NULL default '0',
  `title` tinytext NOT NULL,
  `body` text,
  `note` text,
  `status` enum('pending','approved','deleted') default 'pending',
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `post` (`post`),
  KEY `parent` (`parent`),
  KEY `user` (`user`),
  CONSTRAINT `comment_ibfk_1` FOREIGN KEY (`post`) REFERENCES `post` (`id`),
  CONSTRAINT `comment_ibfk_2` FOREIGN KEY (`parent`) REFERENCES `comment` (`id`),
  CONSTRAINT `comment_ibfk_3` FOREIGN KEY (`user`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `post`;
CREATE TABLE `post` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `user` int(8) unsigned NOT NULL default '0',
  `title` tinytext NOT NULL,
  `shortname` varchar(200) NOT NULL default '',
  `body` text,
  `introit` text,
  `note` text,
  `status` enum('publish','draft') default 'draft',
  `commentflag` enum('on','off','closed','hide') default 'on',
  `golive` datetime default NULL,
  `takedown` datetime default '3000-01-01 00:00:00',
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `user` (`user`),
  FOREIGN KEY (`user`) REFERENCES `user` (`id`),
  UNIQUE KEY `shortname` (`shortname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `name` tinytext NOT NULL,
  `password` varchar(16) default NULL,
  `email` varchar(75) NOT NULL default '',
  `website` varchar(200) default NULL,
  `ip` varchar(16) default NULL,
  `type` ENUM('owner','admin','janitor','writer','commentator','visitor') NOT NULL DEFAULT 'visitor',
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `referer`;
CREATE TABLE `referer` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `domain` int(8) unsigned default NULL,
  `referer` mediumtext NOT NULL,
  `found`  mediumtext NOT NULL,
  `query`  tinytext NULL,
  `status` enum('pending','valid','deleted') default 'pending',
  `checked` datetime default NULL,
  `count` int(8) unsigned default 0,
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `domain` (`domain`),
  CONSTRAINT `referer_ibfk_1` FOREIGN KEY (`domain`) REFERENCES `referer_domain` (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `referer_domain`;
CREATE TABLE `referer_domain` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `domain` tinytext NOT NULL, # base uri only
  `status` enum('pending','trusted','banned') default 'pending',
  `valid` int(8) unsigned,     # count of checked referers that were there
  `invalid` int(8) unsigned,   # that weren't there
  `created` datetime default NULL,
  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

# temporary updating items 
 ALTER TABLE category_info
 ADD CONSTRAINT `category_info_ibfk_2` FOREIGN KEY (`user`)
 REFERENCES `user` (`id`)
;

Configure the database connection

You need to edit the file named site.yml in your $ENV{EGO_CUSTOM} directory. If it doesn't exist yet, copy the default one from /root.

point there and move the rest to it.

Then open and edit it with whatever plain text editor you prefer; like vim, Emacs, or Pico.

It is a YAML file and will break if not in the correct format. Eventually, we'll probably handle this through a web panel but for now, you have to do it by hand and correctly. E.g., YAML files should not contain tabs and must end in with a blank line.

Default site.yml

---
# YAML:1.0
# DO NOT USE TABS FOR INDENTATION OR label/value SEPARATION!!!

name: Ego
mail_error: apv@sedition.com
posts_per_page: 10

Model::DB:
  engine: ~
  dbname: ~
  user: ~
  password: ~
  host: ~
  port: ~

session:
  expires: '360'
  rewrite: '0'
  storage: ~

site:
  name: 'Ego (unconfigured)'
  title_prefix: 'Ego (unconfigured): '
  banner_img: '/img/ego/ego-banner-sample.png'
  favicon: '/img/ego/ego-favicon.png'
  home: "welcome"


You need to add your appropriate values for the Model::DB variables. This allows Ego to connect to your database. Engine should be something that the Perl DBI drivers understand like mysql, pg, or SQLite. Here is what a setup might look like (you'll have to substitute your own specifics or it won't work).

Model::DB:
  engine: mysql
  dbname: ego
  user: mysql
  password: abetter1
  host: mysql.myhostnamehere.com
  port: ~

If you don't set engine, it will default to mysql. If you don't set dbname, it will default to ego. If you don't set host, it will default to localhost. Most users will not need to set the port. A tilde (~) means the value is undefined.

You need to set up your database user as well. See your database engine's documentation for that.

Important!

You'll also need to set your ownership manually for now with something like this:

USE ego; 

INSERT INTO user VALUES
   ( NULL, 'Your Name', 'Your password',
     'Your@email', 'http://your-URI/',
     NULL, 'owner', NOW(), NULL);

Without setting up your owner account, you will not be able to sign into your site to write posts.

Next?

Set up your site index script.

Ego driven
Ego · Catalyst · Apache · FastCGI · CPAN · modperl · Template Toolkit · Perl