Roll Your Own Server

SoYaWannaWikiWiki has tips for running a pre-written server. WikiEngines has a large list of implementations people have written, most of them free and available. This page has some insights for people thinking of writing their own, or curious about the process.

I wish Ward would push the changes in WikiWikiWeb (like the cookies that show your username on RecentChanges) into WikiBase. Will this ever happen?

I wish Ward would push the LiterateProgramming Perl stuff up.


RollYourOwnServer (aka How to Install Your Own WikiWiki)

1st, find a page that has WikiInStraightPerl [does http://c2.com/cgi/wikibase?WikiInStraightPerl count or is that the wrong version?] WardsWiki is seldom updated, in a constant state of flux, and poorly documented, even though it is the original. Others have taken his code (with permission): WikiEngines has a long list.

Next, try to figure out the setup parms in the cryptic form, if you're using WardsWiki. They aren't important - you can always go back and change them in the code. It is meant as a convenience, not a requirement. Here is a hint for creating the initial database: http://www.c2.com/cgi/wikibase?WikiStandardPages

Have Perl installed or install it: http://www.cpan.org

Spend the rest of the weekend reading the SourceCode and guessing how to make it work ... once you've done that, you might as well start tweaking it - everyone else is. If you don't know Perl, start with another code base, write your own in another language, or learn Perl first.

Most people run something other than WardsWiki - UseModWiki is a popular pick: http://www.usemod.com/cgi-bin/wiki.pl - it has the features people expect and is easy to set up for someone with a basic understanding of Perl 4 - but you're really selling yourself short if you don't shop around.

Half the Wikis on the net are UseModWiki - the other half seem to be homebrew, though MoinMoin is becoming popular.

Going the homebrew route, either you want to try to grasp WikiEssence or else you feel you have your own understanding of it. The minimal implementation is, well, minimal. TinyWiki (a good pick for hacking on, well documented, good install instructions) starts at 30 odd lines. Automatically generating links, autovivicating pages, handling some basic markup, and allowing people to save changes are the core requirements to be useful, unless another approach is taken. Any amateur programmer can easily implement this in the language of their choice in a weekend.

Most WikiClones are written for Unix-like systems and are written in a scripting language like Perl or Python. Actually, most of them are written in odd languages like awk, but scripting languages predominate. Most of them run as CGI-BIN applications. If this is what you're looking for, you're in luck. If it isn't, the odds are still in your favor. Wikis that run their own webserver, run under MicrosoftWindows, are written in a systems language, or whatever your requirement, might very well exist. If there isn't one written in your language of choice for your operating system of choice, this is the stimulus that many other people have reacted to in writing their own.

Reverse links, version control, RecentChanges, full text searching, user logins, subpages are all becoming standard features and people expect them to be present, though, once again, depending on the direction you want to take, you may be able to substitute other features or do without. Many people seem to write WikiClones to experiment with their own concept of a simple forum, and leaving unwanted cruft behind is a valid motive.

Get confused thinking about InterWiki - PeterMerel Quite so. RSS feeds, SisterSites, trust metrics, and other advanced features go from there. No Wiki has everything as people are all innovating with their own code base. However, discussion of InterWiki is the largest TarPit? at this stage.

Many authors are happy to discuss their version and help you with it. Perhaps this can be merged into WikiEngines as a field. No one can teach you to program or use Unix-like systems, but if you want to discuss the code, find a strange problem, or want to help, by all means, contact the author of the software. If you fork someone else's software and release, drop them a quick note - they usually enjoy hearing about it. AustinDavid says he will help point you towards a suitable WikiClone. So will I, ScottWalters.

A forum like this won't give you a good impression of what software you should be using - these are only general considerations. Rather than ask here which you should use (and no provide any details on your situation), look around on the Internet and identify which ones suit your personality, then find the development site for that Wiki, and learn more there. If you're looking for biased information, you want as much biased information, as direct from the source, as possible. Nothing is worse than muddled, improperly located, biased information.

Another motivation is pluggability - http://slashdot.org has a Wiki written to plug into their "slashcode" code base. Apparently Zope has one. Lots of object frameworks have their own.

Turning a Wiki into a community is another issue entirely - see http://www.usemod.com/cgi-bin/mb.pl?SeedPosting for some thoughts.


That's the overview. Implementation details follow from here.

Find out whether the native DBM on your server can handle entries greater than 1K. If not, write a replacement DBM package that uses only files and directories (warning: you must provide your own locking!) http://prtims.stx.com/NonDBM_File.pm

Or, write or use something that uses CVS as the back end, or plain files. WikiWords should be indexed for performance on a large Wiki, but on a small Wiki, the overhead of parsing thousands of lines of Perl every hit will far outweigh any advantage to having words indexed. Flat files can work just fine for a small site.

WardsWiki and UseModWiki use diff for version control. TinyWiki uses CVS or optionally no version control at all.
Blech. Python rules. KirkBailey says so.

Here's a page for a Python server and wiki. PythonServerPlus
See Also: RollYourOwn

EditText of this page (last edited December 31, 2008) or FindPage with title or text search