标签 centos 下的文章

今天Git服务器已经快不行了,空间又要满了,而且常常502,另外两台服务器也快到期了,那两台还是去年创业的时候买的,后来一直也没有怎么使用,所以想想,还是都不要了吧,今天就买了一台新的服务器,配置没有以前的高,但是足够一年的使用了,以前用的都是 CentOS 6.5,CentOS 7 也已经出来很长一段时间了,QCloud也有这个版本的镜像,反正,迟早是要升级到新版本的,所以,这次就索性直接使用了 CentOS 7,但是,以前熟悉的工具、命令似乎都没有用了,所以,一切又得重新来,自己不是一个善于记住事情的人,所以,Get一点新技能,就把这点记下来吧。

更新与升级

每一次登录服务器,尤其是要安装新软件的时候,总是习惯于先更新一下,我是一个一直使用最新版本的软件的人。

yum update

或者使用

yum upgrade

挂载数据盘

这是要做的第二件事情了,系统安装好了之后,默认是只有一个系统盘的,就20G,我们需要先将数据盘挂载至服务器上。

# 创建分区
fdisk /dev/vdb
# 格式化分区
mkfs.ext3 /dev/vdb1
# 挂载分区
echo '/dev/vdb1 /home ext3 defaults 0 0' >> /etc/fstab
mount -a

个性化设置

设置主机名

主机名是肯定需要设置的,要不然,服务器一多,登录上了之后,都不知道哪个是哪个了。

hostnamectl

hostnamectl 命令用于管理系统的主机名,这里面需要知道几个概念,在CentOS或RHEL中,有三种定义的主机名:

  1. 静态的(static):“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名;
  2. 瞬态的(transient):“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配;
  3. 灵活的(pretty)

静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则,“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如 Tao's Computer)。

[root@vicpan ~]# hostnamectl status
   Static hostname: onmr.com
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 3f57f163dfaf1ec9ed891518d1d2fafe
           Boot ID: a7316ea3bd284d6da2ecc6cfc3bfe959
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-123.el7.x86_64
      Architecture: x86_64

hostnamectl status 可以查看系统的主机名状态,如果想只查看静态、瞬态或灵活主机名,分别使用“--static”,“--transient”或“--pretty”选项。

hostnamectl set-hostname onmr.com

hostnamectl set-hostname 命令可以设置主机名,若不特别指定,该命令会修改所有主机名,一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你需要手动更新/etc/hosts。

若要指定某一种主机名,则需要添加相应的参数:

hostnamectl --static set-hostname <host-name>

设置 DNS 服务器

vi /etc/resolv.conf  

nameserver 10.138.224.65
nameserver 10.182.20.26
nameserver 10.182.24.12
options timeout:1 rotate 

安装 Nginx + PHP-FPM 环境

安装 Nginx

安装官方的 Red Hat/CentOS 预编译包,为了追加 nginx 的 yum 仓库,需要创建一个文件 /etc/yum.repos.d/nginx.repo,并将下面的其中一个内容复制进去:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
priority=10
enabled=1

本文章将展示如何安装一个提供 ISPConfig 3 的基于 CentOS 7 的服务器,ISPConfig 3是一个网页服务器控制面板工具,通过它,你可以通过网页浏览器管理以下这些软件:nginx 网页服务器、postfix 邮件服务器、mysql 数据库服务器、BIND 域名解析服务器、pureFTPd 文件服务器、SpamAssassinClamAVMailman等,从 ISPConfig 3 开始,其已经可以完美支持Nginx服务器了。

第一步:下载 CentOS 7 安装镜像

你可以通过下面这两个链接地址下载该镜像:

我你爱我吗的是最小安装版,然后按自己的需要安装。

第二步:安装说明

我是在我的 MacbookPro 上面跑Parallels Desktop 虚拟机安装的 CentOS 7,其IP地址为:10.211.55.6,使用域名 centos7.localserver.com 域作为主机名。

第三步:安装编辑器编辑 /etc/hosts

若你喜欢使用 nano 编辑器,使用以下命令安装:

yum -y install nano

安装 wget 工具:

yum -y install wget

我使用的是 vi ,所以就不安装其它的编辑器了,在以下的所有步骤里面,我也将全部都使用 vi 编辑文件。

设定 /etc/hosts

vi /etc/hosts

内容如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.211.55.6 centos7.localserver.com
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

设置 hostnamecentos7.localserver.com

echo 'centos7.localserver.com' > /etc/hostname

第四步:安装并配置一些基本的网络防火墙管理软件

若您只想使用CentOS默认的防火墙软件,则可以直接跳过此步。

关闭并禁用 CentOS 默认的 Firewall 软件:

systemctl stop firewalld.service
systemctl disable firewalld.service

运行结果如下:

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

使用以下命令查看当前的 Firewall 状态:

firewall-cmd --state

运行结果如下:

[root@localhost ~]# firewall-cmd --state
not running

接着安装新的软件:

yum -y install net-tools NetworkManager-tui

第五步:关闭 SELinux

Selinux 是CentOS的一个安装性扩展,我个人感觉一般都用不着该扩展,启用他,还会给我们系统的使用和管理带来很多麻烦的事儿,所以,我一般都直接关闭该扩展。关闭该扩展只需要将 /etc/selinux/config 中的 SELINUX 项设置为 disabled 即可:

vi /etc/selinux/config

作如下设定:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

保存修改之后,还必须重启一次系统:

reboot

升级 CentOS 6.5 上的 OpenSSH 至 6.8p1 版:

mv /etc/ssh /etc/ssh.bak

yum -y install gcc* make perl pam pam-devel zlib zlib-devel openssl-devel

wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz

tar zxvf openssh-6.8p1.tar.gz

cd openssh-6.8p1

yum -y remove systemtap-client git openssh

vi version.h

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords

make && make install && make clean

cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
service sshd start

yum install systemtap-client git

本文所讲解的是我本人在安装配置 CentOS 7 桌面办公环境时所得到的经验,若您不需要安装配置 CentOS 7 的桌面办公环境,那么本文对您而言,没有任何用处,若您需要配置,则您需要先载最新版本的 CentOS 7 安装DVD。

基本的系统安装

插入安装光盘或者安装U盘之后,直接选择 Install CentOS 7 即可。

CentOS 7 Desktop.png

选择系统语言:

CentOS 7 Desktop选取系统语言.png

在安装信息摘要面板中,如下图所示,绝大多数配置系统已经自动完成,但是我们需要设置以下几点:

  1. 软件选择
  2. 安装位置
  3. 网络和主机名

CentOS 7 Desktop本地化.png

系统默认的软件选择为最小安装,此安装会不带桌面,同样的肯定不会安装桌面软件了,若要做为桌面系统使用,您需要选择 GNOME 桌面 或者 KDE Plasma Workspaces 或者 开发及生成工作站,我在此处选择的是 开发及生成工作站

CentOS 7 Desktop 软件选择.png

同时安装了以下软件:

  • 附加开发
  • 兼容性程序库
  • 开发工具
  • 电子邮件服务器
  • EMacs
  • FTP 服务器
  • 图形生成工具
  • 硬件监控工具
  • 传统X Windows 系统的兼容性
  • 办公套件和生产率
  • 平台开发
  • 科技写作

其它的如PHP、MariaDB、PostgresQL等软件我将在系统安装完成之后再安装最新版本的,选择完成之后,点击左上角的 完成 按钮,接着选择安装位置。

CentOS 7 Desktop 安装位置.png

我使用的是整块磁盘,然后让其自动分区。

点击可以点击右下角的开始安装按钮,即可开始安装系统。如下图所示:

CentOS 7 Desktop 开始安装.png

在系统的安装过程中,您还可以设置 root 帐户的密码以及创建一个新的用户,如下图所示:

CentOS 7 Desktop 设置 Root 帐户密码.png

CentOS 7 Desktop 创建新用户.png

安装完成之后,点击右下角的重启按钮,重新引导系统。

CentOS 7 Desktop 重启.png

