centos5.1安装gitlab

应团队小伙伴需要,在内网简历了gitlab环境。由于gitlab官方一键安装包只支持centos6/7的脚本。centos5需要手动一步步安装,并且gitlab也留了不少坑。

详细过程网上很多,这里只列举下主要步骤,和一些坑

大概下面几个步骤(注意#表示root用户,$表示git用户

1. 新建git系统用户(linux用户)

#useradd git --create-home

2. 安装ruby

#yum search ruby
#yum install ruby.x86_64 (根据上面结果)
#ruby -v (博主ruby2.1)

3. 安装mysql

#yum search mysql
#yum install mysql.x86_64(根据上面结果)
#/etc/init.d/mysql start|stop|restart(常用命令)

4. 安装redis

#cd /home/git
#mkdir redis
#cd redis
#wget http://download.redis.io/releases/redis-2.8.19.tar.gz
#tar zxvf redis-2.8.19.tar.gz
#cd redis-2.8.19
#./src/redis-server & (后台启动,正式请改用nohup)
#ln -s /home/git/redis/redis-2.8.19/src/redis-cli /usr/bin/redis-cli

5. 下载gitlab-shell(用于检查gitlab环境,redis配置等信息)

$cd /home/git
$git clone https://github.com/gitlabhq/gitlab-shell.git
$cd gitlab-shell
$cp config.yml.example config.yml
$vim config.yml(修改下gitlab_url或者redis)
$./bin/check

6. 下载gitlab(主程序)

$cd /home/git
$git clone https://github.com/gitlabhq/gitlabhq.git
$git checkout 6-4-stable(博主安装版本)
$cp config/database.yml.mysql config/database.yml
$cp config/gitlab.yml.example config/gitlab.yml
$cp config/unicorn.rb.example config/unicorn.rb
$vim config/database.yml(修改production节点下面的数据库用户名和密码)
$vim config.gitlab.yml(这个文件可以不修改,可以在gitlab安装成功以后进行部分修改)
$

7. 安装GEM相关(ruby相关依赖库)

$cd /home/git/gitlab
$sudo -u gitlab -H bundle install --without development test sqlite postgres  --deployment

8. 初始化数据

$cd /home/git/gitlab
#检查安装环境
$sudo bundle exec rake gitlab:check RAILS_ENV=production
#初始化数据库相关
$sudo bundle exec rake gitlab:setup RAILS_ENV=production
#初始化静态资源
$sudo bundle exec rake assets:precompile RAILS_ENV=production
#重启gitlab
$/etc/init.d/gitlab restart

9. 配置nginx

参考:http://www.nginx.cn/install

10. 配置nginx+gitlabe(下文$NGINX_HOME指代nginx的安装目录)

#vim $NGINX_HOME/nginx.conf(自己找个文件)
#插入 include vhost/*.conf;(如果有类似的话,就不需要了,纯粹为了方便建虚拟主机)
#cd $NGINX_HOME/vhost
#cp /home/git/gitlab/lib/support/nginx/gitlab gitlab.conf
#vim gitlab.conf(修改listen、server_name信息)
#$NGINX/sbin/nginx start(需要先启动gitlab)

11. 完结

一些坑:

  1. 请安装把gitlab、gitlab-shell都安装在/home/git目录下面,不要问我为什么,所有都是默认这个目录的。一个一个修改配置容易漏掉
  2. 如果/usr/bin/redis-cli 路径不存在,请修改gitlab-shell/config.yml修改redis的redis-cli
  3. 如果gitlab启动以后,没有样式请运行 sudo bundle exec rake assets:precompile RAILS_ENV=production
  4. 确保nginx是最新版本 1.4
  5. 一定要在git用户下,执行/etc/init.d/gitlab restart

优质参考:

  1. http://www.tuicool.com/articles/NjANjq
  2. http://www.nginx.cn/install
  3. http://blog.haohtml.com/archives/13846

APP设计尺寸标准

Android需要的比例

以小米3的设计稿1920*1080属于xxhdpi,一般需要3个版本xxhdpi、 xhdpi、hdpi 比例值如下

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

xhdpi和xxhdpi是2:3,所以xhdpi对应的是1280*720
hdpi和xxhdpi是1.5:3,所以hdpi对应960*540

小米一代的854*480分辨率,会自己匹配hdpi即960*540(即把hdpi略微缩小)。类似不同尺寸的手机,android都是通 过这样找相邻的,只要保证相邻的比例允许一定程度上的缩放尔不失真即可QQ截图20131118215517QQ截图20131118215526Iphone需要的比例

iphone4&4s            960*640
iphone5&5c&5a     1136*640

参考文章:
android dip px dp 概念介绍:http://blog.csdn.net/dinko321/article/details/7992776
android dpi归一化加载顺序:http://blog.csdn.net/a220315410/article/details/11896189
iphone设计尺寸规范:http://www.yixieshi.com/ucd/13759.html
APP设计尺寸规范:http://www.25xt.com/3645.html

android ant脚本批量打包-依赖别的项目

一个下午都在修改原来的android打包脚本,晚上仔细看了官网文档半小时搞完。╮(╯▽╰)╭

主要问题在于自己的android工程还依赖于第三方的一个工程library。网上不少例子都是完全重写apk的打包过程,不是不好。就是有点啰嗦不好维护。简单的对于依赖第三方的library工程也没说清除。google了这方面资料不多,我也傻劲东查查西找找折腾了一个下午。早应该想到老外如果没有专门讨论这块,就说明官网文档已经说的太明白了,不需要讨论了。

android ant打包说明:http://developer.android.com/tools/projects/projects-cmdline.html

简单说下,在贴自己的脚本。主工程(自己的工程)、第三方library工程这样有2个工程。意味着要写2个build.xml

1. library工程. 在当前路径上,创建一个TARGET为8的lib工程

android update lib-project --target 8 --path .

2. 主工程. 在当前路径上,创建一个名为XXXXXXBuilder,TARGET为8的工程(eg 可以用android list targets 命令查看所有的target),依赖的library相对或绝对路径

android update project --name XXXXXBuilder --target 8 --path . --library ../xxxx

另外,没必要像文档离说的那样local.properties和ant.properties要分开写。把所有配置文件写在一个里面也就够了。不然维护起来也不方便

解决了上面问题,多渠道打包就简单了。直接贴xml

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="xxxxBuilder" default="deploy">

    <taskdef resource="net/sf/antcontrib/antlib.xml" >
        <classpath>
            <pathelement location="${basedir}/packages/antcontrib.jar" />
        </classpath>
    </taskdef>

   ......省略

    <target name="deploy" >
        <foreach
            delimiter=","
            list="${market_channels}"
            param="channel"
            target="modify_manifest" >
        </foreach>
    </target>

    <target name="modify_manifest" >

        <echo message="=============${channel}==============" />

        <!-- AndroidManifest.xml 's replace -->
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='android:name="UMENG_CHANNEL".*android:value="(.*)"' />
            <substitution expression='android:name="UMENG_CHANNEL" android:value="${channel}_${app_version_name}"' />
            <fileset dir="" includes="AndroidManifest.xml" />
        </replaceregexp>
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='android:versionCode="(\d+)"' />
            <substitution expression='android:versionCode="${app_vcode}"' />
            <fileset dir="" includes="AndroidManifest.xml" />
        </replaceregexp>
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='android:versionName="(\d+)"' />
            <substitution expression='android:versionName="${app_version_name}"' />
            <fileset dir="" includes="AndroidManifest.xml" />
        </replaceregexp>  

        <!-- Constant.java 's replace -->
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='APPVERVALUE.*=.*"(.*)";' />
            <substitution expression='APPVERVALUE = "${app_version}";' />
            <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" />
        </replaceregexp>  
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='CLIENT_VERVALUE.*=.*"(.*)";' />
            <substitution expression='CLIENT_VERVALUE = "${app_version}";' />
            <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" />
        </replaceregexp>
        <replaceregexp byline="false" flags="g" encoding="UTF-8" >
            <regexp pattern='PROMOTION_IDV_ALUE.*=.*"(.*)";' />
            <substitution expression='PROMOTION_IDV_ALUE = "${channel}_${app_version_name}";' />
            <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" />
        </replaceregexp>

        <antcall target="release" />

        <copy tofile="${gos.path}/${channel}_${app_version_name}.apk" >
            <fileset dir="${basedir}/bin"  includes="xxxxBuilder-release.apk" />
        </copy>

        <delete includeEmptyDirs="true" >
            <fileset dir="${basedir}/bin" includes="**/*" />
        </delete>

    </target>

</project>

结束

mac码农新机攻略

1. 终端与VIM
http://equation85.github.com/blog/customize-terminal-on-mac/

2. 快速安装工具macport
http://www.macports.org/

3. git安装

$ sudo port selfupdate
$ sudo port install git-core

或者参考:http://blog.maxiang.net/install-git-on-mac/63/

必备软件:

  1. QQ
  2. 迅雷
  3. Xcode4
  4. eclipse
  5. jdk1.6
  6. iterm2

 

linux小内存vps性能优化笔记lnmp+jetty

新购入VPS,瑞豪开源, 购买地址 http://rashost.com/usa-vps

我买的是US180 VPS 68元/月

180M内存
1核Intel Xeon CPU
10G硬盘
100M共享带宽
2M保证,不限流量
1个IP地址

整体配置内存偏低,硬盘分割的较少,意味着母鸡的大硬盘可能被其他vps使用,IO比较差。

系统优化

一、创建SWAP (参考新浪张宴文章,原文地址:http://blog.s135.com/post/374/

1、创建SWAP交换空间,也就是windows的虚拟内存。

cd /var/
dd if=/dev/zero of=swapfile bs=1024 count=262144
/sbin/mkswap swapfile
/sbin/swapon swapfile

2、加入引导,即开机的时候挂载SWAP交换空间

vi /etc/fstab

/var/swapfile swap swap defaults 0 0

二、MYSQL优化

1、关闭InnoDB (相比MyISAM,InnoDB会消耗额外的内存用于存储MySql一些索引信息) 关闭的意义在于,小内存VPS的瓶颈还是在于硬件配置,查询不是硬伤。参考文章:http://www.justwinit.cn/post/4785/

先确保表engine都已经改到MyISAM,关闭innodb后,原来的innodb表都将无法操作

alter table [表名] type = 'MyISAM';

关闭innodb

sudo vi /etc/my.cnf

#在[mysqld]后面添加下面代码
default-storage-engine = MyISAM
innodb=OFF
skip-innodb

三、Jetty配置(下面/home/zhufeng/wwwroot_jetty根据自己server调整)

1、下载并解压

wget http://dist.codehaus.org/jetty/jetty-6.1.26/jetty-6.1.26.zip
unzip jetty-6.1.26.zip 
cd jetty-6.1.26

 2、加入启动项

cd /etc/init.d/
sudo ln -s /home/zhufeng/soft/jetty-6.1.26/bin/jetty.sh jetty

 3、修改jetty.sh脚本,添加

vi bin/jetty.sh
#添加
JETTY_HOME="/home/zhufeng/soft/jetty-6.1.26"
JAVA_OPTIONS="-Xms50m -Xmx80m -Xss128k "

4、在contexts目录下加入jetty context配置,参考如下:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">

  <Set name="contextPath">/</Set>
  <Set name="war">/home/zhufeng/wwwroot_jetty/webapps/xkdou.war</Set>
  <Set name="virtualHosts">
        <Array type="java.lang.String">
                <Item>www.xkdou.com</Item>
                <Item>xkdou.com</Item>
        </Array>
  </Set>

</Configure>

 

三、Tomcat优化(不完善)

有个程序是Java的,Java对内存消耗比较大,其实这个小内存VPS不适合跑Java程序,优化如下:

1、修改bin/catalina.sh启动脚本

JAVA_OPTS='-Xms50m -Xmx100m'

 2、修改conf/server.xml

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="10000"
               maxThreads="10"
               redirectPort="8443" />

截取一张优化后,VPS峰值的一张图

Screenshot

 

《禾去禾从》嘉兴南湖旅游区投资拍摄

由南湖旅游区投资拍摄的城市旅游微电影《禾去禾从》12月25日上映。它可谓嘉兴市区景点、美食“大串烧”,南湖、月河、梅湾街、梅花洲等景区都可在电影中找到,南湖菱、粽子、酱鸭等嘉兴美食也在影片中出现

新闻报道:http://jxrb.cnjxol.com/html/2012-12/27/content_603559.htm

我爱我的故乡~

Linux自动备份网站文件和数据库上传FTP

因为A大的关系。导致数据丢失了不少。花了2个晚上写了个脚本备份数据。参考了hostloc上不少前辈的脚本。

为了安全,不使用root作为数据库用户备份数据。用root登录mysql server后,创建一个专门的备份用户 (创建用户名backup密码backup的mysql登录帐号,并且这个帐号的权限只有select和lock权限,即mysqldump备份的时候最低的权限要求)

grant select,lock tables on *.* to 'bakup'@'localhost' identified by 'bakup';
flush privileges ;

ftp空间问题。我使用了godaddy域名赠送的免费10g ftp空间

  1. 登录godaddy,左上角登录
  2. 登录后,点击左上角 my account. 或者打开 https://mya.godaddy.com/default.aspx?ci=60016
  3. 出现一个列表。如下图。选择WEB HOSTING。下面有个free plan 就是赠送的空间路。点申请。大概需要30分钟时间开通

godaddy-free-host

脚本如下:

#!/bin/bash
dbname="wordpress zjxhjs" #需要备份的数据库列表,多个数据库用空格分割
dbuser="backup" #备份用户名
dbpass="*******" #备份用户密码

webs="fredzhu.com demo.fredzhu.com" #需要备份的网站列表,多个网站用空格分割
webspath="/home/xxxxx/wwwroot" #网站列表所在的根路径

output="/home/xxxxx/bak/tmp" # 临时备份的目录,备份文件在这里打包压缩。

ftphost="72.167.232.101" #ftp地址
ftpuser="xxxxx" #ftp用户名
ftppass="xxxxx" #ftp密码
ftpbackup=/vps_backup #ftp上备份目录

#-------------------------don't modify follow---------------------
date=$(date '+%Y%m%d%H')

tmp_db_output=$output/db
tmp_web_output=$output/web
log_file=$output/info.log
backup_file=backup"_"$date.tar
old_backup_file=backup_$(date -d -3day +%Y%m%d%H).tar

echo "---------------------Auto Bakup Script-------------------" >> $log_file

echo "[$date] clean backup" >> $log_file
echo "	clean tmp backup" >> $log_file
rm -rf $tmp_db_output $tmp_web_output
echo "	clean old local backup file:$old_backup_file" >> $log_file
rm -rf $output/../$old_backup_file

echo "[$date]mysql starting bakup" >> $log_file
if [ ! -d $tmp_db_output ];
then
	echo "  create db temp path[$tmp_db_output]" >> $log_file
	mkdir $tmp_db_output
fi

for i in $dbname
do
	echo "  bakup db $i" >> $log_file
	mysqldump -u$dbuser -p$dbpass -hlocalhost $i|gzip > $tmp_db_output/$i"_"$date.sql.gz
done

echo "[$date] web starting bakup" >> $log_file
if [ ! -d $tmp_web_output ];
then
	echo "  create web temp path[$tmp_web_output]" >> $log_file
	mkdir $tmp_web_output
fi

for i in $webs
do
	echo "  bakup web $i" >> $log_file
	tar zcf $tmp_web_output/$i"_"$date.tar.gz -C $webspath $i >> $log_file
done

echo "[$date] package files" >> $log_file
tar cvf $output/$backup_file $output/* >> $log_file

echo "[$date] movie local backup" >> $log_file
if [ -f $output/$backup_file];
then
	echo "  backupfile already exist,del it" >> $log_file
	rm -rf $output/$backup_file	
fi
mv $output/$backup_file $output/../

echo "[$date] upload to ftp servier" >> $log_file
ftp -v -n $ftphost << END
user $ftpuser $ftppass
type binay
passive on
cd $ftpbackup
delete $old_backup_file
put $output/../$backup_file $ftpbackup/$backup_file
bye
END

 

风云主机老板跑路-鄙视A大

风云主机,人称A大。太令人失望了。

通缉链接:http://www.hostloc.com/forum.php?mod=viewthread&tid=165241

windvps-a-laji

windvps-a-laji-2

VPS已经迁移yardvps,目测没有风云的流畅。先试用试用。

项目小结:”逛”频道

guang.mbaobao.com 上线

麦包包2012年新增板块之一

一些好玩的地方:

  1.  流式布局, 感谢@麦包包莴苣 同学努力
  2.  爱搭配页面,采用了@麦包包蜂虎 的标签系统,为精确选包提供保证

一些不足之处:

  1. 开发过程中界面上太多的细节被忽略,最不可饶恕的是,在代码截止前,vm模版里面还有mbaobao.test这种css,没被变量替换。不及时发现,上线后样式丢失就糗大了。
  2. 一开始使用fastjson,中途为了统一其他项目风格,使用gson。但因为对fastjson和gson序列化的区别不是太了解,切换的适合时候有造成了点小问题。
    fastjson依赖method序列化。gosn则是filed序列化。即用gson的适合,get方法里面玩些东西不起啥作用 

感谢 @麦朵儿 的需求,让我有幸开发这个精美的web , 感谢@麦包包-双竹 @麦包包包罗 提供百分点推荐插件 感谢@麦包包-角蒿 提供公共头尾部  , 感谢@麦包包-尖苏 的信任 , 好基友就不写了。

项目小结:会员俱乐部

vip.mbaobao.com 上线

一些好玩的地方:

  1.  非埋点。不埋点理由是因为vip将来会有很多小的任务,遍布麦包包网站各个角落,如果每个角落里都写段代码不说管理,自己看着也变扭。
  2. 向运营的@青木同志学到不少会员等级的东西。

一些不足之处:

  1. 老问题,项目有延期。原计划6月18日上线。一直拖到7月3日。虽然其中更重要的事情填入,但超时已经是事实。
  2. 较大失误一枚。用户等级数据重新刷了2遍。虽然没有损失,但毕竟客户资料比较重要。事先可以想的更齐全一点。
  3. 用户签到增加M值,存在bug。已修正
有成长,有未来