如何在ubuntu server 14.04下安装gitlab中文版

Python050

如何在ubuntu server 14.04下安装gitlab中文版,第1张

gitlab是基于Ruby on Rails的,安装和配置非常麻烦,不过有傻瓜安装包,https://about.gitlab.com/downloads/,或者,https://bitnami.com/stack/gitlab/installer。但是这两个包都是英文界面的,gitlab把界面提示写在每一个rb文件里了,所以,要用中文版的不能像redmine那样设定一下就行了。

幸好,还是有无私的大侠把gitlab给汉化了:https://larryli.cn/gitlab,代码地址:https://gitlab.com/larryli/gitlab。

所以本文要做的事情是,不安装傻瓜包,从源码安装gitlab。

gitlab官方有一个说明文档:http://doc.gitlab.com/ce/install/installation.html,本文基本按照这个文档来的。所不同的是,本文用的是apache,不是nginx。

安装步骤有:

1. 依赖包

2. ruby

3. 用户创建

4. 数据库初始化

5. redis

6. gitlab源码

7. apache

本文可能会用到VPN连接,在命令行下创建VPN连接的方法如下:

sudo apt-get install pptp-linux

sudo pptpsetup --create VPN名称 --server 服务器地址 --username 用户名

--password 密码 [--encrypt] --start

以上命令会创建一个设备,如果没有其他的拨号设备,这个设备会是ppp0,用ifconfig可以看到,“--encrypt”选项可选,因为有的服务器不支持,会提示MPPE required but

peer negotiation

failed,创建时带上“--start”选项可以看到连接的情况。

pptpsetup创建的VPN连接重启后会失效,如果想在不重启的情况下删除VPN连接:

sudo pptpsetup --delete VPN名称

创建VPN连接后还需要使能,并且添加到路由列表:

sudo pon VPN名称

sudo route add

default dev ppp0

禁用VPN连接的方法是:

sudo

poff VPN名称

下面开始正文:

1. 依赖包

我装的是ubuntu server

14.04,安装的时候可以选是否安装LAMP(Linux+Apache+MySQL+PHP),如果没装,可以用下面的命令装:

sudo tasksel install

lamp-server

安装的时候会提示输入MySQL的root密码,下面要用。

接下来是依赖关系:

sudo apt-get install flex bison ruby

build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev

libreadline-dev libncurses5-dev libffi-dev curl openssh-server

redis-server checkinstall libxml2-dev libxslt-dev

libcurl4-openssl-dev libicu-dev logrotate python-docutils

pkg-config cmake libkrb5-dev nodejs git-core

注意:这里面装了ruby,应该是1.9.1版本的,gitlab需要2.0以上的ruby,但是安装2.0以上的ruby需要低版本的ruby,所以我们先装上,一会儿卸掉。另外,ubuntu

14.04的软件库里有ruby 2.0,但是实测不能用,所以还是从源码装ruby吧。

2. ruby

下载,编译,安装(安装前删掉ruby 1.9.1):

curl -L --progress

http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz | tar

xz

cd ruby-2.1.5

./configure --prefix=/usr --disable-install-rdoc

make

sudo apt-get autoremove ruby

sudo make install

然后安装bundler:

sudo gem install bundler --no-ri

--no-rdoc

3. 用户创建

为gitlab创建一个git用户:

sudo adduser --disabled-login --gecos

'GitLab' git

4. 数据库初始化

官方指南用的是PostgreSQL,不过官方也有MySQL的说明:

http://doc.gitlab.com/ce/install/database_mysql.html

sudo apt-get install -y mysql-server

mysql-client libmysqlclient-dev

mysql -u root -p

输入MySQL的root密码登陆,然后:

mysql>CREATE USER

'git'@'localhost' IDENTIFIED BY '$password'

记得把上面这句的"$password"换成实际的密码,然后:

mysql>SET

storage_engine=INNODB

mysql>CREATE DATABASE IF NOT

EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE

`utf8_unicode_ci`

mysql>GRANT SELECT, INSERT,

UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON

`gitlabhq_production`.* TO 'git'@'localhost'

mysql>\q

5. Redis

Redis貌似是用来存key的数据库吧,不知道,反正按步骤安装:

sudo apt-get install redis-server

sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig

sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee

/etc/redis/redis.conf

echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a

/etc/redis/redis.conf

echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf

sudo service redis-server restart

sudo usermod -aG redis git

6. gitlab源码

gitlab源码默认是安装在/home/git/gitlab,如果要更改,请参照官方手册。获取中文版源码的过程如下:

cd /home/git

sudo -u git -H git

clone https://gitlab.com/larryli/gitlab.git

不知道是因为GFW还是什么,git

clone这个版本库可慢可慢了,我用了VPN,速度会快点。

git

clone完以后可以checkout你想要的版本,在本文编写的时间(2015年4月22日),可以:

sudo -u git -H git checkout

7-7-zh

然后配置源码

cd /home/git/gitlab

sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

sudo chown -R git log/

sudo chown -R git tmp/

sudo chmod -R u+rwX,go-w log/

sudo chmod -R u+rwX tmp/

sudo -u git -H mkdir /home/git/gitlab-satellites

sudo chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

sudo chmod -R u+rwX tmp/pids/

sudo chmod -R u+rwX tmp/sockets/

sudo chmod -R u+rwX public/uploads

sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

sudo -u git -H cp config/initializers/rack_attack.rb.example

config/initializers/rack_attack.rb

sudo -u git -H git config --global user.name "GitLab"

sudo -u git -H git config --global user.email

"[email protected]"

sudo -u git -H git config --global core.autocrlf input

sudo -u git -H cp config/resque.yml.example

config/resque.yml

当然,你可以把[email protected]改成你的email;上面的那些yml文件里面的配置基本都不用更改;然后,配置数据库用户名和密码:

sudo -u git cp config/database.yml.mysql

config/database.yml

sudo -u git -H editor config/database.yml

sudo -u git -H chmod o-rwx

config/database.yml

然后,安装gems:

sudo -u git -H bundle install --deployment --without

development test postgres aws

这一步必须使用VPN,因为万恶的GFW屏蔽了rubygems.org,所以会提示connection reset by

peer之类的,这部时间也会比较久,如果你的机器是多核的,也可以加上和make相同-jN参数,N等于核数。

(2015年5月2日追加)

发现淘宝做了个rubygrems.org的国内镜像,http://ruby.taobao.org/,可以参照上面的内容设置,加快gems安装速度。

再接下来安装gitlab

shell:

sudo -u git -H bundle exec rake

gitlab:shell:install[v2.6.0]

REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production

sudo -u git -H editor

/home/git/gitlab-shell/config.yml

把gitlab的url改成http://localhost/或者你的域名。

在接下来初始化数据库:

sudo -u git -H bundle exec rake gitlab:setup

RAILS_ENV=production

加入启动项:

sudo cp lib/support/init.d/gitlab

/etc/init.d/gitlab

sudo update-rc.d gitlab defaults 21

初始化日志:

sudo cp lib/support/logrotate/gitlab

/etc/logrotate.d/gitlab

检查应用状态:

sudo -u git -H bundle exec rake gitlab:env:info

RAILS_ENV=production

编译附件:

sudo -u git -H bundle exec rake assets:precompile

RAILS_ENV=production

启动gitlab服务:

sudo service gitlab start

7. apache

下载apache的配置文件:https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-apache2.4.conf

将其中的“ProxyPassReverse

http://gitlab.example.com/”改成“ProxyPassReverse

http://localhost/”或者你的域名,将其中的“/var/log/httpd/logs/”改为“/var/log/apache2/”。

用命令来说:

wget https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/web-server/apache/gitlab-apache2.4.conf

mv gitlab-apache2.4.conf

001-gitlab.conf

editor 001-gitlab.conf

(进行上述修改)

