123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- Wt Installation instructions on Unix-like systems
- This page lists the instructions for building and installing Wt. It is
- organized in 3 sections:
- * [1]Requirements
- * [2]Building and installing the library
- * [3]Trying the examples (or your own Wt application)
- Requirements
- The library provides two ways for deploying applications: either using
- the FastCGI protocol, in conjunction with a webserver (like apache), or
- using a built-in web server (wthttpd). You only need one of these, but
- you can have both of them.
- The built-in web server is more convenient during development and is
- easier to setup. It also allows you to use WebSockets.
- The FastCGI based solution can be more convenient for deployment behind
- another web server.
- Each of these two choices correspond to a library, a so-called
- connector library. Below it is outlined how to configure the build
- process of Wt to build either or both libraries (libwthttp and
- libfcgi).
- Thus, to build a Wt library with built-in web server you need to link
- against libwt and libwthttp. To build a Wt library which acts as a
- FastCGI process, you need to link against libwt and libfcgi.
- 1 Wt requirements
- * Compiler: gcc-3.3.4 or higher, or gcc-4.1.x or higher, or other
- Ansi C++ compiler that can deal with boost-like C++ code.
- * [4]CMake cross-platform build system:
- Preferably CMake 2.6, which comes with a usable script for finding
- boost libraries, but CMake 2.4 is still supported using Wt's own
- boost find script.
- * [5]C++ boost library (preferably version 1.46.1 or higher), with or
- without thread support. You can verify you have a thread-enabled
- boost installation by locating the libboost_thread library. Thread
- support is not essential: Wt functionality is not affected except
- for exotic things like server push and reentrant event loops. Most
- importantly, even without thread support Wt can handle multiple
- concurrent sessions.
- Older versions of boost, up until 1.36 are also supported, but some
- features will be disabled that depend on the revised versions of
- spirit, namely JSON parsing and improved SQL parsing (for Wt::Dbo).
- * Optionally, [6]OpenSSL, which is used to support the HTTPS protocol
- in the web client, and the HTTPS protocol in the built-in wthttpd
- connector.
- * Optionally, [7]Haru Free PDF Library, which is used to provide
- support for painting to PDF (WPdfImage).
- * Optionally, [8]GraphicsMagick, for supporting painting to raster
- images (PNG, GIF, ...) (WRasterImage).
- * Optionally, [9]PostgreSQL, for the PostgreSQL backend for Wt::Dbo
- (Dbo::backend::Postgres).
- * Optionally, [10]Firebird, for the Firebird backend for Wt::Dbo
- (Dbo::backend::Firebird).
- * Optionally, [11]Pango, for improved font support in the WPdfImage
- and WRasterImage paint devices.
- 1a Using FastCGI
- When using FastCGI, Wt requires a webserver (like apache, lighttpd or
- nginx) which supports the FastCGI protocol.
- Given that Apache is still the most popular webserver, below are the
- requirements for apache, for other web servers the list is similar:
- * [12]FCGI library, including C++ bindings (libfcgi++)
- * A suitable plugin for your web server.
- 1b Using wthttpd
- When using the built-in webserver, two more libraries may be installed
- to enable optional features (you can also build without them), but
- otherwise no extra dependencies are required.
- * Optionally, zlib (libz), for compression over HTTP.
- * Optionally, OpenSSL (libopenssl), for HTTPS.
- 2 Additional and optional requirements for some of the examples
- * Qt, for the libwtwithqt interopability layer
- __________________________________________________________________
- Building and installing the Wt library
- 1. Create a build directory
- The recommended way to build the library is in a seperate build
- directory, for example within the top-level of the Wt package:
- $ cd wt-x.xx
- $ mkdir build
- $ cd build
- 2. Configure the library
- $ cmake ../
- The latter command will try to locate the necessary libraries. If
- everything is OK, then this should end with something like:
- -- Generating done
- -- Build files have been written to: /home/kdforc0/project/wt/build
- To build a multi-threaded version of Wt, which uses multiple threads
- for handling concurrent requests, you need a thread-enabled boost
- library. By default, CMake 2.6 will only search for a thread-enabled
- boost installation, while CMake 2.4 will fall-back to a
- non-multithreaded boost library, reporting:
- ...
- -- Looking for pthread_create in pthread - found
- ** Disabling multi threading.
- ...
- Most linux distributions provide multi-threaded boost libraries by
- default now.
- If CMake fails, because it cannot resolve all dependencies, then you
- may help CMake by setting some variables to help CMake locate the
- libraries. This may be done on the command-line using -Dvar=value or
- using the interactive program:
- $ ccmake ../
- or
- $ cmake-gui ../
- The GUI lists all variables that are configurable in Wt's build
- process. Variables that you may set to configure Wt's built-in boost
- finding method:
- BOOST_COMPILER
- The boost compiler signature. For a library
- libboost_regex-gcc41-mt-1_37.so, this is 'gcc41'
- BOOST_VERSION
- The boost compiler signature. For a library
- libboost_regex-gcc41-mt-1_37.so, this is '1_37'
- BOOST_DIR
- The boost installation directory. This is the directory where
- lib/ and include/ are located for your boost installation.
- Other variables specify several build and configuration aspects of Wt,
- of which the most relevant ones are (there are many more visible in the
- GUI):
- CMAKE_INSTALL_PREFIX
- Installation prefix for the library and include files)
- CONFIGDIR
- Path for configuration files (default is /etc/wt/)
- CONNECTOR_FCGI
- Build the FastCGI connector (libwtfcgi) ?
- CONNECTOR_HTTP
- Build the stand-alone httpd connector (libwthttp) ?
- EXAMPLES_CONNECTOR
- Which connector library to use for the examples? (wthttp or
- wtfcgi)
- MULTI_THREADED
- Build a multi-threaded wthttpd? While on by default, and
- recommended, you may want to disable this for example if you
- suspect threading problems. Note that recursive event loops
- (most notably when using Dialog::exec()) are not possible
- without thread support.
- The following variables apply to the FastCGI connector:
- RUNDIR
- Default location for Wt runtime session management (can be
- overridden in the Configuration file)
- WEBUSER
- Webserver username: used to assign permissions to RUNDIR
- WEBGROUP
- Webserver groupname: used to assign permissions to RUNDIR
- The following variables apply to the wthttpd connector:
- WTHTTP_CONFIGURATION
- Location of the wthttpd configuration file (default is
- /etc/wt/wthttpd)
- To change any entry, use [Enter]. To save and quit, do [c] followed by
- [g].
- 3. Build the library
- $ make
- 4. Install the library (as user with sufficient permissions):
- $ make install
- 5. Get your LD_LIBRARY_PATH ok, if needed (mostly for FastCGI).
- If you did not install Wt in a directory (CMAKE_INSTALL_PREFIX)
- included in the default linker dynamic library search path, then the
- web server will not be able to start Wt programs (such as the
- examples).
- Fix it by (as user with sufficient permissions):
- $ ln -s /your/path/to/lib/libwt.so /usr/lib
- $ ln -s /your/path/to/lib/libwtfcgi.so /usr/lib
- __________________________________________________________________
- Trying the examples (or your own Wt application)
- Deploying an application is different when using FastCGI or the
- built-in web server (wthttpd).
- The examples that come with the library use the connector specified by
- the build option EXAMPLES_CONNECTOR (see supra).
- Some examples need third-party JavaScript libraries (ExtJS or TinyMCE).
- * Download ExtJS from [13]http://yogurtearl.com/ext-2.0.2.zip, and
- install it according to these instructions:
- [14]http://www.webtoolkit.eu/wt/doc/reference/html/group__ext.html
- * Download TinyMCE from [15]http://tinymce.moxiecode.com/ and install
- its tiny_mce folder into the resources/ folder.
- You will notice 404 File not Found errors for ext/ or
- resources/tiny_mce/ if you are missing these JavaScript libraries.
- A. Using FastCGI and apache
- 1. Build the examples
- $ make -C examples
- 2. Deploy the example foobar
- The easiest way to deploy the examples is by copying the binary (from
- your build directory) and the source directory (which contains the
- images) and the resources/ into the same destination directory
- somewhere in your Apache server (we no longer generate a ./deploy.sh
- script that took care of some of this).
- $ export DESTINATION=/var/www/localhost/htdocs/wt-examples
- $ mkdir -p $DESTINATION/foobar
- $ cp -r examples/foobar/* resources/* build/examples/foobar/*.wt $DESTINATIO
- N/foobar/
- This does however make public also files (such as message resources
- bundles, data files, etc...) that do not need to be served by your web
- server. The clean way to deploy your own applications is to use the
- "approot" property to deploy those files to a directory outside the
- webserver's doc root.
- 3. Configure Apache
- Treat the example as a mod_fastcgi application, by adding a line to
- 20_mod_fastcgi.conf in your Apache configuration modules.d/ directory,
- e.g.:
- FastCgiServer /var/www/localhost/htdocs/wt-examples/composer/composer.wt
- 4. Restart apache
- B. Using wthttpd
- 1. Build the examples
- $ make -C examples
- 2. Running an example
- Most examples use additional files, such as message resource bundles,
- which are not indicated with absolute path names. Therefore the working
- directory should be the source directory for the example. A similar
- argument goes for icons and the setting of the --docroot variable.
- Since Wt 3.1.4, you can use the "approot" property to move the
- additional files that should not be available to browsers outside of
- the docroot.
- $ cd ../examples/foobar # source directory for example foobar
- $ ln -s ../../resources . # include standard Wt resource files
- $ ../../build/examples/foobar/foobar.wt --docroot . --http-address 0.0.0.0 -
- -http-port 8080
- This will start a httpd server listening on all local interfaces, on
- port 8080, and you may browse the example at [16]http://127.0.0.1:8080/
- You will notice 404 File not Found errors for resources/ files if you
- are missing the resources files.
- These are all the command-line options that are available:
- General options:
- -h [ --help ] produce help message
- -t [ --threads ] arg (=10) number of threads
- --servername arg (=vierwerf) servername (IP address or DNS name)
- --docroot arg document root for static files
- --errroot arg root for error pages
- --accesslog arg access log file (defaults to stdout)
- --no-compression do not compress dynamic text/html and text/plai
- n responses
- --deploy-path arg (=/) location for deployment
- --session-id-prefix arg prefix for session-id's (overrides wt_config.xm
- l setting)
- -p [ --pid-file ] arg path to pid file (optional)
- -c [ --config ] arg location of wt_config.xml. If unspecified,
- WT_CONFIG_XML is searched in the environment,
- if it does not exist then the compiled-in
- default (/etc/wt/wt_config.xml) is tried. If
- the default does not exist, we revert to
- default values for all parameters.
- --max-request-size arg Maximum size of a HTTP request. This also
- limits POST requests, so this is an upper limit
- for file uploads. Default is 40MB.
- --max-memory-request-size arg Requests are usually read in memory before
- being processed. To avoid DOS attacks where
- large requests take up all RAM, use this
- parameter to force requests that are larger
- than the specified size to be spooled to disk.
- This will also spool file uploads to disk.
- --gdb do not shutdown when receiving Ctrl-C (and let
- gdb break instead)
- HTTP server options:
- --http-address arg IPv4 (e.g. 0.0.0.0) or IPv6 Address (e.g. 0::0)
- --http-port arg (=80) HTTP port (e.g. 80)
- HTTPS server options:
- --https-address arg IPv4 (e.g. 0.0.0.0) or IPv6 Address (e.g. 0::0)
- --https-port arg (=443) HTTPS port (e.g. 443)
- --ssl-certificate arg SSL server certificate chain file
- e.g. "/etc/ssl/certs/vsign1.pem"
- --ssl-private-key arg SSL server private key file
- e.g. "/etc/ssl/private/company.pem"
- --ssl-tmp-dh arg File for temporary Diffie-Hellman parameters
- e.g. "/etc/ssl/dh512.pem"
- References
- 1. file:///home/roel/project/wt/git/wt/INSTALL.html#requirements
- 2. file:///home/roel/project/wt/git/wt/INSTALL.html#build
- 3. file:///home/roel/project/wt/git/wt/INSTALL.html#examples
- 4. http://www.cmake.org/
- 5. http://www.boost.org/
- 6. http://www.openssl.org/
- 7. http://libharu.org/
- 8. http://www.graphicsmagick.org/
- 9. http://www.posgresql.org/
- 10. http://www.firebirdsql.org/
- 11. http://www.pango.org/
- 12. http://www.fastcgi.com/
- 13. http://yogurtearl.com/ext-2.0.2.zip
- 14. http://www.webtoolkit.eu/wt/doc/reference/html/group__ext.html
- 15. http://tinymce.moxiecode.com/
- 16. http://127.0.0.1:8080/
|