installation.rst 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. Installation
  2. ============
  3. - `Basic Setup <#basic-setup>`_
  4. - `Configuration <#configuration>`_
  5. - `Deplyoing <#deploying>`_
  6. Basic Setup
  7. -----------
  8. Virtualenv Setup
  9. ~~~~~~~~~~~~~~~~
  10. Before you can start, you need to create a `virtualenv`.
  11. You can install the virtualenvwrapper with your package manager or via pip.
  12. Be sure that pip is installed. If you don't know how to install pip, have a
  13. look at their `documentation <http://www.pip-installer.org/en/latest/installing.html>`_.
  14. For example, on archlinux you can install it with
  15. ::
  16. $ sudo pacman -S python2-virtualenvwrapper
  17. or, if you own a Mac, you can simply install it with
  18. ::
  19. $ sudo pip install virtualenvwrapper
  20. For more information checkout the `virtualenvwrapper <http://virtualenvwrapper.readthedocs.org/en/latest/install.html#basic-installation>`_ installation.
  21. After that you can create your virtualenv with
  22. ::
  23. $ mkvirtualenv -a /path/to/flaskbb -p $(which python2) flaskbb
  24. and you should be switched automatically to your newly created virtualenv.
  25. To deactivate it you just have to type ``deactivate`` and if you want to work
  26. on it again, you need to type ``workon flaskbb``.
  27. Required Dependencies
  28. ~~~~~~~~~~~~~~~~~~~~~
  29. Now you can install the required dependencies.
  30. ::
  31. $ pip install -r requirements.txt
  32. Alternatively, you can use the `make` command to install the dependencies.
  33. ::
  34. $ make dependencies
  35. Optional Dependencies
  36. ~~~~~~~~~~~~~~~~~~~~~~
  37. We have one optional dependency, redis (the python package is installed automatically).
  38. If you want to use it, be sure that a redis-server is running. If you decide
  39. to use redis, the `online guests` and `online users` are being tracked by redis,
  40. else it will only track the `online users` via a simple SQL query.
  41. **On Archlinux**
  42. ::
  43. # Install redis
  44. $ sudo pacman -S redis
  45. # Check if redis is already running.
  46. $ systemctl status redis
  47. # If not, start it.
  48. $ sudo systemctl start redis
  49. # Optional: Start redis everytime you boot your machine
  50. $ sudo systemctl enable redis
  51. **On Debian 7.0 (Wheezy)**
  52. ::
  53. # Install redis
  54. $ sudo apt-get install redis-server
  55. # Check if redis is already running.
  56. $ service redis-server status
  57. # If not, start it
  58. $ sudo service redis-server start
  59. # Optional: Start redis everytime you boot your machine
  60. # I can't remember if this is done automatically..
  61. $ sudo update-rc.d redis-server defaults
  62. Configuration
  63. -------------
  64. Before you can start, you need to configure `FlaskBB`.
  65. Development
  66. ~~~~~~~~~~~
  67. For development, you need to copy ``flaskbb/configs/development.py.example`` to
  68. ``flaskbb/configs/development.py``.
  69. ::
  70. cp flaskbb/configs/development.py.example flaskbb/configs/development.py
  71. The reCAPTCHA keys should work fine on localhost.
  72. Production
  73. ~~~~~~~~~~
  74. If you plan, to use `FlaskBB` in a production environment (not recommended at
  75. the moment, because it's still in development), you need to copy
  76. ``flaskbb/configs/production.py.example`` to ``flaskbb/configs/production.py``.
  77. ::
  78. cp flaskbb/configs/production.py.example flaskbb/configs/production.py
  79. Now open ``flaskbb/configs/production.py`` with your favourite editor and adjust
  80. the config variables to your needs.
  81. Mail Examples
  82. ~~~~~~~~~~~~~
  83. Both methods are included in the example configs.
  84. **Google Mail**
  85. ::
  86. MAIL_SERVER = "smtp.gmail.com"
  87. MAIL_PORT = 465
  88. MAIL_USE_SSL = True
  89. MAIL_USERNAME = "your_username@gmail.com"
  90. MAIL_PASSWORD = "your_password"
  91. MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com")
  92. **Local SMTP Server**
  93. ::
  94. MAIL_SERVER = "localhost"
  95. MAIL_PORT = 25
  96. MAIL_USE_SSL = False
  97. MAIL_USERNAME = ""
  98. MAIL_PASSWORD = ""
  99. MAIL_DEFAULT_SENDER = "noreply@example.org"
  100. Installation
  101. ------------
  102. For a guided install, run
  103. ::
  104. $ make install
  105. or:
  106. python manage.py install
  107. During the installation process you are asked about your username,
  108. your email address and the password for your administrator user. Using the
  109. `make install` command is recommended as it checks that the dependencies are also
  110. installed.
  111. Upgrading
  112. ---------
  113. If the database models changed after a release, you have to run the ``upgrade``
  114. command
  115. ::
  116. python manage.py db upgrade
  117. Deploying
  118. ---------
  119. I prefer to use supervisor, uWSGI and nginx to deploy my apps, but if you have
  120. figured out how to deploy it in another way, please let me know, so I
  121. (or you if you create a pull request) can add it to the documentation.
  122. **NOTE:** I have only used Debian to deploy it, if someone is using a other
  123. distribution, could you let me know if that works too? `Also, if you have better
  124. configurations for uWSGI, supervisor or nginx let me know that too.`
  125. Supervisor
  126. ~~~~~~~~~~
  127. `Supervisor is a client/server system that allows its users to monitor and
  128. control a number of processes on UNIX-like operating systems.`
  129. To install `supervisor` on Debian, you need to fire up this command:
  130. ::
  131. $ sudo apt-get install supervisor
  132. There are two ways to configure supervisor. The first one is, you just put
  133. the configuration to the end in the ``/etc/supervisor/supervisord.conf`` file.
  134. The second way would be to create a new file in the ``/etc/supervisor/conf.d/``
  135. directory. For example, such a file could be named ``uwsgi.conf``.
  136. After you have choosen the you way you like, simply put the snippet below in the
  137. configuration file.
  138. ::
  139. [program:uwsgi]
  140. command=/usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled
  141. user=apps
  142. stopsignal=QUIT
  143. autostart=true
  144. autorestart=true
  145. redirect_stderr=true
  146. uWSGI
  147. ~~~~~
  148. `uWSGI is a web application solution with batteries included.`
  149. To get started with uWSGI, you need to install it first.
  150. You'll also need the python plugin to serve python apps.
  151. This can be done with:
  152. ::
  153. $ sudo apt-get install uwsgi uwsgi-plugin-python
  154. For the configuration, you need to create a file in the
  155. ``/etc/uwsgi/apps-available`` directory. In this example, I will call the
  156. file ``flaskbb.ini``. After that, you can start with configuring it.
  157. My config looks like this for `flaskbb.org` (see below). As you might have noticed, I'm
  158. using a own user for my apps whose home directory is located at `/var/apps/`.
  159. In this directory there are living all my Flask apps.
  160. ::
  161. [uwsgi]
  162. base = /var/apps/flaskbb
  163. home = /var/apps/.virtualenvs/flaskbb/
  164. pythonpath = %(base)
  165. socket = 127.0.0.1:30002
  166. module = wsgi
  167. callable = flaskbb
  168. uid = apps
  169. gid = apps
  170. logto = /var/apps/flaskbb/logs/uwsgi.log
  171. plugins = python
  172. =============== ========================== ===============
  173. **base** /path/to/flaskbb The folder where your flaskbb application lives
  174. **home** /path/to/virtualenv/folder The virtualenv folder for your flaskbb application
  175. **pythonpath** /path/to/flaskbb The same as base
  176. **socket** socket This can be either a ip or the path to a socket (don't forget to change that in your nginx config)
  177. **module** wsgi.py This is the file located in the root directory from flaskbb (where manage.py lives).
  178. **callable** flaskbb The callable is application you have created in the ``wsgi.py`` file
  179. **uid** your_user The user who should be used. **NEVER** use root!
  180. **gid** your_group The group who should be used.
  181. **logto** /path/to/log/file The path to your uwsgi logfile
  182. **plugins** python We need the python plugin
  183. =============== ========================== ===============
  184. Don't forget to create a symlink to ``/etc/uwsgi/apps-enabled``.
  185. ::
  186. ln -s /etc/uwsgi/apps-available/flaskbb /etc/uwsgi/apps-enabled/flaskbb
  187. nginx
  188. ~~~~~
  189. `nginx [engine x] is an HTTP and reverse proxy server,
  190. as well as a mail proxy server, written by Igor Sysoev.`
  191. The nginx config is pretty straightforward. Again, this is how I use it for
  192. `FlaskBB`. Just copy the snippet below and paste it to, for example
  193. ``/etc/nginx/sites-available/flaskbb``.
  194. The only thing left is, that you need to adjust the ``server_name`` to your
  195. domain and the paths in ``access_log``, ``error_log``. Also, don't forget to
  196. adjust the paths in the ``alias`` es, as well as the socket adress in ``uwsgi_pass``.
  197. ::
  198. server {
  199. listen 80;
  200. server_name forums.flaskbb.org;
  201. access_log /var/log/nginx/access.forums.flaskbb.log;
  202. error_log /var/log/nginx/error.forums.flaskbb.log;
  203. location / {
  204. try_files $uri @flaskbb;
  205. }
  206. # Static files
  207. location /static {
  208. alias /var/apps/flaskbb/flaskbb/static/;
  209. }
  210. location ~ ^/_themes/([^/]+)/(.*)$ {
  211. alias /var/apps/flaskbb/flaskbb/themes/$1/static/$2;
  212. }
  213. # robots.txt
  214. location /robots.txt {
  215. alias /var/apps/flaskbb/flaskbb/static/robots.txt;
  216. }
  217. location @flaskbb {
  218. uwsgi_pass 127.0.0.1:30002;
  219. include uwsgi_params;
  220. }
  221. }
  222. Like in the `uWSGI <#uwsgi>`_ chapter, don't forget to create a symlink to
  223. ``/etc/nginx/sites-enabled/``.