# #

Sinosmond's Blog

技术学习|生活记录|同道交流

在 CentOS 6.2 上安装协作系统

说明

协作系统的开源软件很丰富,常用的有:

CentOS 6.2 的安装和基本配置

选择 Minimal 安装 CentOS 6.2

配置使用官方仓库的国内镜像站点

1
2
3
cd /etc/yum.repos.d/
mv CentOS-Base.repo{,.orig}
wget -O CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo

安装必要的工具和软件

1
2
3
4
5
yum -y install openssh-clients policycoreutils-python
yum -y install yum-plugin-{security,priorities} yum-utils
yum -y install system-config-{firewall-tui,network-tui} ntsysv
yum -y install wget lftp rsync elinks mutt tree vim-enhanced git
yum -y install jpackage-utils

配置主机名、网络参数、本地域名解析

1
2
3
system-config-network-tui
service network restart
vim /etc/hosts

配置第三方仓库

1、安装 release.rpm 并导入仓库公钥

1
2
3
4
5
6
7
cd ;  mkdir RPM ;  cd RPM
wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-7.noarch.rpm
wget http://mirrors.sohu.com/dag/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh epel-release-6-7.noarch.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*

2、配置仓库优先级

  • [base]、[updates]、[extras]
    • priority=1
  • [centosplus]、[contrib]
    • priority=2
  • [epel]
    • priority=10
  • [rpmforge]
    • priority=15

3、配置使用非官方仓库的国内镜像站点

(1) EPEL

1
2
3
4
5
cd /etc/yum.repos.d/
cp epel.repo{,.orig}
sed -i "s/^mirrorlist/#mirrorlist/g" epel.repo
sed -i "s/^#baseurl/baseurl/g" epel.repo
sed -i "s#download.fedoraproject.org/pub/epel#mirrors.sohu.com/fedora-epel#g" epel.repo

(2) RPMForge

1
2
3
4
cd /etc/yum.repos.d/
cp rpmforge.repo{,.orig}
sed -i "s#baseurl = http://apt.sw.be#baseurl = http://mirrors.sohu.com/dag#g" rpmforge.repo
yum makecache

安装 etckeeper 并更新系统

1
2
3
4
5
yum -y install etckeeper tig
etckeeper init
etckeeper commit 'init'
cd /etc
tig
1
2
yum -y update
reboot

安装 LAMP 环境

1
2
3
4
5
6
7
8
9
yum install mysql-server mysqltuner
yum install httpd php php-common php-gd php-mcrypt php-mbstring php-xml php-pear php-pecl-apc php-imap
yum install php-mysql php-pdo phpMyAdmin

chkconfig --level 35 mysqld on
chkconfig --level 35 httpd on

service mysqld start
service httpd start

配置防火墙

1
2
3
system-config-firewall-tui

## 开启 80 端口。

Apache + PHP + Dokuwiki

下载最新的 DokuWIki 稳定版本

EPEL 仓库提供了 Dokuwiki 的 RPM,可以直接使用 yum 安装,但其版本较旧。 下面下载最新的稳定版本。

1
2
3
4
5
6
7
cd /var/www/
wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2012-01-25a.tgz
tar xzf dokuwiki-2012-01-25a.tgz
mv dokuwiki-2012-01-25a dokuwiki
chown root.root dokuwiki
chown apache dokuwiki/conf
chown apache dokuwiki/data -R

编写 Dokuwiki 的 Apache 配置文件

1
vim /etc/httpd/conf.d/dokuwiki.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Alias /wiki /var/www/dokuwiki

<Directory /var/www/dokuwiki>
        order deny,allow
        allow from all

### 当在 Dokuwiki 配置界面的 “高级设置” 部分,将 "使用更整洁的 URL" 设置为 “.htaccess” 
### 或 在 /var/www/dokuwiki/conf/local.php 文件中配置了 $conf['userewrite'] = '1';
### 之后,清除如下 Rewrite* 配置指令的注释符 
#  RewriteEngine on
#  RewriteBase /wiki

#  RewriteCond %{HTTPS} !=on
#  RewriteRule ^lib/exe/xmlrpc.php$      https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

#  RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
#  RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
#  RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
#  RewriteRule ^$                        doku.php  [L]
#  RewriteCond %{REQUEST_FILENAME}       !-f
#  RewriteCond %{REQUEST_FILENAME}       !-d
#  RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
#  RewriteRule ^index.php$               doku.php
</Directory>

<LocationMatch "/wiki/(data|conf|bin|inc)/">
        order allow,deny
        deny from all
        satisfy all
</LocationMatch>

<Files ~ "^([\._]ht|README$|VERSION$|COPYING$)">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
1
service httpd restart

