基于Ubuntu16.04 + Python3 + nginx + mysql + Django
從windows傳文件到服務(wù)器使用了XFTP
準(zhǔn)備:阿里云的服務(wù)器,自己電腦上可以跑的Django項目,XFTP,Xshell
安裝python3.6
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:jonathonf/python-3.6
apt-get update
apt-install python3.6
創(chuàng)建軟鏈接
cd /usr/bin
rm python
ln -s python3.6 python
rm python3
ln -s python3.6 python3
Ubuntu默認Python為2.7涩搓,所以安裝Python包時安裝的為py2的包最楷。
利用alternatives機制更改py3為默認踏拜。
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
安裝pip3.6
apt-get install python3-pip
升級pip
pip3 install --upgrade pip
刪除mysql:
sudo apt-get remove mysql-*
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
安裝Mysql
cd /home
wget?https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb
ls
dpkg - i 上面列出的安裝包
apt-get install mysql-server
mysql -u root -p
show databases;
創(chuàng)建用戶專屬數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 你的數(shù)據(jù)庫名稱 DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;
腳本已經(jīng)寫好豆励,使用XFTP上傳到home目錄下
cd /home
sudo mysql -u root -p databasename<movie.sql
創(chuàng)建用戶:
CREATE USER '你的用戶名'@'localhost' IDENTIFIED BY '你的密碼';
mysql> CREATE USER 'user1'@'localhost' IDENTIFIED BY 'qweasdzxc';
再把剛剛創(chuàng)建的數(shù)據(jù)庫的管理權(quán)限給予剛剛創(chuàng)建的MySQL用戶:
GRANT ALL PRIVILEGES ON 你的數(shù)據(jù)庫名.* TO '你的用戶名'@'localhost';
mysql> GRANT ALL PRIVILEGES ON movie.* TO 'user1'@'localhost';
最后拳芙,刷新權(quán)限:
FLUSH PRIVILEGES;
驗證:
mysql -u user1 -p movie
show tables;
show tables;
還原數(shù)據(jù)庫(這里是我導(dǎo)入已經(jīng)寫好的movie.sql腳本洼滚,使用XFTP上傳到服務(wù)器)埂息;進入家目錄(home),輸入下面命令:
cd /home
sudo mysql -u user1(創(chuàng)建的用戶名) -p movie(數(shù)據(jù)庫名)<shiguang.sql
sudo mysql -u user1 -p movie<movie.sql
mysql -u user1 -p movie
show tables;
安裝Mysqlclient
cd /home
wget?https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.13-1ubuntu16.04_amd64.deb
dpkg -i?libmysqlclient-dev_8.0.13-1ubuntu16.04_amd64.deb
apt-get update
apt-get install libmysqlclient-dev
apt-get install python3.6-dev
安裝uwsgi
pip3(pip) install uwsgi
測試uwsgi
進入官網(wǎng)
https://www.djangoproject.com/
https://uwsgi.readthedocs.io/en/latest/WSGIquickstart.html
創(chuàng)建test.py
cd /home
vim test.py
test.py
start_response('200 OK',[('Content-Type','text/html')])
return[b"Hello World"]
用http開了端口8001遥巴,端口可以隨便寫
uwsgi --http :8001 --wsgi-file test.py
訪問公網(wǎng)ip+端口
一開始無法訪問千康,因為服務(wù)器端口沒有開啟
添加
訪問(公網(wǎng)ip):8001
說明uwsgi可以使用
創(chuàng)建module filmticket.wsgi與django進行交互
安裝Nginx(由于uwsgi無法處理動態(tài)數(shù)據(jù),使用nginx轉(zhuǎn)發(fā)到uwsgi)
apt-get install nginx
配置uginx,與uwsgi聯(lián)系起來
cd /etc/nginx
nginx.conf是主要配置文件铲掐,一般不會主要修改
進入網(wǎng)站可用配置
cd sites-available
進入 sites-enabled,里面有默認軟鏈接default,這個default是默認頁面可以訪問
cd sites-enabled
刪除default
cd /sites-enabled
rm default
接著進入
cd sites-available
新建自己網(wǎng)站的配置
vim filmticket.conf
server{
? ? listen 80;一般網(wǎng)站直接輸入ip是使用80端口
? ? server_name filmticket;自己的項目名字
? ? charset utf-8;
? ? client_max_body_size 75M;
? ? 指定靜態(tài)文件
? ? location /static {
?? ?? ? alias /home/filmticket/static;這里填寫自己的路徑
? ? }
? ? location /media {
?? ??? ?alias /home/filmticket/media;
? ? }
? ? 處理動態(tài)文件拾弃,轉(zhuǎn)發(fā)給uwsgi
? ? location / {
?? ?? ? uwsgi_pass 127.0.0.1:8001;這個轉(zhuǎn)發(fā)不是通過HTTP協(xié)議,而是通過socket協(xié)議進行處理的
?? ?? ? include /etc/nginx/uwsgi_params;
?? ?}
}
基本配置好摆霉,但是uwsgi還沒有準(zhǔn)備好接收
接著配置uwsgi,用ni文件進行配置而不是通過命令行進行啟動
cd /home
創(chuàng)建一個文件夾進行管理
mkdir filmticket_uwsgi
ls
cd?filmticket_uwsgi
創(chuàng)建ini文件
https://uwsgi.readthedocs.io/en/latest/WSGIquickstart.html
官方文檔
vim filmticket.ini
[uwsgi]
chdir = /home/foobar/myproject/python (django程序所在目錄)
home = /home/mysite_env(虛擬環(huán)境目錄豪椿,沒有就不用寫)
module = mysite.wsgi:application
master = True 啟動主程序
processes = 4 使用的進程數(shù)颠毙,用四個進程處理請求
max-requests = 5000 最大請求數(shù),請求過5000進程就會進行重啟砂碉,以防止內(nèi)存泄漏
harakiri = 60 請求超時時間蛀蜜,請求超過一定時間就把請求關(guān)閉,這里設(shè)置60s
socket = 127.0.0.1:8001 用8001端口監(jiān)聽,使用socket協(xié)議
uid = 1000
gid = 2000
pidfile = /home/filmticket_uwsgi/master.pid 對主進程進行關(guān)閉重啟操作
daemonize = /home/filmticket_uwsgi/filmticket.log 后臺運行
vacuum? = True? 服務(wù)器關(guān)閉或服務(wù)器退出會自動把pidfile回收
[uwsgi]
chdir = /home/filmticket
module = filmticket.wsgi:application
master = True
processes = 4
max-requests = 5000
harakiri = 60
socket = 127.0.0.1:8001
uid = 1000
gid = 2000
pidfile = /home/filmticket_uwsgi/master.pid
daemonize = /home/filmticket_uwsgi/filmticket.log
vacuum??= True??
接著啟動uwsgi,通過ini文件啟動(指向剛剛設(shè)置的ini文件)
uwsgi --ini /home/filmticket_uwsgi/filmticket.ini
查看進程?
ps -aux | grep uwsgi
顯示只有一個增蹭,說明沒有啟動滴某,因為剛剛設(shè)置了一個主進程和四個子進程進行使用
進入filmticket.ini查看錯誤,修改后
顯示多個滋迈,表示ini啟動成功,使用socket協(xié)議
接著進入?
cd /etc/nginx/
ls
將剛剛在sites-available創(chuàng)建的弄一個軟連接放到sites-enabled
ln -s /etc/nginx/sites-available/filmticket.conf /etc/nginx/sites-enabled/filmticket.conf
進入sites-enabled查看是否成功
使用nginx -t 查看是否有問題
ok.success沒有問題
沒有問題就進行重啟
service nginx restart
到這里就配置完成霎奢,訪問自己的公網(wǎng)ip,如果一開始找不到就加個/index后綴試試
重啟命令
service nginx restart
uwsgi --reload /home/filmticket_uwsgi/master.pid