惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
I
InfoQ
The Register - Security
The Register - Security
L
LangChain Blog
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
Schneier on Security
博客园 - 【当耐特】
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
雷峰网
雷峰网
N
Netflix TechBlog - Medium
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - 聂微东
PCI Perspectives
PCI Perspectives
Last Week in AI
Last Week in AI
A
Arctic Wolf
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
SecWiki News
SecWiki News
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AI
AI
Engineering at Meta
Engineering at Meta

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) Jenkins for iOS 搭建日记 iOS HOOK 注入与重签名 Xcode 使用 Configuration 来配置不同的项目环境 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task 悄悄的就必须用 XCode 5.1.1 上传了! HTTP Content-type 与 AFNetworking Objective-Cloud 初体验(1) 掌中站上架小记 NSLoger 上线了 Python Markdown 做语法限制 Nginx + Gunicorn + Django 部署小记 用Shell脚本批量裁剪App Icon各个尺寸 LaunchRocket使用小记 用宏提速NSCoding 2014新年伊始:近期读过的好文推荐 [iOS] stringWithFormat 和 initWithFormat 有何不同? 收集几个Objective-C的HTML解析库 NSMapTable: 不只是一个能放weak指针的 NSDictionary 2013,再见! Emlog到Typecho的迁移工具:emlog2typecho [iOS]给上拉下拉刷新PullToRefresh做本地化 [iOS]代码推荐:大图缩放视图 - Vertigo iOS:hidesBottomBarWhenPushed的正确用法 Xcode 5新的Interface Builder,你准备好了吗? [翻译]如何使用Django创建简单的博客 我的Mac音乐播放器 初识 NSDataDetector Objective-C 计算代码运行时间 WordPress上传文件自动重命名 iOS:仿jing.fm的音乐播放视图 我的啃黑苹果之路 关于 搜索 项目
Apache + Flask + mod_wsgi + Koding 部署小记
2014-01-16 · via isaced

之前发现了Koding,一直没怎么注意,今天试用了一下练练手,也算是第一次在真正的服务器上操作,用它搭个 Flask 站点出来,一路也是坑坑包包啊,特别是 Apache 的配置,复杂的无脑,第一次搞还是推荐先看看 Apache 的文档。话说 Koding 还真是不错,虽然不能拿来当生产环境,弄弄玩还是挺好,特别是像我们这种新手来练手。用 Koding 的原话来说是这样:

Koding is first and foremost a Development Environment, and not a Production Host. VMs Shutdown After Logout,Approximately 20 minutes after you log out, your Free VMs will shut down.

如上所说,Koding 是一个开发环境而不是生产环境,这也是 Koding 主办方的意思。在退出登陆后 20 分钟,你的主机将会自动关闭,详情可见 Koding 的FAQ 页面。 不过这已经很好了,完全和真实主机一模一样,支持 SSH 远程登陆,强大的 Web 面板(支持文件浏览和 Terminal),用来学习已经完全足够了。

安装 mod_wsgi

如果服务器是用的 Apache,那么 Flask 官方推荐用mod_wsgi,文档可以戳这,其实 Flask 官方文档已经写的很清楚了,我还是贴一下吧。

Ubuntu or Debian:

# apt-get install libapache2-mod-wsgi

修改 Apache 配置:

然后修改/etc/apache2/sites-enabled/000-default

WSGIPythonPath /home/isaced/test
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/isaced/test/
    WSGIScriptAlias / /home/isaced/test/app.wsgi
<Directory /home/isaced/test/>
<Files app.wsgi>
    Order deny,allow
    Allow from all
</Files>
</Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

添加.wsig 文件

然后在 isaced 目录下新建项目目录”test“,其中新建文件app.wsgi,内容如下:

def application(environ,start_response):
    status='200 OK'
    output='Hello wsgi!'
    response_headers=[('Content-type','text/plain'),
                       ('Content-Length',str(len(output)))]
    start_response(status,response_headers)
    return[output]

赶紧试试

重启 Apache 试试,看看效果吧:

sudo /etc/init.d/apache2 restart

浏览器打开“http://xxx.kd.io/”,就会输出“Hello wsgi!”。

启动 Flask

按耐住小鸡动,我们继续来启动一个 flask 实例。

新建test.py文件,作为 flask 入口文件,内容如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0')

然后修改app.wsgi文件内容为:

from test import app as application

这里的 test 就是当前目录的 test.py 文件,看到网上很多文章还要 import sys,再 append 当前目录,其实如果在同一目录下的话就不需要了。

大功告成

至此一个简单的 Flask 项目就部署完成了,以上路径、域名什么的请自行替换。

最大收获

我终于会盲打出 Apache 这个单词了!!!

参考资料: