首发于简明教程

第二期 · 阿里云Python+Flask环境搭建

网上有资料,但要么过时,要么顺序条理比较乱,故而自己写一篇攻略。我目前博客即使用本文所述方法搭建,且本文所述每一点均来自于亲手实践。

我一直使用Python3,所以本文也基于Python3版本,其他环境要素清单如下:

服务器系统:Ubuntu 14.04 64位
WSGI:Gunicorn
进程监控:Supervisor

下面开始:


一、上车,买票!- 登录服务器

1.1、选好服务器支付完成,稍等一会,阿里云会启动好服务器。


1.2、在购买第一步,一般已经设置好root账号的密码,使用root账号和密码登录对应的服务器:

我使用的是MAC,打开终端,键入如下命令连接服务器:

ssh root@192.xxx.xxx.xxx

由于是第一次连接服务器,终端会询问是否保存密钥,一般键入:Y 即可。之后输入root账号对应的密码,终端提示:

Welcome to aliyun Elastic Compute Service!

表示连接服务器成功。



二、一把钥匙开一把锁 - 建立新用户账号

root账号是权限最大的账号,为了安全也为了方便管理,一般会为管理网站需求单独新建一个用户账号,除非服务器级别的操作,一般我们用新建的小号办事,这样能避免潜在的问题,也更加安全。

2.1、安装Zsh。

Zsh是Liunx下的Power-Shell,简而言之就是功能更强大的命令行,安这个的目的是以后敲命令搞服务器时方便点,你也可以选择不安装。不安装请略过本点,直接看下一点。

在终端键入:

sudo apt-get install zsh

遇到提示,输入Y,回车。等待Zsh安装完成。

问题来了,Zsh安装好了,还需要配置一下才能使用,但配置工作比较复杂,好在有一个名为「oh my zsh」的玩意儿,这个东西就是国外程序员开发的一个自动化配置Zsh的工具,有了「oh my zsh」,Zsh就可以「开箱即用」了。

安装「oh my zsh」之前需要安装git工具,因为「oh my zsh」托管在Github上的。

在终端键入:

sudo apt-get install git

git装好后,再在终端键入:

wget --no-check-certificate github.com/robbyrussell -O - | sh

看到「oh my zsh」的图案以及....is now installed! 表示已经装好。


2.2、新建用户

在终端键入:

useradd www -d /home/www -m -s /bin/zsh
passwd www

即新建一个用户名为www的用户,之后设置www用户的密码,并指定该用户使用Zsh。



三、P先生,V先生 - 安装pip支持和虚拟环境工具Virtualenv

3.1、由于后续工具的安装,需要pip工具的支持,所以先要安装pip:

sudo apt-get install python-pip

与前面一样,遇到询问确认时,键入Y回车。

看到「Setting up python-pip」就是装好了。


3.2、写Python的都知道隔离一个专用环境的重要和明智,安装Virtualenv:


pip install virtualenv


四、换小号 - 使用www登录服务器并进行后续操作

4.1、先别关闭现在的终端窗口,一会还要用。新建一个终端,按照之前使用root账号连接登录服务器的步骤登录服务器:

ssh www@192.xxx.xxx.xxx

紧接着你会遇到一大串的英文,按2即可。按2的意思是,使用常用配置项设置好Zsh,这样Zsh就生效可用了。


4.2、创建网站根目录。

先定位到/home/www 目录下,之后:

mkdir blog

这样,在/home/www 就建立了一个blog的文件夹,用于放置网站文件。


4.3、创建Python的虚拟环境。文章开头我说过自己用Python3开发,所以对应的虚拟环境也需要是Python3的:

virtualenv -p /usr/bin/python3 venv

这样在blog文件夹下,创建了一个python3的虚拟环境,环境文件都放在名为venv的文件夹里。


4.4、上传网站文件包。

我使用的是Filezilla,直接SFTP到服务器,注意:使用www用户SFTP,别用root。


4.5、安装Gunicorn。

Gunicorn是一个开源Python WSGI 服务,另一个选择是uWSGI,后者指不定你见过多少次了,Python或者Flask的入门书里最后的那部分总会提及uWSGI。至于为什么用Gunicorn而不是后者,因为Gunicorn简单,好用。

先进入虚拟环境:

source venv/bin/activate
python -V

时间原因,Zsh我使用一键配置,所以进入虚拟环境后,终端没有明显提示,因此使用「python -V」命令验证一下是否进入了虚拟环境。显示的是「Python 3.4.0」,可见已经进入了之前建立好的Python3虚拟环境。否则这里显示的是「Python 2.x.x」。

安装Gunicorn:

pip install gunicorn

看见「Successfully installed gunicorn」的提示表示安装成功。


4.6、配置Gunicorn。

Gunicorn有很多种配置方式,你可以搜索了解下。由于我还想拿这台服务器多放几个网站,所以我这里使用的是加载配置文件的方案。具体如下:

1)新建一个名为gunicorn.conf 的配置文件(注意:这时候目录要定位到/home/www/blog 下。)

vim gunicorn.conf

2)之后输入:

# 进程为3,小网站这个数就够了。
workers = 3
# 监听本地8000端口,之后这个端口来的就是看这个网站的。
bind = '127.0.0.1:8000'

3)保存文件。

这样最后在网站根目录下有一个gunicorn.conf 的文件。要是vim不会用,搜索哦。


4.7、不要退出虚拟环境。紧接着安装网站程序需要依赖的组件,比如Flask:

pip install -r requirements.txt

你应该事先在本地使用pip freeze命令创建了环境依赖清单requirements.txt,要是你不会请搜索了解相关内容,学会这个是必须的哦。如果安装过程中有任何问题,也请搜索解决。


4.8、在网站根目录下新建一个名为logs的文件夹,留以后用:

mkdir logs

到此,使用www用户该干的事情就告一段落了。



五、王者归来 - 使用root账号继续操作

5.1、回到使用root登录的终端窗口,之前告诉过你别关的哟,关了使用root重新登录服务器吧。


5.2、安装Supervisor。

Supervisor是一款服务器管理工具,用于监控和守护进程。阿里云会偶尔宕机,宕机后会切换物理服务,造成服务器重启。故而官网也强调过,程序最好有自动重启、重连机制。所以我们需要Supervisor当保姆,照顾我们的小网站。

sudo apt-get install supervisor

同样,遇到询问键入Y回车。看到「Starting supervisor: supervisord.」就是安装成功了。


5.3、配置Supervisor。

转到Supervisor的配置文件目录:

cd /etc/supervisor/conf.d/

新建并打开一个名为blog.conf的配置文件:

touch blog.conf
vim blog.conf

键入如下配置内容:

# 进程的名字,取一个以后自己一眼知道是什么的名字。
[program:blog]
# 定义命令。你只要注意后面的目录对就行。特别注意「run:app」的run,这个名字是你网站应用的文件名。我的是run.py,就写run。
command=/home/www/blog/venv/bin/gunicorn run:app -c /home/www/blog/gunicorn.conf
# 网站目录
directory=/home/www/blog
# 进程所属用户。之前为博客建立过一个小号www,你还记得?
user=www
# 自动重启设置。
autostart=true
autorestart=true
# 日志存放位置。

stdout_logfile=/home/www/blog/logs/gunicorn_supervisor.log
# 设置环境变量。这里这行的意思是:设置环境变量MODE的值为UAT。请根据自己的需要配置,如没有需要这行可以删除。

environment = MODE="UAT"

保存文件。


5.4、加载并生效Supervisor配置:

sudo supervisorctl reread
supervisorctl update
sudo supervisorctl start blog

如果看见「x:started」这样的提示,恭喜你,你已做完大部分工作。如果看见「ERROR (abnormal termination)」或其他错误,请这样处理:

1)检查Supervisor的配置文件你写错没,比如目录写错了,写错一个字母,少了一个斜杠等。

2)尝试重启Supervisor,命令如下:

sudo service supervisor stop
sudo service supervisor start

3)还不能解决,检查之前的安装过程你是否按照我写的来了,漏了什么没。



六、最后一战 - 使用root账号安装、配置Nginx

6.1、安装Nginx:

sudo apt-get install nginx

如果出现安装失败的提示,比如404,尝试更新一下源:

sudo apt-get update

之后再次安装,看到类似「Processing triggers for libc-bin (2.19-0ubuntu6.6) ...」的提示,就是安装成功了。


6.2、配置Nginx。

1)转到/etc/nginx/sites-available/目录下:

cd /etc/nginx/sites-available/

2)新建并打开名为blog的配置文件:

touch blog
vim blog


3)输入如下内容并保存:

   server {  
        listen   80;  
        server_name www.xxx.com xxx.com;

        root /home/www/blog;
        access_log /home/www/blog/logs/access.log;
        error_log /home/www/blog/logs/access.log;

        location / {  
            proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;  
            proxy_set_header Host $http_host;  
            proxy_redirect off;  
            if (!-f $request_filename) {  
                proxy_pass http://127.0.0.1:8000;  
                break;  
            }  
        }  
    }


这个配置文件具体意思请网上搜,唯一要注意的是目录指向的是网站根目录,域名对不对,再就是http://127.0.0.1:8000 这段注意端口号和之前设置的是否一致。


4)启用配置文件。

刚才设置的Nginx的配置文件并没生效,要启用的话需要在sites-enabled目录下添加一个引用链接。具体为:

1)进入sites-enabled目录:

cd ..
cd sites-enabled

2)建立引用之前的配置文件的链接:

ln -s /etc/nginx/sites-available/blog ./blog

3)查看一下链接是否成功建立:

ls -l

如果成功建立,能看到类似「blog -> /etc/nginx/sites-available/blog」这样一段信息。

6.3、重启Nginx。

输入:

sudo service nginx restart

看到 * Restarting nginx nginx.............[ OK ]的信息,表示重启成功。

至此,大功告成,键入你的域名就可以访问啦。

PS:如果用了阿里云的RDS,记得服务器内网IP加入到白名单。

编辑于 2017-09-15

文章被以下专栏收录