All articles, tagged with “webfaction”

被虐的不行, 尝试 SSH 翻墙方法

“这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。”

狄更斯, <<双城记>>

Facebook, YouTube 全被功夫了, 在功夫网上浪费时间, 实在是令人焦虑啊.

  • 带套 (Tor) 浏览 — 太慢, 常断;
  • VPN 通常免费无好货;
  • 某某功的软件不敢用;
  • WEB 在线代理问题很多, 又不稳定
  • …. 一堆的问题, 不是说地球村吗? 怎么感觉像在猪圈, 进个村先得想办法爬出猪栏.
  • “Across the Great Wall we can reach every corner in the world. (越过长城, 走向世界)” 这句话越看越讽刺.

一个稍微值得安慰的消息是: 如果你有国外虚拟主机, 碰巧又支持 SSH, 然后主机商不介意你使用 SSH 隧道功能, 那你就又有了一个突破枷锁的方法.

这个方法也不是那么完美, 问题:

  • 注意自己的流量 … 看国内网站就别用了, 浪费主机流量
  • 千万别同时点开/刷新 N 多链接, 会卡到令人崩溃 (毕竟是单进程单线程处理请求), 控制在三个以内是合理的
  • 谨慎的传播, 自用为主, 不要提供代理服务, 小心网监把你整个网站都封了

如果你需要一个速度快, 流量实打实的虚拟主机, 推荐 Webfaction, 包括 Bluehost 在内的很多主机所谓的流量都是空头支票 (如果你决定买一个, 希望你能顺着我给的推广链接过去, 别让 $ 都让主机商赚走了 :) )

2009-09-3, Thursday 11:08 AM | 7 comments | 0 pingbacks | Tags: , ,

HTTPS django-cpserver 和 Nginx 反向代理

最近把内部 blog 也迁移到了 Byteflow, 并在 Webfaction 设置使用 HTTPS 协议.

一般的页面浏览均正常, 但是对于登录 admin 控制台或是保存编辑操作, Django 重定向机制会跳转到 HTTP 协议, 而不是预期的 HTTPS.

内部 blog 也是用 django-cpserver 跑, HTTPS 请求先经由 Webfaction 主 Nginx 反向代理服务器过滤.

由于 Nginx 接管了 HTTPS 加密/解密, 并把用户请求作为普通 HTTP 请求进行转发, 所以 django-cpserver 和 Django 对 HTTPS 一无所知, request.is_secure() 将总是返回 False.

修正方法

用一个简单的 WSGI Middleware 修改请求对象:

class SSLMiddleware(object):
    """
    Middleware that applies some fixes for people using
    Nginx manage HTTPS and forward requests as HTTP to
    backend server.
    """
    def process_request(self, request):
        # use HTTPS forever
        request.is_secure = lambda: True == True

将以上代码保存成 .py 文件, 并追加到 Django settings.py 文件 MIDDLEWARE_CLASSES 元组中, 重启后台服务器生效.

2009-08-29, Saturday 20:37 PM | 2 comments | 0 pingbacks | Tags: , , ,

Webfaction 安装 eXtplorer 文件管理器

Webfaction 没有在线文件管理工具, 虽说也可以用 ssh 远程编辑文件, 但还是没有可视化界面来的方便.

尝试了几个在线文件管理工具, 属 eXtplorer 功能最为完善:

  • 全 ajax 直观界面 (使用 ExtJS)
  • 多国语言支持
  • 基本文件操作: 查看/编辑/删除/上传/复制/移动
  • 支持文件搜索
  • 支持文件对比
  • 支持文件压缩/解压缩

在 Webfaction 上安装

  1. 在控制面板中新建一个 Application “extplorer”, 类型为 “Static/CGI/PHP
  2. 把 “extplorer” 应用关联到已有或新建的域名下
  3. 官方网站 下载 zip 压缩包 (使用 wget 命令)
  4. 使用 unzip xxxxxx 命令解压到 ~/your_account_name

