1. 准备工作
首先更新软件
sudo apt-get upgrade
安装虚拟环境
sudo apt-get install python-virtualenv
安装nginx
sudo apt-get install nginx
安装uwsgi
1.先导步骤:
sudo apt-get install python-dev
sudo apt-get install python3.5-dev
2.安装
sudo pip3 install uwsgi
或者:
sudo pip3 install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
2. 添加新用户
用root运行uwsgi是不推荐的,推荐的做法是创建一个用户组,再往里面添加一个新用户
创建用户组
组名为:webapps
sudo groupadd --system webapps
创建用户
用户名为:user_test
sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/test user_test
设置密码为:test
passwd test
创建用户目录
mkdir -p /webapps/test
修改目录权限,下面的命令意思是:使/webapps/test/这个目录属于user_test这个用户
chown user_test /webapps/test/
添加用户user_test sudo权限
在/etc/sudoers添加
使用命令vim /etc/sudoers
打开/etc/sudoers
在里面添加下面这一句:
user_test ALL=(ALL:ALL) ALL
如下图:
3. 开始创建应用
切换用户为:user_test
su - user_test
可以看出当前用户的主目录为/webapps/test
。
这是因为我们创建用户时使用的命令sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/test user_test
,其中--home /webapps/test
指定了用户主目录为/webapps/test
4. 创建python虚拟环境
这里指定为3.5版本,并激活
在/webapps/test下执行命令:
virtualenv -p /usr/bin/python3.5 .
注意最后一个点哦,它指的是在当前目录下创建。执行后的结果(我之前已经执行过了,所以就不再执行了,直接列出来结果吧)
图中画红线的就是生成的虚拟环境内容,那个mysite是我后来创建的文件夹,先不用管它,下面会说到它的。
激活环境
使用下面的命令:
source bin/activate
结果如下图
前面出现了括号,里面的test也就是当前虚拟环境的目录名,也可以说当前的虚拟环境名为test。
那么怎么退出呢?
很easy啦~
执行命令:deactivate
就好了~如下图:
安装django
注意:在进入到虚拟环境的状态下安装哦~
pip install django
创建django工程mysite
django-admin startproject mysite
创建应用app
1 进入mysite目录
cd mysite
2 创建app
django-admin startapp app
修改mysite/settings.py
要做三件事:
1 将外网ip添加到ALLOWED_HOSTS
这里我的外网IP是106.14.125.141
,你要换成你的。
外网IP是啥?这都不知道?就是你买的阿里云服务器分配的啊。
2 在INSTALLED_APPS里追加 ‘app’
3 新建app/static目录 ,然后在mysite/settings.py里添加STATIC_ROOT
进入app目录
cd app
创建static文件夹
mkdir static
退回上一层目录,也就是mysite下
cd ../
然后在setting.py末尾,添加下面代码
STATIC_ROOT = os.path.join(BASE_DIR, 'app', 'static')
接下来是一系列命令:
收集静态文件到app/static目录
python manage.py collectstatic
迁移数据库
python manage.py migrate
创建后台管理用户
python manage.py createsuperuser
会让你起个名字,设个密码
添加视图函数,在app/views.py添加
from django.http import HttpResponse
def index(request):
return HttpResponse('<h1>Hello World!</h1>')
修改mysite/urls.py为:
from django.contrib import admin
from django.urls import path
from app import views
from django.conf.urls import url
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^$', views.index),
]
测试django应用运行是否正常
python manage.py runserver
再打开一个连接窗口,输入curl 127.0.0.1:8000
测试是否能访问
正常会输出<h1>Hello World!</h1>
然后,按Ctrl C 退出
4. 配置ngnix
从https://github.com/nginx/nginx/blob/master/conf/uwsgi_params
下载到/etc/nginx/conf/
目录
/etc/nginx
下应该是没有conf
这个文件夹,如果没有,那就创建它!
或者,不下载也可以,我把它的内容贴出来吧~
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
切换到/etc/nginx
cd /etc/nginx
创建conf
文件夹
mkdir conf
进入conf
cd conf
创建uwsgi_params文件
vim uwsgi_params
然后,把上面的代码复制进去,保存退出。
然后呢,回到mysite目录下
新建test_nginx.conf文件,内容如下
# the upstream component nginx needs to connect to
upstream testapp {
#server unix:///webapps/test/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name localhost; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
access_log /webapps/test/mysite/nginx_access.log;
error_log /webapps/test/mysite/nginx_error.log;
# Django media
location /media {
alias /webapps/test/mysite/app/media; # your Django project's media files - amend as required
}
location /static {
alias /webapps/test/mysite/app/static; # your Django project's static files - amend as required
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass testapp;
include /etc/nginx/conf/uwsgi_params; # the uwsgi_params file you installed
}
}
注意!
listen 80的意思是,从浏览器访问服务器时的端口是80
server 127.0.0.1:8000;是nginx到wsgi的连接地址,这个必须和wsgi.ini里面的socket = 127.0.0.1:8000一致!
将test_nginx.conf
链接到/etc/nginx/sites-enabled/
目录
sudo ln -s /webapps/test/mysite/test_nginx.conf /etc/nginx/sites-enabled/
记得删除自带的default文件,可以到/etc/nginx/sites-enabled/
目录下看一看
可以看到该目录下已经出现了test_nginx.conf
这个文件,而且原来的default文件我已经删除了。删除命令很简单,就是rm
命令
sudo rm default
把用户www-data加到webapps用户组
sudo usermod -a -G webapps www-data
重启ngnix
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
5. 配置uwsgi
在mysite
也就是django项目根目录下新建wsgi.ini
启动文件,通过这个文件来启动django项目。
[uwsgi]
socket = 127.0.0.1:8000
chdir=/webapps/test/mysite
module=mysite.wsgi
master = true
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
daemonize = /webapps/test/mysite/uwsgi.log
virtualenv = /webapps/test
gid=webapps
uid=user_test
stats=/webapps/test/mysite/uwsgi.status
pidfile=/webapps/test/mysite/uwsgi.pid
注意!
socket = 127.0.0.1:8000为wsgi的入口,必须与test_nginx.conf中的server 127.0.0.1:8000;一致
chdir=/webapps/test/mysite :django项目的路径
module=mysite.wsgi :django项目中的wsgi.py
daemonize = /webapps/test/mysite/uwsgi.log :日志路径
virtualenv = /webapps/test 虚拟环境路径
stats=/webapps/test/mysite/uwsgi.status:记录状态的文件
pidfile=/webapps/test/mysite/uwsgi.pid:记录线程的文件,可用于停止uwsgi
运行uwsgi
uwsgi --ini wsgi.ini
用浏览器访问外网ip,你会发现!!!amazing~终于出来了!我的Hello world!
鸡冻不鸡冻~
我搞了快两天,各种错误,各种重装,各种百度,啊啊啊啊,快要崩溃了。。。
最后终于搞出来了QAQ
这时候,你的mysite目录下应该是这样的:
项目是启动了,如何停止呢?
输入命令
uwsgi --stop uwsgi.pid
再访问外网IP试试?
OK !停止了,这是一种好的停止方式。
如果不会的话,(怎么会不会,会了不难,不会的难死,我找了好多资料才找到的。。)停止线程也可以。
查看线程号
cat uwsgi.pid
显示uwsgi的线程号
用ps命令再看看当前线程程:
证明这个线程号确实是uwsgi的。可以用命令kill -9 2233
杀死它,但是不太好吧,还是上面的uwsgi --stop uwsgi.pid
这种方式停止uwsgi比较好。。。
啊啊啊好了,终于完了~
参考文章:
https://blog.csdn.net/abc_1234d/article/details/77717523
https://blog.csdn.net/lileihappy/article/details/79580291