本文将介绍如何用 Passenger 设置 WSGI 应用,并在 DreamHost 服务器上搭建 Flask 项目。
在开始之前,如果你还没有在 DreamHost 服务器上安装 python 2.7 或者 virtualenv 的话,请先阅读《在 DreamHost 上安装 Python 和 VirtualEnv》。
1. 在 DreamHost 上添加新的子域名/域名
虽然你也可以把项目直接搭建在你的主域名的下级目录中,但是我仍然建议你把他们搭建在子域名里。要在 DreamHost 上增加一个子域名,首先要登录 DreamHost 的控制面板(Panel),然后
- 在左上角的 ‘Toolbox’ 工具面板中,单击管理域名(Manage Domains)单击新建域名、子域名(Add New Domain/Sub-Domain)接下来照此设置:(记得更换斜体字)
Domain to host: project_name.your_domain.comDo you want the www in your URL? : Remove WWWRun this domain under the user: choose a usernameWeb directory: /home/username/project_name.your_domain.com/public…Passenger(Ruby/Python apps only): 勾选!单击 ‘Fully host this domain’
之后可能需要等待较长时间,一定要耐心。你可以尝试着访问这个新的子域名,如果出现什么 DreamHost 的快速页面的话,可能域名就搭建完成了。这时可是尝试使用 ssh 登录 DreamHost 服务器来确认,如果用户目录下出现了名为’project_name.your_domain.com’的文件夹的话,就说明域名搭建完成了。使用 ‘cd project_name.your_domain.com’ 命令进入此目录,然后我们可以开始下一步操作。
2. 安装 Flask 以及配置 Passenger2.1 设置虚拟环境 virtualenv
首先确保你处于用户目录的子域名文件目录下:‘~/project_name.your_domain.com’
键入以下命令来设置虚拟环境:
# 设置虚拟环境[machinename]$ virtualenv .# 检查当前目录下的文件[machinename]$ ls
如果设置正确的话,现在的目录下面应该差不多有这些文件夹:
bin include lib public
接下来,我们要激活虚拟环境:
# 激活虚拟环境[machinename]$ . bin/activate
这时候命令行应该看上去像这样:
(project_name.your_domain.com)[machinename]$
2.2 安装 Flask
使用 easy_install 来安装 Flask
(project_name.your_domain.com)[machinename]$ easy_install flask
2.3 添加/导入 项目
现在我们要真正添加项目文件了!首先创建一个文件夹,起一个代表项目的名字,例如 ‘project_folder_name’。然后,我们在这个文件夹里面添加一个简单的 helloworld 项目文件,比如命名为 ‘app_run_python_file.py’。
(可以使用 vim 添加,如果不了解 vim,请搜索相关博文或者自行百度,谢谢!)
这个项目文件 app_run_python_file.py 可以非常简单,比如像这样:
# app_run_python_file.pyfrom flask import Flaskapp = Flask(__name__) @app.route("/")def test(): return "Hello World!"
当然,你也可以直接导入项目文件夹进来,或者,你也可以不创建子文件夹,而是直接创建项目文件,但是这样的话,在后续的步骤里又要稍作改变。
2.4 安装配置 Passenger
现在你需要创建一个命名为 passenger_wsgi.py 的脚本,把它放在子域名根目录下 ‘~/project_name.your_domain.com/’。Passenger 框架会调用这个脚本来运行你的程序。
这个 passenger_wsgi.py 脚本可以是类似这样的:
# passenger_wsgi.py import sys, osINTERP = os.path.join(os.environ['HOME'], 'project_name.your_domain.com', 'bin', 'python')if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)sys.path.append(os.getcwd())sys.path.append('project_folder_name')from app_run_python_file import app as application
一些解释:
第3行: 导向你项目文件中的 python 路径‘~/project_name.your_domain.com/bin/python’第6+8行: 导向可运行文件的路径 ‘~/project_name.your_domain.com/project_folder_name’. 所以如果之前没有创建新的子文件夹的话,就不需要这么设置。第9行: 标明可运行文件的文件名 ‘app_run_python_file’
现在,目录应该看起来像这个样子:
~
/project_name.your_domain.com
/bin/include/lib/public /project_folder_name
app_run_python_file.pypassenger_wsgi.py2.5 运行服务器
接下来我们还需要让服务器开始运行。这很简单,只要在子域名根目录下创建一个文件夹,叫做‘tmp’。然后在这个 tmp 文件夹下(~/project_name.your_domain.com/tmp) ,创建一个 restart.txt 文件。
# 确保你在路径 ~/project_name.your_domain.com/ 下(project_name.your_domain.com)[machinename]$ mkdir tmp(project_name.your_domain.com)[machinename]$ touch tmp/restart.txt
提醒: 每次在你对项目文件做过更改以后,你都需要重启服务器。重启服务器的做法很简单,就是在命令行输入 ‘touch tmp/restart.txt’。
现在,你的目录应该差不多是这样:
~
/project_name.your_domain.com
/bin/include/lib/public /project_folder_name
app_run_python_file.pypassenger_wsgi.py /tmp
restart.txt3. 测试
要进行测试,我们可以在命令行输入命令:
# 测试 (最好在用户目录下 ~)[machinename]$ curl project_name.your_domain.com
使用 curl 测试后,你应该可以在命令行里见到 “Hello World!” 字样。
或者你也可以直接使用浏览器访问子域名 ‘project_name.your_domain.com’,这样应该可以在浏览器页面上见到 “Hello World!” 字样。
现在全部设置已经完成,可以开始你的 Flask 项目开发啦!
参考资料:
Rick: Python WSGI Apps on DreamHost Shared Hosting
mattcarrier: Setting up and deploying Python Flask to Dreamhost
[浏览量 163]
在 DreamHost 上搭建 Flask 项目,首发于Neo叔叔的博客。
最快乐的时候,就是去旅行。