這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
對於服務端來說,設定管理員,將項目部署到服務端是比較麻煩的事情。這裡由於使用的是國外的雲端服務器的原因,所以並不是像一般的設定管理員那麼順利,甚至差別還是比較大的。這裡使用的是CentOS7.2版本的VPS。
在pycharm中,通過Tools->deployment->configuration添加部署的伺服器時,如果單單使用剛剛從雲端服務端配置好的VPS的ip地址是根本行不通的,這一點,從使用putty登入到VPS中就可以明白,出於安全考慮,不可能隨便訪問VPS。所以,需要佈建服務端。
在CentOS中,本身已經安裝了python了,可以通過putty串連,然後通過python -V查看版本(注意,這裡的是大寫的V),所以可以使用pip安裝python的相關軟體包,但是安裝CentOS的軟體包需要使用yum,dpkg,rpm等。
查看是否通過yum安裝了某個軟體包,可以使用yum list installed,或者yum list installed | grep "軟體名"查看。
查看是否通過rpm安裝了某個軟體包,可以使用rpm -qa | "軟體名"查看。實際上使用例如rpm -q httpd就可以查詢httpd是否已經安裝。
查看是否通過deb包安裝的,可以通過dpkg -l | grep "軟體名"
如果是以源碼包自己編譯安裝的,如.tar.gz等,就只能看執行檔案是否存在了。
用root使用者安裝的可執行檔一般在/sbin或者/usr/bin。
在centos,ubuntu中都可以使用find / -name 檔案名稱,可以尋找程式。需要注意,一般來說linux才會預設安裝apache,而這裡,我的CentOS並未安裝apache,所以需要自行安裝apache。注意,apache基金會現在已經將apache的web server改名為httpd了,所以安裝的時候使用的是yum -y install httpd。需要注意的是,在centos中使用find / -name httpd.conf可以尋找到設定檔,路徑一般就是/etc/httpd/conf/httpd.conf,而在ubuntu中根本尋找不到httpd.conf檔案,而是需要使用find / -name apache2.conf尋找,一般路徑在/etc/apache2/apache2.conf路徑下。最後,最重要,最需要注意的是,在設定檔夾下找不到VirtualHost配置,其實這是因為,這個配置被放到/etc/apache2/sites-enabled/000-default檔案夾裡面了。
另外,如果是在centos,可以使用find -name 'httpd'查看httpd的安裝位置。還有需要注意的是,在apache下,web檔案的放置路徑在/var/www下,這點可以再httpd.conf或者apache2.conf中可以看到。
需要注意,一些架構內建測試伺服器,例如bottle,flask這些都是帶有測試伺服器的,但是真的要使用的話,不建議開啟。所以還是得使用httpd,而httpd最麻煩的地方在於需要配置。在開始操作之前最好使用find / -name 'httpd'查看httpd被安裝到哪些目錄下,然後進行操作比較穩妥點。
對於一些VPS商家,可以直接選擇已經安裝好的伺服器,例如這裡我的VPS選擇安裝的時候可以選擇安裝LAMP。當然還有很多其他的,例如docker,django等可以選擇。
這裡最需要注意的是,其實apache已經問我們提供了很好的引導措施,在安裝了apache之後,輸入ip地址可以看到引導頁,ip地址/info.php之後可以看到一些需要的資訊,而實際上輸入ip地址看到的是/var/www/html/index.html檔案,而實際上,info.php,index.html檔案在/var/www/html路徑下,而/var/www是web檔案的放置路徑。另外,對於一些不懂的問題可以再apache官網查看。
簡單點說,剛開始搞apache時,需要先看看index.html頁面,這樣才能知道需要怎麼搞apache的配置。而info.php裡面則是我們一般需要的資訊,如一些設定檔的位置。
其實只要搜尋各個系統下apache怎麼搭建就可以了,一般都有很詳細的配置介紹,例如搜尋ubuntu下apache2的web項目部署。
可以使用cmd命令的telnet ip port方式查看ip的連接埠是否封閉。一般如果沒封閉,那麼背景都變成黑色,或者給出一點其他提示。
另外,centos中防火牆使用iptables,而ubuntu沒有,但是可以使用ufw命令,ufw其實就是ubuntu fire wall簡寫。總的來說,如果要熟悉系統防火牆,可以直接搜尋某系統的防火牆,例如搜尋:centos防火牆,ubuntu防火牆。
防火牆可能會監聽連接埠導致連接埠不能訪問,所以防火牆也是需要注意的。而對於上傳項目到伺服器,需要開放連接埠,而連接埠一般有自己的作用,所以開放連接埠需要注意。
使用putty實現上傳,需要注意,需要下載.zip格式的,因為.exe的將下面的工具封裝了。開啟putty的解壓檔案夾,裡面會有如pscp.exe,psftp.exe這些工具,他們都是可以用於傳輸檔案的,作用跟在putty中用scp命令進行上傳項目是差不多的,這裡scp是secure copy的意思。需要注意,scp對於在linux間傳輸資料有用,如果是windows到linux間傳遞資料,那麼就需要使用pscp.exe了,但是pscp.exe只能傳輸單個檔案,如果需要傳輸項目,需要使用psftp.exe。另外,對於服務端的檔案夾需要設定chmod -R 777 /var/www設定讀寫權限,不然傳輸會失敗。
對於使用psftp傳輸檔案的,使用cmd定位到psftp.exe的路徑下,這裡可以使用psftp -h查看有哪些參數可供選擇。然後:
1、如果沒有ssh key file的,直接輸入psftp,有的話,輸入psftp -i key路徑。如果需要指定連接埠,可以帶上-P 連接埠號碼。要求輸入密碼可以帶上-pw 密碼。
2、填寫key的帳號和密碼,帳號如果是VPS的,一般是root。
3、登陸成功之後,目前的目錄是/root,也就是我們使用putty登陸使用的~路徑,可以使用cd命令轉移路徑。如果對於需要使用的命令不熟悉,可以輸入help查看命令。
4、使用lcd切換本地路徑。
5、使用put上傳,使用get下載。但是使用put,get只能操作單個檔案
6、使用mget,mput上傳下載多個檔案。
7、進入psftp之後,輸入help之後可以看到命令的用法。
上傳項目可以通過如pycharm的Tools->Deployment->Configuration來設定,通過Tools->start ssh session實現一個會話。但是需要注意如果有SSH key的存在,設定的時候應該考慮將SSH key的檔案匯入,不然訪問會被拒絕。另外Tools->Deployment->Configuration的設定中,對於協議的選擇需要注意,一般選擇sftp,然後Auth Type選擇Key pair(Open SSH or puTTy),然後匯入ssh key檔案,這裡需要特別注意,在這裡使用putty匯出的ssh key檔案會報錯,所以如果已經產生了ssh key檔案了,那麼需要使用puttygen匯入這個ssh key檔案,然後點擊conversions功能表按鈕,選擇匯出open SSH檔案,注意open SSH檔案和SSH檔案一樣都是ppk尾碼的。其實如果我們使用的是ssh key檔案,pycharm會給出提示,說明需要Open SSH格式的ssh key檔案,然後配置好後確定就可以了。另外,如果需要確定配置好後,是否串連的通,可以點擊Tools->Deployment->Configuration下的Test SFTP Connection。
然後再Tools->Deployment->Browse Remote host,就可以看到串連上了的遠端的伺服器路徑下的目錄了,當然如果沒目錄的話,不要因為沒目錄而以為失敗了。
這裡可以通過Tools->Deployment下的菜單進行上傳下載操作,也可以通過Tools->Deployment->Browse Remote host出現的Remote Host介面操作。另外,需要注意,需要點擊需要pycharm中需要上傳的項目,然後Tools->Deployment下的上傳下載操作功能表項目才會顯示,所以如果點擊了Remote Host介面的項目之後,開啟Tools->Deployment,會發現上傳下載操作功能表項目是不能操作的,所以這點需要注意!
對於Tools->Deployment->Automatic Upload自動上傳功能,需要謹慎使用,因為自動上傳的話,會讓遠程代碼編輯變得和本地代碼編輯一樣,所以個人比較傾向手動上傳下載,這樣保證不會出錯。
對於項目的操作,如果需要使用到遠端偵錯,那麼,需要在settings->Project:項目名->Project interpreter右上方的齒輪中選擇add Remote,然後出來的介面中選擇SSH Credentials,配置好之後,點擊確定,並將Project Interpreter選擇為他,這樣就可以進行遠端偵錯了。這個過程中,pycharm會上傳本地的資料到服務端,以實現遠端偵錯,其中,最重要的是上傳本地的pycharm-debug.egg,當然,這個東西也可以直接在服務端使用命令安裝,畢竟本地安裝比較耗時,這個東西主要是為了調試用的。當然還有其它的東西要上傳的。等到Upload pycharm helpers完成就可以了,雖然可能會有點慢,下載完之後還需要進行一些諸如帳號密碼之類的設定。另外,完成之後本地也需要下載一些東西。另外,python console會串連上遠端的python命令列,會使用服務端安裝的python控制台。
使用putty通過命令來讓服務端編譯go項目。這裡注意,使用go build之後出現的檔案沒有尾碼,然後go run命令會一直停留著,這點和windows下是一樣的,其實已經在運行了。
跟apache不一樣的是,go項目的連接埠需要自行開啟,不像apache那樣能直接配置。可以使用netstat -a查看網路狀態,不過奇怪的是80和22兩個連接埠都是可以串連的,但是卻沒有顯示,估計是配置了ssh和apache的原因。另外需要特別注意,iptables最多是允許連接埠被串連而已,並不能開啟連接埠,而且如果需要操作iptables的話,需要按照iptables的規則來,使用iptables --h可以查看,網上的操作基本上用不上。最後,使用iptables -I INPUT -p tcp --dport 8080 -j ACCEPT,然後使用iptables -L -n可以看到確實允許了8080連接埠了,但是在windows上使用telnet命令卻發現還是不行。應該說,需要時這樣一種流程,一般情況下,一個剛安裝的centos系統都會有22連接埠的,通過這個連接埠我們可以上傳下載,甚至操作很多東西,然後使用iptables可以允許某個連接埠被使用,然後我們通過22連接埠上傳項目上去,通過項目開啟需要的連接埠。當然可以通過安裝apache這樣的軟體直接就開啟一個像80這樣的連接埠。
另外需要注意,ubuntu中允許訪問連接埠需要兼顧iptables和ufw兩個地方。
這裡使用nmap這款非常有用的嗅探工具將會事半功倍,在ubuntu中安裝完nmap,只需要使用nmap localhost就可以查看自己本地開放的連接埠。這比使用netstat -tanpu | grep "8080"這樣去尋找要高效許多。同時,使用nmap還會幫你列印出開啟這個連接埠的是哪個程式。當然,也可以使用netstat -a可以查看網路使用方式,包括連接埠。
開啟連接埠其實在使用go run xxx.go檔案的時候go內建伺服器就已經根據代碼配置開啟了相應的連接埠了,而iptables,ufw這些僅僅起到一個允許訪問的作用,並非是開啟連接埠。這裡需要注意,不要以為在網頁中開啟自己配置的網站地址之後沒開啟成功就以為連接埠沒開啟成功,開連接埠開啟成功,要使用telnet命令。也就是說先go run xxx.go,然後再使用telnet命令查看。ps:這個時候不可能在putty中使用nmap查看了,因為go run xxx.go命令會阻塞你輸入命令。
總的來說,如果是一般的使用,那麼使用go內建的伺服器就夠了,可是對於大型的web項目,還是搭配伺服器使用比較好。