Flask网站搭建:Ubuntu 14.04 sever (阿里云64bit) 部署 flask + uWSGI + Ngnix

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask网站搭建:Ubuntu 14.04 sever (阿里云64bit) 部署 flask + uWSGI + Ngnix相关的知识,希望对你有一定的参考价值。

第一次写技术类的博客,有点小激动。这篇文章整合了多方资源,将在文末附上链接,非常感谢作者的帮助。同时也希望这篇博客能帮助像我一样的外行玩家快速搭建自己的网站。如果文章有什么不妥的地方,希望大家留个脚印哈~

一、购买云服务器+域名

1、购买服务器和域名  

  一开始我是购买的购买腾讯的学生特惠套餐,结果忘(lao)了(nian)续(chi)费(dai),所以只好转投阿里的云翼计划,也是相当实惠的,不过腾讯的用户体验是真心好(除了要每月续费外)。域名我是从新网那边迁到万网的,需要重新备案外加续费一年。下面就以阿里云为例吧。

  先在云翼计划首页购买云服务器(ECS),包年有赠品,我没有包年,但是后来也送了云对象存储(OSS)等功能,还有各种阿里营销体验你懂得=-=。系统我用的是Ubuntu14.04 64bit,当然大家也可以选用更受欢迎的CentOS,不过我等小白还是选一个自己熟悉的更舒服一些。购买成功后系统随时可以更换,还可以建立磁盘快照。随时备份文件、定时备份系统非常非常重要,否则可以来高歌一曲:啊~多么痛的领悟~。阿里的优惠域名好像.xin后缀,我没有试过,就不多说了,大家及时备案就好,阿里云和腾讯云一样,都有域名备多久服务器便送多久的活动。

2、连接服务器

  购买成功后进入服务器实例列表,如果你本地是用的Windows系统,可以在网页上用密码远程登录,如果本地也是Linux/Mac OS的话可以使用密钥,我本地用的是Ubuntu16.04,也就以此为例啦。将服务器关机,选择后边“更多”选项中的更换系统盘,选择Ubuntu14.04 64bit,输入计算机名称,下载密钥,并将其移动到可信的地方起一个你喜欢的名字。

我们需要对密钥文件更改权限:

sudo chmod 400 /密钥的绝对路径

接下来就可以连接我们的服务器了:

ssh -i /密钥的绝对路径 [email protected]服务器公.网.IP

二、服务器初始配置

1.创建用户

因为root用户的权限实在太高,手抖的话容易出事,比如说随手rm点啥,或者一不小心就把自己的Windows系统盘格式化了,别问我怎么知道,来和我一起高歌一曲:啊~多么痛的领悟~

所以我们要先来新建一个用户:

adduser demo

 接下来会有一串的问题,想填就填,不想填直接回车跳过就行。

2.更改用户组

我们需要用到超级用户权限,所以要将新建的用户添加到“sudo”用户组:

gpasswd -a demo sudo

3.生成ssh密钥

用密钥连接服务器更快捷更安全,所以我们来创建密钥对(注意下面在local字样的命令都是在本地终端上进行的):

locai$ ssh-keygen

 接下来会有如下输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):

括号里的内容便是即将输出密钥文件的绝对地址,可以在冒号后面输入自定义的文件名。回车确认之后便会有两个文件输出, id_rsa 是私钥, 如同他的名字一样,不能拿着到处宣扬;id_rsa.pub是公钥,稍后会上传到服务器上。打个比方就是:我们要给服务器配一把锁(公钥),在本机上存的是钥匙(私钥),所以只要别人愿意用,锁可以多发几枚,但钥匙要自己保存好。

4.安装公钥

在服务器上创建并编辑下面的文件:

su - demo
mkdir
.ssh chmod 700 .ssh nano .ssh/authorized_keys

本地读取公钥:

local$ cat ~/.ssh/id_rsa.pub

复制以上命令输出的内容,粘贴到在服务器上刚刚创建的文件中并保存。

注:nano 是一款很简便的文本编辑器,编辑好后按“CTRL+X”退出编辑,随后按“Y”确认保存,“ENTER”确认文档名称。

改变文件权限:

chmod 600 .ssh/authorized_keys

5. 测试连接

local$ ssh 服务器公.网.IP

这样是不是就简单多了呀 。

三、安装Flask

安装Flask及相关依赖,保证我们写的程序能在服务器上运行。

1.搭建虚拟环境

安装virtualenv:

sudo apt-get update
sudo apt-get install python-dev
sudo pip install virtualenv

建立工作目录:

mkdir ~/myproject
cd ~/myproject

如果你的网站已经写好,可以传到Github上直接 git clone http:项目地址 ,这样是最方便的。也可以用其他的云盘下载或者直接用sftp从本地传到服务器。

创建虚拟环境:

virtualenv myprojectenv

在此我们默认Python=3.4.3,当然你需要在创建虚拟环境的时候添加相关选项: virtualenv --python=3.4 myprojectenv 。

