文章允许转载,请注明来源:http://www.jb51.cc/article/p-zfcijdtt-brq.html

背景

企业项目管理是一个比较复杂的事情,这个市场需求非常大,目前市面上也存在着teambition,tower等平台,但是这些工具平台目前都是付费才能有完整的功能,免费版根本不能满足团队的需求。一番调研后,发现了Taiga这个强大的项目管理工具。
Taiga是免费开源的项目管理平台,适用于初创企业和敏捷开发。使用Django+AngularJS开发,据说Taiga没有自己的产品经理,如果真的是一群程序员开发出这样一个简单易用,页面又漂亮的产品,确实蛮厉害的。从Taiga官网可以看到,Taiga2015年评为最佳敏捷工具,2014年评为开源项目TOP10,2016年评为项目管理工具TOP11。
Taiga虽然有官方的付费版本,但是也可以部署到自己的服务器上。官方的教程只提供了在Ubuntu上部署的方法。如果是要往Ubuntu上部署,基本上按照官方教程就可以了,已经写的很详细了。但是往CentOS上部署的资料还是比较少,今天就详细介绍一下,同时也记录一下部署过程中,遇到的一些问题以及解决方法。

Taiga结构介绍

Taiga基本框架是分成两部分,分别是基于Django实现的taiga-back,和基于AngularJS实现的taiga-front。另外还有taiga-events等可选组件可以添加。
我们的部署过程主要围绕taiga-back和taiga-front的搭建进行。
环境:
CentOS 6.5(x64)
系统要求RAM >= 1GB
涉及到的关键组件及版本要求:
python(3.4+)
postgresql(>=9.4)
circus
Nginx

taiga-back配置部署

安装基本依赖

安装过程涉及到python的虚拟环境,一定要区分清楚命令是应该是host环境执行,还是在虚拟环境执行。
下面的命令都是在host环境以root身份执行。
通过yum安装基本的依赖

#yum update -y
#yum groupinstall "Development Tools" -y
#yum install libxslt-devel libxml2-devel libXt-devel curl git tmux -y

设置配置用到的变量,变量设置后,只能在当前终端窗口有效,可以通过echo查看具体的值,如果要在其他终端中使用,可以把具体的值写入环境变量配置。

#TAIGA_POSTGRES_BD=taiga
#TAIGA_POSTGRES_USER=taiga
#TAIGA_POSTGRES_PASSWORD=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-20};echo;`
#TAIGA_SECRET_KEY=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-20};echo;`

安装postgresql-9.4

#rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
#sed -i 's/^gpgkey.*/&\nexclude=postgresql*/' /etc/yum.repos.d/CentOS-Base.repo

#yum -y install postgresql94 postgresql94-contrib postgresql94-server postgresql94-devel postgresql94-libs
#service postgresql-9.4 initdb

设置验证方式为MD5

#sed -i "/^host/s/ident/md5/g" /var/lib/pgsql/9.4/data/pg_hba.conf

设置postgresql开机启动

#/sbin/chkconfig --level 35 postgresql-9.4 on
#service postgresql-9.4 start

在postgresql中创建taiga用户及对应的数据库

#echo -e "$TAIGA_POSTGRES_PASSWORD\n$TAIGA_POSTGRES_PASSWORD\ny\n" | su - postgres -c "createuser --pwprompt $TAIGA_POSTGRES_USER"
#su - postgres -c "createdb $TAIGA_POSTGRES_BD -O $TAIGA_POSTGRES_USER"

安装python(这里使用conda来安装python及对应的依赖,conda可以相当于pip+virtualenv)

#wget --directory-prefix=/tmp http://repo.continuum.io/miniconda/Miniconda3-3.7.0-Linux-x86_64.sh
#bash /tmp/Miniconda3-3.7.0-Linux-x86_64.sh -b -p /usr/local/miniconda3

将miniconda加入环境变量

#cat > /etc/profile.d/miniconda.sh << EOF
if [[ \$PATH != */usr/local/miniconda3/bin* ]]
then
    export PATH=$PATH:/usr/local/miniconda3/bin:
fi
EOF

source使配置生效

#source /etc/profile.d/miniconda.sh

到这里基本的依赖已经装完了,接下来就要进入正题:taiga-back的部署。

taiga-back配置

添加用户taiga并生成目录

#adduser taiga

#DIR="/var/log/taiga /opt/taiga-back /opt/taiga-events"
for NAME in $DIR
do
if [ ! -d $NAME ]; then
   mkdir $NAME
   chown taiga.taiga $NAME
fi
done

切换到taiga用户同步taiga-back代码

#su - taiga
$git clone https://github.com/taigaio/taiga-back.git /opt/taiga-back
$cd /opt/taiga-back
$git checkout stable

创建crond虚拟环境并安装pip

$conda create --yes -n taiga python
$source activate taiga
$conda install --yes pip

在虚拟环境中使用pip安装依赖

