学习Linux的人都有一种相同的品质,那就是——折腾。不喜欢折腾的也不会喜欢上Linux,经不起折腾的也学不好Linux,只有那些喜欢折腾、坚持折腾的才有可能学好Linux。

LNMP环境搭建(Ubuntu+Wordpress)

断断续续地学习了大半年的Linux操作系统,总是看一会shell脚本编程,看一会Linux系统管理。没有很系统地学习过。说不懂吧,也懂那么点;说懂吧,什么也说不上来。

早上起来,心血来潮地想配个环境试试,就是LNMP的环境,也算是验证一下自己在书上看的命令行记得的还剩多少,于是就动手了。

首先需要一个Linux操作系统,老规矩,还是在虚拟机上配置,我选择的是VirtualBox,也没有什么原因,就是用了几次,比较顺手罢了。Linux发行版选择Ubuntu 12.04 Server版,原因同上。由于之前在其他笔记本上装过,轻车熟路,顺顺利利就把Ubuntu系统装好了。在装的过程中,系统要你选择是否装一些软件,其中,包括jdk,LAMP...,我什么也没有选,一来赶紧装完,二来,都丫的给我装完了,我还练习个啥?

一、Linux+Nginx+MySQL配置问题

1、Ubunut中文乱码问题

系统装完了,登录进去,习惯性地浏览当前目录的所有文件,ls -al最蛋碎的乱码问题出现了。

中文全部显示为大方块,最让我想不通的就是这里,中文又不支持,为什么默认给我设置成中文呢?显示成英文也成呀。

还是不抱怨了,想想解决方法吧,好像是记得是locale这个东西的设置问题, 输入一下locale出现LANG=zh_CN.UTF-8等等,下面好多行,反正都是zh_CN,意思就是中文字符。可是在命令行界面支持中文是很麻烦的,好像zhcon这个软件可以解决问题,我就不去探索了,我的目标是显示出英文就行了,英文不会还可以查,再不会可以猜,可是大方块,我是没有能力去猜出什么意思了。

废话少说,执行sudo vim /etc/default/locale编辑locale这个文件,把所有的zh_CN全部改成en_US

改完后,sudo shutdown -r now重启一下,ok了,不放心改了,再输入locale看看,结果没错,管他三七二十一,全改了。这时候,再也没有方块了。可以进行下一步工作了。

2、MySQL安装

接下来是安装数据库,选择MySQL数据库,配置起来比较简单,步骤如下。

  • 首先安装数据库,sudo apt-get install mysql-server下载安装MySQL数据库,安装的过程中,会有提示输入mysql的用户名,以及密码。
  • 装完之后,进入数据库,使用命令mysql -u root -p然后输入数据库密码,就可以进入数据库了。
  • 查看数据库,使用SQL语句show databases;就可以查看当前的数据库了。

    如图中所示,那么数据库就基本上配置好了。可以放到一边不管了,输入exit退出。

3、Ngnix安装

配置nginx的步骤还是很简单的,但是想要学通了,还是需要些时日的。

  • 首先是安装nginxsudo apt-get install nginx和安装mysql一样,不过这个可快多了,因为只有2兆多一点。
  • 装完后,直接启动一下服务sudo service nginx start

如果出现下面的结果,那么你的Nginx服务启动正常了,下面内容可以不用看了

如果很不幸,你的结果如下

上面大概意思是说你的Nginx默认的80端口被占用了,不能够启动,那么你的解决方法可以参照这里

如果你的人品很差,或是你还是不能解决上面问题,那么可以接着看下面解决方法。

上面不就是说80端口被占用了嘛,那么可以换一个端口,操作如下:

  1. sudo vim /etc/nginx/sites-available/default 打开Nginx默认配置文件, 看到的如图所示。
  2. 把listen后面的80,改成8080,保存退出。
  3. sudo service nginx restart 重启nginx服务器,结果如下。

好了,完成了Nginx的安装和配置了,接下来可以验证一下了,打开你的浏览器,输入http://localhost:8080(没有改过端口的直接输入http://localhost就行了),正常看到界面如下:

当然这种方法不适合在实际服务器上使用,仅限于实在不知道怎么解决端口占用问题,而且只是玩玩而已的情况下。因为在实际服务器上不可以让别人输入你的网站还要加个端口号吧,那就太灭绝人性了。

(纯属自娱自乐,使其能够继续进行下去,不至于卡在某个步骤打击自信心。)

基本上Linux+Nginx+MySQL的服务都正常配置完了,下面就是PHP5的开源项目配置了,也是整个过程中,最有意思的东东了。

二、PHP5开源项目配置

1、安装php5,php5-fpm,php5-mysql

sudo apt-get install php5 php5-fpm php5-mysql,通过这个命令安装php5相关的软件,这个过程很顺利,一般没有什么问题。

2、下载WordPress开源博客项目

  1. sudo apt-get install wget,安装wget下载器。
  2. wget http://cn.wordpress.org/wordpress-3.5.1-zh_CN.tar.gz,下载WordPress开源博客。
  3. tar -xvzf wordpress-3.5.1-zh_CN.tar.gz,解压到当前文件夹。
  4. cd wordpress,进入文件夹。如图

下面就是如何把WordPress开源博客布置到Nginx上的问题了。

3、配置Nginx,MySQL,布置项目

  1. 首先,新建WordPress数据库,mysql -u root -p进入MySQL,然后执行SQL语句create database wordpress;,这样wordpress的数据库就配置好了。正常情况下,应该是这样的:
  2. 然后,配置WordPress的数据库设置:

    • 进入wordpress目录(默认下载到用户目录下了),cd ~/wordpress
    • 复制配置文件,cp wp-config-sample.php wp-config.php
    • 修改配置文件wp-config.php,命令vim wp-config.php

    按照文件内容把数据库信息写进去,主要包括:数据库名称,数据库用户,数据库密码。

因为我下载的是中文版的WordPress项目,所以里面遍地都是大方块,不过不要紧,主要设置DB_NAME,DB_USER,DB_PASSWORD,基本任务就完成了。

**注意:前两项可以不改,密码要改成自己的哦**

3. 最后,布置项目。

启动Nginx的时候,默认是打开一个default页面,现在我们要通过设置另外一个端口来打开WordPress项目里的页面,按照以下步骤做。

  • 进入Nginx项目配置目录,cd /etc/nginx/sites-available
  • 新建一个WordPress文件,sudo vim wordpress
  • 添加下面代码到WordPress文件中,敲吧,练练手法也行。

    至于为什么,详细情况请问度娘以及Google,我这里主要参考了 这里以及这里的一些内容。还有别忘了nginx官方文档,这里才是正宗。下面简要介绍一下几个字段。

    listen说的是端口监听,我这里选的8088,你自己定也行。
    server_name即服务器IP,就是现在虚拟机里的ip地址,virtualbox里有4种网络配置,确保自己的主机可以访问到虚拟机。详细介绍可以看这里 ,这里网卡模式选的是host-only,虚拟机IP默认为192.168.56.101。
    root表示项目的根目录,据我尝试,项目放到用户目录是无法访问的,于是把项目复制到/var/wordpress下,命令sudo cp -Rv ~/wordpress /var/wordpress
    location监听URL中以php结尾的页面。

    重启一下自己的Nginx服务器以及php5-fpm服务,sudo service nginx restart还有sudo service php5-fpm restart,好了,大功告成。

4、访问WordPress

打开主机上的浏览器,访问http://192.168.56.101:8088,出现下面界面。

OK,进来了,终于看到WordPress首页了。

总结

本文主要叙述了从VirtualBox虚拟机里的Linux操作系统开始,一步步如何搭建一个开源博客的整个过程。很多问题都没有很好地解决,只是为了体验一下Linux命令行的魅力,刺激一下自己,望今后更加努力地学习Linux。

这里仅仅是在虚拟机里面搭建的一个开源博客项目,仅供参考个人学习。而在真实的服务器里可能就要考虑到域名、DNS服务、Nginx性能等等问题。

LNMP环境搭建(CentOS+meiupic)

背景

CentOS上搭建meiupic图床(一个PHP写的开源相册),之前也搭建过PHP的LNMP环境-上一篇,那是很长时间的事了,并且当时使用的是Ubuntu Server版本服务器。这次本以为很快就搭建OK,却还是折腾了一晚上,真是惭愧...

一、CentOS配置网络

本是一件多简单的事,不就是在配置文件/etc/sysconfig/network-scripts/ifcfg-eth0里写入下面这几行配置嘛。

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes

ipaddr=192.168.1.123
netmask=255.255.255.0
gateway=192.168.1.1

可是还真是奇了怪了,一重启,IP就自动变了,随机分配了。明明配置的是静态IP啊。耗了我老长时间找原因了,最后照着书上一个一个校对,最后发现把ipaddrnetmaskgateway都改成大写的就行了。。(PS. 记得在Ubuntu上没有区分啊,难道我记错了~郁闷)

二、Nginx

1、安装