sudo cp 001-gitlab.conf

/etc/apache2/sites-available

cd /etc/apache2/sites-enabled

sudo rm 000-default.conf

sudo ln -s ../sites-available/001-gitlab.conf

001-gitlab.conf

另外,还需要使能代理模块以实现反向代理功能,不然会提示“ProxyPassReverse”无效之类的。

cd /etc/apache2/mods-enabled

sudo ln -s ../mods-available/proxy.conf

proxy.conf

sudo ln -s

../mods-available/proxy.load proxy.load

sudo ln -s

../mods-available/proxy_connect.load proxy_connect.load

sudo ln -s

../mods-available/proxy_http.load proxy_http.load

sudo ln -s

../mods-available/rewrite.load rewrite.load

重启apache:

sudo service apache2 restart

然后,检查下配置是否正确:

sudo -u git -H bundle exec rake

gitlab:check RAILS_ENV=production

如果都是绿色的结果,那就可以访问了。登陆用户名:root,初始密码:5iveL!fe

最后配置一下邮件,修改/home/git/gitlab/config/gitlab.yml,里面的“email_from:”为一个有效的email地址;修改/home/git/gitlab/config/environments/production.rb,里面的

“config.action_mailer.delivery_method=”为“:smtp”;最后:

cd /home/git/gitlab/config/initializers

sudo -u git -H

cp smtp_settings.rb.sample smtp_settings.rb

然后把文件的里的内容修改正确了,再重启一下gitlab服务就行了:

sudo service gitlab

restart

面板是ExtJs控件的基础,很多控件都是在面板的基础上扩展的,或者他会与其他控件之间有关系。

面板由一个工具栏、一个底部工具栏、面板头部、面板尾部和面板主区域几个部分组成。面本类中还提供了面板展开、关闭等功能。并提供了一些可重用的工具按钮 让我们灵活的控制面板。面板可以放入其他任何容器中,面板本身也是一个容器,所以面板里面也可以包含其他组件。面板的类名为Ext.Panel,其 xtype为panel。

看下面一个例子来显示出面板的各个组成部分:

//普通的面板

function panel(){

var panel=new Ext.Panel({

renderTo:'panel',

title:'面板的头部',

width:400,

height:200,

html:'<h1>面板的主显示区域..可包含任何html代码</h1>',

tbar:[{text:'顶部工具栏按钮'}],

bbar:[{text:'底部工具栏'}],

buttons:[

{

text:'面板底部按钮',

handler:function()

{

Ext.Msg.alert('提示','面板底部按钮的事件!')

}

}

]

})

}

上面的代码就不做详细介绍了,特别注意的一点是renderTo:'panel',这句代码负责把面板绑定到一个div层里,panel就是div的ID。

<div id="panel"></div>

代码执行后会显示下面的效果:

效果不错吧!面板中可以有多个工具栏,可以位于面板的顶部或底部,Ext工具栏是由Ext.Toolbar类表示。工具栏可以存放按钮、文本等内容。而且面板中还提了一些实用的工具栏,可以通过tools配置属性向面板头部加入工具栏选项,看下面的案例:

function panel(){

var panel=new Ext.Panel({

tools:[

{id:"save"},

{id:"help"},

{id:"up"},

{

id:"close",

handler:function(){

Ext.MessageBox.alert("工具栏按钮","工具栏的关闭按钮事件")

}

}

],

renderTo:'panel',

title:'面板的头部',

width:400,

height:200,

html:'<h1>面板的主显示区域..可包含任何html代码</h1>',

tbar:[{text:'顶部工具栏按钮'}],

bbar:[{text:'底部工具栏'}],

buttons:[

{

text:'面板底部按钮',

handler:function()

{

Ext.Msg.alert('提示','面板底部按钮的事件!')

}

}

]

})

}

跟普通的面板没什么区别,只是多了个tools配置属性,可以通过ID来设置工具栏选项种类,如果需要给工具栏选项添加事件,则直接配置handler属性就可以。下面我为大家贴了一些id的枚举值:

toggle (collapsable为true时的默认值)

close

minimize

maximize

restore

gear

pin

unpin

right

left

up

down

refresh

minus

plus

help

search

save

print

上面的东西我也没有全部测试,如果大家感兴趣就自己试一下吧。

如果我们需要让这个面板可以拖动,需要加3个配置属性,改变一处配置。

:88,

y: 88,

renderTo: Ext.getBody(),//x,y,renderTo:Ext.getBody()初始化panel的位置

draggable: {

insertProxy: false,//拖动时不虚线显示原始位置

onDrag : function(e){

var pel = this.proxy.getEl()

this.x = pel.getLeft(true)

this.y = pel.getTop(true)//获取拖动时panel的坐标

var s = this.panel.getEl().shadow

},

endDrag : function(e){

this.panel.setPosition(this.x, this.y)//移动到最终位置

}

}

x与y是设置在屏幕显示位置,renderTo不需要指定div的id了,直接用Ext.getBody()方法就可以把Panel加载。

draggable是拖动时设置,onDrag是在拖动时触发的事件,endDrag是结束拖动时事件。

效果:

这样就可以拖动了,但是会发现在拖动时有一个黑框框,这样可能有些不美观了。如果我们需要让这个黑框随着移动位置而变化。那么我们需要在onDrag事件函数中加如下代码:

if (s) {

s.realign(this.x, this.y, pel.getWidth(), pel.getHeight())

}

看看拖动例子的全部代码:

//可以拖动的面板

function panelDrag(){

var panel=new Ext.Panel({

title: '拖一下看看我动不.',

x:88,

y: 88,

renderTo: Ext.getBody(),//x,y,renderTo:Ext.getBody()初始化panel的位置

floating: true,//true

frame: true,//圆角边框

width: 400,

height: 200,

draggable: {

insertProxy: false,//拖动时不虚线显示原始位置

onDrag : function(e){

var pel = this.proxy.getEl()

this.x = pel.getLeft(true)

this.y = pel.getTop(true)//获取拖动时panel的坐标

var s = this.panel.getEl().shadow

if (s) {

s.realign(this.x, this.y, pel.getWidth(), pel.getHeight())

}

},

endDrag : function(e){

this.panel.setPosition(this.x, this.y)//移动到最终位置

}

}

})

}

Ext.Panel有几个子类,所以来介绍一下Panel中常见的配置属性、方法,下面内容是资料中的:

1.autoLoad:有效的url字符串,把那个url中的body中的数据加载显示,但是可能没有样式和js控制,只是html数据

2.autoScroll:设为true则内容溢出的时候产生滚动条,默认为false

3.autoShow:设为true显示设为"x-hidden"的元素,很有必要,默认为false

4.bbar:底部条,显示在主体内,//代码:bbar:[{text:'底部工具栏bottomToolbar'}],

5.tbar:顶部条,显示在主体内,//代码:tbar:[{text:'顶部工具栏topToolbar'}],

6.buttons:按钮集合,自动添加到footer中(footer参数,显示在主体外)//代码:buttons:[{text:"按钮位于footer"}]

7.buttonAlign:footer中按钮的位置,枚举值为:"left","right","center",默认为right

8.collapsible:设为true,显示右上角的收缩按钮,默认为false

9.draggable:true则可拖动,但需要你提供操作过程,默认为false

10.html:主体的内容

11.id:id值,通过id可以找到这个组件,建议一般加上这个id值

12.width:宽度

13.height:高度

13.title:标题

14.titleCollapse:设为true,则点击标题栏的任何地方都能收缩,默认为false.

15.applyTo:(id)呈现在哪个html元素里面

16.contentEl:(id)呈现哪个html元素里面,把el内的内容呈现

17.renderTo:(id)呈现在哪个html元素里面

applyTo、contentEl、renderTo三者区别个人理解为:applyTo和RenderTo绑定到html元素中,contentEl则是html元素到ext组件中去。

