Changes from Simon's hub.darcs.net darcsden proposed for darcsden 1.0 (fork of simon's darcsden_1.0)

root

darcsden is a darcs repository hosting platform, providing a web application for browsing and managing repos, users, and issues, and a SSH server for push/pull and quick repository creation.

Home: http://hackage.haskell.org/package/darcsden

To install:

You will need:

  • Redis (for storing web session data)
  • CouchDB (for storing user/repo/repository data)

Both should be running on their default port, or just edit DarcsDen/State/Util.hs to point to different ones.

You should have a "darcsden" user account (for running the app and owning the files), with a ssh key:

adduser --system --home /home/darcsden --shell /bin/bash --group --gecos DarcsDen darcsden
sudo -u darcsden ssh-keygen

Configure, build and install darcsden:

(edit src/DarcsDen/Settings.hs)
cabal install

And configure the databases:

darcsden --install

To start:

For a quick test, you can run:

darcsden

and browse to port 8900 with your server.

This package provides separate executables for the web and SSH servers, darcsden' anddarcsden-ssh', respectively. You could run them manually while logged in as user 'darcsden' via screen or dtach. Or, configure them as daemons. supervisord is one way, here are sample supervisord.conf entries.

[program:darcsden]
command=sudo -Hu darcsden /path/to/darcsden --port 8900
directory=/home/darcsden
priority=3
redirect_stderr=true
autostart=true
autorestart=true
environment=LANG="en_US.UTF-8"

[program:darcsden-ssh]
command=sudo -Hu darcsden /path/to/darcsden-ssh 22
directory=/home/darcsden
priority=3
redirect_stderr=true
autostart=true
autorestart=true
environment=LANG="en_US.UTF-8"

Note that it's important to run as darcsden, with HOME set (sudo -Hu darcsden), to ensure proper darcs cache directory selection and proper file ownership. Otherwise you will get obscure errors when serving pages.

Also the directory where the web server starts should contain darcsden's public/ directory. Or you can run it behind a web server or something that'll handle /public requests by pointing to that directory.

Here's a sample apache vhost config:

<VirtualHost *:80>
ServerName my.host.name
RewriteEngine on
ProxyPreserveHost On
ProxyErrorOverride On
RewriteRule ^/(.*) http://127.0.0.1:8900/$1 [P]
</VirtualHost>