installation.rst 9.1 KB

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