上面说到面板都是绑定在某个html元素中显示面板,是局部的。Extjs中还有一个可以显示在整个body中的组件Ext.ViewPort,它会随着浏览器而变化。要注意的是一个页面中只能存在一个viewport的实例。看下面的代码

function viewport(){

var view=new Ext.Viewport({

enableTabScroll:true,

layout:"fit",

items:[

{

title:'标题',

html:"内容",

bbar:[

{text:"按钮1"}

]

}

]

})

}

与其它使用方式大同小异,Viewport不需要指定renderTo,Viewport通常用于网站主页面,Viewport常用布局有fit、border等,设置layout属性改变布局。

基本的面板我们了解了,还有一个很重要的面板TabPanel,这里用一个小例子做说明,代码就不解释了。面板的用法是非常灵活的,我们可以发挥自己的想象力来做出漂亮的选项卡面板和实用的功能。因为它是可以无限嵌套控件的。

function tabpanel(){

var tabpanel=new Ext.TabPanel({

activeTab:0,//设置默认选择的选项卡

renderTo:'tabpanel',

width:200,

height:150,

items:[

{

title:"第一个选项",

html:"第一个的内容"

},

{

title:"第二个选项",

html:"第一个的内容"

}

]

})

}

对待本人用到的东西来做一个小设计。代码不多做讲解,发一下代码和效果吧

点击展开

更多 0上一篇:Extjs学习总结

下一篇:ExtJs Panel翻译

相关主题推荐 extjs 浏览器 控件 布局 移动 相关博文推荐 vimperator部分使用帮助 javascript 常用函数归纳 javascript原生代码—跨浏览器事... [Phonegap+Sencha Tou... [Phonegap+Sencha Tou... [Phonegap+Sencha Tou... [Phonegap+Sencha Tou... [Phonegap+Sencha Tou... 查看评论

暂无评论

您还没有登录,请[登录]或[注册]

* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

核心技术类目全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料

thunder_1985

访问:49882次

积分:1107分

排名:第12092名

原创:49篇 转载:0篇 译文:14篇 评论:11条 文章搜索文章分类Ant(0)

dwr(5)

Hibernate(1)

javascript(2)

JDBC(2)

Junit(0)

Servlet(0)

Spring(0)

Struts2(3)

UML(0)

XML(0)

文章存档2010年01月(2)2009年12月(12)2009年11月(5)2009年10月(22)2009年09月(22)

阅读排行Struts2文件上传(6028)

ExtJs之combobox(4648)

Struts2文件下载(3970)

struts2异常处理(3809)

ExtJS学习笔记 Ext.FormPanel(2216)

Extjs学习总结(1634)

ExtJs Panel翻译(1453)

ExtJS面板的使用(Ext.Panle、Ext.TabPanel、Ext.Viewport) (1346)

Oracle安装失败后如何完全卸载(1158)

PreparedStatement用法总结(1098)

评论排行Struts2文件下载(3)

MySql分页(3)

PreparedStatement用法总结(2)

PreparedStatement和Statement比较(1)

ExtJs之combobox(1)

Struts2文件上传(1)

引用 extJs 2.0学习笔记(Element.js篇)(0)

让select处于不选中状态(0)

innerText与innerHTML区别 (0)

Oracle安装失败后如何完全卸载(0)

推荐文章最新评论Struts2文件上传

nhm_lxy: 师傅 带带我吧

PreparedStatement用法总结

zlp1992: 你好,如果数据库的是char类型,该怎么设置呢?

PreparedStatement用法总结

teteert: 如果数据库中有一个字段是自动增加的,则使用PrepareedStatement 怎么插入数据啊,自动...

Struts2文件下载

wdlht001: 很好用~谢谢

Struts2文件下载

jinweisheng5521:

ExtJs之combobox

匿名用户:

Struts2文件下载

hetengfeng:

MySql分页

匿名用户:

PreparedStatement和Statement比较

匿名用户:

MySql分页

JavaAlpha: