Ubuntu 10.04 64bit 编译安装MySQL5.1.x、 PHP 5.3、NGINX 0.8.x

一时兴起,决定体验Ubuntu,当然少不了要配置开发环境。从网上收集了一些资料,开始配置安装过程。

首先我们现配置下系统,避免以后的问题。
1、locale 的问题,可能会造成在 SSH 终端下的乱码,Debian 可以用 dpkg-reconfigure locales 来设定,Ubuntu就不是这样了。可以先查看一下 /usr/share/i18n/SUPPORTED 这个文件,有哪些受支持的 locale 设定,然后用命令激活即可。

locale-gen en_US.UTF-8
locale-gen fr_FR
locale-gen zh_CN.UTF-8
locale-gen zh_CN
locale-gen zh_CN.GBK
locale-gen zh_CN.GB18030

然后设定系统默认的编码语言,这样 SSH 下面就不会有乱码了,打开 /etc/default/locale 文件,输入以下内容,然后重启系统即可。

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"

2、因为系统的pygrub已经更换成pvgrub,此时我们可以根据自己的喜好升级系统内核了…那么我们就敲命令把内核也一起升掉好了…

apt-get update
apt-get upgrade
apt-get dist-upgrade

现在我们需要确认一下系统内核,然后把多余的系统内核给卡擦了…

uname -a #确定下版本,不要把现在正在用的给删了
dpkg --get-selections | grep linux  #可以看到系统内核的列表

然后更改 /boot/grub/menu.lst,修改其中的版本就可以了,当然建议重启一下然后再删除系统内核。
4、安装一些必备的软件:

aptitude install vim
aptitude install wget
aptitude install rcconf
aptitude install cron
aptitude install build-essential
aptitude install imagemagick
aptitude install postfix
aptitude install vsftpd
aptitude install mailx
aptitude install gawk
aptitude install bison

一、先安装依赖包

apt-get install make 
apt-get install bison 
apt-get install flex 
apt-get install gcc 
apt-get install g++ 
apt-get install patch 
apt-get install autoconf 
apt-get install subversion 
apt-get install locate 
apt-get install libxml2
apt-get install libxml2-dev 
apt-get install libbz2-dev 
apt-get install libpcre3-dev 
apt-get install libssl-dev 
apt-get install zlib1g-dev 
apt-get install libmcrypt-dev 
apt-get install libmhash-dev 
apt-get install libmhash2 
apt-get install libpq-dev 
apt-get install libpq5 
apt-get install libncurses5-dev 
apt-get install libldap-2.4-2 
apt-get install libmhash2 
apt-get install libmysqlclient16 
apt-get install curl 
apt-get install libpng3 
apt-get install libjpeg62 
apt-get install libsasl2-2 
apt-get install libmcrypt4 
apt-get install libltdl7 
apt-get install libssl0.9.8 
apt-get install libssl-dev 
apt-get install openssl 
apt-get install curl 
apt-get install libcurl3 
apt-get install libmysql++-dev 
apt-get install libfreetype6-dev 
apt-get install libncurses5-dev 
apt-get install libpng12-dev 
apt-get install libjpeg62-dev 
apt-get install libcurl3 
apt-get install libcurl4-gnutls-dev

二、安装MySQL 5.1.48

1、编译安装MySQL 5.1.48

./configure --prefix=/usr/local/webserver/mysql/ \
--enable-assembler --with-extra-charsets=complex \
--enable-thread-safe-client --with-big-tables --with-readline \
--with-ssl --with-embedded-server --enable-local-infile \
--with-plugins=partition,innobase,myisammrg
make
make install

2、创建MySQL用户

/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql

3、修改MySQL目录用户组

chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql

4、创建MySQL数据库存放目录

mkdir -p /data0/mysql/3306/data/
mkdir -p /data0/mysql/3306/binlog/
mkdir -p /data0/mysql/3306/relaylog/
chown -R mysql:mysql /data0/mysql/

5、以mysql用户帐号的身份建立数据表

/usr/local/webserver/mysql/bin/mysql_install_db \
--basedir=/usr/local/webserver/mysql \
--datadir=/data0/mysql/3306/data --user=mysql

6、创建my.cnf配置文件

vi /data0/mysql/3306/my.cnf

输入以下内容

[client]
character-set-server = utf8
port    = 3306
socket  = /tmp/mysql.sock
 
[mysqld]
character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/3306/data
log-error = /data0/mysql/3306/mysql_error.log
pid-file = /data0/mysql/3306/mysql.pid
open_files_limit    = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
long_query_time = 3
log-slave-updates
log-bin = /data0/mysql/3306/binlog/binlog
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 1G
relay-log-index = /data0/mysql/3306/relaylog/relaylog
relay-log-info-file = /data0/mysql/3306/relaylog/relaylog
relay-log = /data0/mysql/3306/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
 
interactive_timeout = 120
wait_timeout = 120
 
skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
 
#master-host     =   192.168.1.2
#master-user     =   username
#master-password =   password
#master-port     =  3306
 
server-id = 1
 
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
 
#log-slow-queries = /data0/mysql/3306/slow.log
#long_query_time = 10
 
[mysqldump]
quick
max_allowed_packet = 32M

7、创建管理MySQL数据库的shell脚本

vi /data0/mysql/3306/mysql

将下面的内容贴进去

#!/bin/sh
 
mysql_port=3306
mysql_username="admin"
mysql_password="12345678"
 
function_start_mysql()
{
    printf "Starting MySQL...\n"
    /bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/data0/mysql/${mysql_port}/my.cnf 2>&1 > /dev/null &
}
 
function_stop_mysql()
{
    printf "Stoping MySQL...\n"
    /usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown
}
 
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 5
    function_start_mysql
}
 
function_kill_mysql()
{
    kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
    kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
 
if [ "$1" = "start" ]; then
    function_start_mysql
elif [ "$1" = "stop" ]; then
    function_stop_mysql
elif [ "$1" = "restart" ]; then
    function_restart_mysql
elif [ "$1" = "kill" ]; then
    function_kill_mysql
else
    printf "Usage: /data0/mysql/${mysql_port}/mysql {start|stop|restart|kill}\n"
fi

赋予shell脚本可执行权限

chmod +x /data0/mysql/3306/mysql

8、启动MySQL

/data0/mysql/3306/mysql start

9、通过命令行登录管理MySQL服务器(提示输入密码时直接回车)

/usr/local/webserver/mysql/bin/mysql -u root -p -S /tmp/mysql.sock

10、输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '12345678';

11、停止MySQL

/data0/mysql/3306/mysql stop

三、编译安装PHP 5.3.2(FastCGI模式)

1、开始安装PHP-FPM

svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3_FPM php_5_3_fpm
cd php_5_3_fpm
./buildconf
 
# 应该没什么错误,咱们就开始编译了
./configure --prefix=/usr/local/webserver/php \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-mysql=/usr/local/webserver/mysql \
--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config \
--with-iconv-dir=/usr/local --with-freetype-dir \
--with-jpeg-dir --with-png-dir --with-zlib \
--with-libxml-dir=/usr --enable-xml --disable-rpath \
--enable-discard-path --enable-safe-mode --enable-bcmath \
--enable-shmop --enable-sysvsem --enable-inline-optimization \
--with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi \
--enable-fpm --enable-force-cgi-redirect --enable-mbstring \
--with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl \
--with-mhash --enable-pcntl --enable-sockets --with-ldap \
--with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap
 
# 编译并安装
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../

2、编译安装PHP5扩展模块

tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
 
tar jxvf eaccelerator-0.9.6.tar.bz2
cd eaccelerator-0.9.6/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
 
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../
 
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.5.1-2/
./configure
make
make install
cd ../
 
tar zxvf imagick-2.3.0.tgz
cd imagick-2.3.0/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

3、修改php.ini文件

手工修改:查找/usr/local/webserver/php/etc/php.ini中的 extension_dir = “./”
修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”
并在此行后增加以下几行,然后保存:
  extension = “memcache.so”
  extension = “pdo_mysql.so”
  extension = “imagick.so”

再查找 output_buffering = Off
修改为output_buffering = On

自动修改:若嫌手工修改麻烦,可执行以下shell命令,自动完成对php.ini文件的修改:

sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "pdo_mysql.so"\nextension = "imagick.so"\n#' /usr/local/webserver/php/etc/php.ini
sed -i 's#output_buffering = Off#output_buffering = On#' /usr/local/webserver/php/etc/php.ini
sed -i "s#; always_populate_raw_post_data = On#always_populate_raw_post_data = On#g" /usr/local/webserver/php/etc/php.ini

四、安装Nginx

1、安装Nginx所需的pcre库:

tar xf pcre-8.01.tar.gz
cd pcre-8.01/
./configure
make
make install

2、安装Nginx

tar xf nginx-0.8.32.tar.gz
cd nginx-0.8.32
 
# 编译nginx,增加 http_stub_status模块
cd nginx-0.8.32
./configure --prefix=/usr/local/webserver/nginx \
--with-http_stub_status_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_realip_module #这个就是把负载平衡也就是反向代理的模块给装上,以后会用上的
 
# 编译并安装
make
make install

3、创建Nginx日志目录

mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs

4、创建Nginx配置文件

rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf
user  www www;
 
worker_processes 8;
 
error_log  /data1/logs/nginx_error.log  crit;
 
pid        /usr/local/webserver/nginx/nginx.pid;
 
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
 
events
{
  use epoll;
  worker_connections 65535;
}
 
http
{
  include       mime.types;
  default_type  application/octet-stream;
 
  #charset  gb2312;
 
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
 
  sendfile on;
  tcp_nopush     on;
 
  keepalive_timeout 60;
 
  tcp_nodelay on;
 
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
 
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
 
  #limit_zone  crawler  $binary_remote_addr  10m;
 
  server
  {
    listen       80;
    server_name  localhost;
    index index.html index.htm index.php;
    root  /data0/htdocs;
 
    #limit_conn   crawler  20;    
 
    location ~ .*\.(php|php5)?$
    {      
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }
 
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      expires      30d;
    }
 
    location ~ .*\.(js|css)?$
    {
      expires      1h;
    } 
 
    location /status {
    stub_status on;
    access_log   off;
    }
 
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
    access_log  /data1/logs/access.log  access;
  }
}

