## Please edit system and help pages ONLY in the moinmaster wiki! For more
## information, please see MoinMaster:MoinPagesEditorGroup.
## page was renamed from HelpOnInstalling/StandaloneOnLinux
##master-page:Unknown-Page
##master-date:Unknown-Date
#acl MoinPagesEditorGroup:read,write,delete,revert All:read
#format wiki
#language en
'''Installing and configuring standalone server'''

See also: HelpOnConfiguration/IntegratingWithApache

The standalone server is especially made for local wikis because it does not need a web server installed. Only Python and Moin are necessary!

To install and run the standalone server:
 1. If MoinMoin is not installed yet, perform ../BasicInstallation
 1. Create a wiki instance as described in ../WikiInstanceCreation
 1. Copy {{{moin.py}}} to your wiki directory, where your {{{wikiconfig.py}}} is
 1. If you installed with `--prefix` option, you must edit moin.py and set `docs` to the correct path.
 1. Run {{{moin.py}}}
 1. Access your wiki at http://localhost:8000/

On most cases, the default settings will be just fine. You may want to edit {{{moin.py}}} and change some of the options, as described in the next section.

= Configuring moin.py =

== System path configuration ==

If you did a standard install, and you are not a developer, you probably want to skip this section. If not, you might want to add the path to moin and config file, like that:

{{{
import sys
sys.path.insert(0, '/path/to/moin')
sys.path.insert(0, '/path/to/wikiconfig')
}}}

<<Anchor(options)>>
== Config class options ==

|| '''Option''' || '''Default''' || '''Comment''' ||
|| name || {{{'moin'}}} || Server name, used by default for log and pid files. (!) New in 1.5 ||
|| docs || {{{'/usr/share/moin/wiki/htdocs'}}} || Path to moin shared files. If you used `--prefix` install, the default path will not work, and you must set the path to {{{'PREFIX/share/moin/wiki/htdocs'}}}. ||
|| user || {{{'www-data'}}} || If you run as root, the server will run with as this user ||
|| group || {{{'www-data'}}} || If you run as root, the server will run with as this group ||
|| port || {{{8000}}} || Port to serve. To serve privileged port under 1024 you will have to run as root ||
|| interface || {{{'localhost'}}} || The interface the server will listen to. The default will listen only to localhost. Set to {{{''}}} to listen to all.||
|| logPath || {{{name + '.log'}}} || Log file. Default is commented. ||
|| serverClass || {{{'ThreadPoolServer'}}}, {{{'ThreadingServer'}}}, {{{'ForkingServer'}}}, {{{'SimpleServer'}}}, {{{'SecureThreadPoolServer'}}} || The server type to use, see the comments in the {{{moin.py}}}. The default is {{{'ThreadPoolServer'}}}, which create a pool of threads and reuse them for new connections. (!) New in 1.3.5 ||
|| threadLimit || {{{10}}} || How many threads to create. ||
|| requestQueueSize || {{{50}}} || The count of socket connection requests that are buffered by the operating system. (!) New in 1.3.5 ||
|| properties || {{{ {} }}} || allow overriding any request property by setting the value in this dict e.g {{{properties = {'script_name': '/mywiki'}}}}. (!) New in 1.5 ||
|| ssl_privkey || {{{ None }}} || If using the SecureThreadPoolServer, this must point to the server's private key (!) New in 1.6 ||
|| ssl_certificate || {{{ None }}} || If using the SecureThreadPoolServer, this must point to the server's certificate (!) New in 1.6 ||

 (!) There may be more options useful to moin developers, see the comments in {{{moin.py}}}

== Using the secure standalone server ==

(!) New in 1.6

The standalone server supports SSL when using the SecureThreadPoolServer server class. The SSL support is provided by the [[http://trevp.net/tlslite/|TLSLite library]]. '''All wiki traffic is forced to SSL when using the SecureThreadPoolServer'''. 

Two additional configuration options are required when using the SecureThreadPoolServer. First, `ssl_privkey` must point to the server's private key. Second, `ssl_certificate` must point to the server's certificate. 

/!\ ''TLSLite does not support a password protected private key unless additional libraries are used. Consult the TLSLite webpage for more information.''

Typically a certificate would be purchased from an certificate authority, such as Thawte (http://www.thawte.com). However, since the suggested usage of the standalone server is for personal use, a self signed certificate may be appropriate. For more information on how to generate a server private key, and a self signed certificate, see the [[http://www.openssl.org/docs/HOWTO/|openssl HOWTO pages]].

For example, to create the server's private key, run the following:

`openssl genrsa -out privkey.pem 2048`

To create a self signed certificate for the newly created private key, run the following:

`openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095`

moin.py then needs to be told about the generated files `privkey.pem` and `cacert.pem`. For the example above, the following lines would need to be added to moin.py:

{{{
    ssl_privkey = "/secure/path/to/privkey.pem"
    ssl_certificate = "/secure/path/to/cacert.pem"
}}}

/!\ Using a self signed certificate will cause your browser to generate a warning that it cannot verify the identify of the wiki server. This is because the certificate was not signed by a recognized certificate authority (CA). In order to get rid of this warning, you must purchase a certificate from a CA.

= Configuring wikiconfig.py =

The sample config file should be just fine.

The default value of `url_prefix_static` is hardcoded into the standalone server script, do not change it or it won't work!

= Starting the server =

Run {{{moin.py}}} from the command line:
{{{
$ ./moin.py
Serving on localhost:8000
}}}

Test your wiki at http://localhost:8000/

On Windows, you can double click {{{moin.py}}} to start the server. A new terminal window will be opened. Close the window or press {{{Control + Pause}}} to stop the server.

On Unix, interrupt the server with {{{Control + C}}} in order to shut it down.

= Serving port 80 on Unix =

On GNU/Linux, Mac OS X or other Posix like OS, you can serve the standard port 80 used for web serving, but you must run as {{{root}}} for this.
 
Set {{{port}}} to 80, and verify that {{{user}}} and {{{group}}} exists on your system. If not, set them to an existing user, meant for web serving. If needed, {{{chown}}} your wiki dir to this user and group.

Run {{{moin.py}}} as root:
{{{
$ sudo moin.py
Password:
Serving on localhost:8000
Running as uid/gid 70/70
}}}

Test your wiki at http://localhost/

= Running as daemon =

If run on Unix, you can run moin.py as a background process:
 1. Have a working {{{moin.py}}} as explained above
 1. Copy the file {{{prefix/share/moin/server/moin}}} to your wiki directory.
 1. Start moin server:
{{{
./moin start
}}}

To stop the server:
{{{
./moin stop
}}}

For more info run {{{moin}}} with no arguments.

If you want to start moin from a system startup script, you may need to add the path to {{{moin.py}}} in the top of the script:
{{{
# Add the path to moin.py directory 
import sys
sys.path.insert(0, '/path/to/moin')
}}}

 (!) New in release 1.5