重新启动之后,系统会要求您接受许可协议,如下图所示:

CentOS 7 Desktop 许可协议.png

CentOS 7 Desktop 阅读并接受许可协议.png

接受之后,点击页面右下角的 完成配置,接着进行 KDump 配置,我们使用自动的即可。

CentOS 7 Desktop Kdump.png

完成之后,即可登录系统了,如下图所示,我们在前面创建的用户就可以在此处登录了,同样的,你也可以使用 root 帐户登录,在此处,我使用我在前面创建的 pantao 这个帐户登录。

CentOS 7 Desktop Login.png

CentOS 7 Desktop Login As.png

登录完成之后,系统会要求我们完成 Gnome-initial-setup ,即 `GNOME 初始化配置,首先选择语言:

CentOS 7 Desktop Set Language.png

在此处我们选择了简体中文,然后设置输入源,系统默认仅提供了拼音输入法,在此处注意,若我们选择任何一个输入源,那么在 上一项 的这个按钮上方的键盘图标旁边将会出现一个新的图标,此新图片即可用于对您选中的输入源进行更详细的配置。

CentOS 7 Desktop Input Source.png

完成输入源配置之后,我们即可以开始使用 CentOS Linux 系统了。

CentOS 7 Desktop Start Using CentOS Linux.png

办公软件安装

安装完成基本系统之后,接下来我们安装 办公软件,包括但不限于下面这些:

  • 图形图像处理

    • GIMP - 用于替换我们在 OS X 或者 Windows 系统中的 Photoshop 软件;
    • Shotwell Photo Manager - 可应用于 GNOME 桌面环境的全功能的个人照片管理软件,可替换 Photoshop Lightroom
    • Pencil - 替换 Windows 系统下的 VISIO 的应用;
    • Inkscape - 开源的矢量图绘制工具;
  • 网络应用

    • FirefoxOperaGoogle Chrome - 网页浏览器;
    • Flash Player - Flash 播放器;
    • FileZilla - 多进程的 FTP 客户端;
    • ThunderBird - 邮箱与新闻客户端;
    • Evolution
    • Transmission BitTorrent Client - BT下载客户端;
    • Pidgin - Pidgin 协议插件,可联系至 MS Office Communicator;
  • 办公工具

    • LibreOffice Writer - 替换 Microsoft Word;
    • LibreOffice Calc - 替换 Microsoft Excel;
    • Document Viewer - PDF阅读工具;
    • Scribus - 开源桌面版发布工具(DTP);
  • 声音与视频

    • Amarok - 音频播放工具
    • Totem - 媒体播放工具(视频与音频)
    • Brasero - CD/DVD 烧录工具
    • K3B - CD/DVD 烧录工具
  • 程序开发工具

    • Sublime Text - 优化编辑神器
    • Bluefish - 文本编辑器
    • VirtualBox - Oracle 推出的虚拟化软件,可以让你将 Windows 系统运行在虚拟环境下,这样,在必要的时候,你还可以使用一些只能在Windows 下面使用的软件。

安装扩展软件源

rpm -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

更新软件仓库

yum -y update

安装必要的库

yum install glibc gcc gcc-c++ autoconf automake libtool git make nasm pkgconfig
yum install SDL-devel a52dec a52dec-devel alsa-lib-devel faac faac-devel faad2 faad2-devel
yum install freetype-devel giflib gsm gsm-devel imlib2 imlib2-devel lame lame-devel libICE-devel libSM-devel libX11-devel
yum install libXau-devel libXdmcp-devel libXext-devel libXrandr-devel libXrender-devel libXt-devel
yum install libogg libvorbis vorbis-tools mesa-libGL-devel mesa-libGLU-devel xorg-x11-proto-devel zlib-devel
yum install libtheora theora-tools
yum install ncurses-devel
yum install libdc1394 libdc1394-devel
yum install amrnb-devel amrwb-devel opencore-amr-devel 

安装 xvid

cd /opt
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar xzvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure --prefix="$HOME/ffmpeg_build"
make
make install

安装 LibOgg

cd /opt
wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar xzvf libogg-1.3.1.tar.gz
cd libogg-1.3.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

安装 Libvorbis

cd /opt
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
tar xzvf libvorbis-1.3.4.tar.gz
cd libvorbis-1.3.4
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
make
make install

安装 Libtheora

cd /opt
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
tar xzvf libtheora-1.1.1.tar.gz
cd libtheora-1.1.1
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-examples --disable-shared --disable-sdltest --disable-vorbistest
make
make install

安装 Aacenc

cd /opt
wget http://downloads.sourceforge.net/opencore-amr/vo-aacenc-0.1.2.tar.gz
tar xzvf vo-aacenc-0.1.2.tar.gz
cd vo-aacenc-0.1.2
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

安装 Yasm

yum remove yasm
cd /opt
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzfv yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
export "PATH=$PATH:$HOME/bin" 

安装 Libvpx

cd /opt
git clone http://git.chromium.org/webm/libvpx.git
cd libvpx
git checkout tags/v.1.3.0
./configure --prefix="$HOME/ffmpeg_build" --disable-examples
make
make install

安装 X264

cd /opt
git clone git://git.videolan.org/x264.git
cd x264
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static 
make
make install

配置库

export LD_LIBRARY_PATH=/usr/local/lib/
echo /usr/local/lib >> /etc/ld.so.conf.d/custom-libs.conf
ldconfig

编译 FFmpeg(configure 应该在一行中)

cd /opt
git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout release/2.2
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
export PKG_CONFIG_PATH
./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs=-ldl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvo-aacenc --enable-libxvid --disable-ffplay --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads
make
make install

测试

ffmpeg -i YosemiteNationalParkPresents.mp4 YosemiteNationalParkPresents.webm

Movable Type 的静态发布还是我见过的可以静态发布的内容管理系统中做得最好的,所以,虽然现在Movable Type已经是收费软件了,但是我还是想玩这个,毕竟有很多东西是可以学习的,要下载最新版本的 Movable Type,你需要登录 MovableType 日文站,现在据我所知道的,还只有日文站是可以免费下载的。

下载Movable Type

点击这里 打开下载页面下载最新版本的 Movable Type,日文请自行翻译。

上传程序文件至服务器

我将会把Movable Type系统安装至 mt.oakeric.com 域下,根据我的服务器设置我将上传该文件至服务器,然后解压至 /home/www/mt.oakeric.com 目录下。

安装必要的库

以下几个库是必须安装的

  • FCGI
  • CGI
  • Image::Size
  • File::Spec (Version 0.8 or higher)
  • CGI::Cookie

以下库必须至少安装一个

  • DBI (version 1.21 or higher)
  • DBD::mysql (version 2.9005 or higher)
  • DBD::Oracle (version 1.15 or higher)
  • DBD::ODBC (version 1.13 or higher)
  • DBD::SQLite - Deprecated in MT5
  • DBD::SQLite2 - Deprecated in MT5
  • DBD::Pg (version >= 1.32) - Deprecated in MT5

以下的库是可选安装的

  • Archive::Tar
  • Archive::Zip
  • Crypt::DSA
  • Crypt::SSLeay
  • Digest::MD5
  • Digest::SHA1
  • File::Temp
  • GD
  • HTML::Entities
  • HTML::Parser
  • Image::Magick
  • IO::Compress::Gzip
  • IO::Socket::SSL - New in MT5
  • IO::Uncompress::Gunzip
  • IPC::Run
  • List::Util
  • LWP::UserAgent
  • Mail::Sendmail
  • MIME::Base64
  • Net::LDAP - New in MT5
  • Safe
  • Scalar::Util
  • SOAP::Lite (Version 5.0 or higher)
  • Storable
  • Text::Balanced (Necessary for searches within a blog)
  • XML::Atom
  • XML::Parser
  • XML::SAX

Fastcgi Wrapper

编辑 /usr/bin/fastcgi-wrapper.pl 文件,复制以下代码即可

#!/usr/bin/perl

use FCGI;
use Socket;
use POSIX qw(setsid);

require 'syscall.ph';

&daemonize;

#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; }; 
eval q{exit}; 
if ($@) { 
    exit unless $@ =~ /^fakeexit/; 
};

&main;

sub daemonize() {
    chdir '/'                 or die "Can't chdir to /: $!";
    defined(my $pid = fork)   or die "Can't fork: $!";
    exit if $pid;
    setsid                    or die "Can't start a new session: $!";
    umask 0;
}

sub main {
    #$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets
    $socket = FCGI::OpenSocket( "/var/run/perl-fastcgi.sock", 10 ); #use IP sockets
    $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
    if ($request) { request_loop()};
            FCGI::CloseSocket( $socket );
}

sub request_loop {
    while( $request->Accept() >= 0 ) {

       #processing any STDIN input from WebServer (for CGI-POST actions)
       $stdin_passthrough ='';
       $req_len = 0 + $req_params{'CONTENT_LENGTH'};
       if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != 0) ){ 
            my $bytes_read = 0;
            while ($bytes_read < $req_len) {
                    my $data = '';
                    my $bytes = read(STDIN, $data, ($req_len - $bytes_read));
                    last if ($bytes == 0 || !defined($bytes));
                    $stdin_passthrough .= $data;
                    $bytes_read += $bytes;
            }
        }

        #running the cgi app
        if ( (-x $req_params{SCRIPT_FILENAME}) &&  #can I execute this?
             (-s $req_params{SCRIPT_FILENAME}) &&  #Is this file empty?
             (-r $req_params{SCRIPT_FILENAME})     #can I read this file?
        ){
    pipe(CHILD_RD, PARENT_WR);
    my $pid = open(KID_TO_READ, "-|");
    unless(defined($pid)) {
        print("Content-type: text/plain\r\n\r\n");
                    print "Error: CGI app returned no output - ";
                    print "Executing $req_params{SCRIPT_FILENAME} failed !\n";
        next;
    }
    if ($pid > 0) {
        close(CHILD_RD);
        print PARENT_WR $stdin_passthrough;
        close(PARENT_WR);

        while(my $s = <KID_TO_READ>) { print $s; }
        close KID_TO_READ;
        waitpid($pid, 0);
    } else {
                foreach $key ( keys %req_params){
                   $ENV{$key} = $req_params{$key};
                }
                # cd to the script's local directory
                if ($req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/) {
                        chdir $1;
                }

        close(PARENT_WR);
        close(STDIN);
        #fcntl(CHILD_RD, F_DUPFD, 0);
        syscall(&SYS_dup2, fileno(CHILD_RD), 0);
        #open(STDIN, "<&CHILD_RD");
        exec($req_params{SCRIPT_FILENAME});
        die("exec failed");
    }
        } 
        else {
            print("Content-type: text/plain\r\n\r\n");
            print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not ";
            print "exist or is not executable by this process.\n";
        }

    }
}

Fastcgi init 与控制脚本

编辑 /etc/rc.d/init.d/perl-fastcgi 文件,并复制以下代码:

#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /opt/nginx/conf/nginx.conf
# pidfile: /opt/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

perlfastcgi="/usr/bin/fastcgi-wrapper.pl"
prog=$(basename perl)

lockfile=/var/lock/subsys/perl-fastcgi

start() {
    [ -x $perlfastcgi ] || exit 5
    echo -n $"Starting $prog: "
    daemon $perlfastcgi
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    echo -n $”Reloading $prog: ”
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}
rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
    esac

设置相应的权限并启动 Perl Fastcgi Wrapper

chmod +x /usr/bin/fastcgi-wrapper.pl
chmod +x /etc/rc.d/init.d/perl-fastcgi
/etc/rc.d/init.d/perl-fastcgi start
chkconfig --add perl-fastcgi
chkconfig perl-fastcgi on

站点的 Nginx 配置文件

server {
    listen       80;
    server_name  mt.oakeric.com;
    set $app_root '/home/www/mt.oakeric.com'; 
    error_log /home/www/mt.oakeric.com/logs/error.log;
    charset utf-8;

    root $app_root/public;
    index mt.cgi index.cgi index.html;

    location = /favicon.ico {
            log_not_found off;
            access_log off;
    }

    location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
    }

    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }

    location ~ .*\.cgi(\/.*)*$ {
        gzip off;
        include fastcgi_params;
        fastcgi_pass  unix:/var/run/perl-fastcgi.sock;
        fastcgi_index mt.cgi;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ \.pl$ {
        gzip off;
        include fastcgi_params;
        fastcgi_pass  unix:/var/run/perl-fastcgi.sock;
        fastcgi_index mt.pl;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

安装 Movable Type

重新加载 Nginx 配置文件后,即可访问 http://mt.oakeric.com 即可开始安装脚本了。

若使用 CentOS 官方软件源的版本,直接使用下面的命令即可:

yum update
yum install postgresql postgresql-server 

但是,官方的源可能并不会提供最新版本的 postgresql 软件,所以,本文并不是使用 CentOS 官方的软件源安装,而是使用 postgresql 官方提供的 yum 源来安装最新版本的软件,在我写这篇文章时(也就是我服务器上安装的版本)为 postgresql 9.4

安装 postgresql

访问 PostgreSQL Repository 下载页面,根据自己服务器系统的版本选择添加适合自己的软件源。

对于 CentOS 6.x 32位 系统:

rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-6-i386/pgdg-centos94-9.4-1.noarch.rpm

对于 CentOS 6.x 64位 系统:

rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm

对于 CentOS 7 64位 系统

rpm -Uvh http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm

使用下面的命令更新软件列表:

yum update

到现在为止,已经可以使用下面的命令安装 postgresql 了:

yum install postgresql94-server postgresql94-contrib

接着使用下面的命令初始化数据库:

CentOS 6.x 系统上:

service postgresql-9.4 initdb

CentOS 7.x 系统上:

/usr/pgsql-9.4/bin/postgresql94-setup initdb

接系统 postgresql 服务,并让其在每一次系统启动时,自动启动服务:

CentOS 6.x 系统上:

service postgresql-9.4 start
chkconfig postgresql-9.4 on

CentOS 7.x 系统上:

systemctl enable postgresql-9.4
systemctl start postgresql-9.4

调整 iptablesfirewall

调整 iptables 与 防火墙设置以让数据库服务器可以被远程系统访问。

CentOS 6.x 系统上:

vi /etc/sysconfig/iptables

添加下面这些行:

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

保存,然后重启 iptables 服务:

service iptables restarton

CentOS 7.x 系统上:

firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

访问 PostgreSQL 命令提示符

默认的数据库名称与数据库用户名均为 postgres,通过 postgres 用户进行一些 postgresql 相关的操作:

su - postgres

要登录到 postgresql 服务器,输入下面这个命令:

psql

您会得到类似下面这样的提示符:

psql (9.4.0)
Type "help" for help.

postgres=#

输入 \q 退出 postgresql 命令提示符界面。

设置 postgres 用户的密码

通过下面命令登录到 postgresql 命令提示符:

su - postgres

psql

接着通过下面的命令设置 postgres 用户的密码:

postgres=# \password postgres 
Enter new password: 
Enter it again: 
postgres=# \q

要安装 PostgreSQL Adminpack,在 postgresql 命令提示符界面下输入下面命令:

postgres=# CREATE EXTENSION adminpack;
CREATE EXTENSION

创建新用户与数据库

作为示例,我们现在添加一个名为 eric 的用户,其密码为 password,然后再添加一个数据库,其名为 eric_db

su - postgres

创建用户 eric

$ createuser eric

创建 eric_db 数据库:

$ createdb --encoding=UTF8 eric_db

现在登录至 psql 命令行,设置密码,并授予 eric 访问 eric_db 的权限:

$ psql
psql (9.4.0)
Type "help" for help.

postgres=# alter user eric with encrypted password 'password';
ALTER ROLE

postgres=# grant all privileges on database eric_db to eric;
GRANT
postgres=#

删除用户与数据库

su - postgres

输入下面命令删除数据库:

$ dropdb <database-name>

输入下面命令删除用户:

$ dropuser <user-name>

配置 PostgreSQL-MD5 方式验证

MD5 验证 提供了一种以 Md5 方式加密密码的密码验证方式,要使用该功能,需要编辑 /var/lib/pgsql/9.4/data/pg_hba.conf 文件:

vi /var/lib/pgsql/9.4/data/pg_hba.conf

编辑或者修改下面这些行:

[...]
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.0/24          md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
[...]

使用下面的命令重启 postgresql 服务以更新配置文件:

CentOS 6.X 系统上:

service postgresql-9.4 restart

d CentOS 7 系统上:

systemctl restart postgresql-9.4

配置 PostgreSQL TCP/IP

默认的,TCP/IP 是关闭的,所以,若用户地人另外的服务器访问某台 postgresql 数据库服务器是不被允许的,若要启用该功能,您需要编辑 /var/lib/pgsql/9.4/data/postgresql.conf 文件:

vi /var/lib/pgsql/9.4/data/postgresql.conf

找到下面这些行:

[...]
#listen_addresses = 'localhost'
[...]
#port = 5432
[...]

取消注释,然后将 localhost 修改为您将允许的客户端IP地址,若要允许所有的客户端的联系,则使用 \* 即可:

listen_addresses = '*'
port = 5432

使用下面的命令重启 postgresql 服务以更新配置文件:

CentOS 6.X 系统上:

service postgresql-9.4 restart

d CentOS 7 系统上:

systemctl restart postgresql-9.4

第一步:添加 MongoDB 软件仓库的配置信息:

sudo touch /etc/yum.repos.d/mongodb.repo

vi /etc/yum.repos.d/mongodb.repo

若为64位系统,则使用以下配置:

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

若为32位系统,则使用下方配置:

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1

第二步:安装 MongoDB

sudo yum install mongo-10gen-server

第三步:配置 MongoDB

vi /etc/mongod.conf

内容如下:

# fork and run in background
fork = true

bind_ip = 127.0.0.1
port = 27017

运行 MongoDB

mongod --config /etc/mongod.conf

添加第三方软件源

PHP-FPM 在 CentOS 的官方程序库中不存在,所以我们首先得添加第三方扩展软件源。

rpm --import https://fedoraproject.org/static/0608B895.txt 
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum install yum-priorities

然后编辑:vi /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirrors.aliyun.com/epel/6/$basearch
        http://mirrors.aliyuncs.com/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

接着:vi /etc/yum.repos.d/remi.repo

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

安装 Nginx、MySQL以及PHP

#安装MySQL服务器
yum install mysql mysql-server

#安装Nginx
yum install nginx

#安装PHP及相关组件
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-pecl-apc

待所有安装结束后,使用以下命令启动服务:

#启动MySQL
chkconfig --levels 235 mysqld on
service mysqld start

#启动Nginx
chkconfig --levels 235 nginx on
service nginx start

#启动PHP-FPM
chkconfig --levels 235 php-fpm on
service php-fpm start

若 Nginx 启动失败,则有可能是因为 Apache httpd 服务占用了该接口,这时,要么我们修改 Nginx 的坚挺端口,要么修改Apache httpd的或者直接删除 Apache httpd。

apachectl stop
yum remove httpd
chkconfig --level 235 httpd off

配置Nginx、MySQL与PHP-FPM

运行 mysql_secure_installation 命令,提升 MySQL 服务器的安全性,要求您要输入数据库 root 帐户密码,若您是新安装,则直接回车即可,接着立马设置新密码。

配置 PHP

打开 PHP 配置文件:vi /etc/php.ini

设置 cgi.fix_pathinfo=0

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

设置 upload_max_filesize 最大文件上传尺寸为 upload_max_filesize16MB

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 16M

设置 post_max_size32MB

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 32M

打开:vi /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock;

以及:

listen.owner = www
listen.group = www
listen.mode = 0660

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www