在 Ubuntu 20.04 上安装 Taiga 项目管理平台 |
在今天的文章中,我们将介绍在 Ubuntu 20.04 上设置工作 Taiga 项目管理平台所需的所有步骤。 Taiga 是一款开源项目管理 Web 应用程序,采用 Scrum 设计,适用于小型和大型团队。
Taiga.io 构建在 Python、Django、AngularJS 和 CoffeeScript 之上。该项目管理工具为您提供了一种简单有效的方法来管理项目、改善协作、时间跟踪、错误跟踪、看板、wiki、报告、待办事项等等。
Taiga 平台由三个主要模块组成,每个模块在编译时和运行时都有自己的依赖项:
- taiga-back – 这是后端/API 模块
- taiga-front-dist – 为用户提供门户的前端模块。
- taiga-events – Websockets 网关。这是可选的,您可以安装或跳过。
本教程假设您正在新安装的 Ubuntu 20.04 服务器上工作。确保所有软件包均更新至最新版本。
sudo apt update
sudo apt upgrade -y
在继续后续安装步骤之前重新启动系统。
sudo reboot
第 1 步:设置服务器主机名和 DNS
让我们首先设置正确的服务器主机名:
sudo hostnamectl set-hostname taiga.hirebestengineers.com --static
确认主机名设置。
$ hostnamectl
Static hostname: taiga.hirebestengineers.com
Icon name: computer-vm
Chassis: vm
Machine ID: be43a41780154ad0b9148af9afe95a4e
Boot ID: 94c4e0892cf54c6baea75be6ff7387ba
Virtualization: kvm
Operating System: Ubuntu 20.04.1 LTS
Kernel: Linux 5.4.0-48-generic
Architecture: x86-64
将正确的 IP 地址和 FQDN 添加到 /etc 目录中的 hosts 文件中。
$ sudo vim /etc/hosts
135.181.102.168 taiga.hirebestengineers.com
核实 :
$ host taiga.hirebestengineers.com
taiga.hirebestengineers.com has address 135.181.102.168
还要在您的 DNS 服务器中添加 A 记录。
确认本机是否可以查询该记录。
$ dig A taiga.hirebestengineers.com +short
135.181.102.168
第二步:安装依赖包
下一步是安装运行 Taiga 项目管理平台所需的所有依赖包。
安装git、Python3和其他包:
sudo apt update
sudo apt -y install git pwgen automake wget curl gettext build-essential libgdbm-dev binutils-doc autoconf flex gunicorn bison libjpeg-dev libzmq3-dev libfreetype6-dev zlib1g-dev libncurses5-dev libtool libxslt-dev libxml2-dev libffi-dev python3 virtualenvwrapper python3-dev python3-pip python3-dev libssl-dev tmux
安装 Nginx 网络服务器:
sudo apt -y install nginx
安装 Redis 和 RabbitMQ:
sudo apt -y install rabbitmq-server redis-server
安装 RabbitMQ 服务器后,为 Taiga 创建用户和虚拟主机:
$ sudo rabbitmqctl add_user taiga StrongPassword
Adding user "taiga" ...
$ sudo rabbitmqctl add_vhost taiga
Adding vhost "taiga" ...
$ sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"
Setting permissions for user "taiga" in vhost "taiga" ...
安装 Node.js
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt -y install nodejs
步骤 3:安装和配置 PostgreSQL
Taiga.io 需要 PostgreSQL 数据库服务器。安装并配置如下:
导入存储库签名密钥:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
添加 PostgreSQL apt 存储库:
echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
更新软件包列表并安装 postgresql
软件包
sudo apt update
sudo apt install postgresql -y
使用以下命令设置 PostgreSQL 管理员用户的密码:
$ sudo passwd postgres
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
为 Taiga.io 创建数据库和用户
$ sudo su - postgres
postgres@taiga:~$ createuser taiga
postgres@taiga:~$ psql
psql (12.4 (Ubuntu 12.4-1.pgdg20.04+1))
Type "help" for help.
postgres=# ALTER USER taiga WITH ENCRYPTED password 'StrongPassword';
postgres=# CREATE DATABASE taiga OWNER taiga;
postgres=# \q
postgres@taiga:~$ exit
代替 :
- taiga 使用您的 Taiga.io 数据库用户名
- StrongPassword 为针叶林用户提供强数据库密码。
第 4 步:安装和配置 Taiga 后端
创建 taiga 用户:
$ sudo adduser taiga
Adding user `taiga' ...
Adding new group `taiga' (1000) ...
Adding new user `taiga' (1000) with group `taiga' ...
Creating home directory `/home/taiga' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for taiga
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
$ sudo adduser taiga sudo
Adding user `taiga' to group `sudo' ...
Adding user taiga to group sudo
Done.
切换到 Taiga 用户帐户并创建日志文件夹
$ su - taiga
$ mkdir -p ~/logs
$ ls
logs
从 Github 克隆 Taiga 后端项目
git clone https://github.com/taigaio/taiga-back.git
cd taiga-back
git checkout stable
创建虚拟环境
然后为 Taiga.io 后端创建 Virtualenv 并安装所需的依赖项
mkvirtualenv -p /usr/bin/python3 taiga_venv
pip3 install -r requirements.txt
如果您收到错误消息“mkvirtualenv:找不到命令”,请参阅以下指南进行修复:
- 修复 Ubuntu 上找不到 mkvirtualenv 命令
使用初始基本数据填充数据库
python3 manage.py migrate --noinput
python3 manage.py loaddata initial_user
python3 manage.py loaddata initial_project_templates
python3 manage.py compilemessages
python3 manage.py collectstatic --noinput
运行上述命令时,数据将导入到您的 PostgreSQL 数据库中。这还会创建管理员帐户,其登录凭据为 admin
,密码为 123123
如果您需要示例数据,可以使用python3 manage.py sample_data
加载。这仅用于演示目的,以后可能很难清理数据。
创建配置
将以下配置复制到 ~/taiga-back/settings/local.py
中:
vim ~/taiga-back/settings/local.py
复制并更新以下内容:
from .common import *
MEDIA_URL = "http://taiga.hirebestengineers.com/media/"
STATIC_URL = "http://taiga.hirebestengineers.com/static/"
SITES["front"]["scheme"] = "http"
SITES["front"]["domain"] = "taiga.hirebestengineers.com"
SECRET_KEY = "OQOEJNSJIQHDBQNSUQEJSNNANsqQPAASQLSMSOQND"
DEBUG = False
PUBLIC_REGISTER_ENABLED = True
DEFAULT_FROM_EMAIL = "[email "
SERVER_EMAIL = DEFAULT_FROM_EMAIL
#CELERY_ENABLED = True
EVENTS_PUSH_BACKEND = "taiga.events.backends.rabbitmq.EventsPushBackend"
EVENTS_PUSH_BACKEND_OPTIONS = {"url": "amqp://taiga:StrongPassword@localhost:5672/taiga"}
# Uncomment and populate with proper connection parameters
# for enable email sending. EMAIL_HOST_USER should end by @domain.tld
#EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
#EMAIL_USE_TLS = False
#EMAIL_HOST = "localhost"
#EMAIL_HOST_USER = ""
#EMAIL_HOST_PASSWORD = ""
#EMAIL_PORT = 25
# Uncomment and populate with proper connection parameters
# for enable github login/singin.
#GITHUB_API_CLIENT_ID = "yourgithubclientid"
#GITHUB_API_CLIENT_SECRET = "yourgithubclientsecret"
更改设置以适合您的环境,设置:
- RabbitMQ 连接用户名和密码
- 泰加域名
- 密钥和
- 可选的电子邮件设置。
配置验证
为了确保一切正常,请发出以下命令以开发模式运行后端进行测试:
workon taiga_venv
python manage.py runserver
成功输出示例:
Trying import local.py settings...
Trying import local.py settings...
Performing system checks...
System check identified no issues (0 silenced).
September 30, 2020 - 20:29:24
Django version 2.2.16, using settings 'settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
打开另一个SHELL并尝试curl:
curl http://127.0.0.1:8000/api/v1/
禁用 Virtualenv 以开始前端安装。
$ deactivate
第 5 步:安装和配置 Taiga 前端
taiga-front 主要是用 angularjs 和 CoffeeScript 编写的,并且依赖于后端。在进行这些部分配置之前,您需要配置 Taiga 后端。
切换到taiga
用户帐户
su - taiga
从 Github 克隆项目源代码
git clone https://github.com/taigaio/taiga-front-dist.git
cd taiga-front-dist
git checkout stable
复制示例配置文件:
cp ~/taiga-front-dist/dist/conf.example.json ~/taiga-front-dist/dist/conf.json
vim ~/taiga-front-dist/dist/conf.json
按照以下模式编辑示例配置(替换为您自己的详细信息):
{
"api": "http://taiga.hirebestengineers.com/api/v1/",
"eventsUrl": "ws://taiga.hirebestengineers.com/events",
"eventsMaxMissedHeartbeats": 5,
"eventsHeartbeatIntervalTime": 60000,
"eventsReconnectTryInterval": 10000,
"debug": true,
"debugInfo": false,
"defaultLanguage": "en",
"themes": ["taiga"],
"defaultTheme": "taiga",
"publicRegisterEnabled": true,
"feedbackEnabled": true,
"supportUrl": "https://tree.taiga.io/support",
"privacyPolicyUrl": null,
"termsOfServiceUrl": null,
"GDPRUrl": null,
"maxUploadFileSize": null,
"contribPlugins": [],
"tribeHost": null,
"importers": [],
"gravatar": true,
"rtlLanguages": ["fa"]
}
您应该将 taiga.hirebestengineers.com
替换为您的 DNS 名称。
第 6 步:安装 Taiga Events
Taiga-events 是 Taiga websocket 服务器,它允许 taiga-front 显示待办事项、任务板、看板和问题列表中的实时变化。 Taiga-events 使用rabbitmq 作为消息代理。
cd ~
git clone https://github.com/taigaio/taiga-events.git taiga-events
cd taiga-events
安装所需的 JavaScript 依赖项:
npm install
为 Taiga Events 创建配置文件。
cp config.example.json config.json
编辑配置文件并设置rabbitmq URL和Secret key:
$ vim config.json
{
"url": "amqp://taiga:StrongPassword@localhost:5672/taiga",
"secret": "OQOEJNSJIQHDBQNSUQEJSNNANsqQPAASQLSMSOQND",
"webSocketServer": {
"port": 8888
}
}
config.json 中的密钥值必须与 ~/taiga-back/settings/ 中的 SECRET_KEY 相同local.py!
将 taiga-events 添加到 systemd 配置中:
sudo tee /etc/systemd/system/taiga_events.service<<EOF
[Unit]
Description=taiga_events
After=network.target
[Service]
User=taiga
WorkingDirectory=/home/taiga/taiga-events
ExecStart=/bin/bash -c "node_modules/coffeescript/bin/coffee index.coffee"
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
EOF
重新加载Systemd并启动服务:
sudo systemctl daemon-reload
sudo systemctl start taiga_events
sudo systemctl enable taiga_events
检查服务是否处于运行状态:
$ systemctl status taiga_events.service
● taiga_events.service - taiga_events
Loaded: loaded (/etc/systemd/system/taiga_events.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-09-30 22:51:07 CEST; 3min 17s ago
Main PID: 18269 (node)
Tasks: 7 (limit: 4567)
Memory: 18.8M
CGroup: /system.slice/taiga_events.service
└─18269 node node_modules/coffeescript/bin/coffee index.coffee
第7步:启动Taiga服务
创建一个新的 taiga systemd 文件:
sudo tee /etc/systemd/system/taiga.service<<EOF
[Unit]
Description=taiga_back
After=network.target
[Service]
User=taiga
Environment=PYTHONUNBUFFERED=true
WorkingDirectory=/home/taiga/taiga-back
ExecStart=/home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 taiga.wsgi
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
EOF
重新加载 systemd 守护进程并启动 taiga 服务:
sudo systemctl daemon-reload
sudo systemctl start taiga
sudo systemctl enable taiga
执行以下命令检查服务是否正在运行。
$ systemctl status taiga
● taiga.service - taiga_back
Loaded: loaded (/etc/systemd/system/taiga.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-09-30 22:58:28 CEST; 7s ago
Main PID: 19087 (gunicorn)
Tasks: 5 (limit: 4567)
Memory: 266.1M
CGroup: /system.slice/taiga.service
├─19087 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 t>
├─19109 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 t>
├─19110 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 t>
├─19111 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 t>
└─19112 /home/taiga/.virtualenvs/taiga_venv/bin/python /home/taiga/.virtualenvs/taiga_venv/bin/gunicorn --workers 4 --timeout 60 -b 127.0.0.1:8001 t>
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19087]: /usr/lib/python3.8/os.py:1023: RuntimeWarning: line buffering (buffering=1) isn't supported in binar>
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19087]: return io.open(fd, *args, **kwargs)
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19109]: [2020-09-30 22:58:28 +0200] [19109] [INFO] Booting worker with pid: 19109
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19110]: [2020-09-30 22:58:28 +0200] [19110] [INFO] Booting worker with pid: 19110
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19109]: Trying import local.py settings...
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19110]: Trying import local.py settings...
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19111]: [2020-09-30 22:58:28 +0200] [19111] [INFO] Booting worker with pid: 19111
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19112]: [2020-09-30 22:58:28 +0200] [19112] [INFO] Booting worker with pid: 19112
Sep 30 22:58:28 taiga.hirebestengineers.com gunicorn[19111]: Trying import local.py settings...
Sep 30 22:58:29 taiga.hirebestengineers.com gunicorn[19112]: Trying import local.py settings...
第 8 步:将 Nginx 配置为 Taiga 的代理
taiga-front-dist 和 taiga-back 都必须使用代理/静态文件 Web 服务器暴露给外部。为此,Taiga 使用 NGINX。
NGINX 用作静态文件 Web 服务器,为 taiga-front-dist 提供服务并向 taiga-back 发送代理请求。首先删除默认的 Nginx 配置文件。
sudo rm /etc/nginx/sites-enabled/default
为 Taiga 创建 NGINX 虚拟主机:
sudo vim /etc/nginx/conf.d/taiga.conf
相应修改配置文件。
server {
listen 80 default_server;
server_name _; # See http://nginx.org/en/docs/http/server_names.html
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /home/taiga/logs/nginx.access.log;
error_log /home/taiga/logs/nginx.error.log;
# Frontend
location / {
root /home/taiga/taiga-front-dist/dist/;
try_files $uri $uri/ /index.html;
}
# Backend
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001/api;
proxy_redirect off;
}
# Admin access (/admin/)
location /admin {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001$request_uri;
proxy_redirect off;
}
# Static files
location /static {
alias /home/taiga/taiga-back/static;
}
# Media files
location /media {
alias /home/taiga/taiga-back/media;
}
# Events
location /events {
proxy_pass http://127.0.0.1:8888/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
}
验证 Nginx 配置:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果一切正常,请重新启动 nginx 服务:
sudo systemctl restart nginx
检查状态:
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-09-30 23:21:51 CEST; 27s ago
Docs: man:nginx(8)
Process: 20262 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 20276 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 20277 (nginx)
Tasks: 3 (limit: 4567)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─20277 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─20278 nginx: worker process
└─20279 nginx: worker process
Sep 30 23:21:51 taiga.hirebestengineers.com systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 30 23:21:51 taiga.hirebestengineers.com systemd[1]: Started A high performance web server and a reverse proxy server.
第 9 步:访问 Taiga Web 登录仪表板
打开您最喜欢的网络浏览器并转到:
http://your_taiga_domain.com
您应该看到登录屏幕。
使用以下默认凭据登录:
Username: admin
Password: 123123
然后在管理员 > 更改密码中更改管理员密码
第 10 步:使用 SSL 进行安全安装
请按照下面的指南使用 SSL 证书强化 Taiga 安装。
- 使用 Let’s Encrypt SSL 保护 Taiga 项目管理平台
如何禁用自注册
要阻止用户注册,请编辑文件 ~/taiga-back/settings/local.py 并将 PUBLIC_REGISTER_ENABLED 的值设置为 false。
$ su - taiga
$ vim ~/taiga-back/settings/local.py
PUBLIC_REGISTER_ENABLED = False
更改 Taiga 前端的设置:
$ vim ~/taiga-front-dist/dist/conf.json
"publicRegisterEnabled": false
更新配置后重新启动所有 Taiga 服务:
sudo systemctl restart 'taiga*'
重新加载 nginx:
sudo systemctl reload nginx
前 :
后 :
享受 Taiga 项目管理平台带来的炫酷功能。
相关指南:
- 在 CentOS 8 上安装 OpenProject 社区版
- 如何在 CentOS 8/RHEL 8 Linux 上安装 Jira
- 在 Ubuntu 上安装 OpenProject