题记

使用了 MantisBT 一段时间,觉得功能太少,只局限在错误跟踪,而且操作体验比较差,界面很糟糕,很早就想将其换掉。

偶然发现一个很不错的新选择:Taiga,于是就试着将其部署下来,发现绝对是一个好东西,对于实践 Scrum 项目管理方法的,更是不可多得的利器!

产品官网:https://taiga.io/

GITHUB:https://github.com/taigaio

安装指南:http://taigaio.github.io/taiga-doc/dist/setup-production.html

由于这个项目是用 Django(1.7) 开发的,因此个人情感非常认同,并且在部署的过程中,也顺手牵羊 GET 到了关于 Django 部署的一些技能。

1. 部署概要

首先,项目是使用 RESTFUL 模式开发的,也就是说,后台跟前台完全独立。

前台部分,使用的是 AngularJS (也非常对我的口味),因此单纯使用 nginx 静态部署,不存在太大的问题。

关键是后端,使用 Django + REST Framework,因此部署起来总是有那么点困惑,下面重点需要解决的是后端部署的问题。

不过好在前面给出的安装指南链接上面给出了详尽可用叹为观止的部署流程,虽然步骤较多,但是也是一步一步搞下来就可以使用了,下面就根据这个流程过一遍,并且对未尽部分,一些可能卡住的情况进行一下说明,兼做记录。

其实按照指南装下来基本没什么障碍,主要问题在于,有些 PyPI 的包其实在 requirements.txt 里面是没有的,因此需要看日志发现问题,然后手动补上这些包。


2. 环境准备

http://taigaio.github.io/taiga-doc/dist/setup-production.html#_before_starting

首先,我们的环境基本跟指引里面的一致,使用 Ubuntu14.04,对一下其他条件:

  1. IP 没什么好说的
  2. 主机名,我们用的是 taiga.easecloud.cn,注意把后面的 example.com 换成我们自己的即可。
  3. 用户 taiga,这个我们需要事先创建好,并且赋予其 sudo 权限。
  4. system ram 请无视。

现在创建 taiga 用户:

adduser taiga

然后赋予其 sudo 权限:

visudo
# User privilege specification
root ALL=(ALL:ALL) ALL
# 在这行后面加上:
taiga ALL=(ALL:ALL) ALL

3. 后台安装:

3.1. 安装依赖项

sudo apt-get install -y build-essential binutils-doc autoconf flex bison libjpeg-dev
sudo apt-get install -y libfreetype6-dev zlib1g-dev libzmq3-dev libgdbm-dev libncurses5-dev
sudo apt-get install -y automake libtool libffi-dev curl git tmux

3.2. 安装 postgresql

sudo apt-get install -y postgresql-9.3 postgresql-contrib-9.3
sudo apt-get install -y postgresql-doc-9.3 postgresql-server-dev-9.3
# 创建数据库
sudo -u postgres createuser taiga
sudo -u postgres createdb taiga -O taiga

3.3. 安装 python 环境

sudo apt-get install -y python3 python3-pip python-dev python3-dev python-pip virtualenvwrapper
sudo apt-get install libxml2-dev libxslt-dev

这里安装了 Python3.4 作为主要的 python 环境,也就是说 python, pip 这两个命令日后在系统里面对应 3.4 版本,而 python2 和 pip2 对应旧版的 2.7 版本。

另有值得注意的是 virtualenv 的安装,后面用到这个配置相当重要,具体逻辑在过程中进行了学习,参考:

http://www.huangwenchao.com.cn/2015/05/python-virtualenv.html

下载源码
cd ~
git clone https://github.com/taigaio/taiga-back.git taiga-back
cd taiga-back
git checkout stable
创建 virtualenv taiga
mkvirtualenv -p /usr/bin/python3.4 taiga
安装 PyPI 依赖项
pip install -r requirements.txt

注意!在实际操作中这里的依赖项不全,因此如果跑步起来需要看日志看一下少了哪个库。

映射数据库和载入初始数据
python manage.py migrate --noinput
python manage.py loaddata initial_user
python manage.py loaddata initial_project_templates
python manage.py loaddata initial_role
python manage.py collectstatic --noinput

注意第一步很容易卡住,原因是缺少 PyPI 库的问题,关注日志。

