Linux折騰

魯鵬發表於2015-06-06

學習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網路模式下,主機是不能訪問虛擬機器服務的。

相關文章