1. 準備工作
首先更新軟體
sudo apt-get upgrade
安裝虛拟環境
安裝nginx
sudo apt-get install nginx
安裝uwsgi
先導步驟:
sudo apt-get install python-dev
sudo apt-get install python3-dev
安裝
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
設定密碼為: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
在裡面添加下面這一句:
如下圖:
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下執行指令:
注意最後一個點哦,它指的是在目前目錄下建立。執行後的結果(我之前已經執行過了,是以就不再執行了,直接列出來結果吧)
圖中畫紅線的就是生成的虛拟環境内容,那個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
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檔案夾
退回上一層目錄,也就是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 :; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen ;
# the domain name it will serve for
server_name localhost; # substitute your machine's IP address or FQDN
charset utf-;
# max upload size
client_max_body_size M; # 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
指令
把使用者www-data加到webapps使用者組
重新開機ngnix
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
5. 配置uwsgi
在
mysite
也就是django項目根目錄下建立
wsgi.ini
啟動檔案,通過這個檔案來啟動django項目。
[uwsgi]
socket = .:
chdir=/webapps/test/mysite
module=mysite.wsgi
master = true
processes=
threads=
max-requests=
chmod-socket=
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
用浏覽器通路外網ip,你會發現!!!amazing~終于出來了!我的Hello world!
雞凍不雞凍~
我搞了快兩天,各種錯誤,各種重裝,各種百度,啊啊啊啊,快要崩潰了。。。
最後終于搞出來了QAQ
這時候,你的mysite目錄下應該是這樣的:
項目是啟動了,如何停止呢?
輸入指令
再通路外網IP試試?
OK !停止了,這是一種好的停止方式。
如果不會的話,(怎麼會不會,會了不難,不會的難死,我找了好多資料才找到的。。)停止線程也可以。
檢視線程号
顯示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