注意事项

  1. Webfaction 内建的 Apache “DOCUMENT_ROOT” 会指向一个不存在的目录. 所以 eXtplorer 将会报错, 无法正常访问.

    这时只需修改一下 config/.htusers.php 文件:

    empty($_SERVER[‘DOCUMENT_ROOT’])?realpath(dirname(__FILE__).’/..’):$_SERVER[‘DOCUMENT_ROOT’] 改成 “/home/your_user_name” (或其它目录)

  2. eXtplorer 按文件后缀名识别文件类型, 其 MIME 文件只认识有限的几种文本文件, 其它的都被当作二进制不可编辑文件对待. 比如 “.wsgi” 文件就被当成二进制对待, 这当然不是我们期望的:

    修改 config/mimes.php 文件, 在 $GLOBALS[“editable_ext”] 一行字符串末尾追加 |..+$

2009-08-10, Monday 21:26 PM | 0 comments | 0 pingbacks | Tags: ,

Homepage / Blog 改动备忘录

改动备忘录:

  • 添加 Google CSE 嵌入式搜索框
  • 鉴于 Twitter 被放行, 改回 Twitter 更新框. FriendFeed 更新框的默认风格像块狗皮膏药, 和 Blog 风格严重不协调
  • 修改 Sphinx 和 Zine 模板, 将耗时的 Twitter AJAX / Google Analytics / Google CSE 等 javascript 代码移至紧靠 </body> 处, 提高页面加载心理速度
  • 修改 Sphinx 模板, 增加 Twitter 更新框, 并把页面最小宽度设为 980px, 最大宽度设为 1400px
  • Sphinx 升级到 0.6.2
  • 尝试将 Zine 升级到源码库最新版本, 失败, 原因是数据库结构发生变化, 下次升级要注意.
  • 在 Webfaction 上编译 lxml Python 库失败. 下次升级 Zine 时要记得用 import xml.etree.cElementTree as etree 替换所有包含 from lxml import etree 语句的 .py 文件, 规避这个问题.
2009-06-18, Thursday 12:10 PM | 0 comments | 0 pingbacks | Tags: , , , , ,

用 Supervisor 管理后台守护进程

一些虚拟主机支持跑后台守护程序, 比如 Webfaction.

在虚拟主机中管理后台守护程序没有 VPS 那么方便, VPS 是可以使用 root 权限的, 但虚拟主机则不能.

要更方便的管理后台进程, 通常需要借助一些辅助工具. 常用的管理工具有 runit, daemontools 以及 Supervisor. 其中以 Supervisor 最为易用, 功能也很完善.

安装 Supervisor

Supervisor 是一个 Python 程序, 按照 官方文档安装 就可以了.

稍加注意的是, 虚拟主机用户需要安装到他的用户目录:

easy_install supervisor --prefix=$HOME

安装完成后, 确保 $HOME/bin 目录在 $PATH 环境变量中并已经生效.

使用方法: 以 Zine 为例

Zine 可以作为后台守护程序运行, 通过 Supervisor 进行 启动/重启/失败自动重启 等控制.

Supervisor 有两个可执行程序 — supervisordsupervisorctl:

  • supervisord 是后台管理服务器, 用来依据配置文件的策略管理后台守护进程;
  • supervisorctl 用于管理员向后台管理程序发送 启动/重启/停止 等指令;

它们之间的关系就相当于 Apache 的 httpdapachectl.

创建工作目录和配置文件

首先需要创建一个 Supervisor 的工作目录, 如: $HOME/deploy/supervisor/, 用来存放错误日志输出, pid 文件, socket 文件, 配置文件等.

接着是创建 配置文件, 配置文件用来指示 Supervisor 有哪些进程需要管理, 以及管理策略.

我们把配置文件命名为 supervisord.conf (也可以是其它任何文件名, 但 Supervisor 默认自动在当前目录查找该文件, 用 supervisord.conf 会为以后管理提供方便):

[supervisord]
logfile = %(here)s/supervisord.log
loglevel = warn
pidfile = %(here)s/supervisord.pid
directory = %(here)s/
childlogdir = %(here)s/childlog

[unix_http_server]
file = <YOU-HOME-PATH>/deploy/supervisor/supervisord.sock

[rpcinterface:supervisor]
; This section is always necessary because supervisor uses RPC internally.
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
; Must match settings in 'unix_http_server'
serverurl = unix:///<YOU-HOME-PATH>/deploy/supervisor/supervisord.sock

