API服务器架设笔记
写在前面:
API接口方式遵循 RESTful 接口规则,采用单独API服务器的方式对请求进行服务,本文即记述API服务器架设全过程。
环境:
API接口服务器采用的服务器为阿里云,实例及配置为:
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
输入完密码并重新输入密码后,一路回车(借用两张图)
为新添加的用户赋予sudo权限
vim /etc/sudoers
保存并退出并使用新账户登录
进图第二件事(升级):
sudo apt-get update
至此, 准备工作完毕
二:服务器环境配置
①:python3.6
阿里云Ubuntu1604服务器自带3个版本的python,分别是:python2.7,python3,python3.5,同时默认为2.7。很可惜,都不是我们想要的,所以我们需要新装python3.6,并调整优先级和修改默认值。
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
安装完成!
调整优先级:
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
然后查看版本:
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
创建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
重新加载本地包数据
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
安装启动成功!
③:git
sudo apt-get install git
git --version
④:nginx
sudo apt-get install nginx
nginx -v
添加启动服务
sudo systemctl enable nginx
sudo service nginx start
浏览器输入公网ip查看
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
pip 安装成功
当然你也可能会得到下图结果
这问题显然的是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
安装成功!
三:项目实施
新建项目工程目录 /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
不出意外的话,你会得到这个错误:
报错找不到python.h,肯定是依赖问题,python.h依赖的包是python-dev 和 build-essential, 我们使用的是python3.6,所以操作如下,解决依赖问题:
先退出虚拟环境
deactivate
cd
然后
sudo apt-get install libpython3.6-dev
成功后我们再进一次虚拟环境,继续安装
安装 uwsgi 成功!
②:安装Flask环境和导入工程文件进入项目目录
使用清单文件一次性安装Flask和他的相关依赖
先将工程从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
结果···当然是有问题的啦啦啦····
错误信息告诉我们,pymongo 对mongodb数据库账户密码认证失败··为什么嘞,因为我们在上述步骤中既没有恢复数据库数据,也没有给数据库创建用户,让我们先恢复数据库数据。
⑤:mongodb 备份与恢复
在生产环境中,数据库备份
mongodump
数据恢复
mongorestore -h 127.0.0.1:27017 -d DataBaseName /home/username/var/www/xxx/xxxx/DataBaseName
恢复成功进入mongo查看数据库
为数据库添加管理员(切换至 DataBaseName 数据库)
db.createUser(
{
user: "******",
pwd: "***********",
roles: [ { role: "readWrite", db: "DataBaseName" } ]
}
)
添加用户成功
好的,我们再进入一次虚拟环境,启动uwsgi
uwsgi uwsgi.ini
正常启动!!!
好吧 最终的验证工作出现了,让我们使用api接口来测试一下,浏览器输入(隐去了信息,请自行输入):
http://00.000.00.00/xx/xx/x/ci
OR
http://xxx.xxx.cn/xx/xx/x/ci