在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件

vi /usr/local/webserver/nginx/conf/fcgi.conf

输入以下内容

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
 
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
 
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
 
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
 
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

5、启动Nginx

ulimit -SHn 65535
/usr/local/webserver/nginx/sbin/nginx

五、配置开机自动启动Nginx + PHP

vi /etc/rc.local

在末尾增加以下内容

ulimit -SHn 65535
/usr/local/webserver/php/sbin/php-fpm start
/usr/local/webserver/nginx/sbin/nginx

六、优化Linux内核参数

vi /etc/sysctl.conf

在末尾增加以下内容

# Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768
 
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
 
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
 
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
 
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
 
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024  65535

使配置立即生效:

/sbin/sysctl -p

七、在不停止Nginx服务的情况下平滑变更Nginx配置

1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

/usr/local/webserver/nginx/sbin/nginx -t

如果屏幕显示以下两行信息,说明配置文件正确:

  the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully

2、平滑重启:

# 在不重新启动nginx的情况下重新载入nginx.conf文件
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`
 
# 在不重启php-fpm的情况下重新载入php.ini
/usr/local/webserver/php/sbin/php-fpm reload

对于Nginx 0.8.x版本,现在平滑重启Nginx配置非常简单,执行以下命令即可:

/usr/local/webserver/nginx/sbin/nginx -s reload

对于Nginx 0.8.x之前的版本,平滑重启稍微麻烦一些,按照以下步骤进行即可。输入以下命令查看Nginx主进程号:

ps aux|grep nginx

这时,执行以下命令即可使修改过的Nginx配置文件生效:

kill -HUP 6302#主进程号

八、编写每天定时切割Nginx日志的脚本(配置日志轮循)

1、创建脚本/usr/local /webserver/nginx/sbin/cut_nginx_log.sh

vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh

输入以下内容,将这个脚本路径/usr/local/webserver/nginx/sbin /cut_nginx_log.sh,用 chmod +x cut_nginx_log.sh将其设置为可执行。

#!/bin/bash
# This script run at 00:00
 
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"
 
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

2、设置crontab,每天凌晨00:00切割nginx访问日志

crontab -e

输入以下内容:

00 00 * * * /bin/bash  /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
  1. 还没有评论

  1. 还没有引用通告。