导航:首页 > 编程语言 > pythonlogrotate

pythonlogrotate

发布时间:2022-11-03 18:45:31

‘壹’ python logging.conf是什么类型文件

下面的函数用于配置logging模块,它们位于logging.config模块中。你可以使用这些函数来配置,也可以在logging或是logging.handlers中声明它们来配置。
logging.config.dictConfig(config)
从dictionary中获取logging配置
logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)
从指定的fname的配置文件中读取logging配置文件
该函数可以在应用程序中多次调用
logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)
在指定端口启动socket server并侦听新配置
logging.config.stopListening()
关闭先前正在侦听的server

Configuration file format
被fileConfiguration()所理解的配置文件格式基于configparser功能。配置文件必须包含[loggers], [handlers]和[formatters],它们分别代表日志文件中定义的每种类型的实体。对这3种实体,后面有一个单独的section来定义该实体如何配置。
因此,[loggers]节中名为log01的logger,相关的配置文件细节在[logger_log01]节中定义。类似地,[handlers]节中名为
hand01的handler将在[handler_hand01]节中声明,[formatters]节中的form01将在[formatter_form01]声明。root logger配置必须在[logger_root]节声明。
注意:fileConfig() API比dictConfig()旧,并不包含logging某些方面的功能。建议以后尽量使用dictConfig API。
配置文件的例子如下:
[loggers]
keys=root,log02,log03,log04,log05,log06,log07

[handlers]
keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

[formatters]
keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

root logger必须指定一个级别和handlers列表。示例如下:
[logger_root]
level=NOTSET
handlers=hand01
其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,仅对root logger来说,NOTSET意味着所有的log message
都会记录。对非root的logger,强制要求一些额外信息,比如
[logger_parser]
level=DEBUG
handlers=hand01
propagate=1
qualname=compiler.parser
当一个非root的logger中level被配置为NOSET,它将通过上一级的logger来确定当前logger的有效级别。propagete为1表示message必须传播到上一级logger中,为0表示不传。qualname表示该logger的层级channel名称,这就是说,应用程序使用该名称可以得到该logger对象。
handler类型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等
handler节对应的配置示例如下:
[handler_hand01]
class=StreamHandler
level=NOTSET
formatter=form01
args=(sys.stdout,)

class表示该handler在logging包命名空间中的类名,level表示logger的级别,NONSET表示要记录所有日志。
formatter表示该handler的formatter的键名,假如空白的话,就使用默认值logging._defaultFormatter。假如formatter指定了该名字,必须在对应的section声明。args字段是handler类的构造函数的变量列表,参考相关handler构造函数,或者下面的例子,去观察通常的元素是如何构造的。比如:
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form02
args=('python.log', 'w')

下面是formatter的配置
[formatter_form01]
format=F1 %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter
format字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,为空时使用默认的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的类名,

日志级别如下:
Level Numeric value
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

logging.handlers解读

logging模块中定义了这3个handler:StreamHandler, FileHandler and NullHandler
其它的handler都在logging.handler中定义,一并说明如下:
StreamHandler
该类位于logging包,将logging output输出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的类文件对象
class logging.StreamHandler(stream=None)
假如指定了stream名称,日志将输出到流实例中,否则,日志输出到sys.stderr

FileHandler
该类位于logging包,将logging output输出到磁盘文件中,文件默认无限增长
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
打开指定的文件并记录日志,假如mode没有设置,默认使用'a'表示追加日志到文件中。

NullHandler
该对象什么也不处理

WatchedFileHandler
一个FileHandler实例,监视日志文件的变化,假如文件变化了,它会关闭并重新打开,不建议在Windows下使用
文件的变化可以发生,当应用程序使用newsyslog和logrotate来实现日志文件的回滚时。这个handle是在Unix/linux下面,监视文件是否改变。(一个文件认为改变了,假如它的device厚实inode已经改变),将旧的文件关闭,这个流打开。
class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])
指定的文件被打开,用来记录日志,假如mode未指示,默认使用a

RotatingFileHandler
支持磁盘文件的回滚
class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)
你可以使用 maxBytes和backupCount值去让日志文件在预设大小时回滚。只要日志文件在长度上接近maxBytes时,就会关闭旧日志文件,打开一个新的日志文件,实现回滚。假如maxBytes或backupCount为0,回滚不会发生。假如backupCount非零,系统会备份旧文件,文件名后加‘.1’, ‘.2’ 。比如,日志文件名为app.log,backupCount为5,将会得到app.log, app.log.1, app.log.2, 直到app.log.5这6个文件。写入日志的文件总是app.log,当这个文件填满时,就关闭它并重命名为app.log.1, 假如还存在app.log.1, app.log.2等文件,就逐一改名为app.log.2, app.log.3等等。

TimedRotatingFileHandler
支持在指定时间段内回滚日志
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)
回滚基于when和interval设置,when指定interval的类型,参见下表,大小写不敏感,默认按小时回滚
Value Type of interval
'S' Seconds
'M' Minutes
'H' Hours
'D' Days
'W0'-'W6' Weekday (0=Monday)
'midnight' Roll over at midnight
回滚扩展名使用strftime format %Y-%m-%d_%H-%M-%S或其头部子字符串,当使用基于weekday的回滚时,W0表示周一,……,W6表示周日,interval的值不会用到
backupCount表示备份数,当日志很多时,新日志会覆盖旧日志,删除逻辑使用interval值去决定删除哪些日志文件
utc为true,表示使用UTC时间,否则使用本地时间

SocketHandler
通过网络套接字输出日志,SocketHandler类的基类使用TCP socket
class logging.handlers.SocketHandler(host, port)
向指定地址和端口的远程主机发送日志

DatagramHandler
继承自基类SocketHandler类,使用UDP socket发送日志message
class logging.handlers.DatagramHandler(host, port)

SysLogHandler
发送日志到远程或是本地unix syslog
class logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)

NTEventLogHandler
发送日志消息到本地Windows NT, Windows 2000 or Windows XP event log
class logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')

SMTPHandler
通过SMTP将日志消息发送到email address

MemoryHandler
支持将日志message缓存到内存中,周期性刷新日志到target handler
class logging.handlers.BufferingHandler(capacity)
class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)

HTTPHandler
使用GET或是POST,将日志message发送到web server
class logging.handlers.HTTPHandler(host, url, method='GET')

‘贰’ CentOS系统怎样安装GitLab客户端

环境
Requirements

软件
版本

CentOS 6.6
Python 2.6
Ruby 2.1.5
Git 1.7.10+
Redis 2.0+
MySQL
GitLab 7-8-stable
GitLab Shell v2.6.0
yum源
为了提高软件安装速度,将yum源设置为阿里云开源镜像
$ cd /etc/yum.repos.d
$ wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

必要软件包
$ yum -y install libicu-devel patch gcc-c++ readline-devel zlib-devel libffi-devel openssl-devel make autoconf automake libtool bison libxml2-devel libxslt-devel libyaml-devel zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

安装Git
// 查看当前git版本
$ git --version

// 如果小于1.7.10则先卸载
$ yum remove git

// 下载最新的git并安装
$ wget -O git-src.zip https://github.com/git/git/archive/master.zip
$ unzip git-src.zip
$ cd git-src
$ make prefix=/usr/local all
$ make prefix=/usr/local install
$ ln -fs /usr/local/bin/git* /usr/bin/

安装Ruby环境
$ mkdir /tmp/ruby && cd /tmp/ruby
$ curl --progress ftp://ftp.ruby-lang.org/pub/ruby/ruby-2.1.5.tar.gz | tar xz
$ cd ruby-2.1.5
$ ./configure --disable-install-rdoc
$ make && make install

$ ln -s /usr/local/bin/ruby /usr/bin/ruby
$ ln -s /usr/local/bin/gem /usr/bin/gem
$ ln -s /usr/local/bin/bundle /usr/bin/bundle

// 设置ruby gem源为淘宝
$ gem source -r https://rubygems.org/
$ gem source -a http://ruby.taobao.org/

$ gem install bundler --no-ri --no-rdoc

安装MySQL及初始化GitLab库
$ yum install mysql mysql-devel mysql-server -y
$ /etc/init.d/mysqld start
$ chkconfig mysqld on

// 登录mysql创建gitab的帐号和数据库
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'gitlab';
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_proction` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_proction`.* TO 'gitlab'@'localhost';

//测试是否可以用git帐号登录数据库
sudo -u git -H mysql -u gitlab -p -D gitlabhq_proction

安装Redis
$ yum -y install redis
$ /etc/init.d/redis start
$ chkconfig redis on

添加git帐号并允许sudo
$ useradd --comment 'GitLab' git
$ echo "git ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers

安装GitLab
$ /home/git
$ sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-8-stable gitlab
$ cd /home/git/gitlab
$ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

// 编辑git路径, gitlab的host:port
$ vim config/gitlab.yml
// bin_path: /usr/local/bin/git
// host: localhost
// port: 80

// 给文件夹添加相应的权限
$ chown -R git log/
$ chown -R git tmp/
$ chmod -R u+rwX log/
$ chmod -R u+rwX tmp/

// 创建必要的文件夹,以及复制配置文件
$ sudo -u git -H mkdir /home/git/gitlab-satellites
$ sudo -u git -H mkdir tmp/pids/
$ sudo -u git -H mkdir tmp/sockets/
$ sudo chmod -R u+rwX tmp/pids/
$ sudo chmod -R u+rwX tmp/sockets/
$ sudo -u git -H mkdir public/uploads
$ 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 cp config/database.yml.mysql config/database.yml
$ sudo -u git -H vim config/database.yml
$ vim config/database.yml
// proction:
// username: gitlab
// password: "gitlab"

安装GitLab-Shell
$ cd /home/git
$ sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v2.6.0
$ cd gitlab-shell/
$ sudo -u git -H cp config.yml.example config.yml

// 编辑配置文件, 设置gitlab_url, redis-cli, log-level...
$ vim config.yml
// gitlab_url: "http://localhost/"
// /usr/bin/redis-cli

// 安装git-shell
$ sudo -u git -H ./bin/install

安装需要ruby的gems
$ cd /home/git/gitlab
$ sudo -u git -H bundle install --deployment --without development test postgres aws

初始化数据库(创建GitLab相关表)
$ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=proction

安装启动文件以及日志切割文件
cp lib/support/init.d/gitlab /etc/init.d/gitlab
cp lib/support/init.d/gitlab.default.example /etc/default/gitlab
cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

设置git帐号信息
$ sudo -u git -H git config --global user.name "Troy Zhang"
$ sudo -u git -H git config --global user.email "[email protected]"
$ sudo -u git -H git config --global core.autocrlf input

安装Nginx
$ yum -y install nginx
$ vim /etc/nginx/nginx.conf
user root git;
worker_processes 2;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# GITLAB
# Maintainer: @randx
# App Version: 5.0

upstream gitlab {
server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}

server {
listen *:80 default_server; # e.g., listen 192.168.1.1:80; In most cases *:80 is a good idea
server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com;
server_tokens off; # don't show the version number, a security best practice
root /home/git/gitlab/public;

# Set value of client_max_body_size to at least the value of git.max_size in gitlab.yml
client_max_body_size 5m;

# indivial nginx logs for this gitlab vhost
access_log /var/log/nginx/gitlab_access.log;
error_log /var/log/nginx/gitlab_error.log;

location / {
# serve static files from defined root folder;.
# @gitlab is a named location for the upstream fallback, see below
try_files $uri $uri/index.html $uri.html @gitlab;
}

# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
proxy_redirect off;

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://gitlab;
}
}
}

更改权限,启动nginx
$ nginx -t
$ chown -R git:git /var/lib/nginx/
$ /etc/init.d/nginx start

检测当前环境
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=proction

拉取gitlab静态资源文件
$ sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=proction

启动gitlab
$ /etc/init.d/gitlab start

检测各个组件是否正常工作
$ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=proction

‘叁’ 树莓派(raspbian)安装php和sqlite出现疑似依赖包方面问题

Raspbian是专门用于ARM卡片式计算机RaspberryPi的操作系统,Raspbian系统是Debian7.0/wheezy的定制版本,得益于Debian从7.0/wheezy开始引入的"带硬件浮点加速的ARM架构(armhf)",Debian7.0在树莓派上的运行性能有了很大提升,Raspbian默认使用LXDE桌面,内置C和Python

‘肆’ 如何在nginx上防止恶意的ddos抓取

自己写的网站,不知道为啥总是有很多恶意访问的ip,根本不是正常的用户访问之前也有想过是否可能是运营商的代理服务器出口ip,但是看起来好像也不像,先不管,ban掉再说

那如何来ban呢,规则比较简单,就是超过一个阈值之后,就用下面的iptables命令