$export PATH=$PATH:/usr/pgsql-9.4/bin/
$pip install -r requirements.txt
$exit   //安装完成后退出taiga用户

配置taiga-back,这里假设访问域名是example.com,如果没有域名,可以替换成ip地址

#cat > /opt/taiga-back/settings/local.py << EOF
from .development import *

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql',
 'NAME': '$TAIGA_POSTGRES_BD',
 'USER': '$TAIGA_POSTGRES_USER',
 'PASSWORD': '$TAIGA_POSTGRES_PASSWORD'
 }
}

MEDIA_URL = "http://example.com/media/"
STATIC_URL = "http://example.com/static/"
ADMIN_MEDIA_PREFIX = "http://example.com/static/admin/"
SITES["front"]["scheme"] = "http"
SITES["front"]["domain"] = "example.com"
SITES["api"]["scheme"] = "http"
SITES["api"]["domain"] = "example.com"

SECRET_KEY = "$TAIGA_SECRET_KEY"

DEBUG = False
TEMPLATE_DEBUG = False

PUBLIC_REGISTER_ENABLED = True

DEFAULT_FROM_EMAIL = "no-reply@example.com"
SERVER_EMAIL = DEFAULT_FROM_EMAIL

# Uncomment and populate with proper connection parameters
# for enable email sending.
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
EMAIL_HOST = "smtp.exmail.qq.com"
EMAIL_HOST_USER = "taiga@example.com"
EMAIL_HOST_PASSWORD = "password"
EMAIL_PORT = 465
EOF

修改文件所有者

#chown taiga.taiga /opt/taiga-back/settings/local.py

切换到taiga用户,初始化taiga-back

#su - taiga
$source activate taiga
$cd /opt/taiga-back
$python manage.py migrate --noinput
$python manage.py loaddata initial_user
$python manage.py loaddata initial_project_templates
$python manage.py collectstatic --noinput
$exit   //退出taiga用户

通过以上命令就创建了一个账号名是”admin”,密码是”123123”的管理员用户,可以直接用这个账号从前端页面登录taiga。

安装circus和gunicorn

这时需要在root用户下通过conda来安装circus

#conda install --yes pip
#pip install circus

此时执行

#su - taiga -c "conda info -e"

输出应该是

# conda environments:
#
taiga                    /home/taiga/envs/taiga
root                  *  /usr/local/miniconda3

如果没有,第二个root用户项,就要确认一下自己是否切换错了用户。
修改circus配置文件

