{"id":6372,"date":"2022-02-02T11:36:04","date_gmt":"2022-02-02T17:36:04","guid":{"rendered":"https:\/\/ugit.siua.ac.cr\/?p=6372"},"modified":"2022-02-03T14:57:31","modified_gmt":"2022-02-03T20:57:31","slug":"instalacion-taiga-contenedor-ubuntu-20-04","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=6372","title":{"rendered":"Instalaci\u00f3n taiga, Contenedor ubuntu 20.04"},"content":{"rendered":"\n<p><a href=\"https:\/\/docs.taiga.io\/setup-production.html#_introduction\">https:\/\/docs.taiga.io\/setup-production.html#_introduction<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dependencias<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Instalamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update\nsudo apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev\nsudo apt-get install -y libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev\nsudo apt-get install -y automake libtool curl git tmux gettext\nsudo apt-get install -y nginx\nsudo apt-get install -y rabbitmq-server<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">PostgreSQL<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get install -y postgresql-12 postgresql-contrib-12 postgresql-doc-12 postgresql-server-dev-12\nsudo pg_ctlcluster 12 main start<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Python3<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get install -y python3 python3-pip python3-dev python3-venv\nsudo apt-get install -y libxml2-dev libxslt-dev\nsudo apt-get install -y libssl-dev libffi-dev<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Node.js<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -sL https:\/\/deb.nodesource.com\/setup_12.x | sudo -E bash -\nsudo apt-get install gcc g++ make\nsudo apt-get install -y nodejs<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Crear usuario taiga<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo adduser taiga   --&gt;Pass:CA2\nsudo adduser taiga sudo\nsudo su taiga\ncd \/home\/taiga\/\ncd ~<\/code><\/pre>\n\n\n\n<p>NOTA: a partir de aqu\u00ed se debe instalar con el usuario Taiga y no con root<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurar PostgreSQL y RabbitMQ<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -u postgres createuser taiga --interactive --pwprompt\n\n\/\/instalaci\u00f3n:\npassword for taiga:CA2\nEnter password for new role: HB0\nEnter it again: HB0\nShall the new role be a superuser? (y\/n) y\n\/\/fin\n\n\nsudo -u postgres createdb taiga -O taiga --encoding='utf-8' --locale=en_US.utf8 --template=template0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Create a rabbitmquser named <code>taiga<\/code> and a virtualhost for RabbitMQ (taiga-events and async tasks)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rabbitmqctl add_user rabbitmquser rabbitmqpassword  \/\/Nota se debe cambiar\n\/\/Adding user \"rabbitmquser\" ...\n\nsudo rabbitmqctl add_vhost taiga\n\/\/Adding vhost \"taiga\" ...\n\nsudo rabbitmqctl set_permissions -p taiga rabbitmquser \".*\" \".*\" \".*\"\n\/\/Setting permissions for user \"rabbitmquser\" in vhost \"taiga\" ...<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configuraci\u00f3n del Backend<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>es la instalaci\u00f3n de los m\u00f3dulos<strong> taiga-back<\/strong> y <strong>taiga-async<\/strong><\/li><li>Obtenemos el c\u00f3digo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\ngit clone https:\/\/github.com\/kaleidos-ventures\/taiga-back.git taiga-back\ncd taiga-back\ngit checkout stable<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Crear virtualenv<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 -m venv .venv --prompt taiga-back\nsource .venv\/bin\/activate\npip install --upgrade pip wheel<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Install all Python dependencies<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install -r requirements.txt<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Install taiga-contrib-protected<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install git+https:\/\/github.com\/kaleidos-ventures\/taiga-contrib-protected.git@stable#egg=taiga-contrib-protected<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Crear archivo de configuraci\u00f3n<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cp settings\/config.py.prod.example settings\/config.py<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Abrimos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano settings\/config.py<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Modificamos<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Taiga secret key: <strong>it\u2019s important<\/strong> to change it. It must have the same value as the secret key in <code>taiga-events<\/code> and <code>taiga-protected<\/code><\/li><li>Taiga urls: configure where Taiga would be served using <code>TAIGA_URL<\/code>, <code>SITES<\/code> and <code>FORCE_SCRIPT_NAME<\/code> (see examples below)<\/li><li>Connection to PostgreSQL; check <code>DATABASES<\/code> section in the file<\/li><li>Connection to RabbitMQ for <code>taiga-events<\/code>; check \u00abEVENTS\u00bb section in the file<\/li><li>Connection to RabbitMQ for <code>taiga-async<\/code>; check \u00abTAIGA ASYNC\u00bb section in the file<\/li><li>Credentials for email; check \u00abEMAIL\u00bb section in the file<\/li><li>Enable\/disable anonymous telemetry; check \u00abTELEMETRY\u00bb section in the file<\/li><li>Modificamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>DATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'taiga',\n        'USER': 'taiga',\n        'PASSWORD': 'changeme',\n        'HOST': '',\n        'PORT': '',\n    }\n}\n\nX\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'taiga',\n        'USER': 'taiga',\n        'PASSWORD': 'HB0',\n        'HOST': '',\n        'PORT': '',\n    }\n}\n\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>SECRET_KEY = \"changeme\"\nX\nSECRET_KEY = \"taigaugit\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TAIGA_SITES_SCHEME = \"https\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>TAIGA_SITES_DOMAIN = \"example.com\"\nX\nTAIGA_SITES_DOMAIN = \"taiga.siua.ac.cr\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>FORCE_SCRIPT_NAME = \"\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#########################################\n## EMAIL\n#########################################\n# https:\/\/docs.djangoproject.com\/en\/3.1\/topics\/email\/\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nCHANGE_NOTIFICATIONS_MIN_INTERVAL = 120  # seconds\n\nDEFAULT_FROM_EMAIL = 'changeme@example.com'\nEMAIL_USE_TLS = True\nEMAIL_USE_SSL = True\nEMAIL_HOST = 'localhost'\nEMAIL_PORT = 587\nEMAIL_HOST_USER = 'user'\nEMAIL_HOST_PASSWORD = 'password'\n\n\nX\n\n#########################################\n## EMAIL\n#########################################\n# https:\/\/docs.djangoproject.com\/en\/3.1\/topics\/email\/\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nCHANGE_NOTIFICATIONS_MIN_INTERVAL = 120  # seconds\n\nDEFAULT_FROM_EMAIL = 'admin@siua.ac.cr'\nEMAIL_USE_TLS = True\nEMAIL_USE_SSL = True\nEMAIL_HOST = 'correo.siua.ac.cr'\nEEMAIL_PORT = 465\nEMAIL_HOST_USER = 'admin'\nEMAIL_HOST_PASSWORD = 'AC2'\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#########################################\n## EVENTS\n#########################################\nEVENTS_PUSH_BACKEND = \"taiga.events.backends.rabbitmq.EventsPushBackend\"\nEVENTS_PUSH_BACKEND_OPTIONS = {\n    \"url\": \"amqp:\/\/rabbitmquser:rabbitmqpassword@rabbitmqhost:5672\/taiga\" \/\/No los cambie\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#########################################\n## TAIGA ASYNC\n#########################################\nCELERY_ENABLED = os.getenv('CELERY_ENABLED', 'True') == 'True'\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#########################################\n## TELEMETRY\n#########################################\n\nENABLE_TELEMETRY = True\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Importar datos a la base de datos<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>source .venv\/bin\/activate\nDJANGO_SETTINGS_MODULE=settings.config python manage.py migrate --noinput\n\n# Crear usuario administrador con contrase\u00f1a fuerte\n\nCELERY_ENABLED=False DJANGO_SETTINGS_MODULE=settings.config python manage.py createsuperuser\n\n\/\/Resultado\nUsername: ugit\nEmail address: gustavo.matamoros@siua.ac.cr\nPassword: Sk83\nPassword (again): Sk83\nSuperuser created successfully.\n\/\/fin\n\nDJANGO_SETTINGS_MODULE=settings.config python manage.py loaddata initial_project_templates\nDJANGO_SETTINGS_MODULE=settings.config python manage.py compilemessages\nDJANGO_SETTINGS_MODULE=settings.config python manage.py collectstatic --noinput<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Instalar demos<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Si desea instalar demos (tarda un rato)<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>CELERY_ENABLED=False DJANGO_SETTINGS_MODULE=settings.config python manage.py sample_data<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Verificaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Si queremos verificar la instalaci\u00f3n ejecutamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>source .venv\/bin\/activate\nDJANGO_SETTINGS_MODULE=settings.config python manage.py runserver 10.20.200.85:8000<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Ahora abrimos el navegador en <a rel=\"noreferrer noopener\" href=\"http:\/\/localhost:8000\/api\/v1\/\" target=\"_blank\">http:\/\/10.20.200.85:8000\/<\/a><a href=\"http:\/\/10.20.200.85:8000\/api\/v1\/\">api\/v1\/<\/a><\/li><li>Ahora abrimos el navegador en <a href=\"http:\/\/localhost:8000\/admin\/\">http:\/\/10.20.200.85:8000\/admin\/<\/a> no sirvi\u00f3 error CSRF<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n del Frontend<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Obtener c\u00f3digo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\ngit clone https:\/\/github.com\/kaleidos-ventures\/taiga-front-dist.git taiga-front-dist\ncd taiga-front-dist\ngit checkout stable<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Copiar la configuraci\u00f3n<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cp ~\/taiga-front-dist\/dist\/conf.example.json ~\/taiga-front-dist\/dist\/conf.json<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Abrimos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano dist\/conf.json<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Modificar la configuraci\u00f3n<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"api\": \"http:\/\/localhost:8000\/api\/v1\/\",\n    \"eventsUrl\": null,\n    \"baseHref\": \"\/\",\n\n\nX\n\n{\n    \"api\": \"https:\/\/taiga.siua.ac.cr\/api\/v1\/\",\n    \"eventsUrl\": \"wss:\/\/taiga.siua.ac.cr\/events\",\n    \"baseHref\": \"\/\",\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Quedando as\u00ed<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"api\": \"http:\/\/taiga.siua.ac.cr:8000\/api\/v1\/\",\n    \"eventsUrl\": \"wss:\/\/taiga.siua.ac.cr\/events\",\n    \"baseHref\": \"\/\",\n    \"eventsMaxMissedHeartbeats\": 5,\n    \"eventsHeartbeatIntervalTime\": 60000,\n    \"eventsReconnectTryInterval\": 10000,\n    \"debug\": false,\n    \"debugInfo\": false,\n    \"defaultLanguage\": \"en\",\n    \"themes\": &#91;\"taiga\"],\n    \"defaultTheme\": \"taiga\",\n    \"defaultLoginEnabled\": true,\n    \"publicRegisterEnabled\": true,\n    \"feedbackEnabled\": true,\n    \"supportUrl\": \"https:\/\/resources.taiga.io\",\n    \"privacyPolicyUrl\": null,\n    \"termsOfServiceUrl\": null,\n    \"maxUploadFileSize\": null,\n    \"contribPlugins\": &#91;],\n    \"tagManager\": { \"accountId\": null },\n    \"tribeHost\": null,\n    \"enableAsanaImporter\": false,\n    \"enableGithubImporter\": false,\n    \"enableJiraImporter\": false,\n    \"enableTrelloImporter\": false,\n    \"gravatar\": false,\n    \"rtlLanguages\": &#91;\"ar\", \"fa\", \"he\"]\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Como nuestro dominio lleva directamente a la aplicaci\u00f3n https:\/\/taiga.siua.ac.cr y no http:\/\/siua.ac.cr\/taiga solo verificamos que el archivo index.html este as\u00ed<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano dist\/index.html<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Debe estar as\u00ed<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;base href=\"\/\"&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configurar Events<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Obtener c\u00f3digo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\ngit clone https:\/\/github.com\/kaleidos-ventures\/taiga-events.git taiga-events\ncd taiga-events\ngit checkout stable<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Instalar dependencias Javascript<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Create <code>.env<\/code> file based on the provided example<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cp .env.example .env<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Abrimos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano .env<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Update it with your RabbitMQ URL and your unique secret key. Your final <code>.env<\/code> should look similar to the following example:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>RABBITMQ_URL=\"amqp:\/\/rabbitmquser:rabbitmqpassword@rabbitmqhost:5672\/taiga\"\nSECRET=\"taigaugit\"\nWEB_SOCKET_SERVER_PORT=8888\nAPP_PORT=3023<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Taiga protected Setup<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Obtener c\u00f3digo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\ngit clone https:\/\/github.com\/kaleidos-ventures\/taiga-protected.git taiga-protected\ncd taiga-protected\ngit checkout stable<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Create a virtualenv:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 -m venv .venv --prompt taiga-protected\nsource .venv\/bin\/activate\npip install --upgrade pip wheel<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Install all Python dependencies:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install -r requirements.txt<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Copy the example config file:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cp ~\/taiga-protected\/env.sample ~\/taiga-protected\/.env<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Abrimos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano .env<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Modificamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>SECRET_KEY=\"taiga-back-secret-key\"\nX\nSECRET_KEY=\"taigaugit\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Iniciar Taiga (root)<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Creamos al archivo como root<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/system\/taiga.service<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=taiga_back\nAfter=network.target\n\n&#91;Service]\nUser=taiga\nWorkingDirectory=\/home\/taiga\/taiga-back\nExecStart=\/home\/taiga\/taiga-back\/.venv\/bin\/gunicorn --workers 4 --timeout 60 --log-level=info --access-logfile - --bind 0.0.0.0:8001 taiga.wsgi\nRestart=always\nRestartSec=3\n\nEnvironment=PYTHONUNBUFFERED=true\nEnvironment=DJANGO_SETTINGS_MODULE=settings.config\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Recargamops el servicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl start taiga\nsudo systemctl enable taiga<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificamos el servicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status taiga<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>creamos el servcicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/system\/taiga-async.service<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=taiga_async\nAfter=network.target\n\n&#91;Service]\nUser=taiga\nWorkingDirectory=\/home\/taiga\/taiga-back\nExecStart=\/home\/taiga\/taiga-back\/.venv\/bin\/celery -A taiga.celery worker -B --concurrency 4 -l INFO\nRestart=always\nRestartSec=3\nExecStop=\/bin\/kill -s TERM $MAINPID\n\nEnvironment=PYTHONUNBUFFERED=true\nEnvironment=DJANGO_SETTINGS_MODULE=settings.config\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>recargamos el servcio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl start taiga-async\nsudo systemctl enable taiga-async<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificamos el servicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status taiga-async<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Creamos el servicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/system\/taiga-events.service<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=taiga_events\nAfter=network.target\n\n&#91;Service]\nUser=taiga\nWorkingDirectory=\/home\/taiga\/taiga-events\nExecStart=npm run start:production\nRestart=always\nRestartSec=3\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Recargamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl start taiga-events\nsudo systemctl enable taiga-events<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status taiga-events<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Creamos el servicio<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/system\/taiga-protected.service<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=taiga_protected\nAfter=network.target\n\n&#91;Service]\nUser=taiga\nWorkingDirectory=\/home\/taiga\/taiga-protected\nExecStart=\/home\/taiga\/taiga-protected\/.venv\/bin\/gunicorn --workers 4 --timeout 60 --log-level=info --access-logfile - --bind 0.0.0.0:8003 server:app\nRestart=always\nRestartSec=3\n\nEnvironment=PYTHONUNBUFFERED=true\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Recargamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl start taiga-protected\nsudo systemctl enable taiga-protected<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status taiga-protected<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Expose Taiga with NGINX<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Remove the default NGINX config file to avoid collision with Taiga:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rm \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Create the logs folder (mandatory), debe ser en ls \/home\/taiga\/logs\/<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/logs<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Creamos el archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/nginx\/conf.d\/taiga.conf<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80 default_server;\n    server_name taiga.siua.ac.cr;\n    return 301 https:\/\/$server_name$request_uri;\n}\n\nserver {\n    listen 443 default_server;\n    server_name taiga.siua.ac.cr;  #  See http:\/\/nginx.org\/en\/docs\/http\/server_names.html\n\n    large_client_header_buffers 4 32k;\n    client_max_body_size 50M;\n    charset utf-8;\n\n    access_log \/home\/taiga\/logs\/nginx.access.log;\n    error_log \/home\/taiga\/logs\/nginx.error.log;\n\n    # TLS: Configure your TLS following the best practices inside your company\n    # Other configurations\n\n    # Frontend\n    location \/ {\n        alias \/home\/taiga\/taiga-front-dist\/dist\/;\n        index index.html;\n        try_files $uri $uri\/ index.html =404;\n    }\n\n    # API\n    location \/api\/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Scheme $scheme;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http:\/\/127.0.0.1:8001\/api\/;\n        proxy_redirect off;\n    }\n\n    # Admin\n    location \/admin\/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Scheme $scheme;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http:\/\/127.0.0.1:8001\/admin\/;\n        proxy_redirect off;\n    }\n\n    # Static files\n    location \/static\/ {\n        alias \/home\/taiga\/taiga-back\/static\/;\n    }\n\n    # Media\n    location \/_protected\/ {\n        internal;\n        alias \/home\/taiga\/taiga-back\/media\/;\n        add_header Content-disposition \"attachment\";\n    }\n\n    # Unprotected section\n    location \/media\/exports\/ {\n        alias \/home\/taiga\/taiga-back\/media\/exports\/;\n        add_header Content-disposition \"attachment\";\n    }\n\n    location \/media\/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Scheme $scheme;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http:\/\/127.0.0.1:8003\/;\n        proxy_redirect off;\n    }\n\n    # Events\n    location \/events {\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_connect_timeout 7d;\n        proxy_send_timeout 7d;\n        proxy_read_timeout 7d;\n        proxy_pass http:\/\/127.0.0.1:8888\/events;\n    }\n\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Execute the following command to verify the NGINX configuration and to track any error in the service:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nginx -t\n\n\n\/\/Resultado\nnginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok\nnginx: configuration file \/etc\/nginx\/nginx.conf test is successful<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Finally, restart the <code>nginx<\/code> service:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart nginx<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Restart all Taiga services after updating the configuration:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart 'taiga*'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Instalaci\u00f3n de Let\u2019s Encrypt SSL<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Hacemos el proceso de crear un certificado con proxy reverso<\/li><li>Creamos en el servidor taiga una carpeta para alamcenarlos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir \/home\/taiga\/certificados<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Les datos permisos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 777 -R \/home\/taiga\/certificados<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>En proxy le pasamos los certificados<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>scp -P 44 -r \/etc\/letsencrypt\/live\/taiga.siua.ac.cr\/fullchain.pem root@10.20.200.85:\/home\/taiga\/certificados\/fullchain.pem \nscp -P 44 -r \/etc\/letsencrypt\/live\/taiga.siua.ac.cr\/privkey.pem root@10.20.200.85:\/home\/taiga\/certificados\/privkey.pem\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Abrimos el archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/nginx\/conf.d\/taiga.conf<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Le agregamos al final<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># SSL\n    add_header Strict-Transport-Security \"max-age=63072000; includeSubdomains; preload\";\n    add_header Public-Key-Pins 'pin-sha256=\"klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=\"; pin-sha256=\"633lt352PKRXbOwf4xSEa1M517scpD3l5f79xMD9r9Q=\"; max-age=2592000; includeSubDomains';\n\n    ssl_certificate \/home\/taiga\/certificados\/fullchain.pem;   # Set SSL cert path\n    ssl_certificate_key \/home\/taiga\/certificados\/privkey.pem; # Set SSL key  path\n    ssl_stapling on;\n    ssl_stapling_verify on;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Y modificamos la linea<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>listen 443 default_server;\nX\nlisten 443 ssl;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Verificamos <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nginx -t<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Recargamos<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart nginx<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Ahora abrimos el navegador en <a rel=\"noreferrer noopener\" href=\"https:\/\/taiga.siua.ac.cr\/api\/v1\/\" target=\"_blank\">https:\/\/taiga.siua.ac.cr\/<\/a><a href=\"https:\/\/taiga.siua.ac.cr\/api\/v1\/\" target=\"_blank\" rel=\"noreferrer noopener\">api\/v1\/<\/a><\/li><li>Ahora abrimos el navegador en <a href=\"https:\/\/taiga.siua.ac.cr\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/taiga.siua.ac.cr\/admin\/<\/a> no sirvi\u00f3 error CSRF<\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/docs.taiga.io\/setup-production.html#_introduction Dependencias Instalamos PostgreSQL Python3 Node.js Crear usuario taiga NOTA: a partir de aqu\u00ed se debe instalar con el usuario Taiga y no con root Configurar PostgreSQL y RabbitMQ Create a rabbitmquser named taiga and a virtualhost for RabbitMQ (taiga-events and async tasks) Configuraci\u00f3n del Backend es la instalaci\u00f3n de los m\u00f3dulos taiga-back y taiga-async [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-6372","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/6372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6372"}],"version-history":[{"count":26,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/6372\/revisions"}],"predecessor-version":[{"id":6403,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/6372\/revisions\/6403"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}