本文記載了在阿里雲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'; 更新密碼