CentOS7---部署Nginx+uwsgi+Django+python3環境
前提
阿里雲CentOS7伺服器—寶塔Linux皮膚5.2.0
(CentOS Linux 7.4.1708 (Core))
開始
-
安裝python3(可使用寶塔Linux皮膚安裝python3)
# 為centos系統增加編譯功能: yum -y install gcc gcc-c++ # 防止編譯安裝python3出現各種異常: yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel # 下載python3安裝包 cd ~/Downloads/ wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz # 解壓 tar -zxvf Python-3.6.3.tgz # 配置,將python3安裝到/usr/local/python3/路徑下: cd Python-3.6.3 ./configure --prefix=/usr/local/python3 # 建立軟連結: ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 檢測是否安裝成功 python3 -V pip3 -V
-
pip(python3)安裝 virtualenv
# 更新pip pip3 install --upgrade pip # 安裝virtualenv pip3 install virtualenv # 賦予可執行許可權 chmod 777 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py # 建立軟鏈 ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv
-
使用virtualenv建立python3的虛擬環境
# 切換到使用者目錄下 cd ~ # 建立虛擬環境資料夾 mkdir test_venv cd test_venv # 建立名稱為venv的虛擬環境 virtualenv -p /usr/bin/python3 venv
virtualenv -p /usr/bin/python3 venv 輸出結果:
-
進入虛擬環境,在virtualenv中用pip3安裝django和uwsgi
# 進入之前建立好的虛擬環境目錄 cd ~/test_venv # 啟用虛擬環境 source venv/bin/activate # 安裝Django與uwsgi # 這裡安裝Django2.0的版本,Django高版本會有SQL版本報錯 # 高版本SQL報錯解決方案地址https://blog.csdn.net/sunt2018/article/details/90712063 pip3 install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple pip3 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple # 檢視Django是否安裝成功 pip3 show django # 檢視uwsgi是否安裝成功 pip3 show uwsgi # 退出virtualenv虛擬環境 deactivate
-
安裝Nginx
1.使用寶塔Linux皮膚安裝 - - - 後續配置.conf也在寶塔Linux皮膚快捷配置
2.使用命令列安裝# 新增nginx儲存庫 yum install epel-release # 安裝nginx yum install nginx
-
開始建立Django專案
- 切換到虛擬環境目錄下新建Django專案
# 切換到工作目錄 cd ~/test_venv # 啟用虛擬環境 source venv/bin/activate # 建立Django專案,專案取名為hello_django django-admin.py startproject hello_django
# 修改settings.py,允許所有HOST的訪問 ALLOWED_HOSTS = [ ] #修改前 ALLOWED_HOSTS = ['*'] #修改後
# 啟動Django的web伺服器 cd hello_django python3 manage.py runserver <自己主機地址IP>:8080 #<自己主機地址IP>填自己主機地址,後面需要指定一個可用的埠(如8080)
- 在test_django下新建一個應用
# 建立應用 python3 manage.py startapp my_app # 新定義的應用加到settings.py中的INSTALL_APPS中 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'my_app', ]
# vi編輯應用中的views.py檔案: from django.http.response import HttpResponse def hello(request): user = request.GET.get('user') if not user: user = 'world' return HttpResponse('hello %s' % user)
# vi編輯專案中的urls.py檔案: from django.contrib import admin from django.urls import path from my_app import views as my_views urlpatterns = [ path('admin/', admin.site.urls), path('hello',hello_views.hello), ]
- 測試
# 啟動django自帶web伺服器 cd hello_django python3 manage.py runserver <自己主機地址IP>:8080 #<自己主機地址IP>填自己主機地址,後面需要指定一個可用的埠(如8080) # 用瀏覽器訪問django,訪問方式為 <自己主機地址IP>:8080/hello <自己主機地址IP>:8080/hello?user=123 # 瀏覽器可以看到對應返回資訊,說明django專案新建成功
- 切換到虛擬環境目錄下新建Django專案
-
關聯nginx、uwsgi、django
-
開放80,8080埠,允許外網訪問
# 查詢TCP/UDP的80, 8080埠占用情況 # 如果返回結果為“no”,則表示該埠尚未開放 firewall-cmd --query-port=80/tcp firewall-cmd --query-port=80/udp firewall-cmd --query-port=8080/tcp firewall-cmd --query-port=8080/udp
# 永久開放 TCP/UDP 的80和8080埠 firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=80/udp firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --permanent --zone=public --add-port=8080/udp # 重啟防火牆 firewall-cmd --reload
-
開放允許http訪問的埠
確保外網訪問nginx伺服器的http埠、nginx與uwsgi通訊的socket的埠都在http訪問埠的列表中。# 檢視http允許訪問的埠 semanage port -l | grep http_port_t
# 將需要開放的埠加入到如上埠列表中,例如開放5050埠作為nginx與uwsgi通訊的socket通道 semanage port -a -t http_port_t -p tcp 5050
-
關聯nginx與uwsgi
# 為django站點建立一個nginx服務的配置檔案 cd /etc/nginx/conf.d/ touch django_site.conf vi django_site.conf
# 在檔案 django_site.conf 中填入如下內容 server { server_name [你的主機IP]; # 暴露給外部訪問的IP地址,根據實際情況改寫成自己主機IP listen 80; # 暴露給外部訪問的埠,確保埠在http訪問和防火牆訪問的允許列表中 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5050; # nginx與uwsgi通訊用的socket介面,確保埠在http訪問埠的列表中 } } # 如遇到nginx服務啟動失敗,請檢查mysite_django.conf中指定的埠是否被佔用
-
關聯uwsgi與django
# 建立uwsgi配置檔案 cd ~/test_venv touch django_uwsgi.ini vi django_uwsgi.ini # 在django_uwsgi.ini檔案中填入如下內容 # django_uwsgi.ini [uwsgi] # 與nginx通訊 socket = 127.0.0.1:5050 # 讓uwsgi作為單獨的web-server,這裡註釋掉 # http = 127.0.0.1:5050 # django專案根目錄, 根據實際情況改寫成自己django專案的路徑 chdir = /home/YourProject/test_venv/hello_django # 本項指示uwsgi.py檔案的位置,其位於Django工程目錄下有個與工程名同名的子資料夾內(設定方式為:資料夾名.wsgi) # module = hello_django wsgi-file = hello_django/wsgi.py processes = 4 threads = 2 master = True pidfile = uwsgi.pid daemonize = uwsgi.log # 虛擬環境地址 #virtualenv = /home/YourProject/test_venv/venv
-
Nginx+uwsgi+Django聯調測試
# 先關閉Nginx與uwsgi服務 pkill -9 nginx pkill -9 uwsgi # 啟動nginx服務 service nginx start # 啟動uwsgi服務 cd ~/test_venv # 啟用虛擬環境 source venv/bin/activate uwsgi --ini django_uwsgi.ini # 用瀏覽器訪問django,訪問方式為 <自己主機地址IP>:80/hello <自己主機地址IP>:80/hello?user=123 # 瀏覽器可以看到對應返回資訊,說明部署成功
-
相關文章
- Hive環境部署Hive
- SharePlex 環境部署
- 部署Java環境Java
- DockerCompose部署環境Docker
- Kibana環境部署
- linux web環境部署LinuxWeb
- linux環境部署redisLinuxRedis
- 使用dockerfile 部署lnmpr環境DockerLNMP
- LNMP環境一鍵部署LNMP
- Flask環境github部署(十三)FlaskGithub
- nginx 寶塔 環境部署Nginx
- Windows環境部署專案Windows
- XXPAY環境部署筆記筆記
- ClickHouse生產環境部署
- MySQL多例項環境部署MySql
- Nginx部署前端環境(Mac)Nginx前端Mac
- 離線部署Python環境Python
- Linux 環境Skywalking部署ElasticsearchLinuxElasticsearch
- GitLab Runner部署(kubernetes環境)Gitlab
- Redis 4.0叢集環境部署Redis
- MHA原始碼分析——環境部署原始碼
- paddleocr 在docker環境下部署Docker
- Docker環境部署Prometheus實踐DockerPrometheus
- Linux 環境部署Skywalking支援ElasticsearchLinuxElasticsearch
- IBM /AIX 環境快速部署MySQLIBMAIMySql
- 規範:開發環境部署開發環境
- 一鍵化安裝 docker,一鍵化部署 lnmp+Redis 環境,快速部署 Laravel 環境DockerLNMPRedisLaravel
- linux伺服器環境部署(三、docker部署nginx)Linux伺服器DockerNginx
- openEuler網路配置+換源+桌面環境ukui等基本環境部署UI
- vcenter6.7生產環境叢集部署之環境介紹
- MyCAT原始碼分析——分析環境部署原始碼
- Ubuntu 16 下部署 Laravel LNMP 環境UbuntuLaravelLNMP
- [Python]-基礎-1.環境部署Python
- 在Ubuntu上部署Hyperledger Fabric環境Ubuntu
- windows環境Jenkins部署前端專案WindowsJenkins前端
- MySQL主從複製環境部署MySql
- 02-k8s部署環境K8S
- kubernetes環境部署單節點redisRedis