从开发一个最简单的server,到用supervisor部署,然后配置nginx,到绑定域名到主机。
使用flask开发一个最简单的server
flask使用起来非常简单,几行代码就能写好一个server。
新建一个文件,命名为app.py,键入以下命令
1 | #! coding=utf-8 |
执行python app.py
, 打开浏览器,输入localhost:5000
,如果看到this is my server
,就表示我们的server运行起来了。
(如果不成功,就先执行pip install flask
)
只是一个web应用,想要成为一个server,这里使用gunicorn作为中间层
在本目录下新建一个文件wsgi.py,代码如下:
1 | #! coding: utf-8 |
ProxyFix主要为了取得真实的IP,这里可以不理
此时执行以下命令
gunicorn -w 4 -b 127.0.0.1:4000 wsgi:app
(需要安装 gunicorn 等)
-w 4是运行4个worker,也可以加-k gevent,运行无阻塞的server。此时再访问浏览器,如果正常,则说明我们已经写好了一个server
使用supervisor守护进程
supervisor的安装就不再详述了。
在/etc/supervisord.d/ 下新建一个little_server.ini, 代码如下:
(我把代码放到服务器的/var/www文件夹下, 服务器的Python环境应该用virtualenv)
[program:little_server]
command=gunicorn -w 4 wsgi:app -b 0.0.0.0:5000
directory=/var/www/little_server
autostart=true
autorestart=true
stopsignal=QUIT
user=ubuntu
stdout-logfile=/var/log/little_server_stdout.log
stderr-logfile=/var/log/little_server_stderr.log
如果没有这个文件夹,那就需要初始化supervisor
user换成服务器的真实用户名,stdout是系统输出日志,err则是报错信息(log信息也会到这里面来)
执行supervisor -c /etc/supervisor.conf reload
, 如果没有报错,则说明server正在运行
访问服务器的ip加端口号5000加以验证
绑定域名
域名的绑定服务提供商很多,购买域名的地方通常会提供方便的方法。这里我用的是Dnspod
按照指示,到购买域名的地方,把name server指向Dnspod
到Dnspod,增加域名解析,记录值填上服务器的ip地址,大概是这样的
主机记录指的是域名前的字符串,比如www.example.com
@ 指的是域名example.com
- 则是泛指的域名
绑定结束之后,等待一两天即可生效
使用nginx做服务器代理
浏览器默认访问80端口,可是服务器的80端口就一个,这就需要我们把其他端口上的web应用,代理到80端口上
nginx的安装在这里也不赘述,配置文件放在/etc/nginx/site-available/下。每次创建一个配置,都要在site-enable下创建一个软连接
首先 sudo service nginx start
,然后访问服务器的ip,看到了nginx的欢迎页,说明成功了。
拷贝一份default,命名为little_server(或者干脆新建一个,干净清爽),输入以下配置
1 | server { |
这里省略了很多的http header 的转发
执行 sudo nginx -t && service nginx reload
, 这个是安全启动,如果测试不通过,不会reload。
当访问自己的域名,看到网页上呈现自己的内容,那种成就感真是无与伦比。
这个教程只是实现一个最简单的server,省略了很多可以优化的配置,还需要在长期的运维时,不停的改进。