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


还没有评论