填写 Python 配置文件
from .common import *

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" SECRET_KEY = "theveryultratopsecretkey" 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_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"

注意把上面的域名换掉就差不多了,发送邮件的尚未调试。

3.4. 安装验证

在 ~/taiga-back/ 下面执行:

workon taiga
python manage.py runserver 0.0.0.0:8111

好了之后,可以通过 http://example.com:8111/api/v1/ 访问接口,用户名 admin 密码 123123 登录正常即说明安装正确。

3.5. 异步任务

(非必须)跳过

4. 前端部署

由于是静态页面,部署比较简单,基本无意外。

下载代码
cd ~
git clone https://github.com/taigaio/taiga-front-dist.git taiga-front-dist
cd taiga-front-dist
git checkout stable
编辑配置 ~/taiga-front-dist/dist/js/conf.json
{
"api": "http://example.com/api/v1/",
"eventsUrl": "ws://example.com/events",
"debug": "true",
"publicRegisterEnabled": true,
"feedbackEnabled": true,
"privacyPolicyUrl": null,
"termsOfServiceUrl": null,
"maxUploadFileSize": null,
"contribPlugins": []
}

然后把 nginx 的虚拟主机配置到这个目录下即可运转。

5. 事件安装

(非必须)跳过

6. 最终章(HTTP 和 WSGI 部署)

我们使用 Circus 做进程守护,Gunicorn 做 WSGI 容器,然后通过 Nginx 对外提供 HTTP 服务。

6.1. Circus 和 Gunicorn

安装部件,注意 Circus 需要使用 pip2 安装。

sudo pip2 install circus
Circus 基础配置 ~/circus.ini

按照原版配置基本无需修改,可以将 circus.ini 放到其他目录,我自己的实践中放到了 /var/www/circus.ini 中。

[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 = /home/taiga/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 = /home/taiga/logs/gunicorn.stdout.log
stdout_stream.max_bytes = 10485760
stdout_stream.backup_count = 4
stderr_stream.class = FileStream
stderr_stream.filename = /home/taiga/logs/gunicorn.stderr.log
stderr_stream.max_bytes = 10485760
stderr_stream.backup_count = 4 [env:taiga]
PATH = /home/taiga/.virtualenvs/taiga/bin:$PATH
TERM=rxvt-256color
SHELL=/bin/bash
USER=taiga
LANG=en_US.UTF-8
HOME=/home/taiga
PYTHONPATH=/home/taiga/.virtualenvs/taiga/lib/python3.4/site-packages

注意上面有一点特别容易卡住,就是输出的日志文件所在目录 /home/taiga/logs/ 必须存在!否则会启动失败,引起需要确保日志目录事先创建好。

修改 Circus 的启动设置

配置文件在:/etc/init/circus.conf

start on filesystem and net-device-up IFACE=lo
stop on runlevel [016] respawn
exec /usr/local/bin/circusd /home/taiga/circus.ini

注意 circus.ini 的路径如果不在这个地方需要对应修改。

然后就可以启动服务了。

sudo service circus start

6.2. Nginx

安装 Nginx
sudo apt-get install -y nginx
添加虚拟主机

创建虚拟主机配置文件:/etc/nginx/sites-available/taiga

server {
listen 80 default_server;
server_name _; 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;
} # 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 /home/taiga/taiga-back/static;
} # Media files
location /media {
alias /home/taiga/taiga-back/media;
}
}

注意里面的 default_server 和 server_name 如果在需要独立配置虚拟主机而不是直接占用全站资源,需要根据实际修改(删除 default-server,把 server_name) 改成自己的。

然后将其启用:

sudo ln -s /etc/nginx/sites-available/taiga /etc/nginx/sites-enabled/taiga

6.2.1. 启用 HTTPS

(非必须)跳过


(完)


【转载请附】愿以此功德,回向 >>

原文链接:http://www.huangwenchao.com.cn/2015/05/taiga-deployment.html【项目管理系统 Taiga 部署手札】

