阿里云配置centos7+nginx+django+python

https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-centos-7英文文章地址

1.配置有一个non-root并有sudo权限的root用户

useradd nginxu

passwd nginxu

visudo配置nginxu sudo权限且不输密码

nginxu ALL=(ALL) NOPASSWD: ALL

2. 配置VirtualEnv and VirtualEnvWrapper(已安装好python3)

安装virtualenv virtualenvwrapper及设置

root下

pip3 install virtualenv virtualenvwrapper

然后再在nginxu下装

pip3 install virtualenv virtualenvwrapper

 

# 设置虚拟环境的位置(ENV)

echo "export WORKON_HOME=~/Env" >> ~/.bashrc

# 如果使用python3,则需指明python3执行程序的位置

echo "export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3.6" >> ~/.bashrc

echo "source /usr/local/python3/bin/virtualenvwrapper.sh" >> ~/.bashrc

读取~/.bashrc文件

source ~/.bashrc

 

3. 创建Django项目

现在,我们可以使用virtualenvwrapper在虚拟环境下轻松的搭建我们的项目环境。

 

mkvirtualenv myweb

该指令会在虚拟环境下安装Python及pip,并激活该环境。现在,你的命令行行首应该类似于(myweb) [nginxu@xk-pc Env]$。并且,在该虚拟环境下,你也无需再管python2, python3之间的版本区别什么的了,使用pip(python3也使用该指令)安装的Python包也仅在当前环境中有效(并且无需使用sudo即可安装)。

现在,安装Django

pip install django

 

Django安装之后,创建我们的Django项目:

 

cd ~

django-admin.py startproject mysite

该命令会在当前用户的家目录下创建名为firstsite的Django项目

对该项目进行一些基础设置:

(1) 数据库迁移及超级用户的创建

 

cd ~/mysite

# 如果需要修改默认数据库,请在执行下一命令前修改Django的setting.py文件中的数据库配置部分内容。

./manage.py migrate

./manage.py createsuperuser

(2) 静态文件位置的修改

 

打开项目的配置文件:vim mysite/settings.py

当我们使用Nginx来反向代理我们的站点时,我们需要将我们的静态文件(如图片、视频、音频、字体、CSS等)放置在统一的目录下。

# 将该行输入到setting.py文件中

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

保存并关闭后使用./manage.py collectstatic 命令,Django会帮你在当前位置~/mysite下创建static目录保存静态文件

(3) 进行测试

在我们创建的项目里修改setting.py文件

ALLOWED_HOSTS = ['*']  #在这里请求的host添加了*

./manage.py runserver 0.0.0.0:8000

在浏览器中输入:http://server_domain_or_IP:8000

即可看到Django熟悉的初识界面

进入/admin界面:

即可使用之前创建的超级用户进行登陆了。

(4)关于虚拟环境进入退出的一点说明

退出:deactivate

进入:workon firstsite

OK,现在我们需要使用deactivate命令退出当前虚拟环境。

 

4. 设置uWSGI应用服务器

4.1 软件安装

# 如果之前用rpm安装过python3-devel则跳过该命令

yum search python3 | grep devel结果为:

python34-cairo-devel.x86_64 : Libraries and headers for python34-cairo

python34-greenlet-devel.x86_64 : C development headers for python34-greenlet

python34-devel.x86_64 : Libraries and header files needed for Python 3

: development

python34-gobject-devel.x86_64 : Development files for embedding Python 3.4

python36-devel.x86_64 : Libraries and header files needed for Python development

shiboken-python34-devel.x86_64 : Development files for shiboken

 

sudo yum install python36-devel.x86_64

 

sudo yum install gcc gcc-c++

sudo pip install uwsgi

# 若为python3,则使用

sudo pip3 install uwsgi

快速测试:

uwsgi --http :8000 --home /home/nginxu/Env/myweb --chdir /home/nginxu/mysite -w mysite.wsgi

在浏览器中输入:http://server_domain_or_IP:8080,即可看到如同之前的页面了。注意,现在/static下的文件并不能正常的显示工作,需要通过Nginx的配置后才能正常显示。

 

4.2 uWSGI配置的设置

创建/etc/uwsgi/sites的目录来保存我们的配置文件

 

sudo mkdir -p /etc/uwsgi/sites

cd /etc/uwsgi/sites

创建Django站点对应的配置文本:

 

sudo vim /etc/uwsgi/sites/mysite.ini

在其中输入:

[uwsgi] project = mysite username = nginxu base = /home/%(username) chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application master = true processes = 5 uid = %(username) socket = /run/uwsgi/%(project).sock chown-socket = %(username):nginx chmod-socket = 660 vacuum = true

不扩展

[uwsgi] chdir = /home/nginxu/mysite home = /home/nginxu/Env/myweb module = mysite.wsgi:application master = true processes = 5 uid = nginxu socket = /run/uwsgi/mysite.sock chown-socket = nginxu:nginx chmod-socket = 660 vacuum = true

 

各项值的含义我就不一一解释了,详情见Justin Ellingwood的文章。

 

4.3 为uWSGI创建一个Systemd Unit File

现在我们的配置文件可以为我们Django项目提供服务了,当并不能自动实现。接下来,我们需要创建一个系统文件实现uWSGI的自启动。

我们将在/etc/systemd/system目录下创建我们的uwsgi.service文件:

 

sudo vim /etc/systemd/system/uwsgi.service

并在其中输入:

[Unit]

Description=uWSGI Emperor service

[Service]

ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user:nginx /run/uwsgi'

ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites

Restart=always

KillSignal=SIGQUIT

Type=notify

NotifyAccess=all

[Install]

WantedBy=multi-user.target

各项值的具体含义见Justin Ellingwood的文章。

5. Nginx的安装及配置

uWSGI配置好后,我们需要安装和配置Nginx作为我们的反向代理。

5.1 nginx的安装

(1) 在此处,你可以直接使用yum的方式进行安装:

 

sudo yum install nginx

使用此方式安装的话,你的配置文件位于/ete/nginx/nginx.conf以及/etc/nginx/conf.d/*两个位置中。

为Django项目单独创建一个Nginx配置文件:

 

sudo vim /etc/nginx/conf.d/mysite.conf

 

在文本中输入:

 

server {

listen 80;

server_name localhot;

location = favicon.ico { access_log off; log_not_found off; }

location /static/ {

root /home/nginxu/mysite;

}

location / {

include uwsgi_params;

uwsgi_pass unix:/run/uwsgi/mysite.sock;

}

配置完成后,可使用sudo nginx -t对Nginx的配置文件进行检查。

5.3 权限及启动的配置

为了能让nginx能访问/home/user中的文件,我们需要将nginx添加到user用户组,并设置相应权限确保安全:

 

sudo usermod -a -G nginxu nginx

chmod 710 /home/nginxu

自此,我们的配置已经基本完成啦,现在,就启动我们的Nginx服务以及uWSGI进程吧:

以nginxu运行下面:

/usr/local/python3/bin/uwsgi --emperor /etc/uwsgi/sites --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