安装常用的 Dokuwiki 插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cd /var/www/dokuwiki/lib/plugins
## 安装 sidebar 插件(这是支持 sidebar 的最简单的方法)
## (您也可以下载支持 sidebar 的模板,但要停用此插件)
git clone git://github.com/chimeric/dokuwiki-plugin-sidebarng.git sidebarng
## 安装 snippets 插件(可使用此插件实现页面模板的功能)
git clone git://github.com/cosmocode/dokuwiki-plugin-snippets.git snippets
## 安装 语法 插件
git clone git://github.com/selfthinker/dokuwiki_plugin_wrap.git wrap
git clone git://github.com/dokufreaks/plugin-comment.git comment
## 安装 功能 插件
git clone git://github.com/dokufreaks/plugin-pagelist.git pagelist
git clone git://github.com/dokufreaks/plugin-include.git include
git clone git://github.com/dokufreaks/plugin-tag.git tag
git clone git://github.com/dokufreaks/plugin-cloud.git cloud
git clone git://github.com/splitbrain/dokuwiki-plugin-captcha.git captcha
git clone git://github.com/dokufreaks/plugin-discussion.git discussion
git clone git://github.com/cosmocode/pagenav.git pagenav
git clone git://github.com/glensc/dokuwiki-plugin-lightboxv2.git lightbox
git clone git://github.com/splitbrain/dokuwiki-plugin-gallery.git gallery
#git clone git://github.com/chimeric/dokuwiki-plugin-wikicalendar.git wikicalendar
#git clone git://github.com/splitbrain/dokuwiki-plugin-jukebox.git jukebox
#git clone git://github.com/splitbrain/dokuwiki-plugin-vshare.git vshare
#git clone git://github.com/gturri/nspages.git nspages
#git clone git://github.com/splitbrain/dokuwiki-plugin-s5.git s5
#git clone git://github.com/splitbrain/dokuwiki-plugin-translation.git translation
#git clone git://github.com/dokufreaks/plugin-blogtng.git blogtng
#git clone git://github.com/dokufreaks/plugin-blog.git blog
#(blog 和 blogng 不能同时使用,当前 blogng 需要 PHP 对 SQLite2 的支持)
## 安装 维护 插件
git clone git://github.com/Imhodad/dokuwiki-plugin-searchstats.git searchstats
git clone git://github.com/cosmocode/clearhistory.git clearhistory
git clone git://github.com/Taggic/orphanmedia.git orphanmedia
git clone git://github.com/Taggic/langdelete.git langdelete
git clone git://github.com/MrBertie/pagequery.git pagequery
git clone git://github.com/danny0838/dw-editx.git editx
#git clone git://github.com/desolat/DokuWiki-Pagemove-Plugin.git pagemove
git clone git://github.com/splitbrain/dokuwiki-plugin-sync.git sync
git clone git://github.com/splitbrain/dokuwiki-plugin-badbehaviour.git badbehaviour

安装和配置 Dokuwiki

  • 您可以使用 Web 界面安装 Dokuwiki,使用浏览器打开 http://IPorFQDN/wiki/install.php 安装 Dokuwiki。
  • 您也可以直接编辑配置文件 /var/www/dokuwiki/conf/local.php 实现 DokuWiki 的配置。如下是一个配置文件例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
/*
 * Dokuwiki's Main Configuration File - Local Settings
 * Auto-generated by config plugin
 * Run for user: osmond
 * Date: Thu, 05 Jul 2012 17:47:40 +0800
 */

$conf['title'] = 'MyWiki';
$conf['lang'] = 'zh';
$conf['license'] = '1';
$conf['youarehere'] = 1;
$conf['typography'] = '0';
$conf['useheading'] = '1';
$conf['useacl'] = 1;
$conf['superuser'] = '@admin';
$conf['disableactions'] = 'register';
$conf['userewrite'] = '1';
$conf['useslash'] = 1;
$conf['hidepages'] = 'snippets|sidebar';
$conf['plugin']['wikicalendar']['timezone'] = 'Asia/Shanghai';
$conf['plugin']['pagelist']['showdate'] = '2';
$conf['plugin']['pagelist']['showtags'] = 1;
$conf['plugin']['tag']['toolbar_icon'] = 1;
$conf['plugin']['s5']['template'] = 'flower';
$conf['plugin']['discussion']['automatic'] = 1;
$conf['plugin']['discussion']['allowguests'] = 0;
$conf['plugin']['discussion']['linkemail'] = 1;
$conf['plugin']['discussion']['useavatar'] = 0;
$conf['plugin']['discussion']['newestfirst'] = 1;
$conf['plugin']['translation']['translations'] = 'en';
$conf['plugin']['translation']['about'] = 'en';

// end auto-generated content

Apache + PHP + MySQL + eGroupware

安装 eGroupware

1
2
3
4
5
6
7
8
9
10
11
12
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/server:eGroupWare/CentOS_6/server:eGroupWare.repo

echo "priority=5" >> server\:eGroupWare.repo

vim rpmforge.repo
# 在 [rpmforge] 段末尾添加如下行
exclude = php-jpgraph
# 保存退出 vi

yum makecache
yum install eGroupware

安装 eGroupware 的注意事项

1、RPM 安装后执行的脚本:/usr/share/egroupware/doc/rpm-build/post_install.php,若您之前已经设置过 MySQL 的 root 口令, 请适当编辑此文件,之后重新执行此脚本。

1
2
3
4
# 运行如下命令可获得更多信息:
/usr/share/egroupware/doc/rpm-build/post_install --help

vim /usr/share/egroupware/doc/rpm-build/post_install.php
1
2
    'db_root'     => 'root',        // mysql root user/pw to create database
    'db_root_pw'  => 'YourPassword',
1
php /usr/share/egroupware/doc/rpm-build/post_install.php

2、安装日志: ~/eGroupware-install.log

3、eGroupware 的 RPM 自动安装了 Apache 的配置文件 /etc/httpd/conf.d/egroupware.conf。 以便可以使用 http://IPorFQDN/egroupware 的 URL 访问。

参考:eGroupware Release notes 1.8

解决项目模块的甘特图中文乱码问题

1、从 Windows 系统上传字体文件

1
2
3
4
5
6
7
8
9
mkdir /usr/share/fonts/truetype/
### 上传字体文件
ls
simfang.ttf  simhei.ttf  simsun.ttc
### 创建链接文件
cd /usr/share/egroupware/projectmanager/inc/ttf-bitstream-vera-1.10
ln /usr/share/fonts/truetype/simsun.ttc
ln /usr/share/fonts/truetype/simhei.ttf
ln /usr/share/fonts/truetype/simfang.ttf

2、修改 jpgraph 的 jpgraph_ttf.inc.php

1
vim /usr/share/jpgraph/src/jpgraph_ttf.inc.php
1
2
3
4
5
6
        /* Chinese fonts */
        FF_SIMSUN  =>  array(
            FS_NORMAL =>'simsun.ttc',
            FS_BOLD =>'simhei.ttf',
            FS_ITALIC =>'simfang.ttf',
            FS_BOLDITALIC =>'simhei.ttf' ),

3、 修改 egroupware 的项目模块的相应代码

1
vim /usr/share/egroupware/projectmanager/inc/class.projectmanager_ganttchart.inc.php
1
2
3
4
找到并注释掉如下两行
// if ($this->gantt_char_encode) $text = preg_replace('/[^\x00-\x7F]/e', '"&#".ord("$0").";"',$text);

// $graph->scale->SetDateLocale(common::setlocale());

CentOS6.2 + JDK6 + Tomcat7 + Nginx1.2 + MySQL5.X

说明

  • 本指南不涉及多机集群。
    • 是一个单机 Web 应用解决方案
    • 也可用于 Java Web 应用软件的测试环境
    • 笔者将其用在基于 DRBD 存储的 KVM 虚拟机里
  • 本指南的尽量使用 YUM 仓库安装所需软件。
    • 方便日后更新
    • 方便日后使用 Puppet 进行管理

安装 CentOS 6.2

分区设置

1
2
3
4
5
6
7
8
9
10
# df -hT
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/mapper/vg0-lv_root
              ext4     50G  3.2G   44G   7% /
tmpfs        tmpfs    3.9G     0  3.9G   0% /dev/shm
/dev/mapper/vg0-lv_backup
              ext4     42G  176M   40G   1% /backup
/dev/sda1     ext4    485M   51M  409M  12% /boot
/dev/mapper/vg0-lv_mysql
              ext4     98G  188M   93G   1% /var/lib/mysql

提示:在 vg0 卷组中应保留一定的剩余空间,以便使用 LVM 快照对 mysql 进行备份。

选择安装组件

选择 Minimal 安装 CentOS 6.2。

配置使用官方仓库的国内镜像站点

方法1:

1
2
3
4
5
# cd /etc/yum.repos.d/
# cp CentOS-Base.repo{,.orig}
# sed -i "s/mirror.centos.org/mirrors.163.com/g" CentOS-Base.repo
# sed -i "s/^mirrorlist/#mirrorlist/g" CentOS-Base.repo
# sed -i "s/^#baseurl/baseurl/g" CentOS-Base.repo

方法2:

参考 163镜像的说明文档 下载 REPO 文件。

