前言:被linux和java虐了快1年,筆者的心裏是崩潰的,這一年的經歷,更加堅決了擁 護.NET之心,微軟對於開發者真的是太友好了,不管從工具到文檔,乃至技術應用性都是那麼爲用戶着想,筆者認同一種說法JAVA之因此佔有比例高的緣由是JAVA從開發工具到部署環境都是免費的,高自由度的JAVA也意味着更多的折騰,而.NET的開發,2015年以前是沒有community版以前,搞.NET開發是要錢的並且是不少錢(VS、WINDOWS、MSSQL),這也是大公司傾向於JAVA的緣由之一吧,可能國內盜版橫行並不能感覺到國外對版權對知識產權的重視,不少開發者並不以爲.NET開發很花錢,單一個VS 2017 professional版本就要3k5軟妹幣以上,並且是每一年,服務器系統以及MSSQL一整套微軟的解決方案花錢可真不低。微軟也意識到了這個問題,因而.NET CORE
來了,不只開源
並且跨平臺
(WINDOWS、LINUX、MAC OS),.NET CORE前不久已經發布了2.0版本,號稱已經兼容了.NET Framework下nuget的70%的類庫,而且開發了強大的Kestrel
服務器應用來替代IIS用以跨平臺部署。全球90%的服務器使用的都是liux系統,並且docker的興起,.NET CORE在5年後應該會有較大的需求,因此,linux系統的操做和使用也即將成爲.NET CORE開發者一條必經之路,學好用好linux是必須的,筆者將來(預計半年內)可能會出個.NET CORE系列,有興趣的能夠關注下。言歸正傳,以前筆者學習了ubuntu沒多久以後,又用上了RHEL,因爲RHEL企業版是收費的,故而常常用的是與RHEL同根同源版本CentOS,當前時間2017年7月,能夠下到CentOS 7.3也就是對應RHEL 7.3(二者區別知乎上講得更清楚)。如下記錄了筆者遇到的幾個坑,本文僅供自用,不足之處請諒解,本文不按期更新:php
a.vi
的使用,通常linux的發行版本都會自帶這個編輯器,替代品就不少啦,vim、nano
等。注意linux是嚴格區分大小寫
的,命令是vi xxx/xxx
意爲使用vi
打開某文件,shift+g
或者大寫G
是直接跳轉到最後一頁,linux有不少用同字母大小寫來實現對反操做的命令,我想你已經猜到了小寫g
則就是跳轉到第一頁。
在vi編輯器(vim也是)下分編輯模式和非編輯模式,默認打開的是非編輯模式,即只能夠查看不能修改,若是須要修改文件,按i
(小寫)進入編輯模式(左下角有會---INSERT---
的狀態提示)才能修改,修改時候注意你的光標所在位置哈,剛開始很不習慣容易改到其餘地方,編輯完成以後先按ESC鍵
退出編輯模式,再輸入:wq
進行保存,若是你誤操做了,要放棄,則先按ESC鍵
退出編輯模式,再輸入:q!
便可,vi的其餘幾個經常使用命令,非編輯模式下輸入:q
正常退出vi,非編輯模式輸入/xxx
進行模糊查找,查找下一個是小寫n
,查找上一個是大寫N
。記命令要這麼記哈,q
是英文quit
(退出)的首字母,linux裏有大量的這種英文首字母簡寫,明白單詞分分鐘就記住怎麼用了,wq
=write quit
(寫入、退出),n
=next
(小寫下一個,取反上一個則是大寫)。更多vi命令html
b.WinSCP
是一款鏈接linux的軟件,不只提供了SFTP的功能,也提供了PuTTY
的bash終端直連linux,這個東西比你直接在linux下操做要方便不少,什麼光標選擇、粘帖複製易如反掌。要使linux徹底使用上WinSCP的全功能你須要安裝SSH
,CentOS 7.3下爲yum -y install openssh-server
,裝完以後記得開啓SSH的root遠程鏈接權限,否則不少寫入操做你都沒辦法操做,編輯/etc/ssh/sshd_config
文件,注意這裏是sshd_config
不是ssh_config
,多了一個d
,linux下不少這種同一個東西不一樣名字的坑,找到PermitRootLogin
這一行,將之修改成PermitRootLogin yes
,完了記得須要重啓sshd
服務才能生效,命令service sshd restart
,完成以後就能夠用WinSCP鏈接了。以下圖,協議默認SFTP,端口默認22java
c.使用虛擬機時,網絡部分建議使用NAT模式,該模式下可使用主機的網卡直接出去,簡單容易操做linux
d.經常使用指令及對應軟件命:web
e.不知道命令怎麼用,通常都會有help幫助,例子vi --help
,命令後加 --help
就會顯示ubuntu
f.按2次tab鍵會列出當前文件夾下的全部文件,若是輸入了xxx,再按兩次tab則會自動補全或列出以xxx開頭的文件夾及文件vim
g.經常使用shell命令
1.cd
,轉到某文件夾(目錄),全拼:change directory
,示例:cd xxx
2.mkdir
,建立文件夾,全拼:make directory
,示例:mkdir temp
3.mv
,移動文件或文件夾,全拼:move
,示例:mv aaa bbb
移動aaa到bbb
4.rm
,刪除文件,全拼:remove
,示例:rm -f xxx
5.rmdir
,刪除文件夾,全拼:remove directory
,示例:rmdir xxx
6.cp
,拷貝文件,全拼:copy
,示例:cp a path
,將a文件拷貝到path文件夾
7.ls
,查看文件夾下資源,全拼:List Source
,後面能夠跟不少種參數來進行篩選和排序,示例:ls -a
8.locate
,查找某文件路徑,示例:locate index.html
10.十大經常使用命令
h.linux默認路徑爲絕對路徑,及任意路徑下cd /xxx
意味着你將轉到系統根目錄下的xxx文件夾,若是要到當前目錄下的xxx文件夾則須要使用cd ./xxx
這樣的表示方法,./
即表示當前文件夾下,上一級文件夾下的xxx文件夾則爲../xxx
,能夠依次類推
a./etc/profile
爲用戶變量配置,/etc/environment
爲系統變量配置,當同一變量出如今兩個文件中時,以/etc/profile
用戶變量配置爲準,linux各類環境配置文件看這裏
b.使用root賬號登陸以後,先修改用戶變量配置,也就是/etc/profile
文件,在最後添加如下代碼:
MY_PROXY_URL="http://x.x.x.x:xxx" HTTP_PROXY=$MY_PROXY_URL HTTPS_PROXY=$MY_PROXY_URL FTP_PROXY=$MY_PROXY_URL http_proxy=$MY_PROXY_URL https_proxy=$MY_PROXY_URL ftp_proxy=$MY_PROXY_URL export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
c.保存以後,使用source /etc/profile
從新加載一下配置
d.修改yum的配置文件,/etc/yum.conf
,在最後添加如下代碼:
proxy=http://x.x.x.x:xxx
傳送門一篇較詳細的配置
xxx is not in the sudoers file. This incident will be reported
,某用戶不是sudoera.使用root賬號登陸以後,爲/etc/sudoers
文件添加修改權限(爲了安全性默認是隻讀),使用這個命令chmod u+w /etc/sudoers
b.編輯/etc/sudoers
文件,找到root ALL=(ALL) ALL
這一行,而後另外一起行,添加代碼:xxx ALL=(ALL) ALL
(xxx是你的用戶名),而後wq
保存退出
c.記得撤銷該文件的修改權限哈,命令爲chmod u-w /etc/sudoers
傳送門筆者當時搜到的有效文章
Could not retrieve mirrorlist
,沒法檢索鏡像列表a.這個問題筆者在CentOS 7.3 minimal版本下遇到,緣由是你網卡沒開
b.編輯/etc/sysconfig/network-script/ifcfg-ens33
這個文件,找到ONBOOT=no
這一行,將它改成ONBOOT=yes
,保存退出
c.而後使用dhclient
刷新配置便可
筆者當時搜到的有效文章
如下操做,筆者建議你直接登陸root賬號進行,不然出現的root權限要求會不少
a.這是筆者在ubuntu裏欠下的坑,一直沒忙贏寫就又跑來CentOS下挖坑了,二者大同小異,湊合看吧,建議你按JRE/JDK->Tomcat->Apache的順序安裝
b.JRE/JDK的安裝
若是隻是服務器跑JAVA應用,安裝JRE就夠了,JDK全稱是Java Development Kit(java開發套件),JRE全程是Java Runtime Environment(java運行時環境),從字面意思就能夠區分你什麼環境該裝啥了
1.裝JRE/JDK,我建議使用rpm安裝
,其餘方法筆者在安裝、卸載時候都遇到各類問題
2.以JRE1.8.0_131爲例,首先下載rpm安裝包,命令wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jre-8u131-linux-x64.rpm
,安裝後默認路徑是/usr/java/jre1.8.0_131
,其餘JDK/JRE地址
3.安裝rpm,命令rpm -ivh jre-8u131-linux-x64.rpm
4.檢查JRE/JDK版本,命令java -version
5.配置JAVA_HOME
環境變量,編輯/etc/profile
文件,在末尾追加export JAVA_HOME="/usr/java/jre1.8.0_131
,退出編輯器後從新加載該文件source /etc/profile
6.卸載用rpm方式安裝的JDK/JRE,命令rpm -e jre-8u131-linux-x64.rpm
7.rpm命令詳解,ivh
爲install(安裝)、verbose(輸出詳細信息)、hash(打印hash值)
,rpm
命令能夠跟不少參數,有興趣使用rpm --help
查看,e
的全拼爲erase
(刪除/抹除)此處不一樣於常見的remove、uninstall
這類用詞,學linux也是學計算機英語的好機會,更多rpm命令看這裏
c.Tomcat的安裝
筆者建議下載tar.gz壓縮包,解壓安裝
1.以tomcat8.5.16爲例,先下載tomcat
,命令wget --no-check-certificate --no-cookies http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz
2.解壓apache-tomcat-8.5.16.tar.gz
,命令tar -xvzf apache-tomcat-8.5.16.tar.gz
3.開啓關閉命令工具在apache-tomcat-8.5.16/bin/
目錄下,一個start.sh
一個shutdown.sh
,使用sh ./apache-tomcat-8.5.16/bin/start.sh
啓動tomcat
4.檢測tomcat是否開啓,命令ps aux|grep tomcat
,將能夠看到進程信息,該命令會產生默認的一個進程信息(圖中39900),只有帶路徑的進程信息纔是正在運行的tomcat進程
5.關閉tomcat的兩種方式,一是用bin/shutdown.sh
,二是直接殺掉tomcat進程kill -9 <pid>
,-9
是數字9
,pid即標註出來的進程數字id,示例:kill -9 31630
6.tomcat默認端口8080,須要開防火牆,臨時開啓命令firewall-cmd --add-port=80/tcp
,而後從新加載防火牆配置firewall-cmd --reload
,最後檢查8080端口是否已經生效sudo firewall-cmd --list-all
7.若是開了8080端口,那麼則能夠直接使用x.x.x.x:8080
訪問,x.x.x.x爲你的linux所用ip,順利看到下圖則表示你的tomcat成功搭建完成
8.關於war
包的上傳與部署,將編譯後的war
包上傳至./apache-tomcat-8.5.16/webapps/
文件夾下便可,tomcat在啓動時會自動部署,另一種方式是使用Manager App
功能(以下圖),但筆者並不建議開啓該功能(基於服務器安全緣由考慮),有興趣的請看這裏
d.Apache的安裝
apache官方並無提供官方編譯版文件,只提供了源碼,你能夠下載後自行編譯,或者使用官方推薦的第三方編譯版本安裝,筆者最佳實踐是使用yum或apt
直接安裝,當前筆yum可以使用的apache版本爲2.4.6
1.apache在linux大部分系統裏的軟件名叫httpd
,命令yum -y install httpd
,若是須要使用SSL(俗稱https)的話,能夠一塊兒把mod_ssl
這個module安裝了yum -y install mod_ssl
2.打開防火牆端口(永久性),firewall-cmd --permanent --add-port=80/tcp
,這裏只開了80端口,若是須要使用SSL,則還須要開啓443端口firewall-cmd --permanent --add-port=443/tcp
3.從新加載防火牆配置firewall-cmd --reload
並檢查端口firewall-cmd --list-all
4.檢查apache是否開啓service httpd configtest
,當看到Syntax [OK]
則表示已經正常開啓,若是不正常則須要重啓一下apache
5.在CentOS下啓動start
、重啓restart
、關閉stop
,apache須要調用systemctl
,示例:systemctl restart httpd
6.若是已經打開了80端口,則能夠直接使用x.x.x.x:80
訪問(:80可省略
,默認80端口),x.x.x.x爲你的linux所用ip,順利看到下圖則表示你的apache成功搭建完成
7.在CentOS中,apache默認安裝後的路徑爲/etc/httpd
e.Apache與Tomcat整合
首先說一下實現Apache與Tomcat整合目前主流有2種方案,一種是使用代理及反向代理
的方式,另外一種則是使用AJP的方案
,我的最佳實踐是使用方案一:代理及反向代理
,這樣作能夠方便作負載均衡和集羣,後者方案配置也麻煩,固然後者的優勢是啥,筆者瞭解到的是AJP是二進制的協議,速度快一點,具體沒有實際對比過,兩者從實際操做上來講,前者更容易上手,利用Apache處理http的強大功能,能夠按要求處理以後再轉發給tomcat
1.在Apache的/etc/httpd/conf.d
文件夾,注意是conf.d
,該文件夾下的全部*.conf
文件都會被apache看成配置文件加載,建立你本身的配置文件便可,示例:
vi fortomcat.conf
建立fortomcat.conf
添加以下代碼
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://localhost:8080/xxx/ ProxyPassReverse / http://localhost:8080/xxx/ ErrorLog /var/log/httpd/xxx-error.log CustomLog /var/log/httpd/xxx-access.log common </VirtualHost>
代碼解析,ProxyPass /
爲正向代理,ProxyPassReverse /
爲反向代理,加上VirtualHost *:80
的意思就是爲把80端口下的全部/
請求轉發到localhost:8080/xxx/
下,xxx
即爲你的tomcat應用名
,注意結尾必須帶/
,這個配置的關係請嘗試修改後感覺,很難用語言描述清楚他們之間的微妙關係,總的來講就是路由的問題,ErrorLog
爲指定apache錯誤日誌,CustomLog
爲指定apache訪問日誌
保存退出,而後重啓apache,命令systemctl restart httpd
2.若是完成以上操做仍未能經過apache連同tomcat,請查看/var/log/httpd/xxx-error.log
錯誤日誌文件,在CentOS 7.3 minimal版本中,筆者遇到[error] (13)Permission denied: proxy: AJP: attempt to connect to x.x.x:8080
的問題(該錯誤信息來源於配置的/var/log/httpd/xxx-error.log
),這裏下須要使用/usr/sbin/setsebool -P httpd_can_network_connect 1
命令便可修復
f.關於Aapche配置SSL
我以爲我看到的文章裏微軟爲.NET CORE寫的apache+kestrel的文檔是簡潔明瞭並且有效的了,有興趣的朋友能夠看一下,筆者配置apache時參照這篇文章完成的,國內大部分都是AJP的方案,很繁瑣