如何部署网站?

部署一个Web 需要哪些知识?不同语言写的Web,部署的方式有相同之处吗?最近想部署一个Python 写的Web,但是搜索到的教程实在看不明白,太郁闷了…

阅读 7k
3 个回答

昨天刚刚部署完python flask写得一个网站。写完网站后,本地测试好了,就开始上线部署了,正好分享下过程。
WebApp部署条件:
零、前提:
(1)掌握ubuntu基本知识:bash基本脚本的编写,vim的使用,curl的使用,ps的使用,kill的使用
(2)掌握HTTP协议基本知识:request-response模式、HTTP方法、HTTP状态
一、非必要条件:
(1)域名:可选万网、西部数据
(2)域名解析服务(DNS):CloudXNS(个人服务免费、企业服务收费)
二、必要条件:
(1)云服务提供商:阿里云、腾讯云、百度云、新浪云、DigitalOcean
(2)HTTP服务器:Apache、Nginx、uWSGI、Gunicorn
(3)进程管理:supervisor
三、具体部署案例:
(一)部署具体选型:万网域名 + CloudXNS + 腾讯云:Ubuntu 14.04 LTS + Nignx + Gunicorn
(二)部署过程:
(1)购买域名:3 - n 元,域名服务商有购买引导,此不赘述
(2)域名解析:CloudXNS写有教程,写得很好,此不赘述
(3)服务器购买:云服务器服务商有购买引导,此不赘述
(4)HTTP服务器配置:Nginx作为反向代理,实现负载均衡
Nginx安装:sudo apt install nginx
Nginx版本:nginx/1.10.0 (Ubuntu)
Nginx配置路径:Ubuntu 14.04 LTS,/etc/nginx/site-available/default
Nginx配置备份:mv default default.bak
Nginx配置内容:将内容修改为

server {
    listen 80;
    server_name 139.75.42.45(或者example.com); # 这是HOST机器的外部域名,用ip地址也行
    # 分发静态资源:html、css、js、img等
    location ~^\/static/\.*$ {  
        root /home/ubuntu/www/app/static;
    }    
    # 转发http请求,并且添加上部分头信息
    location / {
        proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

  }

Nginx重启:service nginx restart
(5)HTTP服务器配置:Gunicorn(gevent模式)(编写语言python)
gevent安装:pip install gevent
Gunicorn安装:pip install gunicorn
Gunicorn配置:

#!/bin/python
# coding=utf-8
# config.py
import gevent.monkey
import multiprocessing

gevent.monkey.patch_all()

# 监听接口绑定
bind = '127.0.0.1:8000'
preload_app = True
# 日志配置
loglevel = 'error'
logfile = 'app/log/gunicorn/debug.log'
accesslog = 'app/log/gunicorn/access.log'
access_log_format = '%(h)s %(t)s %(U)s %(q)s'
errorlog = 'app/log/gunicorn/error.log'
# 进程名
proc_name = 'vservice' 
# 进程id储存文件:专门储存gunicorn进程id,方便kill
pidfile = 'app/log/gunicorn/gunicorn.pid'
# 进程开启数量
workers = multiprocessing.cpu_count() * 2 + 1
# 线程开启数量
threads = multiprocessing.cpu_count() * 2
# 职程运行模式
worker_class = 'gevent'

Gunicorn启动Flask实例:gunicorn -c config.py manege:app(manege是flask入口文件名,app是flask实例名)
(6)进程管理工具配置:supervisor(编程语言python)
supervisor安装:pip install supervisor
supervisor配置:

# 文件命名:supervisor.conf
[program:vservice]
command=/usr/local/bin/gunicorn -c /home/ubuntu/www/app/config.py manage:app 
startsecs=100
startretries=10
process_name=%(program_name)s
numprocs=1      
directory=/home/ubuntu/www/app/  
autostart=true
autorestart=unexpected                  
stdout_logfile=/home/ubuntu/www/app/log/supervisor/stdout.log
stderr_logfile=/home/ubuntu/www/app/log/supervisor/stderr.log

[supervisord]
# 

supervisor启动:supervisord -c supervisor.conf

比如在CentOS上装,无非就是把你依赖的库安装好,然后启动服务就行

首先你需要搞一个项目;搞一个服务器,使用 ng 或者别的来启动你的服务;如果需要,再绑定一个域名。

至于服务器,推荐 Do (即 DigitalOcean ); nginx,部署起来要便捷许多;如果静态Web服务,也可以考虑 Github-page 等等;当然 ng 部署静态 Web 服务也非常容易,即便新手也很容易使用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
项目管理
子站问答
访问
宣传栏