1
2
3
# cd /etc/yum.repos.d/
# mv CentOS-Base.repo{,.orig}
# wget -O CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo

安装必要的工具和软件

1
2
3
4
5
# yum -y install openssh-clients policycoreutils-python
# yum -y install yum-plugin-{security,priorities} yum-utils
# yum -y install system-config-{firewall-tui,network-tui} ntsysv
# yum -y install wget lftp rsync elinks mutt tree vim-enhanced git
# yum -y install jpackage-utils

配置主机名、网络参数、本地域名解析

1
2
3
# system-config-network-tui
# service network restart
# vim /etc/hosts

配置第三方仓库

下载仓库的 release.rpm

1
2
3
4
5
6
7
8
# cd
# mkdir RPM
# cd RPM
# wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-7.noarch.rpm
# wget http://mirrors.sohu.com/dag/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# wget http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

安装 release.rpm 并导入仓库公钥

1
2
3
4
5
6
7
# rpm -ivh epel-release-6-7.noarch.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# rpm -ivh remi-release-6.rpm
# rpm -ivh jpackage-release-6-3.jpp6.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*

配置仓库优先级

  • [base]、[updates]、[extras]、[remi]
    • priority=1
  • [centosplus]、[contrib]
    • priority=2
  • [epel]
    • priority=10
  • [rpmforge]
    • priority=15

配置使用非官方仓库的国内镜像站点

1、EPEL

1
2
3
4
5
# cd /etc/yum.repos.d/
# cp epel.repo{,.orig}
# sed -i "s/^mirrorlist/#mirrorlist/g" epel.repo
# sed -i "s/^#baseurl/baseurl/g" epel.repo
# sed -i "s#download.fedoraproject.org/pub/epel#mirrors.sohu.com/fedora-epel#g" epel.repo

2、RPMForge

1
2
3
4
# cd /etc/yum.repos.d/
# cp rpmforge.repo{,.orig}
# sed -i "s#baseurl = http://apt.sw.be#baseurl = http://mirrors.sohu.com/dag#g" rpmforge.repo
# yum makecache

安装 etckeeper 并更新系统

1
2
3
4
5
# yum -y install etckeeper tig
# etckeeper init
# etckeeper commit 'init'
# cd /etc
# tig
1
2
# yum -y update
# reboot

安装配置 JDK6

安装 JDK6

1
2
3
4
5
6
# cd; mkdir jdk6; cd jdk6
## 从 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载最新版
# ll
-rw-r--r--. 1 root root 68826379  5月 17 05:22 jdk-6u33-linux-x64-rpm.bin
# chmod +x jdk-6u33-linux-x64-rpm.bin
# ./jdk-6u33-linux-x64-rpm.bin

配置 JDK6

1、使用 alternatives 配置当前使用的 Java

1
2
3
4
5
6
7
8
9
10
11
12
13
# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_33/jre/bin/java 20000
# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_33/bin/javac 20000
# alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_33/bin/jar 20000

# java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)
# javac -version
javac 1.6.0_33

### 日后安装其他 JDK 后可以重新配置当前的 Java
# alternatives --config java

参考

2、配置环境变量

  • 系统级别 —— /etc/profile
  • 用户级别 —— ~/.bashrc
1
2
3
4
5
#  echo '
> export JAVA_HOME=/usr/java/default
> export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
> export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
> ' >> /etc/profile

安装配置 Tomcat7 和 Ngnix1.2

安装 Tomcat7 和 Ngnix1.2

1
2
3
# yum -y install tomcat7 nginx
# chkconfig --level 345 tomcat7 on 
# chkconfig --level 345 nginx on

参考: 不使用 yum 仓库,直接解包安装 Tomcat7 TODO: Installing Jenkins

配置 Tomcat7

1、配置 Tomcat7 所需的环境变量

1
2
3
4
5
6
7
8
9
10
11
12
# vim /etc/tomcat7/tomcat7.conf

## 在如下行
#JAVA_HOME="/usr/lib/jvm/java"
## 之后添加如下行
JAVA_HOME="/usr/java/default"

## 对于生产环境,根据机器性能适当调整 Java 使用的内存
## 在如下行
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"
## 之后添加如下行
JAVA_OPTS="-Xms2624m -Xmx2624m -Xss2024K -XX:PermSize=528m -XX:MaxPermSize=856m"

2、安装默认 Web 应用案例及文档并测试

1
2
3
4
# yum install tomcat7-webapps tomcat7-docs-webapp
# service tomcat7 restart
# elinks http://localhost:8080
# elinks http://YourIP:8080

3、编辑 server.xml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vim /etc/tomcat7/server.xml