教程很多,贴一条备用,没准哪天又忘了怎么编译安装了。以前在Ubuntu上都是直接sudo apt-get install nginx,可是在CentOS里貌似默认没有,学会编译安装nginx还有必要的。而且编译安装的版本使用起来有一些差异。

Nginx安装

注意点:

  • pcre不要选择最新版pcre2,选择pcre2会报错,有能力解决者可以自行选择;
  • 源码全部下载在/usr/local/src/目录下,便于管理。

2、使用

重新启动service nginx restart?No,No,No,别被自动安装的软件惯坏了,nginx应该这么用。

  • /usr/local/nginx/nginx 启动主程序,安装目录下运行nginx,我的版本是1.7,其他版本nginx执行文件也许不在nginx目录下
  • /usr/local/nginx/nginx -s reload 重新加载
  • /usr/local/nginx/nginx -s stop 停止

当然不想输入那么长的路径也行,创建一个快捷方式,如果还是想使用service命令也行,在/etc/init.d目录下创建快捷方式。命令如下:

cp -s /usr/local/nginx/nginx /etc/init.d/

三、MySQL设置root密码

安装MySQL的方法倒是跟之前没两样,偷懒的方法就这样yum install -y mysql*,OK,一股脑全装上了,装完设置root密码方法如下:

方法1: 用SET PASSWORD命令

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

方法2:用mysqladmin

mysqladmin -u root password "newpass", 如果root已经设置过密码,采用如下方法: mysqladmin -u root password oldpass "newpass"

方法3: 用UPDATE直接编辑user表

mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;

在丢失root密码的时候,可以这样

mysqld_safe --skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';
mysql> FLUSH PRIVILEGES;

瞅一眼密码啥样...

四、php+nginx配置

这次花费最长的时间就是这块了,之前基本没怎么接触过PHP开发,php的开发环境更是半知不解。其实这次搭建完也是半知不解。

想要nginx解析php文件,那么需要安装php-fpm,它是个啥?

FastCGI Process Manager:FastCGI进程管理器,fpm能根据访问的压力动态的唤起cgi进程和销毁以到达动态的调整cgi数量,这样可以有效的使用内存。

跟着yum install php*命令,全安装上了。

接下来就是配置nginx了,使其能够解析并转发meiupic开源相册,我将相册源代码解压到了/usr/www/目录下了,然后就是配置nginx了,打开nginx配置文件,vim /usr/local/nginx/nginx.conf,找到http下的server区域,改成如下:

...此处省略
http {
    ....
    server{
        listen    8080;
        server_name    192.168.1.123;
        location / {
            root    /usr/www;
            index    index.php;
        }
        location ~ \.php$ {
            root    /usr/www;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index    index.php;
            fastcgi_param    SCRIPT_FILENAME    /scripts$fastcgi_script_name;
            include    fastcgi_params;        
        }
    }
}
...省略若干

listen端口,我将默认的80改成了8080,server_name改成本机的IP,root改成php开源项目的源代码目录,然后最重要的那段php的配置当然不是我写的,只是将默认对PHP的配置注释给去掉了,改一下root就完事了。

好了,迫不及待的想试一试了。依次检查各种服务是否正常,nginx、mysql、php-fpm....启动了的重启一下,没有启动的启动一下。

service mysqld restart  
service php-fpm restart  
/usr/local/nginx/nginx -s reload  

OK ~浏览器运行http://192.168.1.123:8080,第一次嘛,必然是没有反应的。出现问题并不可怕,主要是要知道怎么找原因。

  1. 首先想到的就是网络是否通,主机ping 192.168.1.123,OK!
  2. 然后测试页面是否从服务器返回了,很显然在主机上测试是没有返回页面,而不是返回404。那么测试一下在虚拟机中是否返回页面了,没有浏览器怎么玩?没事,curl 192.168.1.123:8080,抓取页面代码。返回了。

好了,原因找到了,网络是通的,而页面无法访问,可是本地可以访问,这么一讲,就知道是防火墙的问题了。

五、设置防火墙

防火墙的配置是Linux运维的重点内容,CentOS默认只开通了22端口的访问配置。这里我们需要开启端口8080,亦或是关闭了它(当然不建议这么做)。

教程很多,或是直接看man iptables,你会学到很多。关于防火墙的配置文件是/etc/sysconfig/iptables,学习就靠自己了。

关闭的方法:service iptables stop

OK,设置好防火墙后,又是一系列重启服务操作,然后浏览器访问,这次不报错了,可是File Not Find,what's the fuck!

六、fastcgi_params

最后找到就是fastcgi_params配置的问题,中间寻找答案的艰辛就不多说了,这里记下,给自己提个醒,同时给新人指路。我也是从前人那里找到的答案。

nginx调用php-fpm出错解决方法和nginx配置详解

问题就在上面nginx配置文件中的的这两句:

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params;

解决方法有两种(其实是一个意思):

  1. 把第一句改成如下: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  2. 或者把第二句改成如下:
    include fastcgi.conf

为什么说一样,可以自行查看一下,nginx安装目录下,fastcgi_param以及fastcgi.conf这两个文件的内容差异。

vim -O /usr/local/nginx/fastcgi_params /usr/local/nginx/fastcgi.conf

解决完这个问题后,又是一堆服务的重启,然后浏览器打开http://192.168.1.123:8080,OK,运行安装程序了。

七、安装meiupic

目录权限问题,到/usr/www目录下,设置一下,各个文件目录的访问权限。如果嫌麻烦,直接chmod 777 /usr/www/*,到这里基本就完成了。

只求好玩,莫问前程

我也不算是一个Linux新手了,但是在学习Linux的道路上一直走走停停。上班工作是Windows系统,日常生活使用Mac,Linux系统一直都是个人兴趣,毕业后本想求得一份Linux相关的工作,然而…(高不成低不就,你懂的…)

接触Linux也不算太长时间,犹记得当时的Ubuntu还是9.04,迷上Linux之后,就是各种折腾,虚拟机、双系统甚至三系统(winxp,win7,linux),反正那时也不知道Linux是干什么用的,只是知道电脑还可以安装除了Windows之外的其他系统就觉得好玩。当然受害最深的还是那台联想笔记本,到现在还坚挺的活着,哈哈,不容易。

当然安装Linux的版本也不在少数,最先接触的Ubuntu,然后接着就是federa,Debian,OpenSuse,CentOS,redHat甚至YLMF OS(没错,就是雨林木风,后来改名叫StartOS)都装过。当然别说学习Linux了,一直都是停留在好玩的阶段。

中间倒是深入学习了Linux一段时间,用的是Ubuntu Server12.04版本,那段时间进步倒是挺大,基本命令算是没有问题了,搭建一些开发环境也没有问题。总的来说,就是基本入门了,然后呢。。没有然后了,也不知道往哪个方向发展,却又开始纠结安装哪个版本进行深入学习呢。

其实用的最习惯的还是Debain系列,redhat系列也还可以,其他的就了解得甚少了。其实自己也明白,不管哪个发行版都是学习的好工具,只是它毕竟只是工具,最重要的还是你要通过它来做什么?也就是你想发展的方向,可惜的是这方面了解太少,工作也基本不接触Linux(偶尔查个数据库,还是在Windows平台上连接的),因此Linux的学习进程一直在搁浅中。想玩了,就在虚拟机装个发行版体验一把或是搭个平台布置个Web服务器啥的,总是停留在这个阶段。很是尴尬!

近期在看Linux的相关文章时,渐渐了解到了Arch这个版本,这不心血来潮,下班回宿舍鼓捣着就给装上了,相对与Ubuntu或者fedara一键式安装,Arch还是有点意思的。大致分了几个步骤(官方wiki已经够详细了,这里不多说):

  1. 磁盘分区、格式化以及挂载;
  2. 选择镜像站点安装系统;
  3. 编辑文件系统配置文件fstab;
  4. 配置主机相关设置(语言、时区、主机名以及root密码);
  5. 安装grub引导程序;
  6. 重启,硬盘启动;
  7. 安装图形界面;
  8. 添加普通用户,编辑sudoers文件;

其实这些内容都在学习Linux的过程中接触过,这里只是全部再温习一遍了,在之前写的Linux笔记中也都有相关的内容。


然后呢?望着装好的xfce4桌面,也没有当初刚接触Linux时的那种喜悦心情了,呆呆的望着这个桌面,心想:难道再把诸如vim or node or jdk 等等的软件或是环境搭一遍?竟然不知何去何从…

最后我还是默默的shutdown洗洗睡了。

有时看到很多初学者纠结装哪个Linux发行版的问题就觉得可笑?其实自己何尝不是这样呢?
真正重要的并不是你要装哪个Linux发行版,而是你想用Linux来做什么?千万不要像我这样,到现在我还不明了我学习Linux到底是为了什么?也许我的目的一直只是好玩吧。

『只求好玩,莫问前程』

VirtualBox上Ubuntu Server网络问题

在虚拟机中的ubuntu搭建开源博客,由于virtualbox的默认NAT上网方式,是不支持从主机到虚拟机的访问的。所以,我就把默认上网的方式改成了host-only adapter主机模式,默认访问192.168.56.101就可以从主机访问到虚拟机了。后来不知道怎么鼓捣的,就出现问题了,列举问题如下:

1、输入ifconfig命令,eth0网卡消失了??

这个问题我现在还是“不明觉厉”,反正就是消失了,但是如果你尝试一下ifconfig -a命令你就会发现出现eth1 or eth2 or eth3…很不幸,当我输入ifconfig -a的时候,它已经到eth5了,我也不知道为什么我的网卡编号从eth0到了eth5了?还有,怎么能够再变回eth0??

如果ifconfig命令没有出现eth网卡的信息,那么你的网络配置肯定出了问题,要么设定静态IP,要么保持动态自动获取IP,配置文件的设置,请接着往下看。

2、静态IP的设置??

打开网络设置文件,如下命令:sudo vim /etc/network/interfaces,可以看到如下内容:

如果你没有瞎折腾,下面两行的eth5应该是eth0才是正常的。

如果想要设置静态IP的话,就要修改这个文件,当然一定要记得备份原文件。退出编辑器,备份命令:cp /etc/network/interfaces /etc/network/interfaces.bak,然后再编辑文件,把文件内容改为下面内容(这里要注意一下,CentOS有所不同),

auto lo
iface lo inet loopback
auto eth0
#iface eth0 inet dhcp 动态分配ip,注释掉
#静态ip地址
iface eth0 inet static
#ip地址
address 192.168.1.188
#子网掩码
netmask 255.255.255.0
#网关
gateway 192.168.1.2

最后就是启动服务了,命令如下:sudo service networking restart,显示ok不报错就行了,如果无法启动,尝试重启一下:sudo shutdown -r now。现在输入ifconfig,就会显示eth网卡的信息了,而且可以很清楚的看到虚拟机的ip地址了。

3、virtualbox的桥接网络模式(Bridged Adapter)的设置??

首先你要知道桥接模式的基本概念,桥接模式下,你的虚拟机就相当于局域网里的一台独立的电脑,只要与主机处于同一个网段,就可以相互访问。详细请看 VirtualBox的四种网络接入模式

根据桥接的介绍,虚拟机就是独立于主机的一台机子,要有自己的IP,并且同主机处于同一个局域网内就可以实现相互访问。由于我这里是校园网,不能自动分配IP,也就是要设置固定IP才能上网,首先查看我的主机上的IP,如下图;

然后,根据主机上的IP,找到一个可用的IP,为虚拟机设置固定IP,如何设置上面已经介绍了。如下图,虚拟机里的静态IP配置文件:

设置完毕了,现在就开始测试,主机与虚拟机之间可不可以ping得通?虚拟机可不可以上网?

第一步,测试虚拟机能不能上网;

主机ping www.baidu.com,如下图;

可以看到百度的IP,然后在虚拟机里ping百度的ip地址,如下图;

可以看到虚拟机可以ping得通百度的IP,证明连上网了。

第二步,测试主机能不能ping通虚拟机;

根据上面的介绍,主机的IP:10.1.14.59;虚拟机的IP:10.1.14.50,测试如下;

可以看到主机可以ping通虚拟机。

第三步,测试虚拟机能否ping通主机;

这一步注意要关闭掉windows7 or windows8的防火墙,不然会出现ping不通的情况。设置好了之后,马上测试了一下,之前搭的开源博客是否能访问?

很nice,可以访问了,不用再设置host-only网络模式了。搭建开源博客,看这里哦…

4、DNS设置

可能你已经发现,为什么要ping百度的IP呢,而不直接和主机一样,ping www.baidu.com呢,因为我们还没有设置DNS呢,如果ping www.baidu.com的话,肯定会报错的。

接下来,手动设置一下 DNS,首先还是要找到配置文件在哪里,dns的配置文件是/etc/resolv.conf,打开编辑sudo vim /etc/resolv.conf,在文件末尾追加一行:nameserver 202.113.112.55,注意填上自己的域名服务器,域名服务器可以查看主机的,如下;

填完之后,重启一下 networking 服务使其生效,sudo /etc/init.d/networking restart,到这里,DNS服务也就设置好了,再在虚拟机里ping www.baidu.com没有问题了,如下图;

总结

在这种模式下,主机可以轻易访问虚拟机下的服务了,而在默认的NAT网络模式下,主机是不能访问虚拟机服务的。