iptables -I INPUT -s -j DROP
service iptables save
service iptables restart
那如何统计nginx的访问ip呢,目前来说比较简单就是读取nginx的access.log文件,然后分析一下,如果一天超过阈值,我们就执行上面的命令,ban掉ip。

有个问题是我们需要的是一直监视access.log 文件,而不是读一次,当然可以在每天快结束的时候事后来封住ip,但是这样不能给爬虫嚣张的气焰,所以

我觉得立即封掉是比较OK的。

之前写过一个类似tail读取一个文件的功能,就是打开的时候先定位到文件大小的位置,然后就开始循环读行来处理,这次的处理有点不一样,我是直接使用tail 把那个文件的流定位到我的程序的 sys.stdin ,这样就简单的可以读到所有的流了

tail /var/log/nginx/access.log | python .py
但是nginx的access.log每天都会做一次logrotate,它是怎么做的呢,nginx官网的推荐方式

mv access.log access.log.0
kill -USR1 `cat master.nginx.pid`
sleep 1
gzip access.log.0 # do something with access.log.0
我的vps上面使用的是logrotated来处理的,可以在/etc/logrotate.d/nginx

/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
这里表示的create表示文件会重新创建。其实这样老的文件就没有新数据了,但是因为使用的是tail,也没有eof, 这样直接读的时候会发现 file.readline() 的函数会卡住,导致程序假死,这样程序就不能主动退出了,后面选择了用select来处理,加了一个10秒的超时,从目前的流量来看,基本上每秒都好多的请求,10秒都没有数据就是出问题了。

while sys.stdin in select.select([sys.stdin], [], [], 10)[0]:
然后如果没有select上的话,说明基本上是nginx log文件rotate掉了,所以遇到这样的情况,我就直接跳出程序,然后把程序终结掉。终结掉怎么办呢,本来想在程序里面重新启动一下程序,但是感觉可能不妥,所以使用crontab来处理了,每隔2分钟检查一下,为了防止多次启动就用了flock来防止程序重新启动

*/2 * * * * flock -xn /dev/shm/blocker.lock -c "sh /srv/www/beauty/daemon/nginx_ip_blocker.sh"
这里附上代码

#coding=utf-8
import sys
import re
import os
import urllib
import urllib2
import datetime
import time, os
import logging
import json
import select

logging.basicConfig(level=logging.DEBUG, datefmt='%Y%m%d %H:%M:%S', format='[%(asctime)s] %(message)s')

"""
iptables -I INPUT -s -j DROP
service iptables save
service iptables restart

本脚本主要是用来把恶意访问nginx的ip ban掉的脚本
"""

MAX_IP=7000

def get_date():
return time.strftime("%Y%m%d")

def ban_one_ip(ip):
os.system("iptables -I INPUT -s %s -j DROP ; service iptables save ; service iptables restart"%ip)

def find_ip_and_ban():
for ip in ip_map:
if ip_map.get(ip)>MAX_IP:
print "ban ip, count %s:%s"%(ip_map.get(ip),ip)
ip_map[ip] = 0
ban_one_ip(ip)

today = None
ip_map = {}

def process_log(lines):
global ip_map;
global today;
now = get_date()
if now != today:
today = now
ip_map = {}
for line in lines:
ip = line.split(" ")[0]
count = ip_map.get(ip,0)
count += 1
ip_map[ip]=count;
find_ip_and_ban()

COUNT=50

def main():
brk=False
while True:
tmp = 0;
lines =[]
brk=False
while sys.stdin in select.select([sys.stdin], [], [], 10)[0]:
line = sys.stdin.readline()
if not line:
brk=True
print 'read to eof'
break
lines.append(line)
tmp+=1
if tmp>COUNT:
break
else:
brk=True
print 'read time out'
break
process_log(lines)
print "read lines:%s"%len(lines)
if brk:
break
if brk:
print "break out"

if __name__ == "__main__":
main()

‘伍’ ubuntu logrotate 定时执行时间在哪

先来说下场景,需要写一个爬虫,定时从某个接口地址获取数据,然后存入本地数据库。

因此就需要一个可定时执行的东西,之前在the5fire的知识体系中除了可以在数据库中定时执行某个存储过程或者sql语句,如何在系统中定时执行某个任务还没有概念。

于是,请教了同事。知道在ubuntu中,准确的说是在linux中,有这么东西——crontab,专门用来定制执行任务。简单解说一番,就会用了。

虽然这个东西比较简单,但为了保证知识体系的完整,还是要查查crontab是个什么。

crontab单词的意思是:定时任务。

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。

通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

有了上面的概念,再来看crontab的使用就会清晰些。

既然是系统每分钟都要检查一下,那么必然要有一个检查的依据,如配置文件或者什么的。
还是来看看网络:

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。
crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。
好了,开始使用了。估计有些人从定义就知道他要怎么用了。不过我还是想记录下。

使用步骤:
1、终端运行crontab -e [解释:编辑配置文件]
2、选择你要用的编辑器,一般人会选择vi。
3、此时配置文件已打开,只需要按照他的格式写配置即可。

好吧,简单到我都觉得。。

举个例子:

在我的home目录下有一个python脚本,helloworld.py

#coding:utf-8
print 'hello world by crontab!'
我想要这个脚本在每天的早上7点30执行。
因此这个 任务的crontab配置文件就是:

# m h dom mon dow command
30 7 * * * python /home/the5fire/testcrontab.py >>/home/the5fire/testcrontab.log 2>&1
简单解释下,这个配置的意思就是在每天的7:30用python运行我的家目录下的testcrontab.py文件,并将输出内容输出到testcrontab.log中,后面那个2>&1的意思是把错误的输出也输出到标准输出(2表示错误,2>表示错误输出,&表示等同于,1表示正确),因此如果运行出错也会把错误输出到之前定义的log中。

另外关于合适执行命令还有些要说。

上面只是定时几点执行,那么我怎么设置它按照某一频率执行。比如每分钟执行依次。
对应的配置就是

# m h dom mon dow command
*/1 * * * * python /home/the5fire/testcrontab.py >>/home/the5fire/testcrontab.log 2>&1
再来一个场景,我想在每天的早上六点到八点之间,每隔3分钟执行一次的配置怎么写:

# m h dom mon dow command
*/3 6-8 * * * python /home/the5fire/testcrontab.py >>/home/the5fire/testcrontab.log 2>&1
到此应该都会使用了吧,五个星号表示不同的执行单位(分、时、日、月、年),而那个反斜线表示频率。

‘陆’ iptables 是否可以监控性能

用下面的iptables命令

iptables -I INPUT -s <ip-to-ban> -j DROP
service iptables save
service iptables restart
那如何统计nginx的访问ip呢,目前来说比较简单就是读取nginx的access.log文件,然后分析一下,如果一天超过阈值,我们就执行上面的命令,ban掉ip。

有个问题是我们需要的是一直监视access.log 文件,而不是读一次,当然可以在每天快结束的时候事后来封住ip,但是这样不能给爬虫嚣张的气焰,所以

我觉得立即封掉是比较OK的。

之前写过一个类似tail读取一个文件的功能,就是打开的时候先定位到文件大小的位置,然后就开始循环读行来处理,这次的处理有点不一样,我是直接使用tail 把那个文件的流定位到我的程序的 sys.stdin ,这样就简单的可以读到所有的流了

tail /var/log/nginx/access.log | python <your_python_script>.py
但是nginx的access.log每天都会做一次logrotate,它是怎么做的呢,nginx官网的推荐方式

mv access.log access.log.0
kill -USR1 `cat master.nginx.pid`
sleep 1
gzip access.log.0 # do something with access.log.0
我的vps上面使用的是logrotated来处理的,可以在/etc/logrotate.d/nginx

/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}

‘柒’ 什么是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI

什么是CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性.
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理

1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Mole)

2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
什么是PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令:
1

php-cgi -b 127.0.0.1:9000

PHP-CGI的不足
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
1
2
3
4
5
6
7
8

/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}

--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件