## 对生产环境优化连接
## 找到如下的行
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
## 将其改为:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxHttpHeaderSize="8192"
               useBodyEncodingForURI="true"
               URIEncoding="UTF-8"
               maxThreads="2048" minSpareThreads="100"
               acceptCount="500"
               enableLookups="false" />

4、部署自己的 Webapp 并测试

将自己的应用程序放置在 /var/lib/tomcat7/webapps 目录下替换原来的 ROOT 目录的内容; 或将自己的应用程序的 WAR 文件改名为 ROOT.war 放置在/var/lib/tomcat7/webapps 目录下, 然后编辑 /etc/tomcat7/Catalina/localhost/ROOT.xml,添加如下内容进行部署:

1
<Context path="" docBase="ROOT.war"></Context>

因为需要 tomcat 部署 ROOT 目录,且 jpackage 的 Tomcat7 以 tomcat 用户运行, 所以需要适当调整 webapps 目录的权限:

1
# chown tomcat /var/lib/tomcat7/webapps

重新启动 tomcat 并进行浏览测试。

1
2
3
# service tomcat7 restart
# elinks http://localhost:8080
# elinks http://YourIP:8080

配置 Ngnix

1、配置 proxy 通用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# vim /etc/nginx/conf.d/proxy.conf

proxy_redirect     off;
proxy_set_header   Host $host;
proxy_set_header   X-Real-IP $remote_addr;
proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;

proxy_connect_timeout     60;
proxy_read_timeout        60;
proxy_send_timeout        60;
proxy_buffer_size        32k;
proxy_buffers          4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

2、修改默认主机配置

1
2
3
# cd /etc/nginx/conf.d/
# cp default.conf{,.orig}
# vim default.conf
1
2
3
4
5
6
location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    ## 添加如下行
    proxy_pass  http://127.0.0.1:8080;
 }

3、参数调整和优化

1
# vim /etc/nginx/conf.d/optimization.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
tcp_nodelay on;
tcp_nopush on;

server_tokens off;
server_name_in_redirect off;
server_names_hash_bucket_size 128;

client_header_buffer_size 32k;
client_body_buffer_size 128k;
client_max_body_size 30m;
large_client_header_buffers 4 32k;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_vary on;
gzip_types text/plain application/x-javascript text/css application/xml;

4、重启 Nginx,访问由其代理的 Tomcat 站点

1
2
# service nginx restart
### 使用浏览器测试 http://YourIP 或 http://YourFQDN

安装配置 MySQL 服务

安装 MySQL 服务

1、使用 yum 安装 mysql-server

1
2
3
4
## 选择1. 安装 remi 仓库提供的 MySQL 5.5 (建议)
# yum --enablerepo=remi install mysql-server mysqltuner
## 选择2. 安装官方仓库提供的 MySQL 5.1 
# yum install mysql-server mysqltuner

2、安装后的基本配置

1
2
3
4
5
6
7
8
# chkconfig --level 35 mysqld on
# service mysqld start
## 为 MySQL 的 root 用户设置口令  
# mysqladmin -u root password 'my0wnSecrectpAs5'
## 或运行 MySQL 的安全安装脚本 
# mysql_secure_installation
## 查看服务的参数配置及性能
# mysqltuner

配置 MySQL 服务

参考 /usr/share/mysql/ 目录下提供的配置文件模板:

1
2
3
4
5
6
ll /usr/share/mysql/my-*.cnf
-rw-r--r--. 1 root root  4697  6月  1 23:39 /usr/share/mysql/my-huge.cnf
-rw-r--r--. 1 root root 19779  6月  1 23:39 /usr/share/mysql/my-innodb-heavy-4G.cnf
-rw-r--r--. 1 root root  4671  6月  1 23:39 /usr/share/mysql/my-large.cnf
-rw-r--r--. 1 root root  4682  6月  1 23:39 /usr/share/mysql/my-medium.cnf
-rw-r--r--. 1 root root  2846  6月  1 23:39 /usr/share/mysql/my-small.cnf

选择合适的模板将其复制到 /etc/my.cnf ,并作适当修改。例如:

1
2
3
4
5
# mv /etc/my.cnf{,.orig}
# cp /usr/share/mysql/my-large.cnf /etc/my.cnf
# vi /etc/my.cnf
# service mysqld restart
# mysqltuner

MySQL 的 UTF-8 配置

1
# vi /etc/my.cnf
1
2
3
4
5
6
7
8
9
10
11
12
[client]
…………
#设置mysql客户端的字符集  
default-character-set=utf8
…………

[mysqld]
…………
#设置服务器段的字符集
character-set-server=utf8
collation-server=utf8_general_ci
…………

安装配置 phpMyAdmin

