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 服务器搭建完成!!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270