最新心血来潮,想玩玩python于是自己花钱,租了一台阿里云服务器玩玩.

第一次搭建, 处于摸着石头过河阶段,踩了不少坑.写一篇文章,记录一下自己搭建的过程,以便为日后搭建的做个参考.

第一步:

用终端连接到阿里云服务器:

ssh root@139.xxx.xxx.129

输入服务器的密码登录成功

第二步:

更新apt-get(为什么要更新我也不知道...)

sudo apt-get update

sudo apt-get upgrade

第三步:

安装ssh(我选的阿里云ubuntu系统应该自带了):

sudo apt-get install ssh

第四步:

安装git(非必要):

sudo apt-get install git

第五步:

安装python3:

wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz

xz -d Python-3.6.0.tar.xz

tar -xvf Python-3.6.0.tar

cd Python-3.6.0

./configure

make

sudo make install

第六步:

因为linux系统自带了Python2.7版本,所以要切换python的默认版本, 不然每次执行python命令的时候都要用python3 很麻烦.

切换python的默认版本

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

第七步:

安装pip

sudo apt-get install python3-pip

第八步:

安装MySQL

sudo apt-get install mysql-server

第九步:

安装MySQL驱动:

sudo apt-get install mysql-connector

第十步:

运行mysql安全配置向导:

sudo mysql_secure_installation

输入root密码

是否修改root密码,因为前面已经设置过了,选n

是否移除匿名用户,肯定是要选y的

是否允许远程登陆,如果选n的话,只能在本机访问数据库,建议选y

是否移除test数据库,建议选是

重新加载权限表,选y

All done!

第十一步:

安装配置VirtualEnv和VirtualEnvWrapper

VirtualEnv可以管理多个开发环境,VirtualEnvWrapper使得VirtualEnv变得更好用

sudo pip install virtualenv virtualenvwrapper

安装完成以后,需要在环境变量中加入一些配置:

下面这句话是使用python3才需要执行的,python2不需要

echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc

不管python是什么版本,都要执行下面两句:

echo "export WORKON_HOME=~/Env" >> ~/.bashrc

echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

可以重启系统激活,也可以运行:

source ~/.bashrc

然后就可以开始建立虚拟环境了

第十二步:

接下来的内容参考自uWSGI官方文档英文不好, 欢迎指正!

创建虚拟环境:

这里有个坑, 因为通过ssh连接到远程服务器以后默认是在根目录root下面, 之前不懂,在这里创建虚拟环境, 后面服务器搭建起来以后访问会出现403禁止访问的错误, 所以为了避免这一问题, 建议在home目录下面创建虚拟环境

cd /home

virtualenv uwsgi-tutorial

激活虚拟环境:

cd uwsgi-tutorial

source bin/activate

第十三步:

在虚拟环境中安装Django:

这里有个坑, 执行pip install Django命令的时候默认安装的是Django的最新版本, 而最新版本, 在后面执行的时候会出现奇怪问题(主要是因为对Django不熟悉), 所以建议安装指定版本:

pip install Django==1.10.1

django-admin.py startproject mysite

cd mysite

第十四步:

安装uWSGI:

pip install uwsgi

第十五步:

测试uWSGI:

创建test.py

vim test.py

按i进入编辑模式, 输入一下内容:

# test.py

def application(env, start_response):

start_response('200 OK',[('Content-Type','text/html')])

return[b"Hello World"]# python3

运行uWSGI:

uwsgi --http :8000 --wsgi-file test.py

这些选项的意思是:

--http :8000 使用http协议, 端口号8000

wsgi-file test.py 加载指定的文件test.py

当你用浏览器访问

http:139.xxx.xxx.129:8000的时候应该能看到hello word文字

这说明下面这个流程是通的:

the web client uWSGI Python

第十六步:

测试Django项目:

现在我们希望uWSGI运行一个Django站点来达到运行test.py时一样的效果:

首先要确保mysite项目是可以正常运行的:

python manage.py runserver 0.0.0.0:8000

在浏览器输入http://139.xxx.xxx.129:8000如果看到站点的成功提示, 就说明是没问题的.

用uWSGI运行Django项目:

uwsgi --http :8000 --module mysite.wsgi

