最近用Python寫了個外掛,需要部署到Linux環境的服務器上,由於之前本地開發時使用virtualenv,使用這個虛擬環境有個好處是項目中依賴的庫不會是全局的,只在當前項目的目錄下有效,因為我是Mac系統,virtualenv環境下的庫文件和linux上所需要的庫不通用,所以不能簡單的將整個env拷貝到服務器運行,需要做一些額外的工作。
一般每個不同的項目都會依賴各自的庫,有些庫的版本不一樣會引起沖突,為了解決這個問題,需要使用虛擬環境,Python可以在每個項目目錄下創建各自的虛擬環境,項目所依賴的包就在環境目錄下,這樣避免了庫版本的沖突,也方便相同操作系統間可以快速的拷貝項目運行。
我使用的是Python3編寫的項目,CentOS 7的服務器上只有Python2,所以需要先安裝一下Python3的環境
第一步:安裝Python3環境
1.首先安裝編譯環境(后續需要從python官網獲取Python3的源碼自己編譯python)
1 |
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make |
2.從官網下載python3的源碼
1 |
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz |
3.依次執行 解壓>進入解壓后的目錄>編譯安裝
1 |
tar -xvJf Python-3.6.2.tar.xz |
4.安裝完畢,創建軟連接
1 |
ln -s /usr/local/python3/bin/python3 /usr/bin/python |
5.后續工作,由於執行CentOS的yum命令需要使用自帶的python2的版本,所以需要做兩處修改
1 |
vim /usr/bin/yum |
第二步:將本地開發環境的依賴項目生成清單文件
1.在本地的開發環境中,env下執行:
1 |
pip3 freeze >requirements.txt |
清單文件將會生成在當前項目目錄下,內容如下所示
1 |
certifi==2018.4.16 |
將生成后的文件上傳到linux服務器
2.將Python項目上傳到服務器
1 |
#略... |
第三步:在linux服務器上為項目創建虛擬環境,並安裝項目所需的依賴
1.切換到pip3所在的目錄 /usr/local/python/bin,執行以下命令
1 |
# 安裝虛擬環境 |
第四步:添加自定義系統服務(很重要)
1 |
# 這樣的命令在ssh終端退出后,python進程也會被殺掉 |
需要創建一個自定義的系統服務,來保證python程序能夠在后台運行。
1.創建系統服務
1 |
vim /usr/lib/systemd/system/robot.service |
內容如下:
1 |
[Unit] |
ExecStart為服務啟動時執行的命令,不能用相對路徑, 一定要全路徑。
這里也可以將命令寫到任意的.sh文件中,這里寫.sh文件的全路徑也是可以的。
2.啟用自定義系統服務
1 |
systemctl enable robot |
3.啟動服務
1 |
systemctl start robot |
可以查看進程,確認一下服務是否啟動
1 |
ps aux|grep robot |
完畢!