参考: install-phpmyadmin-on-fedora-centos-red-hat-rhel

安装 phpMyAdmin

1
2
3
4
5
6
# yum --enablerepo=remi install php php-fpm php-common php-gd php-mcrypt php-mbstring php-xml php-pecl-apc phpMyAdmin
# chkconfig --level 35  php-fpm on
# service php-fpm start 
# chkconfig --level 35  httpd off
# service httpd stop
# service nginx start

配置 Nginx 和 PHP-FPM

为 phpMyAdmin 配置虚拟主机。

1
# vim /etc/nginx/conf.d/phpMyAdmin.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
       listen   80;
       server_name pma.domain.com;
       access_log /var/log/nginx/phpmyadmin/access.log;
       error_log /var/log/nginx/phpmyadmin/error.log;
       root /usr/share/phpMyAdmin;

       location / {
           index  index.php;
       }

       ## Images and static content is treated different
       location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
           access_log        off;
           expires           360d;
       }

       location ~ /\.ht {
           deny  all;
       }

       location ~ /(libraries|setup/frames|setup/libs) {
           deny all;
           return 404;
       }

       location ~ \.php$ {
           include /etc/nginx/fastcgi_params;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin$fastcgi_script_name;
       }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### 检查配置文件语法的正确性
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/var/log/nginx/phpmyadmin/access.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed
### 为分离的日志创建存放目录
# mkdir /var/log/nginx/phpmyadmin/ 
### 重新检查配置文件语法的正确性
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
### 重启 Nginx
# service nginx restart
### 配置 pma.domain.com 的域名解析后
### 使用浏览器访问 http://pma.domain.com 测试

配置防火墙

1
2
3
#  system-config-firewall-tui

## 开启 80 端口。

或编辑 /etc/sysconfig/iptables 开启 80 端口。

1
# vim /etc/sysconfig/iptables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
1
2
3
# vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重新启动防火墙

1
2
# chkconfig iptables on
# service iptables restart

备份

使用 mylvmbackup 备份 MySQL 数据库

1、安装 mylvmbackup

1
2
3
# yum install perl-Config-IniFiles perl-TimeDate
# wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.13-0.noarch.rpm
# rpm -ivh mylvmbackup-0.13-0.noarch.rpm

2、配置 mylvmbackup

1
# vi /etc/mylvmbackup.conf

修改如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[mysql]
user=root
password=my0wnSecrectpAs5
host=localhost
port=3306
socket=/var/lib/mysql/mysql.sock
mycnf=/etc/my.cnf

[lvm]
vgname=vg0
lvname=lv_mysql
backuplv=
lvsize=50G

[fs]
xfs=0
mountdir=/mnt/mylvmbackup
#backupdir=backupuser@backuphost:/data/backup/mysql
backupdir=/backup/mysql/

[logging]
log_method=both
syslog_remotehost=

创建必要的目录

1
2
3
# mkdir -p /mnt/mylvmbackup/
# mkdir -p /backup/mysql/
# chmod 700 /backup/mysql/

3、手工执行 mylvmbackup

1
2
3
4
# mylvmbackup

# ll /backup/mysql/
-rw-r--r--. 1 root root 571852  6月 24 21:36 backup-20120624_213601_mysql.tar.gz

安排 cron 任务备份重要数据和 Mysql

1
2
3
4
# mkdir /backup/fs
# chmod 700 /backup/fs

# vi /etc/cron.d/backup
1
2
3
4
5
6
7
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

0 1 * * * root mylvmbackup
0 3 * * * root rsync -av /etc /root /var/lib/tomcat7/webapps /root /home /backup/fs/
1
# service crond restart

Digital Toolchain for Book Authors

收集了些 AsciiDOC 的文档和工具链,有空慢慢研究。

在 Windows7 下从头开始安装部署 Octopress

进入 Octopress 的世界

Octopress 简介

  • Octopress 是一款基于 Jekyll 的静态站点生成系统。
    • 使用 Markdown 标记语言书写源文件, 通过 Markdown 解析器转换为 HTML 文件
    • 通过 Octopress 提供的站点模板提供所需的 Web 资产文件 (Javascript、CSS、image 等)
    • 只包含静态网页,无需数据库支持,对系统要求低且迁移方便
    • 以编写程序的方式编制网站,便于实现版本控制
  • Octopress / Jekyll 使用简洁的Ruby框架实现。
    • Octopress 以 rake 任务的形式实现静态站点页面生成, 操作十分简单
    • Octopress 以 rake 任务的形式实现到普通网站和 Github 的发布
    • Octopress 与 Github 完美结合,你无需学习过多的 git 命令语法,使非专业人士的使用成为可能