[program:blog]
command = <YOU-HOME-PATH>/deploy/zine/bin/python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 6666 -I <YOU-HOME-PATH>/deploy/blog/

[program:blog2]
command = <YOU-HOME-PATH>/deploy/zine/bin/python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 8888 -I <YOU-HOME-PATH>/deploy/blog2/
  • 配置文件的第一段用来配置 supervisord 后台管理服务器一些输出文件的路径;
  • 第二段用来打开 supervisord 内部的 Socket 服务, 以便接受和处理来自控制程序 (supervisorctl) 请求;
  • 第三段是必备的, 详见注释;
  • 第四段告诉控制程序 (supervisorctl) 通过什么途径和 supervisord 通信;

Note

Webfaction 的用户不能随意指定 Zine 的端口号, 要使用在 Webfaction 控制面板添加新的 “Custom app (listening on port)” 后获得的一个特定端口号.

使用 supervisorctl 进行控制

supervisord.conf 所在的工作目录执行 supervisord 运行后台管理服务器, 如果运行失败请查看工作目录下的错误日志;

supervisord 跑起来后, supervisorctl 就可以方便的手工管理守护程序了:

supervisorctl start all
supervisorctl stop blog
supervisorctl restart blog2

结束语

Supervisor 是一个易用, 又不失强大的工具, 这里只涉及了 Supervisor 最基本的使用, 还有很多更加高级和有用的功能未能覆盖, 可以进一步参考 Supervisor 官方文档.

2009-05-14, Thursday 17:42 PM | 0 comments | 0 pingbacks | Tags: , , ,

Blog 搬迁到 Webfaction + Zine

原来是用 Blogspot 的托管服务, 除了它的 HTML 编辑器外, 我觉得非常好用 — 稳定/可靠, 不用自己升级系统, 不用担心数据安全, 不用操心垃圾广告 …

除了 HTML 编辑器.

毕竟 Blogspot 是面向普通用户, 对程序员的需求缺乏照顾. 最痛苦的时候莫过于贴代码和复制其它页面的文字, 太糟糕了, 字体大小有时会变得非常夸张:

http://lh5.ggpht.com/_MqMrLCdh6gQ/SgvRZkwnP8I/AAAAAAAABIQ/U0ZZVbwxFvY/s800/blogspot-wrong-font-size.jpg

被虐了一段时间后, 终于受不了了, 决定切换到我最习惯, 也是最有效率的排版和书写方法 — 纯文本的标记语言, 如: CreoleWiki, reStructuredText.

我需要一个 Python 写的 Blog 引擎 (没什么原因, 个人喜好), 一个对 Python 友好的虚拟主机:

2009-05-14, Thursday 16:29 PM | 2 comments | 0 pingbacks | Tags: , , ,

对 Python 最友好的虚拟主机 - Webfaction

国外便宜量又足的虚拟主机服务有很多, Bluehost / DreamHost 等等. 但是如果你部署的是 Python 或是 Ruby 应用, Webfaction 是目前为止见过最我令人满意的虚拟主机. 相对其它廉价主机服务, 它要贵上 $2/月, 但这是值得的:

  • 它是 Django Friendly 评价最高的虚拟主机;
  • 所有主机里 Python / Django 和 Ruby / RoR 部署最快, 最简单的;
  • Nginx 前端;
  • 支持运行自己的后台守护程序;
  • 实打实的存储空间和流量;
  • 2个月的退款保证;
  • 更少的用户分享一台真实主机;
  • 一键安装 Trac + Subversion;
  • 其它主机商有的功能, 它做得更易用;
  • … 更多 …

Webfaction 是一个对程序员友好的主机空间, 这个空间性价比比较高, 它宽松的限制让你感觉在使用一台 VPS. 或许你应该 试一试.

2009-05-14, Thursday 15:13 PM | 4 comments | 0 pingbacks | Tags: , ,

关于 Yang Yubo

身处 IT 行业, 惯用 C/C++, 对 Python 情有独钟, 平时比较关注 QT / Django / Werkzeug 等. 了解更多 »