激活虚拟环境:

source myprojectenv/bin/activate

2.安装Flask及相关依赖

安装Flask:

pip install flask

至于其他的就需要大家按需安装了,下面是我的安装列表,仅做参考:

======================分割线1,按需取舍=========================

创建txt文件:

nano requirements.txt

文件内容:

Flask-WTF==0.10.2
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
six==1.8.0
awesome-slugify==1.6
python-docx
cffi
Flask-WeasyPrint
Pillow

先安装相关依赖:

sudo apt-get install libcairo2-dev  libffi-dev libpango-1.0-0 
sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk

需要更高版本的pango需要自行下载安装,如果还缺少其他东西的话,根据终端提示来安装就可以。

安装我们表单的内容:

pip install -r requirements.txt

注意看好一定要已经进入了虚拟环境哈,强迫症装到全局会很难受的。

==========================END1=============================

 如果还没有写好自己的网页也没关系,我们还是以hello world!为例,建一个简单的程序:

nano myproject.py
from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style=‘color:blue‘>Hello World!</h1>"

if __name__ == "__main__":
    application.run(host=0.0.0.0)

退出保存。

运行程序:

python myproject.py

成功的话终端会输出: * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 

四、配置服务器安全组

为了我们的测试工作可以顺利进行,需要在阿里云的控制台配置安全组,开放相关端口的访问权限。

首先进入阿里云的控制台找到正在运行中的实例,点击右侧的”更多->安全组配置“,进入安全组的规则列表,点击配置规则->添加安全组规则。

然后端口范围填写5000/5000,授权对象0.0.0.0/0,其他保持默认,我们便可以访问服务器的5000端口了。

接下来重复以上步骤,添加8000和80端口的访问权限。

这样我们在本地浏览器输入 服务器IP:5000  来访问网页了,试一试有没有正常输出蓝色的Hello World!

五、配置WSGI与nginx

1、安装

sudo apt install nginx
pip install uwsgi

创建wsgi.py文件:

nano ~/myproject/wsgi.py

文件内容:

from myproject import application

if __name__ == "__main__":
    application.run()

这个文件在uwsgi运行时会自动调用。

来测试一下uwsgi有没有正常工作:

uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi:application

在本地浏览器访问 服务器IP:8000 ,便会看到熟悉的字样。

成功之后我们就不需要在虚拟环境里了,可以交给uwsgi操作。

deactivate

2、配置uwsgi

创建配置文件:

nano ~/myproject/myproject.ini

文件内容:

[uwsgi]
module = wsgi:application
master = true 
processes
= 5
socket
= myproject.sock

chmod-socket = 660
vacuum
= true

die
-on-term = true

由于我在这方面懂得也不多,只是看别人的教程而已,就不托大了,大家可以自己深入研究。

创建自动启动文件,保证在服务器重启之后我们的程序还可以正常运行:

sudo nano /etc/init/myproject.conf

文件内容:

description "uWSGI server instance configured to serve myproject"

start on runlevel [2345]
stop on runlevel [!2345]

setuid demo
setgid www-data

env PATH=/home/demo/myproject/myprojectenv/bin
chdir /home/demo/myproject
exec uwsgi --ini myproject.ini

保存退出后,启动配置:

sudo start myproject

3、配置Nignx代理

sudo nano /etc/nginx/sites-available/myproject

文件内容:

server {
    listen 80;
    server_name 服务器地址或域名;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/demo/myproject/myproject.sock;
    }
}

监听服务器的80端口,也就是我们浏览器一般会访问的端口。

保存退出,链接文件,保证配置成功:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

删除默认的配置文件:

sudo rm /etc/nginx/sites-available/default

测试一下Nginx配置是否正常:

sudo nginx -t

没有错误之后重启nginx:

sudo service nginx restart

六、测试网页访问

最后一步啦,在浏览器输入域名,还没备案通过的输入地址,看下能不能正常访问了。

一切正常之后我们就可以关闭不需要的端口了,还是在阿里云安全组配置那里,删除我们创建的8000和5000,留下浏览器需要访问的80端口就可以啦。

祝好~

 

参考资料:

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

https://www.cnblogs.com/Ray-liang/p/4173923.html

 














以上是关于Flask网站搭建:Ubuntu 14.04 sever (阿里云64bit) 部署 flask + uWSGI + Ngnix的主要内容,如果未能解决你的问题,请参考以下文章

ESP32搭建3.ubuntu14.04下搭建esp32开发环境 (最新版)

如何在Ubuntu 14.04上利用jexus搭建支持php+mysql数据库的网站服务

在 Ubuntu 14.04 VPS (Digital Ocean) 上部署 Flask 应用程序的问题

markdown 如何在Ubuntu 14.04+上使用uWSGI和Nginx为Flask应用程序提供服务

ubuntu14.04下搭建python+mysql环境

ubuntu14.04 搭建git仓库记录