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.
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`)
;
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.
--- # 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.
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.
Set up your site index script.