在上一篇我們在本地的虛擬服務器上安裝好CentOS7后,我們的python web服務、自定義的python service或python腳本需要在服務器上運行,還需要在服務器安裝各種相關的軟件才行,一般來說,想要實現自動化部署需求,還需要安裝nginx、svn、uwsgi、python3.0(系統自帶python2.7.5)、supervisor、postgresql、redis(nosql緩存根據自己代碼的需要而定)。
PS:本人不是專業的運維,只能根據自己的研究弄弄單機版的python web服務器,而對於多服務器自動化同步的部署、服務器的監控、Linux服務器的安全、服務器的調優(很多服務安裝不是重點,能將各種參數運用配置到洽到好處才是難點),大家最好找專業的運維工程師來處理。再一次感謝小戴同學的盡心幫助,讓我學會了很多服務器運維方面的知識,才有這篇文章。(在這里幫小戴做做廣告:人品好、技術牛、外包費用低,我們公司服務器維護外包給了他,配置各種服務器非常快,想學python與自動化運維的可以上他的博客http://www.linuxyw.com/)
一、安裝常用工具包
輸入下面命令,安裝各種常用工具包,可以逐項直接輸入下面命令進行安裝(如果出現y/n/d選擇時,輸入y加回車就可以了)
yum install -y pcre-devel yum install -y openssl openssl-devel yum install gcc gcc-c++ ncurses-devel perl -y yum -y install zlib zlib-devel yum install wget lrzsz libxml2 -y yum install kernel-devel libxslt-devel libpqxx-devel libffi-devel python-devel libpq-dev -y
在使用yum安裝各種工具包時,由於使用的源默認是國外的,所以有時有一些源由於網絡或什么原因會安裝不上,所以可以通過更改yum安裝源來提升安裝效率,下面是使用網易源(阿里源在虛擬機上好像使用不了,如果使用阿里雲的話可以替換為阿里源)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup cd /etc/yum.repos.d/ wget -O CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo ## wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache yum -y update
PS:如果Python已升級到3,更改yum源需要將python的軟鏈接指回2的版本(即輸入命令python -V可看到的是2.7版本),不然運行yum -y update后可能會出錯,導至yum無法使用。另外,使用yum升級,好像會將內核一些程序也升級了。
二、安裝nginx服務
首先在網上找到下面安裝包(如果下面組件版本對不上,可能會造成nginx安裝失敗)
nginx-1.10.3.tar.gz openssl-1.0.2n.tar.gz pcre-8.39.tar.gz zlib-1.2.11.tar.gz
將它們上傳到服務器:/usr/local/src 目錄下面,openssl、pcre和zlib這些組件不安裝問題也不大,不過這些常用的組件安裝好了,以后需要時就不必重新安裝了
1、安裝pcre
cd /usr/local/src mkdir /usr/local/pcre tar zxvf pcre-8.39.tar.gz cd pcre-8.39 ./configure --prefix=/usr/local/pcre make make install
2、安裝openssl
cd /usr/local/src mkdir /usr/local/openssl tar zxvf openssl-1.0.2n.tar.gz cd openssl-1.0.2n ./config --prefix=/usr/local/openssl make make install vi /etc/profile 在vi編輯器的最后面添加下面代碼(vi編輯器的使用請自己百度) export PATH=$PATH:/usr/local/openssl/bin 按esc鍵,輸入:wq! 保存退出 輸入下面代碼讓剛添加的代碼生效 source /etc/profile
3、安裝zlib
cd /usr/local/src mkdir /usr/local/zlib tar zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure --prefix=/usr/local/zlib make make install
4、安裝Nginx
groupadd www useradd -g www www -s /bin/false cd /usr/local/src tar zxvf nginx-1.10.3.tar.gz cd nginx-1.10.3 ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.2n --with-zlib=/usr/local/src/zlib-1.2.11 --with-pcre=/usr/local/src/pcre-8.39 make make install
完成nginx安裝后,我們可以檢查一下nginx能否正常啟動
輸入nginx初次啟動命令:/usr/local/nginx/sbin/nginx
檢查nginx是否在進程中:ps -ef | grep nginx (可以看到nginx已在服務器上正常 運行了)
檢查nginx啟動后點用的端口:netstat -antup | grep nginx

這時如果想要用瀏覽器訪問的話,需要先關閉防火牆才行
輸入命令:systemctl stop firewalld
然后打開瀏覽器,輸入地址:http://192.168.0.128/ 就可以看到下面的頁面了(這個ip怎么來的,請看上一篇《python服務器環境搭建(1)——本地服務器准備》,也可以輸入ifconfig命令來查詢)

三、安裝supervisor(Python進程管理器)
因為supervisor目前只支持python2,所以得在升級到3之前進行安裝,不然會比較麻煩(文后附有升級到python3后,怎么調用python2安裝的說明)
安裝之前需要先安裝python的pip(程序自動安裝程序)
輸入命令:curl https://bootstrap.pypa.io/get-pip.py | python (回車后就會自動下載pip並自動安裝)
完成后查看pip版本:pip -V
安裝supervisor:pip install supervisor
四、安裝postgresql
登錄官網獲取安裝版本安裝地址 https://www.postgresql.org/download/linux/redhat/
輸入命令安裝postgresql數據庫
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm yum -y install postgresql11 yum -y install postgresql11-server yum -y install postgresql11-libs yum -y install postgresql11-contrib yum -y install epel-release yum -y install postgresql11-llvmjit yum -y install postgresql11-devel mkdir -p /data/pg/data mkdir -p /data/logs/pg chown postgres:postgres /data/pg chown postgres:postgres /data/pg/data chown postgres:postgres /data/logs/pg
初始化數據庫
su postgres initdb -D /data/pg/data /usr/pgsql-11/bin/initdb -D /data/pg/data systemctl enable postgresql-11 systemctl start postgresql-11
修改服務器系統環境變量
vi /etc/profile
添加下面配置
export PGHOME=/usr/pgsql-11 export PGDATA=/data/pg/data export PGLIB=/usr/pgsql-11/lib export PATH=$PGHOME/bin:$PATH
保存退出后,運行命令,讓配置馬上生效
source /etc/profile
配置postgresql.conf
cd /data/pg/data vi postgresql.conf
修改數據庫訪問地址(localhost為本地訪問,可以設置可訪問地址為對應的局域網IP或外網IP,也可以改為*,即允許所有地址訪問)
listen_addresses = '192.168.xxx.xxx'
配置pg_hba.conf
vi pg_hba.conf
找到# IPv4 local connections: 在它的下面添加一行,設置數據庫需要密碼訪問
host all all 0.0.0.0/0 md5
啟動pg服務
su postgres -c "/usr/pgsql-11/bin/pg_ctl -D /data/pg/data -l /data/logs/pg/logfile.log start"
修改postgres用戶登錄密碼
su postgres psql -U postgres Alter user postgres with password '123456';
我們可以在本地的windows系統里安裝postgresql11(官方下載地址:https://www.postgresql.org/download/windows/),然后使用pgAdmin4連接上服務器的數據庫,用圖形界面來管理數據庫
五、安裝redis
登錄http://download.redis.io/releases/ 選擇需要安裝的版本
進入tmp文件夾:cd /tmp/
然后再次輸入:wget http://download.redis.io/releases/redis-3.2.8.tar.gz
創建redis安裝文件夾:mkdir /usr/local/redis
解壓縮安裝包:tar -zxvf redis-3.2.8.tar.gz
進入安裝包文件夾:cd redis-3.2.8
執行安裝命令:make PREFIX=/usr/local/redis/ install
上面安裝命令執行完成,/usr/local/redis/目錄下就有個bin目錄,里面放的是redis服務相關的可執行命令
復制redis配置文件到指定目錄:cp redis.conf /usr/local/redis
六、安裝python3.5.4版本(python2.7.5還可以繼續使用)
PS:由於升級到python3以后,在yum安裝一些軟件時(只是部分),可能這些軟件的安裝還是使用python2來寫的,會導致無法使用yum安裝,所以最好將相關內容先安裝好以后再進行升級
安裝python依賴包:
yum groupinstall "Development tools" yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
下載Python3.5.4安裝包並進行安裝
cd /usr/local/src wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz tar -zxvf Python-3.5.4.tgz cd Python-3.5.4 ./configure --prefix=/usr/local --enable-shared && make && make install
在運行Python之前需要配置庫:
echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf
ldconfig
備份python2.7版本bin
mv /usr/bin/python /usr/bin/python2.7.5
ln -s /usr/local/bin/python3 /usr/bin/python
完成安裝,輸入下面命令就可以查看到當前安裝python的版本信息Python 3.5.4了
python --version
升級pip3安裝包
pip3 install --upgrade pip
修改python2.7版本運行的腳本鏈接,將以下文件全部用vi編輯器打開,將第一行的 #!/usr/bin/python 改為 #!/usr/bin/python2
vi /usr/bin/yum vi /usr/bin/yum-config-manager vi /usr/sbin/tuned vi /usr/libexec/urlgrabber-ext-down vi /usr/bin/supervisord vi /usr/bin/supervisorctl
批量安裝python3各種常用包
輸入命令:vi requirements.txt 粘貼下面內容
amqp anyjson argh asn1crypto Beaker beakeredis beautifulsoup4 bleach bottle bs4 cffi click cryptography cycler decorator dynaconf enum-compat eventlet flasgger Flask gevent greenlet html5lib idna itsdangerous Jinja2 jpush jsonschema kombu lxml MarkupSafe matplotlib mistune mock Naked nameko networkx numpy olefile packaging panda pandas paramiko pathtools path.py pbr Pillow print psycopg2 psycopg2-binary pyasn1 pycparser pycrypto pycryptodome pyparsing python-dateutil python-alipay-sdk python-box python-dateutil python-dotenv pytz PyWavelets PyYAML qrcode redis reload requests scikit-image scipy shellescape six typing tushare watchdog webencodings Werkzeug wrapt XlsxWriter yagmail
保存后,輸入命令:pip3 install -r requirements.txt
安裝程序會將里面常用的依賴包全部安裝,方便快捷
PS:使用源碼包編譯安裝python3以后,還會保留原python2的相關命令,所以直接使用pip安裝的是python2的包,要安裝python3的包,必須使用pip3
七、安裝uwsgi
安裝pepl源(不安裝有時安裝相關模塊時會找不到源)
yum -y install epel-release
安裝uwsgi依賴包
yum -y install uwsgi-devel
使用python的pip再安裝一次uwsgi(這樣可以避免后續安裝后,uwsgi運行時執行的是python2.7版本的問題)
pip3 install uwsgi
下載uwsgi安裝包
cd /usr/local/src/ wget https://projects.unbit.it/downloads/uwsgi-2.0.18.tar.gz tar zxvf uwsgi-2.0.18.tar.gz cd uwsgi-2.0.18 make -j 8 python3 uwsgiconfig.py --build cp uwsgi /usr/bin/
修改配置文件:vi buildconf/core.ini (在 buildconf/core.ini 文件中添加下面內容)
plugin_dir = /etc/uwsgi
bin_name = /usr/bin/uwsgi
創建uwsgi配置存放文件夾
mkdir /etc/uwsgi
編譯 python3.5 版本的uwsgi plugins(如果你修改了python35為其他名稱,記錄同步修改下面復制的文件名)
python3 uwsgiconfig.py --plugin plugins/python core python35
把生成好的*python35*.so復制到項目目錄下面
cp /etc/uwsgi/python35_plugin.so /usr/local/src/uwsgi-2.0.18 # 將uwsgi/python35_plugin.so復制到你的python項目源碼目錄下面 cp /etc/uwsgi/python35_plugin.s /data/www/xxx
python35_plugin.so不在正確的目錄下面時,使用uwsgi啟動python服務會經常出現 No such file or directory 錯誤,如下所示:
[uWSGI] parsing config file /etc/uwsgi/manager.xml
open("./python35_plugin.so"): No such file or directory [core/utils.c line 3724]
!!! UNABLE to load uWSGI plugin: ./python35_plugin.so: cannot open shared object file: No such file or directory !!!
這是因為在uwsgi的配置中,指定了運行插件python35_plugin.so,但在工作目錄中沒有找到這個插件引起的錯誤,只需要將它復制到項目所在的根目錄下面就可以了
輸入命令:uwsgi --version 就可以查詢到安裝的版本了
八、安裝svn服務
由於已升級到python3了,直接使用yum安裝會出現錯誤,所以我們需要操作一下,改回python2版本(PS:這是一個安裝了Python3后,需要使用Python2進行安裝軟件的例子)
刪除之前創建的python3鏈接:rm -rf /usr/bin/python
將之前備份的python2.7.5復制為python:cp /usr/bin/python2.7.5 /usr/bin/python
輸入安裝命令:yum install subversion
查看svn安裝的版本:svnserve --version
PS:一定要將python鏈接指向python2,不然執行的還是python3版本的命令
將python鏈接重新指向python3.5.2
刪除剛剛復制的python鏈接:rm -rf /usr/bin/python
創建新的鏈接指向新安裝的python3.5.4:ln -s /usr/local/bin/python3 /usr/bin/python
python服務器需要的相關軟件基本上就安裝完成了(當然redis與postgresql並不是python服務器運行的必要軟件,這是我自己框架所需要的),具體測試與配置,下一篇再寫
版權聲明:
本文由AllEmpty原創並發布於博客園,版權與博客園共同所有,歡迎轉載,未經本人同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。如有問題,可以通過1654937@qq.com 聯系我,非常感謝。
發表本編內容,主要是為了和大家共同學習共同進步,有興趣的朋友可以加加Q群:669058475(本群已滿)、733466321(可以加2群),大家一起探討。
更多內容,敬請觀注博客:http://www.cnblogs.com/EmptyFS/