#cat > /etc/circus.ini << EOF
[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
statsd = true

[watcher:taiga]
working_dir = /opt/taiga-back
cmd = gunicorn
args = -w 3 -t 60 --pythonpath=. -b 127.0.0.1:8001 taiga.wsgi
uid = taiga
numprocesses = 1
autostart = true
send_hup = true
stdout_stream.class = FileStream
stdout_stream.filename = /var/log/taiga/gunicorn.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream
stderr_stream.filename = /var/log/taiga/gunicorn.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4

[env:taiga]
PATH = \$PATH:/home/taiga/envs/taiga/bin
TERM=rxvt-256color
SHELL=/bin/bash
USER=taiga
LANG=en_US.UTF-8
HOME=/home/taiga
PYTHONPATH=/home/taiga/envs/taiga/lib/python3.6/site-packages
EOF

注意确认以上配置中的每一个路径是否有效,可能会略有差异。
设置circus启动脚本

#cat > /etc/init/circus.conf << EOF
start on runlevel [2345]
stop on runlevel [016]

respawn
exec /usr/local/miniconda3/bin/circusd /etc/circus.ini
EOF

启动circus

#initctl start circus

到这里,taiga-back已经配置完了,但是这只是把后台服务开起来了,我们还需要有前端界面才能使用taiga。

taiga-front配置

前端的配置就要简单多了,只要下载前端代码,修改配置文件,设置Nginx反向代理三步即可。

下载代码
#cd /opt/
#git clone https://github.com/taigaio/taiga-front-dist.git
#cd taiga-front-dist
#git checkout stable
配置taiga-front

复制配置示例文件

#cp /opt/taiga-front-dist/dist/conf.example.json /opt/taiga-front-dist/dist/conf.json

修改配置文件

#cat > /opt/taiga-front-dist/dist/conf.json << EOF
{
    "api": "http://example.com/api/v1/","eventsUrl": null,"eventsMaxMissedHeartbeats": 5,"eventsHeartbeatIntervalTime": 60000,"eventsReconnectTryInterval": 10000,"debug": true,"debugInfo": false,"defaultLanguage": "en","themes": ["taiga"],"defaultTheme": "taiga","publicRegisterEnabled": false,"FeedbackEnabled": true,"privacyPolicyUrl": null,"termsOfServiceUrl": null,"maxUploadFileSize": null,"contribPlugins": [],"tribeHost": null,"importers": [],"gravatar": false
}
EOF
配置Nginx反向代理
server {
    listen 80;
    server_name example.com;

    large_client_header_buffers 4 32k;
    client_max_body_size 50M;
    charset utf-8;

    access_log /var/log/taiga/Nginx.access.log;
    error_log /var/log/taiga/Nginx.error.log;

    # Frontend
    location / {
        root /opt/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;
    }

    # Django 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 /opt/taiga-back/static;
    }

    # Media files
    location /media {
        alias /opt/taiga-back/media;
    }

    # Taiga-events
    location /events {
    proxy_pass http://127.0.0.1:8887/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 之后,在浏览器打开配置的域名或者ip,就能看到taiga的页面了。

遇到的问题:

1、报错“Can’t connect the postgresql with psycopg2”
这里是postgresql的安装路径默认在/tmp/下导致,可以在local.py 的DATABASE配置中添加

'HOST': '/tmp/'

2、“x-frame-options may only be set via an HTTP header sent along with a document. It may not be set inside < Meta >”
将/opt/taiga-front-dist/dist/index.html中以下一行代码删除

<Meta http-equiv="x-frame-options" content="deny">

3、选中文后报错“Invalid key one for argument total. Valid plural keys for this locale are other,and explicit keys like =0
这是对中文支持的问题,语言是英语的时候就没有这个报错。解决方法是修改/opt/taiga-front-dist/dist/v-1503987903941/locales/taiga/locale-zh-hans.json中

one{一个关注} other{# 个关注}

类似于这种格式的数据,将大括号中的数据替换成英文即可。例如,以上的代码应该改为

one{one watcher} other{# watchers}

这种修改一共有8处。修改完由于缓存的原因可能不是立即生效,可以尝试重启circus和Nginx,并清理浏览器缓存。
4.选中文后报找不到zh-hans.js

#cp /opt/taiga-front-dist/dist/v-1503987903941/locales/moment-locales/zh-cn.js /opt/taiga-front-dist/dist/v-1503987903941/locales/moment-locales/zh-hans.js

参考:
Installing Taiga on CentOS 6 (x64)
TAIGA 部署
CentOS7上部署taiga项目管理软件
taiga安装手册
Can’t connect the postgreSQL with psycopg2

CentOS6配置Taiga的更多相关文章

  1. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

    这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 如何根据构建变体更改AndroidManifest.xml文件?

    我有一个具有多个构建变体的应用程序.这些变体用于为不同的公司构建相同应用程序的版本.所以,我有几种不同的变体可以构建不同的应用程序:>com.acme.app1>com.schmoe.app2>com.yop.app3>等……如果你可以提供帮助,请非常具体地了解自从我在gradle文件和脚本编写时出现的问题.提前致谢!

  3. android – 仅用于文件的意图过滤器

    在我们的应用程序中,我们要显示在“通过分享”菜单中.所以我们将这个意图过滤器添加到我们的活动中:它的工作原理,我们的应用程序出现在共享菜单中.然而,意图过滤器并不完全符合我们想要实现的目标:>我们想出现在所有文件的菜单中,无论mime类型是什么>我们只想显示文件.到目前为止,如果用户想要分享一个简单的文本,因为它的mime类型将是文本/简单的,我们的应用程序出现在菜单中,我们不想要它.所有文件和文

  4. html5唤醒APP小记

    这篇文章主要介绍了html5唤醒APP小记的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. Android scheme 跳转的设计与实现详解

    这篇文章主要介绍了Android scheme 跳转的设计与实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 浅谈Html5页面打开app的一些思考

    这篇文章主要介绍了浅谈Html5页面打开app的一些思考,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. MIT / Scheme是Windows下的一个简单编译器

    是否有可能在Windows中将mit方案用作简单的编译器?我想在我选择的wditor中编辑代码并编译它,但我没有找到并选择这样做.当我执行………

  8. CentOS6配置Taiga

    一番调研后,发现了Taiga这个强大的项目管理工具。从Taiga官网可以看到,Taiga2015年评为最佳敏捷工具,2014年评为开源项目TOP10,2016年评为项目管理工具TOP11。Taiga结构介绍Taiga基本框架是分成两部分,分别是基于Django实现的taiga-back,和基于AngularJS实现的taiga-front。环境:CentOS6.5系统要求RAM>=1GB涉及到的关键组件及版本要求:pythonpostgresqlcircusNginxtaiga-back配置部署安装基本依

  9. ajax报:The URI scheme corresponds to an unknown protocol handler

    原因很简单,你没有写协议名称url:"https://......"

  10. Windows Scheme / Lisp实现

    随着LISP和Scheme的成千上万的实现,我很难找到适合Windows开发的正确选择.我在学校学到了这些语言,发现他们非常优雅,但是我似乎无法找到一个适合于开发除学术环境以外的代码的实现.什么是具有以下要求的Scheme或LISP实现?

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部