【站長起步】阿里雲+Ubuntu+java 7+ Tomcat 7 +Nginx1.6 +Mysql 5.6

本文記載了在阿里雲ubuntu+java 鏡像環境下搭建網站服務器環境中遇到的的錯誤和解決方案。

作爲一個年輕人,是肯定不會去用alidata這個現成的環境的。怎麼辦? 全部刪除,立馬創建一個 目錄 /mydata

然後一個個的環境搭建。

有幾點分享下:

tomcat, nginx, mysql 中

tomcat  是最乾淨的,只需要解壓,和配置文件。純硬盤版~給力。

mysql  是最不乾淨的,編譯安裝時要注意參數別輸入錯誤了,一旦錯誤,不是改改配置就能解決的。比如我粗心的把utf8_general_ci 寫成了 uft8_general_ci。現在每次登入都出彈出warning。。。。也沒法配置。只能有空再裝一次了。

nginx  兩者之間,一般般,如果用源碼安裝,要設置conf等路徑,還是不太習慣。

我在想,爲啥不 “所有的開源項目安裝的時候,所有文件都生成在 當前目錄,安裝的時候也安裝到當前目錄” 呢。純綠色版多好。

這樣所有windows,unix用戶的體驗感覺是一樣的。至於一些關鍵數據的存放,可以自己配置。爲啥要在(默認)編譯的時候,把不同的文件寫在不同地方呢,作爲用習慣了windows不熟悉這個機制的站長來說,要查很多東西才知道。

希望以後的開源安裝越來越綠色+硬盤!


所以Tomcat 是最讓我省心的,

一點點小問題:

【1】Tomcat 輸出詳細的Error日誌。默認的情況下Tomcat 的某個Java網站如果啓動錯誤了,只會顯示