在 Windows 7 下安装必要的软件

  • Octopress 在 git 中维护,需要安装 git
    • msysgit 查找下载最新版本
    • 当前的最新版本 Git-1.7.9-preview20120201.exe,下载后直接安装
  • Octopress/Jekyll 是 ruby 应用程序,需要安装 ruby
  • ruby 的模块工具 gem 在生成本地模块时可能需要用到编译环境
  • jekyll/Octopress 使用 Python 编写的代码加亮系统 pygments,需要安装 python(可选)
    • ActiveState 下载 最新的 ActivePython-2.7 版
    • 执行安装程序
    • 在 Windows CMD 窗口中执行 easy_install pygments

软件安装后的 Windows 7 环境说明和配置

  • 两种命令行环境
    • Windows 7 自己的 CMD窗口,用于输入 DOS 类命令
    • MINGW/Git Bash 窗口启动了 bash,可以输入 Linux 类命令
  • 环境变量
    • 在 Windows 的 “高级系统设置” 中设置的 环境变量 可以被 MINGW 窗口继承
      • 设置 LANGLC_ALL 两个环境变量,其值均设置为 zh_CN.UTF-8
      • 在 CMD 窗口中测试: echo %LANG% %LC_ALL%
      • 在 MINGW 窗口中测试: echo $LANG $LC_ALL
    • MINGW/Git Bash 窗口启动了 bash,可以使用 ~/.bash_profile 环境设置文件设置环境变量、命令别名等
      • $ echo "export LANG LC_ALL" > ~/.bash_profile
      • $ echo "alias ll='ls -l --color=tty'" >> ~/.bash_profile
      • $ echo "alias ls='ls --color=tty'" >> ~/.bash_profile
      • 注意:若希望~/.bash_profile中的设置生效,请启动 MINGW/Git Bash 窗口,而不是Windows 的 CMD窗口

ruby 环境的初始配置

  • 设置 gem 的更新源
    • gem sources --remove http://rubygems.org/
    • gem sources -a http://ruby.taobao.org/
    • gem sources -l # 请确保只有 http://ruby.taobao.org 一行输出
  • 安装 rdoc 和 bundler
    • gem install rdoc bundler

安装 Octopress

1
2
3
4
5
6
7
8
9
10
11
# 1. 克隆 Octopress
$ mkdir ~/repos
$ cd ~/repos
$ git clone git://github.com/imathis/octopress.git sinosmond.github.com
$ cd ~/repos/sinomsond.github.com
# 2. 修改 Octopress 的 GEM 源
$ vi Gemfile    # 或 notepad Gemfile
将行 : source "http://rubygems.org/"
改为 : source "http://ruby.taobao.org/"
# 3. 安装 Octopress 所需的GEM组件
$ bundle install

生成 Octopress 的模版文件

1
2
3
4
5
6
$ rake install
rake aborted!
You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2.
Using bundle exec may solve this.

(See full trace by running task with --trace)

解决方法

  1. $ bundle update; rake install
  2. 调整 rake
    • 在 WINDOWS 的 CMD 窗口里:修改 rake.bat 文件
    • 在 GIT BASH 里:设置别名
1
2
3
4
5
$ echo "alias rake='bundle exec rake'" >> ~/.bash_profile
$ . ~/.bash_profile
$ alias
alias rake='bundle exec rake'
$ rake install

git 和 github

设置本地仓库和远程仓库的关联

  • 创建 github 账号和仓库
    • 下面的操作假定您注册了 <USERNAME> 的账号
    • 下面的操作假定您创建了 <USERNAME>.github.com 的仓库
    • 本例使用 sinosmond.github.com,请用 <USERNAME>.github.com 替换之
  • 在本地版本库中设置远程版本库的别名
    • $ git remote add myblog git@github.com:sinosmond/sinosmond.github.com.git

配置和使用 Octopress

Octopress 的基本配置

  • 编辑 _config.yml 文件 ,根据您自己的需要修改其值, 参考
  • 若文件中包括中文,则存成 UTF-8 编码格式
1
2
3
4
5
6
7
8
9
10
11
12
# ----------------------- #
#      Main Configs       #
# ----------------------- #
url:                # For rewriting urls for RSS, etc
title:              # Used in the header and title tags
subtitle:           # A description used in the header
author:             # Your name, for RSS, Copyright, Metadata
simple_search:      # Search engine for simple site search
description:        # A default meta description for your site
subscribe_rss:      # Url for your blog's feed, defauts to /atom.xml
subscribe_email:    # Url to subscribe by email (service required)
email:              # Email address for the RSS feed if you want it.

编辑新页面

