API服务器架设笔记(flask+nginx+uwsig)

API服务器架设笔记

写在前面:
API接口方式遵循 RESTful 接口规则,采用单独API服务器的方式对请求进行服务,本文即记述API服务器架设全过程。

环境:
API接口服务器采用的服务器为阿里云,实例及配置为:
image
PS:配置较为基础。

服务器操作系统为:ubuntu 16.04 64bit
服务器环境要求:
python==3.6
pip==10.0.1
mongodb==3.4.5
git==1.9.0
virtualenv==16.0.0
uwsgi==2.0
nginx==1.10.3
python文件依赖:
Flask
Flask-RESTful
PyJWT
pymongo
httplib2
pyStrich
qiniu
Pillow
好的, 下面我们正式开始!

一:准备工作

进图第一件事--插眼(新建账户):
进入root环境获取权限,建立新用户(受限)账号:
 adduser xxxx
输入完密码并重新输入密码后,一路回车(借用两张图)
image
为新添加的用户赋予sudo权限
 vim /etc/sudoers
image
保存并退出并使用新账户登录
image
进图第二件事(升级):
   sudo apt-get update
至此, 准备工作完毕

二:服务器环境配置

①:python3.6

阿里云Ubuntu1604服务器自带3个版本的python,分别是:python2.7,python3,python3.5,同时默认为2.7。很可惜,都不是我们想要的,所以我们需要新装python3.6,并调整优先级和修改默认值。
image
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
image
安装完成!
调整优先级:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
更改默认:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
然后查看版本:
image
python3.6 安装成功!

②:mongodb3.4.5

终极攻略传送门:https://docs.mongodb.com/v3.4/tutorial/install-mongodb-on-ubuntu/
导入包管理系统公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
image
创建mangoDB文件列表
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
image
重新加载本地包数据
sudo apt-get update
选择安装版本
sudo apt-get install -y mongodb-org=3.4.5 mongodb-org-server=3.4.5 mongodb-org-shell=3.4.5 mongodb-org-mongos=3.4.5 mongodb-org-tools=3.4.5
添加服务并启动查看
sudo systemctl enable mongod
sudo service mongod start
sudo mongo
image
安装启动成功!

③:git

sudo apt-get install git
git --version
image

④:nginx

sudo apt-get install nginx
nginx -v
image
添加启动服务
sudo systemctl enable nginx
sudo service nginx start
浏览器输入公网ip查看
image
nginx 安装成功!

⑤:pip3

安装
apt-get 安装python3安装工具
apt-get install python3-setuptools
下载pip安装文件压缩包
wget --no-check-certificate  https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
解压下载的压缩包
tar -zxvf pip-8.0.2.tar.gz
切换文件目录
cd pip-8.0.2
创建python3安装环境
python3 setup.py build
安装pip
python3 setup.py install
完成后查看
  pip -v
image
pip 安装成功
当然你也可能会得到下图结果
image
这问题显然的是pip的环境依赖出现了问题,这极有可能是账户的改变导致的pip的默认安装位置发生了变化,这样pip就无法引用到python相应的环境,我们要做的仅仅两步修复:
wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate
sudo python get-pip.py
然后你会得到正确结果
pip3 安装完成!

⑥:VirtualEnv

不同的项目可能会引用各种不同的依赖包,为了避免版本与和应用之间的冲突而造成的“依赖地狱”
Virtualenv 就是我们python 项目的必须品了。VirtualEnv 可以为每个Python应用创建独立的开发环境,使他们互不影响,Virtualenv 能够做到:

  • 在没有权限的情况下安装新套件
  • 不同应用可以使用不同的套件版本
  • 套件升级不影响其他应用
安装
sudo pip install virtualenv
查看版本
virtualenv --version
image
安装成功!

三:项目实施

新建项目工程目录 /home/xxx/var/www
mkdir /home/username/var/www
工程目录中安装虚拟环境
cd /home/username/var/www
virtualenv venv
进入虚拟环境
source venv/bin/activate 