org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error listenerStart 
org.apache.catalina.core.StandardContext startInternal 
SEVERE: Context [/******] startup failed due to previous errors 

爲了得到詳細的錯誤信息:

我們可以在網站的 WEB-INF/classes目錄下新建一個文件叫logging.properties

輸入以下配置:

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler  
  
############################################################  
# Handler specific properties.  
# Describes specific configuration info for Handlers.  
############################################################  
  
org.apache.juli.FileHandler.level = FINE  
org.apache.juli.FileHandler.directory = ${catalina.base}/logs  
org.apache.juli.FileHandler.prefix = error-debug.  
  
java.util.logging.ConsoleHandler.level = FINE  
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter  

重啓tomcat,再運行,再進入logs查看 error-debug.20XX-XX-XX.log。


【2】 Mysql 表名大小寫區分

    如果您的Java web項目使用了Hibernate,Mysql 自動編譯安裝後,默認區分表名大小寫。要設置不區分:需要 

vi /etc/my.cnf 

然後在[mysqld]下面添加:

lower_case_table_names=1


【3】Nginx 均衡負載 + 靜動分離

我強烈建議,會用Windows的同志,先在windows下搭一遍,這樣很多問題直接網上搜索,拷貝,就容易了很多,等確認正確後,再移植到沒有GUI的Ubuntu下(of course, 如果您是土豪,完全可以買幾個G空間,然後爲ubuntu server裝個GUI···)。


【4】 FTP文件上傳路徑配置:Ubuntu系統的用戶管理

命令,系統路徑 什麼的,搗鼓個一星期,想不記住都難。但是有一些機制,很容易一不小心掉進陷阱。

強烈要記住:所有安裝包安裝完畢後,一定要 再次 給新生成的文件夾和文件遞歸授予用戶權限。

我開始搭建Ftp的時候,新建了用戶 admin,登入了之後還是不能上傳文件,最後發現是用戶權限的問題。

用 chown -R user:group /目錄名

這裏我的user應該是 admin。

然後還要給這個文件夾的用戶賦予權限

chmod -R 777 /目錄

如果你先 給 /A 賦予了 寫權限(4) ,然後當前登入用戶是root,在/A下創建了一個文件夾 /B,

這個時候你用admin 開心的登入了Ftp,發現/B下你還是不能上傳文件,原因很顯然。 你用root 創建B後,一定要再次 把它的主人 chown 成admin。

再次執行下

chown -R admin:admin /A 即可


【5】Ubuntu shell 腳本札記

個人覺得shell 很強大,但是 語法令人蛋疼,所以我決定不喜歡這門腳本語言。會編寫簡單的shell啓動腳本就行了。

哪天 shell script可以用 java script 來編寫,那一定是一種進步。

功能是這樣的,看看標題裏就知道,我們有很多軟件需要啓動,mysql,ftp,tomcat,nginx。

每次都輸入 service nginx stop,tomcat如果沒有註冊服務的話,要用startup.sh 等。很煩怎麼辦?而且我又是個喜歡打命令加 - 參數的人。

爲了統一,只需要新建一個 目錄  /mydata/myshell 然後vi /etc/profile 把這個路徑配置到環境變量裏。

然後我們就能在 /mydata/myshell 裏寫腳本啦。 我爲每個程序起了一個名字,非常簡單,就是首字母 m f t n

這樣,如果我要啓動 mysql 只需要:

m

關閉mysql,只需要

m -s  或者 m -stop

reload,只需要:

m -r 或者 m -reload

其他的類似。

具體腳本:

#!/bin/bash
echo "-----------------------------------------------------------------------"
if [ "$1" = "-s" -o "$1" = "-stop" -o "$1" = "stop" ];then
    echo "[tb_shell] Stoping mysqld..."
    echo "------------------------------------------------------------"
    service mysqld stop
    echo "------------------------------------------------------------"
    echo "[tb_shell] Mysqld stopped successfully!"
  elif [ "$1" = "-r" -o "$1" = "reload" -o "$1" = "-reload" ];then
    echo "[tb_shell] Reloading mysqld..."
    echo "------------------------------------------------------------"
    service mysqld reload
    echo "------------------------------------------------------------"
    echo "[tb_shell] Mysqld reloaded successfully!"
  else
    echo "[tb_shell] Starting mysqld..."
    echo "------------------------------------------------------------"
    service mysqld start
    echo "------------------------------------------------------------"
    echo "[tb_shell] Mysqld started successfully!"
fi
echo "----------------------------------------------------------------------"

if 語句的 多條件判斷着實讓人蛋疼,注意一下幾個原則:可以減少錯誤:

數字之間的比較,變量不要加引號,比較符號需要用字母形式:

$1 -eq 2 -o $1 -eq 3

字符串之間的比較,變量需要加引號,且比較符號要用 符號形式:

"$1" = "123"

爲什麼 我的腳本里可以用 -o呢,因爲 每個 表達式都是一個boolean 數值型的結果,所以要用 -o。不能用 ||


【6】 vsFtp 默認無法訪問 叫做 WEB-INF 的文件夾裏的內容。

恐怕像我這種Linux小白會十分蛋疼。我也是自己發現的。網上也不好找答案。這是vsftpd的默認配置,我也不想去研究怎麼修改了。反正這正是linux系統安全性的體現。



【7】 常用命令

Ubuntu 常用命令:
ls, cd, clear  這些還是非常好用的。
vi /etc/profile     //編輯系統環境變量
ps aux | grep  進程名稱     //查看進程
netstat -pl    //查看端口和佔用程序這個選項參數很有用,只看端口和 應用程序,而且不會彈出很多,很適合阿里雲虛擬機的屏幕高度
service appname start/stop/reload  //服務啓動/終止/重啓
chmod -R 751 目錄      //遞歸授予目錄的權限
chown -R user:group 目錄   //遞歸改變目錄的擁有者
cp -r Adir/*  Bdir    //把Adir下的所有文件拷貝到 Bdir目錄下   這個命令很常用,養成這種拷貝方式很好。不要同時掌握幾個拷貝方式,給自己弄錯的機會。
mkdir dir    //創建一個目錄
搜索文件:find whereis的我勸大家不要用,個人覺得真沒用。
用文件定位就可以找到某個文件在哪個目錄:
locate 文件名

touch file  // 創建一個文件


Mysql 常用命令:
mysql -u root -p  //數據庫登入
create user 'username'@'localhost' identified by 'password';   //創建用戶
grant select,insert,update on database.tablename to 'username'@'localhost' identified by 'password';   //後面的密碼等都要再寫一遍,不然會出大問題,留作思考。
use database ;
update mysql.user set password = password('password') where user = 'username';  更新密碼






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章