在Debian/Ubuntu服務器上部署kumoRail(Nginx+uwsgi+flask)服務的教程

  kumoRail作爲一個微信公衆號的自動回復服務,需要工作在服務器上面。我們會使用Nginx作爲外部的反向代理服務器,用uwsgi作爲服務器和應用之間的接口,它會自動啓動我們的kumoRail服務器程序。然後使用supervisor來守護和監控uwsgi服務,記錄它的日志,並在發生錯誤的時候進行重啓,保證服務的持續性。最後是安裝和運行MongoDB數據庫。

首先,第一步就是拿到服務器后的更新:
sudo apt-get update
sudo apt-get upgrade

安裝git:
sudo apt-get install git

創建並切換到安放程序的目錄:
sudo mkdir /var/www
cd /var/www

然後,安裝Python2.7環境(如果你的服務器已經安裝,就可以略過這一步):
sudo apt-get install -y python

接著,安裝pip,Python的包管理器:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

安裝MongoDB數據庫,可以參考MongoDB的網站:https://docs.mongodb.com/tutorials/install-mongodb-on-debian/ ,需要注意的是,目前沒有支持Debian9的版本,需要確保您的Debian版本為7:"Wheezy"或者8:"Jessie",另外,如果您的Debian版本為7:“Wheezy”,需要將第二行命令中的“jessie”替換為“wheezy”。

  1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
  2. echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.6 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
  3. sudo apt-get update
  4. sudo apt-get install -y mongodb-org
如果是Ubuntu16.04,把第二個命令替換為下面的命令:

  1. echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

編輯MongoDB的config文件:
sudo vim /etc/mongod.conf
其實咧,config文件裏面需要修改的東西並不多,如果服務器和數據庫不在一起,需要把bindIp的值改爲運行服務的服務器的地址,另外就是port值,可以按需修改。

然後就可以啓動MongoDB服務:
sudo service mongod start

如果要關閉MongoDB,的話,運行這個指令:
sudo service mongod stop

然後是安裝虛擬環境virtualenv,作用是使kumoRail程序運行的Python環境和服務器中的大環境隔開,大環境中的Python或者包的改動不會影響到程序的運行:
sudo apt-get install -y python-setuptools
sudo pip install virtualenv

在程序所在的文件夾,創建一個虛擬環境。我使用的是/var/www/krl:
sudo virtualenv venv
sudo chown -R username:username venv/
. venv/bin/activate

然後是安裝程序所需要的Python包:
pip install pymongo
pip install flask
pip install uwsgi
pip install pycrypto

使用git下載kumoRail程序:

  1. sudo git clone https://github.com/Kumo-YZX/kumoRail.git krl


修改程序中的config文件:
sudo vim config.py
其中token,encodingkey,appid三項依據微信中的設置而填寫,appSecretKey為kumoRail中的密鑰,databaseIp和databasePort按照MongoDB數據庫的設置填寫,zoneDelta為當前時區到UTC+8的時差。

確認Python的環境部署無誤后,就可以退出虛擬環境:
deactivate

下面開始安裝Nginx:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get upgarde
sudo apt-get install build-essential python-dev
sudo apt-get install nginx
在此之後,服務器的80端口會被Nginx占用,無法直接在80端口上啓動程序脚本。

然後是配置Nginx,先刪除它的默認配置文件:
sudo rm -r /etc/nginx/sites-enabled

編輯Nginx的配置文件:
sudo nano /var/www/krl/conf/krl_nginx.conf
需要將server_name改爲我們的服務器地址或者域名,uwsgi_pass改爲uwsgi的地址和端口。

鏈接配置到我們的配置文件:

  1. sudo ln -s /var/www/krl/conf/krl_nginx.conf /etc/nginx/conf.d


其實呢,現在就已經可以使用如下的指令來啓動Nginx服務器了,但是我們現在還不用:
sudo /etc/init.d/nginx start

然後是配置uwsgi,不過其實krl/conf/uwsgi.ini裏面已經寫的足夠使用了,然後就是需要創建一個log目錄供uwsgi使用:
sudo mkdir -p /var/log/uwsgi

編輯uwsgi的配置文件,改socket項目為其運行的端口:
sudo nano krl_uwsgi.ini

到現在,也是可以在虛擬環境裏面使用下面的指令來開啓uwsgi服務了:

  1. uwsgi --ini /var/www/krl/conf/krl_uwsgi.ini

不過也是衹供測試使用,而且會一直產生輸出,在生產環境裏面遇到各種不可預料的狀況時難以面對。

我們需要使用另一個程序,supervisor來守護uwsgi進程。首先安裝supervisor:
sudo apt-get install supervisor

然後建立配置文件目錄,拷貝配置文件到其下

  1. sudo cp /var/www/krl/conf/uwsgi_spvd.conf /etc/supervisor/conf.d/


下面需要修改sudo命令為無需password,避免在supervisor中還需要處理密碼問題。
sudo visudo
在最後一行加上:
username ALL=(ALL)NOPASSWORD:ALL

然後使用下面的指令,就可以啓動supervisor了:
service supervisor start
需要注意的是,啓動的時候會編譯運行所有文件,所以有、若有更改,需要重新啓動supervisor。

同時也啓動你的Nginx服務器和MongoDB數據庫,微信端的服務已經可以正常啓用了。

不過呢,數據庫現在還是空的,需要導入數據,在項目文件夾及venv環境下運行下面的命令即可:
(在/var/www/krl/emuinfo中執行)
python emudb.py impinfo
python emudb.py impseq
(在/var/www/krl/lateinfo中執行)
python db2.py updsta
python db2.py impsch
python db2.py impres

還有一個getlate.py的脚本,其作用是收集列車的正晚點數據。它也是整個程序中不可分割的一部分。我們當然可以在screen裏面去直接運行它,當然更好的方式是在supervisor裏面運行。若此,我們需要先拷貝conf文件到supervisor的配置文件目錄裏面:

  1. sudo cp /var/www/krl/conf/getlate_spvd.conf /etc/supervisor/conf.d/


在重新啓動supervisor之後,輸入以下指令進入supervisor的命令行模式:
sudo supervisorctl

在這裏會看到所有在supervisor裏面運行的進程。然後啓動getlate:
start getlate
這時候getlate就已經啓動了,數據會自動寫進數據庫裏面。

然後就可以展開試用測試了。











评论

  1. The Cove is a fantastically designed, high limit slot space containing over a hundred and forty traditional and new slot machines. Guests taking part in} on this section enjoy devoted cocktail service, non-public restrooms and an exclusive cage. For upscale gaming, head to certainly one of our high limit 빅카지노 playing enclaves.

    回复删除

发表评论

此博客中的热门博文

又一个建站碎碎念

寫了一個回收利用某站視頻緩存的程序

【これ】我收集的Hackathon時間表