什么是Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。
Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。
最新的lighttpd也没有包含这一块了(http://www.lighttpd.net/search?q=Spawn-FCGI),但可以在以前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下载地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址
下面我们就可以使用Spawn-FCGI来控制php-CGI的FastCGI进程了

1

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI

参数含义如下:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
PHP-FPM与spawn-CGI对比测试
PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载
结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。
Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎��分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。
PHP-FPM与Spawn-FCGI功能比较
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守护php-cgi的进程管理器。

‘捌’ linux centos6 最小化安装有什么包

Centos6.464位最小化安装共计325个包,详情如下:
安装setup-2.8.14-20.el6.noarch
安装filesystem-2.4.30-3.el6.x86_64
安装xml-common-0.6.3-32.el6.noarch
安装cjkuni-fonts-common-0.2.20080216.1-35.el6.noarch
安装iso-codes-3.16-2.el6.noarch
安装basesystem-10.0-4.el6.noarch
安装dmz-cursor-themes-0.4-4.el6.noarch
安装libX11-common-1.5.0-4.el6.noarch
安装ca-certificates-2010.63-3.el6_1.5.noarch
安装ncurses-base-5.7-3.20090208.el6.x86_64
安装tzdata-2012j-1.el6.noarch
安装glibc-common-2.12-1.107.el6.x86_64
安装nss-softokn-freebl-3.12.9-11.el6.x86_64
安装glibc-2.12-1.107.el6.x86_64
安装ncurses-libs-5.7-3.20090208.el6.x86_64
安装bash-4.1.2-14.el6.x86_64
安装libattr-2.4.44-7.el6.x86_64
安装libcap-2.16-5.5.el6.x86_64
安装zlib-1.2.3-29.el6.x86_64
安装dbus-libs-1.2.24-7.el6_3.x86_64
安装freetype-2.3.11-6.el6_2.9.x86_64
安装info-4.13a-8.el6.x86_64
安装audit-libs-2.2-2.el6.x86_64
安装popt-1.13-7.el6.x86_64
安装chkconfig-1.3.49.3-2.el6.x86_64
安装libxml2-2.7.6-8.el6_3.4.x86_64
安装libcom_err-1.41.12-14.el6.x86_64
安装libacl-2.2.49-6.el6.x86_64
安装db4-4.7.25-17.el6.x86_64
安装bzip2-libs-1.0.5-7.el6_0.x86_64
安装nspr-4.9.2-1.el6.x86_64
安装libstdc++-4.4.7-3.el6.x86_64
安装libICE-1.0.6-1.el6.x86_64
安装nss-util-3.14.0.0-2.el6.x86_64
安装libsepol-2.0.41-4.el6.x86_64
安装libselinux-2.0.94-5.3.el6.x86_64
安装glib2-2.22.5-7.el6.x86_64
安装gamin-0.1.10-9.el6.x86_64
安装atk-1.28.0-2.el6.x86_64
安装sed-4.2.1-10.el6.x86_64
安装shadow-utils-4.1.4.2-13.el6.x86_64
安装expat-2.0.1-11.el6_2.x86_64
安装dbus-glib-0.86-5.el6.x86_64
安装libogg-1.1.4-2.1.el6.x86_64
安装gawk-3.1.7-10.el6.x86_64
安装readline-6.0-4.el6.x86_64
安装sqlite-3.6.20-1.el6.x86_64
安装file-libs-5.04-15.el6.x86_64
安装libpng-1.2.49-1.el6_2.x86_64
安装libuuid-2.17.2-12.9.el6.x86_64
安装libSM-1.2.1-2.el6.x86_64
安装libgpg-error-1.7-4.el6.x86_64
安装libjpeg-turbo-1.2.1-1.el6.x86_64
安装libart_lgpl-2.3.20-5.1.el6.x86_64
安装pkgconfig-0.23-9.1.el6.x86_64
安装libgcrypt-1.4.5-9.el6_2.2.x86_64
安装libblkid-2.17.2-12.9.el6.x86_64
安装lua-5.1.4-4.1.el6.x86_64
安装libvorbis-1.2.3-4.el6_2.1.x86_64
安装pcre-7.8-6.el6.x86_64
安装grep-2.6.3-3.el6.x86_64
安装cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64
安装libidn-1.18-2.el6.x86_64
安装which-2.19-6.el6.x86_64
安装avahi-libs-0.6.25-12.el6.x86_64
安装tcp_wrappers-libs-7.6-57.el6.x86_64
安装xz-libs-4.999.9-0.3.beta.20091007git.el6.x86_64
安装elfutils-libelf-0.152-1.el6.x86_64
安装libXau-1.0.6-4.el6.x86_64
安装libxcb-1.8.1-1.el6.x86_64
安装libX11-1.5.0-4.el6.x86_64
安装libXext-1.3.1-2.el6.x86_64
安装libXrender-0.9.7-2.el6.x86_64
安装libXi-1.6.1-3.el6.x86_64
安装libXfixes-5.0-3.el6.x86_64
安装libXcursor-1.1.13-2.el6.x86_64
安装libXrandr-1.4.0-1.el6.x86_64
安装libXinerama-1.1.2-2.el6.x86_64
安装libXt-1.1.3-1.el6.x86_64
安装libXmu-1.1.1-2.el6.x86_64
安装libtiff-3.9.4-9.el6_3.x86_64
安装libutempter-1.1.5-4.1.el6.x86_64
安装psmisc-22.6-15.el6_0.1.x86_64
安装fintils-4.4.2-6.el6.x86_64
安装libselinux-utils-2.0.94-5.3.el6.x86_64
安装checkpolicy-2.0.22-1.el6.x86_64
安装bzip2-1.0.5-7.el6_0.x86_64
安装cpio-2.10-11.el6_3.x86_64
安装libcap-ng-0.6.4-3.el6_0.1.x86_64
安装dbus-1.2.24-7.el6_3.x86_64
安装ibus-libs-1.3.4-6.el6.x86_64
安装sysvinit-tools-2.87-4.dsf.el6.x86_64
安装pth-2.0.7-9.3.el6.x86_64
安装libtasn1-2.3-3.el6_2.1.x86_64
安装libtdb-1.2.10-1.el6.x86_64
安装libtool-ltdl-2.2.6-15.5.el6.x86_64
安装gnutls-2.8.5-10.el6.x86_64
安装dbus-x11-1.2.24-7.el6_3.x86_64
安装hal-libs-0.5.14-11.el6.x86_64
安装xorg-x11-xauth-1.0.2-7.1.el6.x86_64
安装libXdamage-1.1.3-4.el6.x86_64
安装libXtst-1.2.1-2.el6.x86_64
安装libXres-1.0.6-2.el6.x86_64
安装libXxf86vm-1.1.2-2.el6.x86_64
安装libXxf86misc-1.0.3-4.el6.x86_64
安装libXcomposite-0.4.3-4.el6.x86_64
安装xcb-util-0.3.6-1.el6.x86_64
安装startup-notification-0.10-2.1.el6.x86_64
安装avahi-glib-0.6.25-12.el6.x86_64
安装gstreamer-tools-0.10.29-1.el6.x86_64
安装gstreamer-0.10.29-1.el6.x86_64
安装grubby-7.0.15-3.el6.x86_64
安装shared-mime-info-0.70-4.el6.x86_64
安装jasper-libs-1.900.1-15.el6_1.1.x86_64
安装file-5.04-15.el6.x86_64
安装nss-softokn-3.12.9-11.el6.x86_64
安装flac-1.2.1-6.1.el6.x86_64
安装eggdbus-0.6-3.el6.x86_64
安装MAKEDEV-3.24-6.el6.x86_64
安装desktop-file-utils-0.15-9.el6.x86_64
安装libcroco-0.6.2-5.el6.x86_64
安装libIDL-0.8.13-2.1.el6.x86_64
安装ORBit2-2.14.17-3.2.el6_3.x86_64
安装libbonobo-2.24.2-5.el6.x86_64
安装vim-minimal-7.2.411-1.8.el6.x86_64
安装procps-3.2.8-25.el6.x86_64
安装net-tools-1.60-110.el6_2.x86_64
安装tar-1.23-11.el6.x86_64
安装gmp-4.3.1-7.el6_2.2.x86_64
安装libusb-0.1.12-23.el6.x86_64
安装db4-utils-4.7.25-17.el6.x86_64
安装libss-1.41.12-14.el6.x86_64
安装e2fsprogs-libs-1.41.12-14.el6.x86_64
安装pinentry-0.7.6-6.el6.x86_64
安装diffutils-2.8.1-28.el6.x86_64
安装binutils-2.20.51.0.2-5.36.el6.x86_64
安装m4-1.4.13-5.el6.x86_64
安装libnih-1.0.1-7.el6.x86_64
安装upstart-0.6.5-12.el6.x86_64
安装dash-0.5.5.1-4.el6.x86_64
安装ncurses-5.7-3.20090208.el6.x86_64
安装groff-1.18.1.4-21.el6.x86_64
安装less-436-10.el6.x86_64
安装coreutils-libs-8.4-19.el6.x86_64
安装gzip-1.3.12-18.el6.x86_64
安装cracklib-2.8.16-4.el6.x86_64
安装cracklib-dicts-2.8.16-4.el6.x86_64
安装coreutils-8.4-19.el6.x86_64
安装pam-1.1.1-13.el6.x86_64
安装fontconfig-2.8.0-3.el6.x86_64
安装mole-init-tools-3.9-21.el6.x86_64
安装hwdata-0.233-7.9.el6.noarch
安装ConsoleKit-libs-0.4.1-3.el6.x86_64
安装polkit-0.96-2.el6_0.1.x86_64
安装ConsoleKit-0.4.1-3.el6.x86_64
安装redhat-logos-60.0.14-12.el6.centos.noarch
安装plymouth-scripts-0.8.3-27.el6.centos.x86_64
安装hicolor-icon-theme-0.11-1.1.el6.noarch
安装alsa-lib-1.0.22-3.el6.x86_64
安装libsndfile-1.0.20-5.el6.x86_64
安装ConsoleKit-x11-0.4.1-3.el6.x86_64
安装libpciaccess-0.13.1-2.el6.x86_64
安装libXft-2.3.1-2.el6.x86_64
安装logrotate-3.7.8-16.el6.x86_64
安装nss-3.14.0.0-12.el6.x86_64
安装nss-sysinit-3.14.0.0-12.el6.x86_64
安装nss-tools-3.14.0.0-12.el6.x86_64
安装openldap-2.4.23-31.el6.x86_64
安装libuser-0.56.13-5.el6.x86_64
安装sgml-common-0.6.3-32.el6.noarch
安装GConf2-2.28.0-6.el6.x86_64
安装libgsf-1.14.15-5.el6.x86_64
安装sound-theme-freedesktop-0.7-3.el6.noarch
安装pciutils-libs-3.1.10-2.el6.x86_64
安装ethtool-3.5-1.el6.x86_64
安装mingetty-1.08-5.el6.x86_64
安装keyutils-libs-1.4-4.el6.x86_64
安装krb5-libs-1.10.3-10.el6.x86_64
安装openssl-1.0.0-27.el6.x86_64
安装gnome-vfs2-2.24.2-6.el6.x86_64
安装libssh2-1.4.2-1.el6.x86_64
安装libcurl-7.19.7-35.el6.x86_64
安装curl-7.19.7-35.el6.x86_64
安装rpm-libs-4.8.0-32.el6.x86_64
安装rpm-4.8.0-32.el6.x86_64
安装gnupg2-2.0.14-4.el6.x86_64
安装gpgme-1.1.8-3.el6.x86_64
安装mysql-libs-5.1.66-2.el6_3.x86_64
安装fipscheck-lib-1.2.0-7.el6.x86_64
安装fipscheck-1.2.0-7.el6.x86_64
安装cups-libs-1.4.2-48.el6_3.3.x86_64
安装ustr-1.0.4-9.1.el6.x86_64
安装libsemanage-2.0.43-4.2.el6.x86_64
安装gdbm-1.8.0-36.el6.x86_64
安装libffi-3.0.5-3.2.el6.x86_64
安装python-libs-2.6.6-36.el6.x86_64

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

安装步骤有:

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 adser --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_proction` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `gitlabhq_proction`.* 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=proction
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=proction

加入启动项:

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=proction

编译附件:

sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=proction

启动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=proction

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

最后配置一下邮件,修改/home/git/gitlab/config/gitlab.yml,里面的“email_from:”为一个有效的email地址;修改/home/git/gitlab/config/environments/proction.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

阅读全文

与pythonlogrotate相关的资料

热点内容
微盟程序员老婆 浏览:928
intellij创建java 浏览:110
java连接odbc 浏览:38
启动修复无法修复电脑命令提示符 浏览:359
手机编程是什么 浏览:97
山东移动程序员 浏览:163
苏州java程序员培训学校 浏览:476
单片机液晶驱动 浏览:854
魔拆app里能拆到什么 浏览:130
新预算法的立法理念 浏览:144
wdcpphp的路径 浏览:134
单片机p0口电阻 浏览:926
浏览器中调短信文件夹 浏览:594
五菱宏光空调压缩机 浏览:68
为什么app占用几百兆 浏览:680
自动解压失败叫我联系客服 浏览:484
易语言新手源码 浏览:456
oa服务器必须有固定ip地址 浏览:45
传奇源码分析是什么 浏览:269
解放压缩机支架 浏览:255