ローカルのdjangoプロジェクトは、centos7の下でnginx+uwsgiを介してオンラインでデプロイされます

インストールのアイデアの配置

  1. CentOSシステムにはpython2が付属していますが、必要なバージョンではありません。(システムに付属しているpython2を削除しないでください。yumはpython2に依存します)python3をインストールし、ソフト接続をセットアップします
  2. nginx、uwsgi、virtualenvなどのプロジェクトの依存関係をインストールします
  3. uwsgiファイルとnginxファイルを関連付ける
  4. 私が踏んだピット(私はまだ覚えています)

1. 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 /home/<username>/Downloads/ #<username>用自己的用户名代替
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

#编译安装:
make -j2
make install -j2

#建立软链接,方便在终端中直接使用python3和pip3命令:
ln -s /usr/bin/python /usr/bin/python2   #将原来的版本移动到python2
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip  #如果之前有pip就和python2转移方法一样

#安装成功性测试,显示相应版本就表示成功了:
python -V
pip -V

2.仮想環境をインストールし、プロジェクトのすべての依存関係をインストールします

#更新pip3至最新版本
pip install --upgrade pip

#安装virtualenv
pip install virtualenv

ln -s /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /usr/bin/virtualenv

#进入你自己想要进去的目录下
cd /XXX
mkdir XXX #创建一个存放的目录

cd XXX

virtualenv -p /usr/bin/python3 venv  #-p是为了指定python版本

#激活虚拟环境
source /你的虚拟环境路径/bin/activate

#退出虚拟环境
deactivate


pip install uwsgi 

#添加nginx存储库
yum install epel-release
#安装nginx
yum install nginx

pip install -r requirements.txt安装  (pip freeze >requirements.txt收集依赖)

3.uwsgiをテストします

test.pyというファイルを作成します

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

uwsgiを実行します

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

ブラウザがポート8000​​にアクセスすると、helloworldが表示されます。

curl http://127.0.0.1:8000

インストールが成功すると、プロジェクトの構成が開始され、wsgi.iniがプロジェクトディレクトリに追加されます。以下は私のファイルです、特定のパラメータが何をするか、あなたは公式ウェブサイトに行くことができます

[uwsgi]
#the local unix socket file than commnuincate to Nginx
socket = :8001
# the base directory (full path)
chdir = /XXX  #项目目录

# the virtualenv (full path)
home = /XXX  #虚拟环境目录

# master
master = true

# Django's wsgi file
wsgi-file = XXX/wsgi.py  #这个是项目自带的
# maximum number of worker processes
processes = 4
#thread numbers startched in each worker process
threads = 2
 
module = 你的项目名字.wsgi:application

deamonize = /XXX/log/uwsgi.log
logto = /XXX/log/uwsgi.log
disable-logging =  true

# clear environment on exit
vacuum   = true

#Set the internal cache size for uwsgi package parsing. The default is 4k.
buffer-size = 65536

post-buffering = 32768

#Unix socket is a file, so it will be restricted by the Unix system.
chmod-socket = 755


stats=%(chdir)/uwsgi/uwsgi.status

pidfile=%(chdir)/uwsgi/uwsgi.pid

第四に、nginxを構成します

メインの構成ファイル/etc/nginx/nginx.confは、書きやすいようにここに貼り付けています。ただし、別のファイルを作成することをお勧めします

upstream django {
        # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
        server 127.0.0.1:80; # for a web port socket (we'll use this first)
     }

#OW/// 
     server {
         listen       80;
         server_name  www.XXX.com XXX.com;
         #server_name  www.XXX.com
         root         /usr/share/nginx/html;
         client_max_body_size 75M;  #上传文件大小限制
         charset utf-8;
         # Load configuration files for the default server block.
         include /etc/nginx/default.d/*.conf;
 
         location / {
               uwsgi_pass  django;
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-Host $server_name;
               uwsgi_read_timeout 2;
               root html;
               index index.html index.htm;
               include /etc/nginx/uwsgi_params;
               #add_header Cache-Control public;
               #设置不缓存
               add_header Cache-Control no-cache;
               add_header Pragma no-cache;
               add_header Expires 0;
         }
         location /static{
              # expires 30d;
               add_header Cache-Control no-store;
               autoindex on;
               alias /var/XXX/static;
         }
         location /media{
              alias /var/XXX/media;
         }
 
         error_page 404 /404.html;
             location = /40x.html {
         }
 
         error_page 500 502 503 504 /50x.html;
             location = /50x.html {
         }
     }

                     

 include /usr/share/nginx/modules/*.conf;#これらの2行を追加します
  include / etc / nginx / sites-enabled / *;

settings.pyファイルを

#DEBUG = True
DEBUG = False
ALLOWED_HOSTS = [ ] #修改前
ALLOWED_HOSTS = ['*'] #修改后或者改成你的域名和外网ip更为严谨

コマンドの概要

source /usr/XXX/activate  激活虚拟环境
systemctl restart nginx 运行nginx服务
netstat -lnp|grep 80 查看是否再成功运行
uwsgi -d --init  /var/XXX/wsgi.ini
ps aux | grep uwsgi  查看是否再成功运行
netstat -lntp监听端口
 vim /etc/nginx/nginx.conf配置文件 
cat /var/log/nginx/error.log   查看错误日志 
netstat -apn|grep 80
kill -9 <pid>

思い出せないディテールもあるので、覚えたら戻ってきて追加します。

ファイブ、ピットを踏んだ

[エラー]1214#0:* 64アップストリーム、クライアントから応答ヘッダーを読み取っているときに、アップストリームの接続が途中で閉じられました:

#[error] 1214#0: *64 upstream prematurely closed connection while reading response header from upstream, client:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 256k;         #以下四个参数已加大,如果设置太小也会出现timeout 504
fastcgi_buffers 16 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;

403forbiddenこのサーバーにアクセスする/アクセスする権限がありません。

プロジェクトディレクトリに権限を追加します。

 

参照:

1.https   ://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html公式ウェブサイト

2.https  ://www.zhihu.com/question/22850801/answer/656762026  プログラマーXiangdongの回答

3. https://zhuanlan.zhihu.com/p/49200125

 

何かおかしいことがあれば、コメント欄で指摘してください

おすすめ

転載: blog.csdn.net/hard_days/article/details/96998037