{"id":214,"date":"2018-04-25T12:20:04","date_gmt":"2018-04-25T04:20:04","guid":{"rendered":"https:\/\/www.techcoil.com\/blog\/?p=214"},"modified":"2018-10-14T18:06:21","modified_gmt":"2018-10-14T10:06:21","slug":"how-to-setup-taiga-project-management-platform-on-raspberry-pi-3-with-raspbian-stretch-lite","status":"publish","type":"post","link":"https:\/\/www.techcoil.com\/blog\/how-to-setup-taiga-project-management-platform-on-raspberry-pi-3-with-raspbian-stretch-lite\/","title":{"rendered":"How to setup Taiga project management platform on Raspberry Pi 3 with Raspbian Stretch Lite"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-and-raspbian-icon.gif\" alt=\"Taiga and Raspbian icon\"\/><\/p>\n<p>A project management platform is useful for us to keep tabs on what we want to build. <a href=\"https:\/\/taiga.io\/\" rel=\"noopener\" target=\"_blank\">Taiga<\/a> is a popular open source project management platform that is highly <a href=\"https:\/\/opensource.com\/alternatives\/trello\" rel=\"noopener\" target=\"_blank\">recommended by opensource.com<\/a> to be the top open source alternative to Trello.<\/p>\n<p>Taiga runs well on a Raspberry Pi 3. If you want to setup something at home to help you manage the projects that you are working on, you can consider setting up the Taiga project management platform on a Raspberry Pi 3 with <a href=\"https:\/\/www.techcoil.com\/raspbian-stretch-lite-project-ideas\/\" rel=\"noopener\" target=\"_blank\">Raspbian Stretch Lite as the base operating system<\/a>. <\/p>\n<p>This post is adapted from <a href=\"https:\/\/taigaio.github.io\/taiga-doc\/dist\/setup-production.html\" rel=\"noopener\" target=\"_blank\">Taiga's installation guide<\/a> to serve as a guide to setting up Taiga project management platform on Raspberry Pi 3 with Raspbian Stretch Lite.<\/p>\n<h2>Recommended hardware list<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.amazon.com\/CanaKit-Raspberry-Micro-Supply-Listed\/dp\/B01C6FFNY4\/ref=as_li_ss_tl?s=pc&ie=UTF8&qid=1517212574&sr=1-4&keywords=raspberry+pi+3&linkCode=ll1&tag=clivsperswebs-20&linkId=76113a630916ac804456aa1f5dd76c85\" rel=\"noopener\" target=\"_blank\">CanaKit Raspberry Pi 3 with 2.5A Micro USB Power Supply<\/a> or <a href=\"https:\/\/www.amazon.com\/CanaKit-Raspberry-Power-Supply-Listed\/dp\/B07BC6WH7V\/\/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=clivsperswebs-20&linkId=facc24accf03fbe5cd45b1893a1e9ab1\" rel=\"noopener\" target=\"_blank\">CanaKit Raspberry Pi 3 B+ (B Plus) with 2.5A Power Supply (UL Listed)<\/a><\/li>\n<li><a href=\"https:\/\/www.amazon.com\/dp\/B01F1PSFY6\/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=clivsperswebs-20&linkId=d68c56d79a1d84f89f596fa715743a9e\" rel=\"noopener\" target=\"_blank\">Raspberry Pi 2\/3 official case Black\/Grey<\/a> or <a href=\"https:\/\/www.amazon.com\/dp\/B01CCPKCSK\/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=clivsperswebs-20&linkId=1e69ae5649504fb86c6597e0774eb3d8\" rel=\"noopener\" target=\"_blank\">Raspberry Pi 2\/3 official case Red\/White<\/a><\/li>\n<li><a href=\"https:\/\/www.amazon.com\/Sandisk-Ultra-Micro-UHS-I-Adapter\/dp\/B073JWXGNT\/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=clivsperswebs-20&linkId=20db403fc5e8bbc15e46ec21868a1488\" rel=\"noopener\" target=\"_blank\"> Sandisk Ultra 32GB Micro SDHC UHS-I Card with Adapter<\/a><\/li>\n<li><a href=\"https:\/\/www.amazon.com\/gp\/product\/B00N2VISLW\/ref=as_li_tl?ie=UTF8&tag=clivsperswebs-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B00N2VISLW&linkId=132403a064ff21634835c1deee4bc983\" target=\"_blank\">AmazonBasics RJ45 Cat-6 Ethernet Patch Cable - 3 Feet (0.9 Meters)<\/a><\/li>\n<\/ul>\n<h2>Setting up Raspbian Stretch Lite on Raspberry Pi 3 to run Python 3 applications<\/h2>\n<p>As a first step setting up your Taiga project management platform on Raspberry Pi 3, <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-setup-raspbian-stretch-lite-on-raspberry-pi-3-to-run-python-3-applications\/\" rel=\"noopener\" target=\"_blank\">follow this tutorial to setup Raspbian Stretch Lite on Raspberry Pi 3 to run Python 3 applications<\/a>. After doing so, you will get your Raspberry Pi 3 running the Raspbian Stretch Lite operating system with the following software pieces:<\/p>\n<ul>\n<li>SSH server which enables you to configure Raspbian Stretch Lite from another computer in your home network.<\/li>\n<li>Python 3 for running one of Taiga's component, Taiga backend, that is based on Django.<\/li>\n<li>Python 3 package manager (pip3) for installing the dependencies for Taiga backend.<\/li>\n<li>Virtualenv for you to create an isolated environment for running Taiga backend.<\/li>\n<\/ul>\n<h2>Installing other dependency packages for Taiga<\/h2>\n<p>Apart from the Python packages that we had installed earlier, there are more dependency packages that we need to install for the three modules that made up the Taiga project management platform. To install those packages, run the following commands: <\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo apt-get update\r\nsudo apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev\r\nsudo apt-get install -y libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev\r\nsudo apt-get install -y automake libtool libffi-dev curl git tmux gettext\r\nsudo apt-get install -y rabbitmq-server redis-server\r\nsudo apt-get install -y nginx supervisor\r\nsudo apt-get install -y postgresql postgresql-contrib\r\nsudo apt-get install -y postgresql-doc postgresql-server-dev-9.6\r\nsudo apt-get install -y python-dev\r\nsudo apt-get install -y libxml2-dev libxslt-dev\r\nsudo apt-get install -y libssl-dev libffi-dev\r\nsudo apt-get install -y libopenjp2-7-dev\r\n<\/pre>\n<h2>Creating a system user taiga, giving it root permissions and switch the current user with taiga<\/h2>\n<p>Once you had installed all the dependency packages needed by Taiga project management platform, proceed on to create a system user <strong><code>taiga<\/code><\/strong>, give it root permissions and switch the current user to taiga:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo adduser taiga\r\nsudo adduser taiga sudo\r\nsudo su taiga\r\ncd ~\r\n<\/pre>\n<p>You will need to use the <code>taiga<\/code> user to proceed with the rest of this guide.<\/p>\n<h2>Setting up PostgreSQL with the initial user and database<\/h2>\n<p>Once you had switched over to the <code>taiga<\/code> user, run the following commands to setup <a href=\"https:\/\/www.postgresql.org\/\" rel=\"noopener\" target=\"_blank\">PostgreSQL<\/a> for the Taiga project management platform:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo -u postgres createuser taiga\r\nsudo -u postgres createdb taiga -O taiga --encoding='utf-8' --locale=en_US.utf8 --template=template0\r\n<\/pre>\n<h2>Creating a user named taiga, and a virtual host for RabbitMQ<\/h2>\n<p>Once you had configured PostgreSQL for the Taiga project management platform, run the following commands to configure <a href=\"https:\/\/www.rabbitmq.com\/\" rel=\"noopener\" target=\"_blank\">RabbitMQ<\/a> for <code>taiga-events<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo rabbitmqctl add_user taiga PASSWORD_FOR_EVENTS\r\nsudo rabbitmqctl add_vhost taiga\r\nsudo rabbitmqctl set_permissions -p taiga taiga &quot;.*&quot; &quot;.*&quot; &quot;.*&quot;\r\n<\/pre>\n<h2>Creating the logs folder<\/h2>\n<p>Once you had created the RabbitMQ user and virtual host for it, create a <code>logs<\/code> directory for the various Taiga components to write logs to: <\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmkdir -p ~\/logs\r\n<\/pre>\n<h2>Setting up Taiga backend<\/h2>\n<p>After the creation of the <code>logs<\/code> directory, we can then proceed to setup Taiga backend.<\/p>\n<h3>Downloading a copy of Taiga backend<\/h3>\n<p>Run the following commands to download a copy of Taiga backend:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd ~\r\ngit clone https:\/\/github.com\/taigaio\/taiga-back.git taiga-back\r\ncd taiga-back\r\ngit checkout stable\r\n<\/pre>\n<h3>Creating a virtual environment for Taiga backend<\/h3>\n<p>Run the following commands to create a virtual environment for Taiga backend:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd ~\r\nvirtualenv -p python3 taiga-back_env\r\n<\/pre>\n<h3>Installing Taiga backend dependencies in virtual environment<\/h3>\n<p>Run the following commands to install Taiga backend dependencies in the virtual environment that we had created earlier:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd ~\r\nsource taiga-back_env\/bin\/activate\r\ncd taiga-back\r\npip install -r requirements.txt\r\n<\/pre>\n<h3>Populating the database with initial basic data<\/h3>\n<p>Run the following commands to populate the database with some initial basic data:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\npython manage.py migrate --noinput\r\npython manage.py loaddata initial_user\r\npython manage.py loaddata initial_project_templates\r\npython manage.py compilemessages\r\npython manage.py collectstatic --noinput\r\n<\/pre>\n<p>This will create the administrator account with login username <strong>admin<\/strong> with password <strong>123123<\/strong>.<\/p>\n<h3>Creating the initial configuration file<\/h3>\n<p>Run the following command to get nano to create the initial configuration file for taiga backend:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano ~\/taiga-back\/settings\/local.py\r\n<\/pre>\n<p>And suppose that your Raspberry Pi 3 is reachable via <strong>192.168.1.109<\/strong>, create the following content inside <code>local.py<\/code>:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nfrom .common import *\r\n\r\nMEDIA_URL = &quot;http:\/\/192.168.1.109\/media\/&quot;\r\nSTATIC_URL = &quot;http:\/\/192.168.1.109\/static\/&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;scheme&quot;] = &quot;http&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;domain&quot;] = &quot;192.168.1.109&quot;\r\n\r\nSECRET_KEY = &quot;theveryultratopsecretkey&quot;\r\n\r\nDEBUG = False\r\nPUBLIC_REGISTER_ENABLED = False\r\n\r\nDEFAULT_FROM_EMAIL = &quot;no-reply@192.168.1.109&quot;\r\nSERVER_EMAIL = DEFAULT_FROM_EMAIL\r\n\r\n#CELERY_ENABLED = True\r\n\r\nEVENTS_PUSH_BACKEND = &quot;taiga.events.backends.rabbitmq.EventsPushBackend&quot;\r\nEVENTS_PUSH_BACKEND_OPTIONS = {&quot;url&quot;: &quot;amqp:\/\/taiga:PASSWORD_FOR_EVENTS@localhost:5672\/taiga&quot;}\r\n\r\n# Uncomment and populate with proper connection parameters\r\n# for enable email sending. EMAIL_HOST_USER should end by @domain.tld\r\n#EMAIL_BACKEND = &quot;django.core.mail.backends.smtp.EmailBackend&quot;\r\n#EMAIL_USE_TLS = False\r\n#EMAIL_HOST = &quot;localhost&quot;\r\n#EMAIL_HOST_USER = &quot;&quot;\r\n#EMAIL_HOST_PASSWORD = &quot;&quot;\r\n#EMAIL_PORT = 25\r\n\r\n# Uncomment and populate with proper connection parameters\r\n# for enable github login\/singin.\r\n#GITHUB_API_CLIENT_ID = &quot;yourgithubclientid&quot;\r\n#GITHUB_API_CLIENT_SECRET = &quot;yourgithubclientsecret&quot;\r\n<\/pre>\n<p>Save the configuration file when you had completed filling up your details.<\/p>\n<h3>Verifying Taiga backend installation<\/h3>\n<p>Once you had created the initial configuration file, run the following commands to run Taiga backend temporarily:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsource ~\/taiga-back_env\/bin\/activate\r\npython ~\/taiga-back\/manage.py runserver\r\n<\/pre>\n<p>Open up another SSH session to your raspberry pi:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nssh pi@192.168.1.109\r\n<\/pre>\n<p>And type the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncurl -0 http:\/\/localhost:8000\/api\/v1\/ \r\n<\/pre>\n<p>If taiga-back is setup correctly, you should be able to see a JSON representing the list of endpoints at the url: http:\/\/localhost:8000\/api\/v1\/.<\/p>\n<p>Once you had verified that taiga-back is setup correctly, go back to the SSH session that you run Taiga backend from. Stop running Taiga backend by pressing CONTROL-C.<\/p>\n<h2>Setting up Taiga frontend<\/h2>\n<p>After setting up Taiga backend, proceed on to setup Taiga frontend.<\/p>\n<h3>Downloading a copy of Taiga frontend<\/h3>\n<p>Run the following commands to download a copy of Taiga frontend:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd ~\r\ngit clone https:\/\/github.com\/taigaio\/taiga-front-dist.git taiga-front-dist\r\ncd taiga-front-dist\r\ngit checkout stable\r\n<\/pre>\n<p>After the commands had completed, create the configuration file from the sample configuration:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncp ~\/taiga-front-dist\/dist\/conf.example.json ~\/taiga-front-dist\/dist\/conf.json\r\n<\/pre>\n<p>Use <code>nano<\/code> to open up <code>conf.json<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano ~\/taiga-front-dist\/dist\/conf.json\r\n<\/pre>\n<p>And supposing that your Raspberry Pi 3 is reachable via <strong>192.168.1.109<\/strong>, edit <code>conf.json<\/code> to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{\r\n    &quot;api&quot;: &quot;http:\/\/192.168.1.109\/api\/v1\/&quot;,\r\n    &quot;eventsUrl&quot;: &quot;ws:\/\/192.168.1.109\/events&quot;,\r\n    &quot;eventsMaxMissedHeartbeats&quot;: 5,\r\n    &quot;eventsHeartbeatIntervalTime&quot;: 60000,\r\n    &quot;eventsReconnectTryInterval&quot;: 10000,\r\n    &quot;debug&quot;: true,\r\n    &quot;debugInfo&quot;: false,\r\n    &quot;defaultLanguage&quot;: &quot;en&quot;,\r\n    &quot;themes&quot;: &#x5B;&quot;taiga&quot;],\r\n    &quot;defaultTheme&quot;: &quot;taiga&quot;,\r\n    &quot;publicRegisterEnabled&quot;: false,\r\n    &quot;feedbackEnabled&quot;: true,\r\n    &quot;supportUrl&quot;: &quot;https:\/\/tree.taiga.io\/support&quot;,\r\n    &quot;privacyPolicyUrl&quot;: null,\r\n    &quot;termsOfServiceUrl&quot;: null,\r\n    &quot;maxUploadFileSize&quot;: null,\r\n    &quot;contribPlugins&quot;: &#x5B;],\r\n    &quot;tribeHost&quot;: null,\r\n    &quot;importers&quot;: &#x5B;],\r\n    &quot;gravatar&quot;: true\r\n}\r\n<\/pre>\n<h2>Setting up Taiga events<\/h2>\n<p>Once you had setup Taiga frontend on your Raspberry Pi 3, you may choose to setup Taiga events which is an optional component.<\/p>\n<p>Taiga-events is the Taiga websocket server, it allows taiga frontend to show realtime changes in the backlog, taskboard, kanban and issues listing. Taiga events uses RabbitMQ as the message broker. <\/p>\n<h3>Downloading a copy of Taiga events<\/h3>\n<p>Run the following commands to get a copy of Taiga events:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd ~\r\ngit clone https:\/\/github.com\/taigaio\/taiga-events.git taiga-events\r\ncd taiga-events\r\n<\/pre>\n<h3>Installing nodejs<\/h3>\n<p>Run the following commands to install <a href=\"https:\/\/nodejs.org\/en\/\" rel=\"noopener\" target=\"_blank\">Node.js<\/a> on your Raspberry Pi 3:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncurl -sL https:\/\/deb.nodesource.com\/setup_6.x | sudo -E bash -\r\nsudo apt-get install -y nodejs\r\n<\/pre>\n<h3>Installing JavaScript dependencies<\/h3>\n<p>Run the following commands to install the JavaScript dependencies that is required to run Taiga events:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnpm install\r\nsudo npm install -g coffee-script\r\n<\/pre>\n<h3>Creating the configuration for Taiga events<\/h3>\n<p>Run the following command to base the configurations for Taiga events from the given sample:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncp config.example.json config.json\r\n<\/pre>\n<p>After the copy command completes, use nano to open up <code>config.json<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano config.json\r\n<\/pre>\n<p>And update the contents with your RabbitMQ URI and the secret key. Your <code>config.json<\/code> file should look like this:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n{\r\n    &quot;url&quot;: &quot;amqp:\/\/taiga:PASSWORD_FOR_EVENTS@localhost:5672\/taiga&quot;,\r\n    &quot;secret&quot;: &quot;theveryultratopsecretkey&quot;,\r\n    &quot;webSocketServer&quot;: {\r\n        &quot;port&quot;: 8888\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Note: The 'secret' in your <code>config.json<\/code> must be the same as the \"SECRET_KEY\" in <code>~\/taiga-back\/settings\/local.py<\/code>.<\/strong><\/p>\n<h2>Configuring Supervisor to run Taiga backend and Taiga events<\/h2>\n<p><a href=\"http:\/\/supervisord.org\/\" rel=\"noopener\" target=\"_blank\">Supervisor<\/a> is a process control system that can help keep Taiga backend and Taiga events running on your Raspberry Pi 3. <\/p>\n<p>Once we had the codes for Taiga components and Taiga events in our Raspberry Pi 3, we can proceed to configure Supervisor to run them.<\/p>\n<h3>Configuring Supervisor to run Taiga backend<\/h3>\n<p>We first create a bash script for Supervisor to run Taiga backend. Inside the bash script, we will instruct gunicorn to start Taiga backend for us.<\/p>\n<p>First create a file at taiga home directory:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano ~\/run_taiga_backend.sh\r\n<\/pre>\n<p>And inside <code>taiga_backend.sh<\/code>, create the following content:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n#!\/bin\/bash\r\n\r\nsource taiga-back_env\/bin\/activate\r\ngunicorn -w 3 -t 60 --pythonpath=.\/taiga-back -b 127.0.0.1:8001 taiga-back.taiga.wsgi\r\ndeactivate\r\n<\/pre>\n<p>Once you had saved <code>taiga_backend.sh<\/code>, run the following command to make it executable by the taiga user:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nchmod u+x ~\/run_taiga_backend.sh\r\n<\/pre>\n<p>After you had made <code>run_taiga_backend.sh<\/code> executable by the taiga user, create a supervisor configuration file at <code>\/etc\/supervisor\/conf.d\/taiga-back.conf<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/supervisor\/conf.d\/taiga-back.conf\r\n<\/pre>\n<p>And inside <code>taiga-back.conf<\/code> create the following content:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&#x5B;program:taiga-back]\r\ndirectory=\/home\/taiga\r\ncommand=\/bin\/bash -E -c .\/run_taiga_backend.sh\r\nautostart=true\r\nautorestart=true\r\nstopsignal=INT\r\nstopasgroup=true\r\nkillasgroup=true\r\nstdout_logfile=\/home\/taiga\/logs\/taiga-back.stdout.log\r\nstderr_logfile=\/home\/taiga\/logs\/taiga-back.stderr.log\r\nuser=taiga\r\n<\/pre>\n<h3>Configuring Supervisor to run Taiga events<\/h3>\n<p>Next up, proceed to configure Supervisor to run Taiga events. To do so, create a supervisor configuration file at <code>\/etc\/supervisor\/conf.d\/taiga-events.conf<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/supervisor\/conf.d\/taiga-events.conf\r\n<\/pre>\n<p>And inside <code>\/etc\/supervisor\/conf.d\/taiga-events.conf<\/code>, create the following content:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&#x5B;program:taiga-events]\r\ndirectory=\/home\/taiga\/taiga-events\r\ncommand=\/usr\/bin\/coffee index.coffee          \r\nautostart=true\r\nautorestart=true\r\nstopsignal=INT\r\nstopasgroup=true\r\nkillasgroup=true\r\nstdout_logfile=\/home\/taiga\/logs\/taiga-events.stdout.log\r\nstderr_logfile=\/home\/taiga\/logs\/taiga-events.stderr.log\r\nuser=taiga  \r\n<\/pre>\n<h3>Restarting Supervisor<\/h3>\n<p>After you had created the Supervisor configurations, restart Supervisor to get it to run Taiga backend and Taiga events:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart supervisor.service\r\n<\/pre>\n<h2>Configuring Nginx to serve Taiga frontend, Taiga backend and Taiga events<\/h2>\n<p>The next step is configure Nginx as a <a href=\"https:\/\/www.techcoil.com\/blog\/the-reverse-proxy-server\/\" rel=\"noopener\" target=\"_blank\">reverse proxy server<\/a> for Taiga frontend, Taiga backend and Taiga events. To do so, remove <code>\/etc\/nginx\/sites-enabled\/default<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo rm \/etc\/nginx\/sites-enabled\/default\r\n<\/pre>\n<p>And create <code>\/etc\/nginx\/sites-enabled\/taiga.conf<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/nginx\/sites-enabled\/taiga.conf\r\n<\/pre>\n<p>Inside <code>taiga.conf<\/code>, create the following content:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nserver {\r\n    listen 80 default_server;\r\n    server_name _;\r\n\r\n    large_client_header_buffers 4 32k;\r\n    client_max_body_size 50M;\r\n    charset utf-8;\r\n\r\n    access_log \/home\/taiga\/logs\/nginx.access.log;\r\n    error_log \/home\/taiga\/logs\/nginx.error.log;\r\n\r\n    # Frontend\r\n    location \/ {\r\n        root \/home\/taiga\/taiga-front-dist\/dist\/;\r\n        try_files $uri $uri\/ \/index.html;\r\n    }\r\n\r\n    # Backend\r\n    location \/api {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001\/api;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Django admin access (\/admin\/)\r\n    location \/admin {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001$request_uri;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Static files\r\n    location \/static {\r\n        alias \/home\/taiga\/taiga-back\/static;\r\n    }\r\n\r\n    # Media files\r\n    location \/media {\r\n        alias \/home\/taiga\/taiga-back\/media;\r\n    }\r\n\r\n    # Taiga-events\r\n    location \/events {\r\n        proxy_pass http:\/\/127.0.0.1:8888\/events;\r\n        proxy_http_version 1.1;\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection &quot;upgrade&quot;;\r\n        proxy_connect_timeout 7d;\r\n        proxy_send_timeout 7d;\r\n        proxy_read_timeout 7d;\r\n    }\r\n}\r\n<\/pre>\n<p>Save the file and restart Nginx:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h2>Accessing Taiga from your home computer<\/h2>\n<p>Once you had restarted Nginx, you can use the browser on your home computer to access your Taiga installation on your Raspberry Pi 3.<\/p>\n<p>Suppose that your Raspberry Pi 3 is reachable from your home computer via <strong><code>192.168.1.109<\/code><\/strong>, enter <strong>http:\/\/192.168.1.109<\/strong> in the location bar.<\/p>\n<p>You should see the following screen:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-home-page-via-192.168.1.109.gif\" alt=\"Taiga home page via 192.168.1.109\" \/><\/p>\n<h2>Changing the default password of the administrator account<\/h2>\n<p>Remember that we had created an administrator account with login username <strong>admin<\/strong> with password <strong>123123<\/strong>. This is not safe as anybody who read this post can get administrator access to your Taiga installation.<\/p>\n<p>To change the password of the administrator account, click on the \"login\" button at the top right corner to get to the login page. Enter the default administrator account credentials in the login page:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-login-page-with-admin-credentials-supplied.jpg\" alt=\"Taiga login page with admin credentials supplied\"\/><\/p>\n<p>And click on the \"LOGIN\" button. <\/p>\n<p>Once you had logged into Taiga successfully, click on the \"Administrator\" button at the top, and then the \"EDIT BIO\" button at the right. You will see the \"USER SETTINGS\" page:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-user-settings-screen.jpg\" alt=\"Taiga user settings screen\" \/><\/p>\n<p>Click on the \"CHANGE PASSWORD\" button on the left to access the \"CHANGE PASSWORD\" page:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-change-password-screen.jpg\" alt=\"Taiga change password screen\"\/><\/p>\n<p>Enter the relevant input and click on the \"SAVE\" button. <\/p>\n<h2>Changing profile photo<\/h2>\n<p>Notice that the profile photo is broken. To correct that, go to the \"USER SETTINGS\" page by clicking on the \"USER PROFILE\" tab at the left. In the \"USER SETTINGS\" page, click on the \"CHANGE PHOTO\" button to choose a picture from your computer as the new profile picture.<\/p>\n<h2>Configuring your Taiga installation to be accessed from outside your home network via HTTPS with Let's Encrypt certificate<\/h2>\n<p>At this point in time, you had setup a Taiga installation on your Raspberry Pi 3 that can only be accessed from within your home network. <\/p>\n<p>If you want to be able to access your Taiga installation from outside your home network, there are more configurations to be done.<\/p>\n<h3>Pre-requisites<\/h3>\n<p>As mentioned in an earlier post on <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-host-multiple-websites-from-home\/\" rel=\"noopener\" target=\"_blank\">how to host multiple websites from home<\/a>, you will need the following pieces for enabling your Taiga installation to be accessed from outside your home network via HTTPS with Let's Encrypt browser-trusted certificate:<\/p>\n<ul>\n<li>A domain or subdomain name that is mapped to the public IP address that your <a href=\"https:\/\/www.amazon.com\/s\/ref=as_li_ss_tl?url=search-alias=aps&field-keywords=home+network+router&rh=i:aps,k:home+network+router&linkCode=ll2&tag=clivsperswebs-20&linkId=6d206156ec9fc599fc44332cd5cfe69d\" rel=\"noopener\" target=\"_blank\">home router<\/a> had gotten from the Internet Service Provider. If your public IP address changes frequently, you may want to <a href=\"https:\/\/namecheap.pxf.io\/c\/1303251\/386170\/5618?u=https%3A%2F%2Fwww.namecheap.com%2Fdomains%2Fdomain-name-search.aspx\" rel=\"noopener\" target=\"_blank\">buy a Namecheap domain<\/a> and <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-get-your-raspberry-pi-3-to-use-namecheap-dynamic-dns-to-update-your-domain-when-your-homes-public-ip-address-changes\/\" rel=\"noopener\" target=\"_blank\">get your Raspberry Pi 3 to use Namecheap dynamic DNS to update your domain when your home\u2019s public IP address changes<\/a>.<\/li>\n<li>Forwarding of network traffic made to port 80 and 443 of your home router public IP address to the IP address of the Raspberry Pi 3 that contains your Taiga installation. If you happen to use <a href=\"https:\/\/www.amazon.com\/Linksys-AC1900-Wireless-Router-EA7500\/dp\/B019WAQMVY\/ref=as_li_ss_tl?&imprToken=qcAImKE7aE8G.bRcryc8vw&slotNum=0&ie=UTF8&qid=1503367796&sr=8-2&keywords=linksys+ea7500+max-stream%E2%84%A2+ac1900&linkCode=ll1&tag=clivsperswebs-20&linkId=fc9a5b11e3d3873d432686f3e699a1e6\" rel=\"noopener\" target=\"_blank\">Linksys EA7500 Max-Stream AC1900 router<\/a>, you can <a href=\"https:\/\/www.techcoil.com\/blog\/host-web-server-behind-linksys-ea7500-max-stream-ac1900-router\/\" rel=\"noopener\" target=\"_blank\">checkout this post on how to do so<\/a>.<\/li>\n<\/ul>\n<h3>Installing CertBot<\/h3>\n<p>Once you had met the pre-requisites, proceed to <a href=\"https:\/\/www.techcoil.com\/blog\/installing-certbot-on-raspbian-stretch-lite-for-obtaining-lets-encrypts-browser-trusted-certificates\/\" rel=\"noopener\" target=\"_blank\">install Certbot on Raspbian Stretch Lite<\/a>.<\/p>\n<h3>Configuring Nginx to facilitate Certbot in acquiring the SSL certificate for your domain or subdomain<\/h3>\n<p>Suppose that you had designated <strong><code>taiga.yourdomain.com<\/code><\/strong> as the domain to reach your Taiga installation on your Raspberry Pi 3.<\/p>\n<p>With that, let's first move <code>\/etc\/nginx\/sites-enabled\/taiga.conf<\/code> to <code>\/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo mv \/etc\/nginx\/sites-enabled\/taiga.conf \/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf\r\n<\/pre>\n<p>Next, open up <code>\/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf<\/code> with <code>nano<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf\r\n<\/pre>\n<p>And change the contents of <code>taiga.yourdomain.com.conf<\/code> to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nserver {\r\n    listen 80;\r\n    server_name taiga.yourdomain.com;\r\n\r\n    large_client_header_buffers 4 32k;\r\n    client_max_body_size 50M;\r\n    charset utf-8;\r\n\r\n    access_log \/home\/taiga\/logs\/nginx.access.log;\r\n    error_log \/home\/taiga\/logs\/nginx.error.log;\r\n\r\n    # For ACME challenge\r\n    location ~ \/.well-known {\r\n        root \/home\/taiga;\r\n        allow all;\r\n    }\r\n\r\n    # Frontend\r\n    location \/ {\r\n        root \/home\/taiga\/taiga-front-dist\/dist\/;\r\n        try_files $uri $uri\/ \/index.html;\r\n    }\r\n\r\n    # Backend\r\n    location \/api {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001\/api;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Django admin access (\/admin\/)\r\n    location \/admin {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001$request_uri;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Static files\r\n    location \/static {\r\n        alias \/home\/taiga\/taiga-back\/static;\r\n    }\r\n\r\n    # Media files\r\n    location \/media {\r\n        alias \/home\/taiga\/taiga-back\/media;\r\n    }\r\n\r\n    # Taiga-events\r\n    location \/events {\r\n        proxy_pass http:\/\/127.0.0.1:8888\/events;\r\n        proxy_http_version 1.1;\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection &quot;upgrade&quot;;\r\n        proxy_connect_timeout 7d;\r\n        proxy_send_timeout 7d;\r\n        proxy_read_timeout 7d;\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>These configuration changes will make Nginx server proxies HTTP requests bound for <strong><code>http:\/\/taiga.yourdomain.com<\/code><\/strong> to the respective Taiga components. <\/p>\n<p>In addition, these configuration changes allow Let's Encrypt servers to access a secret file that Certbot will create inside <code>\/home\/taiga\/.well-known directory<\/code> in the process of requesting for Let's Encrypt browser-trusted certificate.<\/p>\n<p>After you have saved the Nginx configuration changes, restart Nginx:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h3>Running Certbot to get the SSL certificate artefacts for your domain \/ subdomain<\/h3>\n<p>Once Nginx had restarted successfully, run the following command to get the Let's Encrypt artefacts for your domain \/ subdomain:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo certbot certonly -a webroot --webroot-path=\/home\/taiga -d taiga.yourdomain.com\r\n<\/pre>\n<h3>Generating a Diffie-Hellman group<\/h3>\n<p>Once Certbot had fetched the SSL certificate artefacts for your domain \/ subdomain, proceed on to generate a Diffie-Hellman group for Nginx to use for exchanging cryptographic keys with its clients:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo openssl dhparam -out \/etc\/ssl\/certs\/dhparam.pem 2048\r\n<\/pre>\n<h3>Configuring Nginx to serve HTTPS traffic<\/h3>\n<p>With the Diffie-Hellman group generated, we can then proceed on to configure Nginx to serve HTTPS traffic for requests made to our Taiga installation.<\/p>\n<p>To do so, open up <code>\/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf<\/code> with <code>nano<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/nginx\/sites-enabled\/taiga.yourdomain.com.conf\r\n<\/pre>\n<p>And change the contents of <code>taiga.yourdomain.com.conf<\/code> to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nserver {\r\n    listen 80;\r\n    server_name  taiga.yourdomain.com;\r\n    return 301 https:\/\/$host$request_uri;\r\n}\r\n  \r\n# For ssl\r\nserver {\r\n    ssl on;\r\n    ssl_certificate \/etc\/letsencrypt\/live\/taiga.yourdomain.com\/fullchain.pem;\r\n    ssl_certificate_key \/etc\/letsencrypt\/live\/taiga.yourdomain.com\/privkey.pem;\r\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\r\n    ssl_prefer_server_ciphers on;\r\n    ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;\r\n    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';\r\n    ssl_session_timeout 1d;\r\n    ssl_session_cache shared:SSL:50m;\r\n    ssl_stapling on;\r\n    ssl_stapling_verify on;\r\n    add_header Strict-Transport-Security max-age=15768000;\r\n      \r\n    default_type  application\/octet-stream;\r\n      \r\n    listen 443;\r\n    server_name  taiga.yourdomain.com;\r\n  \r\n    access_log \/home\/taiga\/logs\/nginx.access.log;\r\n    error_log \/home\/taiga\/logs\/nginx.error.log;\r\n\r\n    # For ACME challenge\r\n    location ~ \/.well-known {\r\n        root \/home\/taiga;\r\n        allow all;\r\n    }\r\n\r\n    # Frontend\r\n    location \/ {\r\n        root \/home\/taiga\/taiga-front-dist\/dist\/;\r\n        try_files $uri $uri\/ \/index.html;\r\n    }\r\n\r\n    # Backend\r\n    location \/api {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001\/api;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Django admin access (\/admin\/)\r\n    location \/admin {\r\n        include proxy_params;\r\n        proxy_set_header X-Scheme $scheme;\r\n        proxy_pass http:\/\/127.0.0.1:8001$request_uri;\r\n        proxy_redirect off;\r\n    }\r\n\r\n    # Static files\r\n    location \/static {\r\n        alias \/home\/taiga\/taiga-back\/static;\r\n    }\r\n\r\n    # Media files\r\n    location \/media {\r\n        alias \/home\/taiga\/taiga-back\/media;\r\n    }\r\n\r\n    # Taiga-events\r\n    location \/events {\r\n        proxy_pass http:\/\/127.0.0.1:8888\/events;\r\n        proxy_http_version 1.1;\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection &quot;upgrade&quot;;\r\n        proxy_connect_timeout 7d;\r\n        proxy_send_timeout 7d;\r\n        proxy_read_timeout 7d;\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>Save the configuration changes and restart Nginx:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h3>Updating Taiga backend and Taiga frontend configurations to take the new url settings<\/h3>\n<p>The last step is to update Taiga backend and Taiga frontend configurations.<\/p>\n<p>Open up <code>~\/taiga-back\/settings\/local.py<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano ~\/taiga-back\/settings\/local.py\r\n<\/pre>\n<p>And change the contents to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nfrom .common import *\r\n\r\nMEDIA_URL = &quot;https:\/\/taiga.yourdomain.com\/media\/&quot;\r\nSTATIC_URL = &quot;https:\/\/taiga.yourdomain.com\/static\/&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;scheme&quot;] = &quot;https&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;domain&quot;] = &quot;taiga.yourdomain.com&quot;\r\n \r\nSECRET_KEY = &quot;theveryultratopsecretkey&quot;\r\n \r\nDEBUG = False\r\nPUBLIC_REGISTER_ENABLED = False\r\n \r\nDEFAULT_FROM_EMAIL = &quot;no-reply@example.com&quot;\r\nSERVER_EMAIL = DEFAULT_FROM_EMAIL\r\n \r\n#CELERY_ENABLED = True\r\n \r\nEVENTS_PUSH_BACKEND = &quot;taiga.events.backends.rabbitmq.EventsPushBackend&quot;\r\nEVENTS_PUSH_BACKEND_OPTIONS = {&quot;url&quot;: &quot;amqp:\/\/taiga:PASSWORD_FOR_EVENTS@localhost:5672\/taiga&quot;}\r\n \r\n# Uncomment and populate with proper connection parameters\r\n# for enable email sending. EMAIL_HOST_USER should end by @domain.tld\r\n#EMAIL_BACKEND = &quot;django.core.mail.backends.smtp.EmailBackend&quot;\r\n#EMAIL_USE_TLS = False\r\n#EMAIL_HOST = &quot;localhost&quot;\r\n#EMAIL_HOST_USER = &quot;&quot;\r\n#EMAIL_HOST_PASSWORD = &quot;&quot;\r\n#EMAIL_PORT = 25\r\n \r\n# Uncomment and populate with proper connection parameters\r\n# for enable github login\/singin.\r\n#GITHUB_API_CLIENT_ID = &quot;yourgithubclientid&quot;\r\n#GITHUB_API_CLIENT_SECRET = &quot;yourgithubclientsecret&quot;\r\n<\/pre>\n<p>Open up <code>~\/taiga-front-dist\/dist\/conf.json<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano ~\/taiga-front-dist\/dist\/conf.json\r\n<\/pre>\n<p>And change the contents to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{\r\n    &quot;api&quot;: &quot;https:\/\/taiga.yourdomain.com\/api\/v1\/&quot;,\r\n    &quot;eventsUrl&quot;: &quot;wss:\/\/taiga.yourdomain.com\/events&quot;,\r\n    &quot;eventsMaxMissedHeartbeats&quot;: 5,\r\n    &quot;eventsHeartbeatIntervalTime&quot;: 60000,\r\n    &quot;eventsReconnectTryInterval&quot;: 10000,\r\n    &quot;debug&quot;: true,\r\n    &quot;debugInfo&quot;: false,\r\n    &quot;defaultLanguage&quot;: &quot;en&quot;,\r\n    &quot;themes&quot;: &#x5B;&quot;taiga&quot;],\r\n    &quot;defaultTheme&quot;: &quot;taiga&quot;,\r\n    &quot;publicRegisterEnabled&quot;: false,\r\n    &quot;feedbackEnabled&quot;: true,\r\n    &quot;supportUrl&quot;: &quot;https:\/\/tree.taiga.io\/support&quot;,\r\n    &quot;privacyPolicyUrl&quot;: null,\r\n    &quot;termsOfServiceUrl&quot;: null,\r\n    &quot;maxUploadFileSize&quot;: null,\r\n    &quot;contribPlugins&quot;: &#x5B;],\r\n    &quot;tribeHost&quot;: null,\r\n    &quot;importers&quot;: &#x5B;],\r\n    &quot;gravatar&quot;: true\r\n}\r\n<\/pre>\n<p>Once you had saved the configuration files, restart Supervisor:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart supervisor.service\r\n<\/pre>\n<p>With that when you use your browser to access <code>taiga.yourdomain.com<\/code>, your browser will be redirected to <code>https:\/\/taiga.yourdomain.com<\/code> which allows your browser to communicate with your Taiga installation via HTTPS.<\/p>\n<h2>Setting up Taiga to send email<\/h2>\n<p>At this point in time, our Taiga installation will not be able to send email. <\/p>\n<h3>Installing Postfix for Taiga to send email<\/h3>\n<p>To allow email to be sent by Taiga, first <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-install-postfix-as-the-smtp-server-for-applications-in-raspbian-stretch-lite-to-send-email\/\" rel=\"noopener\" target=\"_blank\">install Postfix as the SMTP server for programs to send email from Raspbian Stretch Lite<\/a>.<\/p>\n<h3>Changing the Taiga backend configurations to allow the sending of email<\/h3>\n<p>Once you had installed Postfix on your Raspbian Stretch Lite, open up <code>~\/taiga-back\/settings\/local.py<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnano ~\/taiga-back\/settings\/local.py\r\n<\/pre>\n<p>And change the contents to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nfrom .common import *\r\n\r\nMEDIA_URL = &quot;https:\/\/taiga.yourdomain.com\/media\/&quot;\r\nSTATIC_URL = &quot;https:\/\/taiga.yourdomain.com\/static\/&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;scheme&quot;] = &quot;https&quot;\r\nSITES&#x5B;&quot;front&quot;]&#x5B;&quot;domain&quot;] = &quot;taiga.yourdomain.com&quot;\r\n \r\nSECRET_KEY = &quot;theveryultratopsecretkey&quot;\r\n \r\nDEBUG = False\r\nPUBLIC_REGISTER_ENABLED = False\r\n \r\nDEFAULT_FROM_EMAIL = &quot;no-reply@taiga.yourdomain.com&quot;\r\nSERVER_EMAIL = DEFAULT_FROM_EMAIL\r\n \r\n#CELERY_ENABLED = True\r\n \r\nEVENTS_PUSH_BACKEND = &quot;taiga.events.backends.rabbitmq.EventsPushBackend&quot;\r\nEVENTS_PUSH_BACKEND_OPTIONS = {&quot;url&quot;: &quot;amqp:\/\/taiga:PASSWORD_FOR_EVENTS@localhost:5672\/taiga&quot;}\r\n \r\n# Uncomment and populate with proper connection parameters\r\n# for enable email sending. EMAIL_HOST_USER should end by @domain.tld\r\nEMAIL_BACKEND = &quot;django.core.mail.backends.smtp.EmailBackend&quot;\r\nEMAIL_USE_TLS = False\r\nEMAIL_HOST = &quot;localhost&quot;\r\nEMAIL_HOST_USER = &quot;&quot;\r\nEMAIL_HOST_PASSWORD = &quot;&quot;\r\nEMAIL_PORT = 25\r\n \r\n# Uncomment and populate with proper connection parameters\r\n# for enable github login\/singin.\r\n#GITHUB_API_CLIENT_ID = &quot;yourgithubclientid&quot;\r\n<\/pre>\n<p>Once you had saved the changes, restart Supervisor:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart supervisor.service\r\n<\/pre>\n<h2>Buying the Raspberry Pi 3 hardware to host your own Taiga project management platform<\/h2>\n<p>If you do not have the Raspberry Pi 3 hardware mentioned in this post yet, you may want to purchase them from Amazon. Simply click on the button below to add the Raspberry Pi 3 hardware to your cart. You may remove anything that you already have or replace some of the hardware with other hardware.<\/p>\n<p><center><\/p>\n<form action=\"https:\/\/www.amazon.com\/gp\/aws\/cart\/add.html\" method=\"GET\" target=\"_blank\"><input name=\"AssociateTag\" type=\"hidden\" value=\"clivsperswebs-20\"><input name=\"SubscriptionId\" type=\"hidden\" value=\"[AKIAIMND5UBCQU2HRSUA]\"><input name=\"ASIN.1\" type=\"hidden\" value=\"B07BC6WH7V\"><input name=\"Quantity.1\" type=\"hidden\" value=\"1\"><input name=\"ASIN.2\" type=\"hidden\" value=\"B01F1PSFY6\"><input name=\"Quantity.2\" type=\"hidden\" value=\"1\"><input name=\"ASIN.3\" type=\"hidden\" value=\"B073JWXGNT\"><input name=\"Quantity.3\" type=\"hidden\" value=\"1\"><input name=\"ASIN.4\" type=\"hidden\" value=\"B00N2VISLW\"><input name=\"Quantity.4\" type=\"hidden\" value=\"1\"><br \/>\n<input alt=\"Buy from Amazon.com\" name=\"add\" type=\"image\" src=\"https:\/\/images-na.ssl-images-amazon.com\/images\/G\/01\/associates\/remote-buy-box\/buy4.gif\" value=\"Buy from Amazon.com\"><\/form>\n<p><\/center><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/How-to-setup-Taiga-project-management-platform-on-Raspberry-Pi-3-with-Raspbian-Stretch-Lite.jpg\" alt=\"How to setup Taiga project management platform on Raspberry Pi 3 with Raspbian Stretch Lite\"\/><\/p>\n\n      <ul id=\"social-sharing-buttons-list\">\n        <li class=\"facebook\">\n          <a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fwp.me%2Fp245TQ-3s\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n            <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Facebook.png\" alt=\"Facebook icon\"> Share\n          <\/a>\n        <\/li>\n        <li class=\"twitter\">\n          <a href=\"https:\/\/twitter.com\/intent\/tweet?text=&url=https%3A%2F%2Fwp.me%2Fp245TQ-3s&via=Techcoil_com\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Twitter.png\" alt=\"Twitter icon\"> Tweet\n          <\/a>\n        <\/li>\n        <li class=\"linkedin\">\n          <a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=1&title=&url=https%3A%2F%2Fwp.me%2Fp245TQ-3s&source=https:\/\/www.techcoil.com\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/linkedin.png\" alt=\"Linkedin icon\"> Share\n          <\/a>\n        <\/li>\n        <li class=\"pinterest\">\n          <a href=\"https:\/\/pinterest.com\/pin\/create\/button\/?url=https%3A%2F%2Fwww.techcoil.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F214&description=\" class=\"pin-it-button\" target=\"_blank\" role=\"button\" rel=\"nofollow\" count-layout=\"horizontal\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Pinterest.png\" alt=\"Pinterest icon\"> Save\n          <\/a>\n        <\/li>\n      <\/ul>\n    ","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-and-raspbian-icon.gif\" alt=\"Taiga and Raspbian icon\"\/><\/p>\n<p>A project management platform is useful for us to keep tabs on what we want to build. <a href=\"https:\/\/taiga.io\/\" rel=\"noopener\" target=\"_blank\">Taiga<\/a> is a popular open source project management platform that is highly <a href=\"https:\/\/opensource.com\/alternatives\/trello\" rel=\"noopener\" target=\"_blank\">recommended by opensource.com<\/a> to be the top open source alternative to Trello.<\/p>\n<p>Taiga runs well on a Raspberry Pi 3. If you want to setup something at home to help you manage the projects that you are working on, you can consider setting up the Taiga project management platform on a Raspberry Pi 3 with <a href=\"https:\/\/www.techcoil.com\/raspbian-stretch-lite-project-ideas\/\" rel=\"noopener\" target=\"_blank\">Raspbian Stretch Lite as the base operating system<\/a>. <\/p>\n<p>This post is adapted from <a href=\"https:\/\/taigaio.github.io\/taiga-doc\/dist\/setup-production.html\" rel=\"noopener\" target=\"_blank\">Taiga&#8217;s installation guide<\/a> to serve as a guide to setting up Taiga project management platform on Raspberry Pi 3 with Raspbian Stretch Lite.<\/p>\n","protected":false},"author":1,"featured_media":996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"footnotes":""},"categories":[4],"tags":[523,225,196,522,226,233,240,308,412,445,195,256,438,520],"jetpack_featured_media_url":"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/taiga-and-raspbian-icon.gif","jetpack_shortlink":"https:\/\/wp.me\/p245TQ-3s","jetpack-related-posts":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts\/214"}],"collection":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/comments?post=214"}],"version-history":[{"count":0,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts\/214\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/media\/996"}],"wp:attachment":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/media?parent=214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/categories?post=214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/tags?post=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}