module mysite.wsgi 指令的意思是加载指定的wsgi模块

在浏览器输入http://139.xxx.xxx.129:8000如果看到站点的成功提示, 就说明下面这个流程是通的

the web client uWSGI Django

通常情况下我们不会让服务器同uWSGI直接会话,那是webserver的工作.

第十七步:

安装nginx:

sudo apt-get install nginx

运行:

sudo /etc/init.d/nginx start

在浏览器输入http://139.xxx.xxx.129:80应该能看到,“Welcome to nginx!”.这说明下面这个流程是通的

the web client the web server

第十八步:

为你的站点配置nginx:

你需要uwsgi_params文件, 他在/etc/nginx目录下, 把它复制到你的工程目录下

cp /etc/nginx/uwsgi_params /home/uswgi-tutorial/mysite/uwsgi_params

等会我们会让nginx引用这个文件.

现在创建mysite_nginx.conf文件

vim mysite_nginx.conf

点击i键进入编辑模式,输入下面的内容:

# mysite_nginx.conf

# the upstream component nginx needs to connect to

upstream django {

# server unix:///path/to/your/mysite/mysite.sock; # for a file socketserver 127.0.0.1:8001;# for a web port socket (we'll use this first)

}

# configuration of the server

server {

# the port your site will be served on

listen 8000;# the domain name it will serve for

server_name .example.com;# substitute your machine's IP address or FQDN

charset utf-8;

# max upload size

client_max_body_size 75M;# adjust to taste

# Django media

location /media {

alias /path/to/your/mysite/media;# your Django project's media files - amend as required

}

location /static {

alias /path/to/your/mysite/static;# your Django project's static files - amend as required

}

# Finally, send all non-media requests to the Django server.

location / {

uwsgi_pass django;

include /path/to/your/mysite/uwsgi_params;# the uwsgi_params file you installed

}

}

这个配置文件告诉nginx从文件系统中提供media和static的服务来处理访问Django’s的请求.

建立从/etc/nginx/sites-enabled到mysite_nginx.conf文件的链接, 以便nginx可以使用它:

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

部署静态文件:

在运行nginx之前, 你需要收集static目录下的所有Django静态文件, 首先你需要编辑mysite/settings.py文件, 并在末尾加入下面一行文字:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

然后运行

python manage.py collectstatic

指令.

第十九步:

nginx基本测试:

重启nginx:

sudo /etc/init.d/nginx restart

为了测试media文件夹能否正常提供服务, 在media目录下添加一个media.png图片.(这里有一个坑: media文件是自己手动创建的, 在mysite目录下, 前面cd到mysite文件夹下以后,运行ls指令看下子文件,发下在mysite文件夹下面还有一个mysite文件夹, 而我们现在创建的这个media文件夹是在第一个mysite文件夹下面,不是第二个mysite文件夹下面, 我之前就放在第二个mysite文件夹下面, 踩了这个坑!)

mkdir media

cd media

下载一张png图片,地址自己百度

wget http://picture.baidu.com/media.png

第二十步:

通过nginx和uSWGI提供test.py服务.

用nginx通过test.py程序说hello word!

这里有个坑, 之前为了创建图片cd到了media文件下, 此时执行下面的指令需要返回 mysite目录下, 不然找不到test.py文件

uwsgi --socket :8001 --wsgi-file test.py

这和之前的指令非常相似, 除了有一个选项不同之外.

socket :8001 指令的意思是: 使用uwsgi协议 端口号8001

外界可以通过8000端口访问nginx, 此时nginx已经被配置为在8001端口上使用uwsgi进行交流(信息交换).

如果正常则下面的流程是通的:

the web client the web server the socket uWSGI Python

于此同时你可以尝试通过http://139.xxx.xxx.129:8001来查看uwsgi的输出, 很可能什么都没有, 因为浏览器使用http协议来访问的而不是uWSGI协议, 所以你应该在你的终端中查看uwsgi的输出.

第二十一步;

使用Unix sockets代替Ports:

到目前为止,我们使用了TCP的socket端口, 因为它很简单,但事实上, 使用Unix sockets比ports更好.但是需要做一点小小的改动.

编辑mysite_nginx.conf,找到下面这段文字, 并改成下面这个样子:

server unix:///path/to/your/mysite/mysite.sock;# for a file socket

# server 127.0.0.1:8001; # for a web port socket (we'll use this first)

然后重启nginx.

运行

uwsgi --socket mysite.sock --wsgi-file test.py

这一次的socket选项告诉uWSGI使用哪一个文件.

如果不能正常访问, 运行:

uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666# (very permissive)

你也许还需要添加你的用户到nginx`s的用户组里, 以便nginx可以正确的读写你的socket.

为nginx的log新开一个终端窗口是非常值得的, 方便你可以轻松的查看遇到的问题.

第二十二步:

使用uWSGI和nginx运行Django application

uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=666

这里有一个坑, 之前按照官方文档上的664权限运行不成功, 后来改成666权限就成功了!

现在uWSGI和nginx提供的应该不再是"Hello word!"服务, 而是你的Django项目.

第二十三步:

通过配置.ini文件运行uWSGI.

在使用uWSGI的时候我们可以把同样的指令放在一个文件中, 然后让uWSGI使用这个文件来运行,这让我们管理配置的工作变的更简单.

创建一个mysite_uwsgi.ini文件.

vim mysite_uwsgi.ini

按i建进入编辑模式, 输入下面的内容(以#开头的都是注释, 可以忽略):

# mysite_uwsgi.ini file

[uwsgi]

# Django-related settings

# the base directory (full path)

chdir = /path/to/your/project

# Django's wsgi file

module = project.wsgi

# the virtualenv (full path)

home = /path/to/virtualenv

# process-related settings

# master

master = true

# maximum number of worker processes

processes = 10

# the socket (use the full path to be safe

socket = /path/to/your/project/mysite.sock

# ... with appropriate permissions - may be needed

# chmod-socket = 664

# clear environment on exit

vacuum = true

然后使用这个文件来运行uWSGI:

这里有个坑, 按照官方文档那样运行

uwsgi --ini mysite_uwsgi.ini# the --ini option is used to specify a file

并不能像我们期望的那样工作, 但是运行

uwsgi --ini mysite_uwsgi.ini --chmod-socket=666

就可以按照我们期望的那样工作, 所以权限问题实在是一个大问题

再检查一次Django站点是否像期望的那样工作.

第二十四步:

在系统上安装uWSGI(之前的安装都是在虚拟环境下进行的, 只在当前的虚拟环境下生效):

到目前为止,我们只在当前的虚拟环境下安装了uWSGI.为了方便部署我们需要把它安装在系统上.

退出虚拟环境:

deactivate

注意: 从上面创建虚拟环境, 并进入虚拟环境到现在所在一些操作都是在虚拟环境下进行的, 请确保你在这个过程中没有退出虚拟环境.

在系统上安装uWSGI:

sudo pip install uwsgi

uWSGI的wiki描述在installation procedures,在系统上安装uWSGI之前需要考虑一下哪个版本是最合适的.

再检查一次确保uWSGI可以像之前一样正常工作.

uwsgi --ini mysite_uwsgi.ini --chmod-socket=666 # the --ini option is used to specify a file

这里有个坑, uWSGI官方文档上, 介绍了Emperor mode, 然而我按照官方文档上的描述, 继续按照Emperor mode进行, 发现行不通, 报警告重新用pcre build什么的.(对我这种小白来说真是一窍不通).其实接下来只要uWSGI在开机时启动就行了.

第二十五步:

让uWSGI在系统启动的时候启动.

最后一步是让这些都在系统启动的时候自动执行.

在很多系统里, 让程序在系统启动的时候自动启动的最简单的方式就是使用rc.local文件.

编辑/etc/rc.local文件

vim /etc/rc.local

并在exit 0这一行之前加上下面这句话

/usr/local/bin/uwsgi --ini /path/to/your/project/mysite_uwsgi.ini --chmod-socket=666

退出编辑

reboot

大功告成, uWSGI可以随系统启动了!

折腾了四五天!oh my god!

参考文章:

Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

uWSGI官方文档

ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法

python服务器搭建nginx_从0开始搭建nginx-uWSGI-Django-python服务器相关推荐

  1. 微信抢票环境配置——nginx + uwsgi + django配置服务器

    微信抢票环境配置--nginx + uwsgi + django配置服务器 1 uwsgi配置 2 http协议(80端口)下的nginx配置 1 uwsgi配置 安装uwsgi pip3 insta ...

  2. 【NGINX】nginx+uwsgi+django+python部署总结

    (记录一下) 环境如下: 操作系统: Ubuntu 10.04 nginx: 1.0.12 uwsgi:  1.0.4 python: 2.6.5 django: 1.2.7 一.安装uwsgi 到h ...

  3. Nginx uWsgi Django环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 由于一个监控项目(使用django开发)交接到所在项目组,需要了解python的web开发和环境搭建. 这里记录环境的搭建流程 ...

  4. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  5. Linux + Nginx + Uwsgi + Django 搭建单服务器

    来源:Python全家桶 链接: https://mp.weixin.qq.com/s/tI9BslEAfxYf5Q4k_Su8ug 最近使用Django开发一个小程序和后台管理系统 ,需要将这两个不 ...

  6. 阿里云运行python项目_荐个人博客开发-06:Nginx + uWSGI + Django项目部署到阿里云服务器运行...

    版本:Python-3.8.1 + Django-2.2 + 阿里云服务器 Ubuntu-16.04 在正式部署前,需要确认几点: 服务器上已经安装相应的 Python MySQL Nginx uWS ...

  7. lnmp python _mysql web_Nginx+uWSGI+DJango+Python+ Mysql 搭建可靠的python web服务器

    一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool ...

  8. 【深度学习】环境搭建—TensorFlow 2.0环境搭建

    前沿: 本来想是搭建一个本地环境,可是在安装过程中需要 cuda 10.0 ,而我安装的是 cuda 10.1 不匹配.所以就寻思着安装了一个 docker,使用容器化安装. Created with ...

  9. mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上

    前言 本篇文章的主要内容正如标题所言,这个过程说简单也还是有很多细节需要注意的,说难其实也挺简单的,还是希望我们大家都能勤动手去体会其中的内容,经历本身就可以使人进步.话不多说,让我们开始吧. 正文 ...

最新文章

  1. Scrum Master角色可能消失吗?
  2. 简谈TCP的八个特性
  3. java定时器偶尔重复推送_在Java中创建重复的定时器提醒
  4. Hibernate HQL 语法大全(上)
  5. bootstrap java web_Java web MVC(jsp,servlet,dao)+Bootstrap购物网站开发经验总结 (持续更新)...
  6. linux uucp 改为 root,ubuntu 10.04 /etc目录下找不到vsftpd.user_list和vsfepd.ftpusers两个文件?...
  7. 自拍抠图抠到手软?详解如何用深度学习消除背景
  8. 黑马程序员-关于C语言基本运算的一些注意点
  9. JProfiler分析内存泄漏
  10. Linux客户机上安装VMware tools工具方法
  11. 网易云音乐歌单解析易语言源码 附带成品软件
  12. 颠覆式编程:软件2.0
  13. 字符分割函数strtok
  14. 厦门大学计算机学院控制系,厦门大学
  15. HDU - 6438 优先队列,+贪心。
  16. 搭讪技巧,希望所有单身的程序员兄弟都有女朋友哦!!
  17. Java刷题-蓝桥杯省赛第十一届JavaC组1---3
  18. 柔性电子综述2012 ---在医疗,汽车行业,人机界面,移动设备以及其他场景下的可能应用
  19. SDN有哪些优势呢?
  20. DHCP 服务原理与配置

热门文章

  1. redis高级进阶(2)
  2. 协鑫集成等四家公司被退出欧盟MIP协议
  3. 你不可不知的HTML优化技巧
  4. 거든---表示条件,后接祈使,劝诱,意志语句
  5. 想打造一款成功的移动应用?你最需要关注性能指标!
  6. windows 7 与linux 双系统 安装
  7. 使用Stanford NLP software进行中文文本预处理
  8. php filtervar函数用法,PHP过滤器 filter_has_var() 函数用法实例分析
  9. form表单会跨域_我的Vue不小心跨域了o()o 干它
  10. 锁失效_关于bigtable中chubby锁失效时的一点思考