项目管理系统 TAIGA 部署的更多相关文章

  1. Linux下部署开源版“禅道”项目管理系统《转载》

    Linux下部署开源版“禅道”项目管理系统 https://www.cnblogs.com/xxsl/p/6525378.html

  2. NideShop项目的安装部署教程

    本文档为微信小程序商城NideShop项目的安装部署教程,欢迎star NideShop商城api服务:https://github.com/tumobi/nideshop NideShop微信小程序 ...

  3. 5分钟快速掌握Jenkins,项目一键自动部署

    5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...

  4. Tomcat 利用server.xml进行其他盘符的其他项目映射的部署以及JSP引用其他盘符的图片(虚拟目录及虚拟路径)

    Tomcat 利用server.xml进行项目映射的部署 2013-07-17 15:14 12843人阅读 评论(4) 收藏 举报  分类: web 开发(5)  版权声明:本文为博主原创文章,欢迎 ...

  5. 利用PowerShell+Jenkins,实现项目的自动化部署

    当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...

  6. 开源软件项目管理系统招设计/开发。。。。。Zend Framework2架构 svn://735.ikwb.com/pms

    开源软件项目管理系统招设计/开发.....Zend Framework2架构svn://735.ikwb.com/pms

  7. Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看

    第一篇:Intellij IDEA 的使用 1.黑色主题 中文乱码修改 2.WEB项目的部署 以及自动编译 3.多项目的同时部署 4.相关插件提高工作效率 1.JRebel插件 实现热部署 2.Tas ...

  8. RedMine项目管理系统邮件推送设置(Windows环境)

    RedMine项目管理系统有邮箱推送功能,当Bug,安全漏洞等内容被修改.解决.评论的时候,系统会通过邮件 及时的通知你的团队和客户.邮件通知的环节.形式.时间.接受人均可定制,功能十分实用. 下面是 ...

  9. 项目管理系统 SQL2005数据库查询CPU100%问题研究

    [一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/4595084.html]  在项目管理系统中出现查询工程明细出现CPU100%卡死症状: 1.打 ...

随机推荐

  1. mybatis 学习笔记(二):mybatis SQL注入问题

    mybatis 学习笔记(二):mybatis SQL注入问题 SQL 注入攻击 首先了解下概念,什么叫SQL 注入: SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞. ...

  2. request payload

    最近在调试代码时发现有Request Payload的情况,从网上查一些文件,也都有较多的描述.下面我只是说明一下大家没有注意的地方 关于HTTP请求,都是通过URL及参数向后台发送数据.主要方式有G ...

  3. Flink学习笔记:Operators之Process Function

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  4. 自定义内核启动后的Logo

    1.使用图像GIMP工具   2.详细步骤如下:   A.将800x480的图片导入到GIMP工具.   B.选中GIMP菜单栏进行以下操作     图像         -->模式       ...

  5. (IDEA) VCS-->Import Into Version Control没有Share Project(Subversion)这个选项。

    在VCS-->Import Into Version Control,会发现只有Import Into Subversion选项,并没有Share Project(Subversion)这个选项 ...

  6. flask 发送QQ邮箱

    from flask import Flask from flask_script import Manager, Shell from flask_mail import Mail, Message ...

  7. Loj 6432. 「PKUSC2018」真实排名 (组合数)

    题面 Loj 题解 枚举每一个点 分两种情况 翻倍or不翻倍 \(1.\)如果这个点\(i\)翻倍, 要保持排名不变,哪些必须翻倍,哪些可以翻倍? 必须翻倍: \(a[i] \leq a[x] < ...

  8. hdu3966 Aragorn's Story 树链剖分

    题目传送门 题目大意: 有n个兵营形成一棵树,给出q次操作,每一次操作可以使两个兵营之间的所有兵营的人数增加或者减少同一个数目,每次查询输出某一个兵营的人数. 思路: 树链剖分模板题,讲一下树链剖分过 ...

  9. HihoCoder - 1172 SG函数应用

    原文讲解很nice,我尝试换种观点 设背面朝上为F,否则T, 那么局面FFFFFF肯定为0 局面FTFFFF可以转为上面局面0,设为1 局面FFTFFF可以转到0,1,设为2 子游戏SG(x)=x 对 ...

  10. dcoker machine

    Docker Machine是一个安装和管理 Docker 的工具, 它有自己的命令行工具:docker-machine.Docker Machine简化了Docker的安装和远程管理, 不仅可以管理 ...