首次提交到 Github

  1. rake setup_github_pages : 配置 octopress 与 github 的连接
  2. rake generate : 生成静态文件
  3. rake preview : 在本机4000端口生成访问内容
  4. rake deploy : 发布文件到 github

使用 rake 任务管理 BLOG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ rake -T
rake clean                     # Clean out caches: .pygments-cache, .gist-c...
rake copydot[source,dest]      # copy dot files for deployment
rake deploy                    # Default deploy task
rake gen_deploy                # Generate website and deploy
rake generate                  # Generate jekyll site
rake install[theme]            # Initial setup for Octopress: copies the de...
rake integrate                 # Move all stashed posts back into the posts...
rake isolate[filename]         # Move all other posts than the one currentl...
rake list                      # list tasks
rake new_page[filename]        # Create a new page in source/(filename)/ind...
rake new_post[title]           # Begin a new post in source/_posts
rake preview                   # preview the site in a web browser
rake push                      # deploy public directory to github pages
rake rsync                     # Deploy website via rsync
rake set_root_dir[dir]         # Update configurations to support publishin...
rake setup_github_pages[repo]  # Set up _deploy folder and deploy branch fo...
rake update_source[theme]      # Move source to source.old, install source ...
rake update_style[theme]       # Move sass to sass.old, install sass theme ...
rake watch                     # Watch the site and regenerate when it changes

进一步配置 Octopress

  • 配置 社会化网络 应用
  • 选择您中意的网站注册,获得用户名或网络代码,将代码存入 source/_includes/{post,custom} 目录
类型 国外服务 国内服务
Feed烧制 FeedBurner FeedSky
分享到 AddThis JiaThis
微博 Twitter weibo.com
网络书签 Delicious, Google Bookmarks QQ书签, 百度搜藏
网络图床 Flickr yupoo , POCO
网络评论 Disqus 友言

配置举例1:为每一篇BLOG结尾添加 “JiaThis”

1、在 _config.yml 尾部添加如下行

1
2
# JiaThis
jiathis: true

2、在 source/_includes/post/sharing.html 尾部的</div>之前添加如下行

1
2
3
  {% if site.jiathis %}
    {% include post/jiathis.html %}
  {% endif %}

3、创建 source/_includes/post/jiathis.html 文件,将从JiaThis获得的代码放入其中

配置举例2: 配置侧栏

  • _config.yml 中指定显示内容和显示顺序
  • 显示内容
    • 系统默认的显示边栏的内容基于 source/_includes 目录保存为 asides/*.html
    • 用户自定义的边栏内容基于 source/_includes 目录保存为 custom/asides/*.html
  • 显示顺序
    • blog_index_asides 控制BLOG首页的边栏显示
    • post_asides 控制每一个单独的BLOG页面显示时的边栏(对应 rake new_post[]
    • page_asides 控制静态页面显示时的边栏(对应 rake new_page[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
blog_index_asides:
- custom/asides/feeds.html
- asides/recent_posts.html
- custom/asides/recent_comments.html
- custom/asides/opers.html
- asides/github.html
- asides/twitter.html
- asides/delicious.html
- asides/pinboard.html
- asides/googleplus.html
- custom/asides/weibo.html
- custom/asides/copyleft.html

post_asides:
- asides/recent_posts.html
- custom/asides/recent_comments.html
- custom/asides/opers.html
- custom/asides/copyleft.html

page_asides:
- asides/recent_posts.html
- custom/asides/recent_comments.html
- custom/asides/copyleft.html

更新管理源码的仓库分支

1
2
3
git add .
git commit -m "add some changes"
git push myblog source

参考链接

  • http://chen.yanping.me/cn/blog/2011/12/26/octopress-on-windows/
  • http://blog.devtang.com/blog/2012/02/10/setup-blog-based-on-github/
  • http://www.yangzhiping.com/tech/octopress.html
  • http://blog.xupeng.me/2011/12/14/migrate-to-octopress/

过去和现在

过去的选择

痛苦的过去

  • 曾经注册过自己的域名
  • 曾经在国内和国外购买过虚拟主机空间

无奈皆因家中琐事繁多,无暇打理,导致域名被抢注、主机空间因未续费而被停用

如今的选择

  • 使用 github 免费的二级域名,免去因忘记域名续费而被抢注的困扰
  • 使用 github 提供的 300M 免费空间,对于一般情况也足够用了,免去因忘记空间续费而被停用的困扰

  • 使用 git 的版本控制替代 wiki 内置的版本控制,在 github 上 BLOG 即 REPO
  • 使用 markdown 语法替代以前的 DokuWiki 语法书写文档
  • 在 github 上创建个人站点的工具主要是 OctopressJekyll-Bootstrap,因后者似乎还不太成熟遂选择前者