调用 activate 指令后命令符前就会出现 (venv) 字样。 可通过 deactivate 退出虚拟环境。

在虚拟环境中安装以下各种···

①:uwsgi

Flask 的实际生产运行环境选择并不多,我们现采用的是 uWSGI。接下来就安装uWSGI吧。

pip install uwsgi
不出意外的话,你会得到这个错误:
image

报错找不到python.h,肯定是依赖问题,python.h依赖的包是python-dev 和 build-essential, 我们使用的是python3.6,所以操作如下,解决依赖问题:

先退出虚拟环境
deactivate
cd
然后
sudo apt-get install libpython3.6-dev
成功后我们再进一次虚拟环境,继续安装
image
安装 uwsgi 成功!

②:安装Flask环境和导入工程文件进入项目目录

使用清单文件一次性安装Flask和他的相关依赖


image
先将工程从gitee上clone下来(退出虚拟环境)
git clone https://gitee.com/xxxxxx/xxxxx.git
文件copy
cp -rf kps-api_v3  /home/username/var/www
进入虚拟环境安装依赖
 pip install -r xxx/xxxx/requirements.txt

ps:一定要注意在运行这个安装之前启用虚拟环境,否则会直接安装到全局去的!

依赖安装完成,下面我们开始配置uwsgi

③:配置uwsgi

我们采用 .ini文件作为配置,在项目目录下创建一个 uwsgi.ini (具体见下文)写好后可以这样执行

vim uwsgi.ini
重点来了,uwsgi.ini 是这样写的:
[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:5001 
# 指向网站目录
chdir = /home/username/var/www/xxx/xxxxx
# python 启动程序文件
wsgi-file = run.py 
# python 程序内用以启动的 application 变量名
callable = app 
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
wq保存退出

④:配置 Nginx

Ubuntu 上配置 Nginx 也是很简单,不要去改动默认的 nginx.conf 只需要将

/etc/nginx/sites-available/default

文件替换掉就可以了。

新建一个 nginx.conf 文件
 vim nginx.conf
输入文件内容如下:
server {
      listen  80;
      server_name http://xxxx.xxxx.xxx/; #公网地址或者ip
    
      location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:5001;  
        uwsgi_param UWSGI_PYHOME /home/username/var/www/venv;
        uwsgi_param UWSGI_CHDIR  /home/username/var/www/xxx/xxxxx; 
        uwsgi_param UWSGI_SCRIPT run:app; 
      }
    }
wq保存退出,将default配置文件替换掉
sudo cp -rf /home/kplus/var/www/default /etc/nginx/sites-available
成功后进入虚拟环境,以配置文件启动uwsgi

结果···当然是有问题的啦啦啦····

image

错误信息告诉我们,pymongo 对mongodb数据库账户密码认证失败··为什么嘞,因为我们在上述步骤中既没有恢复数据库数据,也没有给数据库创建用户,让我们先恢复数据库数据。


⑤:mongodb 备份与恢复

在生产环境中,数据库备份
mongodump 
数据恢复
 mongorestore -h 127.0.0.1:27017 -d DataBaseName /home/username/var/www/xxx/xxxx/DataBaseName
恢复成功进入mongo查看数据库
image
为数据库添加管理员(切换至 DataBaseName 数据库)
db.createUser(
   {
     user: "******",
     pwd: "***********",
     roles: [ { role: "readWrite", db: "DataBaseName" } ]
   }
 )
添加用户成功
image
好的,我们再进入一次虚拟环境,启动uwsgi
 uwsgi uwsgi.ini
正常启动!!!
image
好吧 最终的验证工作出现了,让我们使用api接口来测试一下,浏览器输入(隐去了信息,请自行输入):
 http://00.000.00.00/xx/xx/x/ci
OR
http://xxx.xxx.cn/xx/xx/x/ci
然后我们看到
image
服务器上相应记录为:
image
至此, API 服务器搭建完成!!!

你可能感兴趣的:(API服务器架设笔记(flask+nginx+uwsig))