Django2.0+uwsgi+Nginx+阿里云centos部署网站问题总结

部署过程中主要发生一下几个事情,个人认为也是经常出现的问题难点,所以这里以问题的形式进程说明。

1. centos系统的python3-mysql-虚拟环境的安装及相关配置

这个就不再详细说明,具体参考之前写的文章:
阿里云Linux系统配置python3-虚拟环境-mysql --踩坑实践(Ubuntu系统转centOS7)


2. 项目数据上传服务器及相关配置

文件上传及数据库迁移

  • 利用pycharm的Tools-->Deployment-->Configuration进入如图1所示界面,在图2中根据服务器情况进行配置。配置完成后将文件上传到服务器。
    图1.同步设置路径
    图2.同步到服务器文件配置
  • 数据库配置:
    在服务器上创建数据库,并创建用户及授权
create database mydb charset utf8;
use mydb;

创建用户
create user ‘[用户名称]’@’%’ identified by ‘[用户密码]’;
创建用户。’localhost’,代表只能本地访问,例如root账户默认为‘localhost‘。

mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';1

创建用户。’%’:所有远程主机访问。

mysql> CREATE USER 'finley'@'%' IDENTIFIED BY 'some_pass';1

授权
用户授权数据库。*代表整个数据库

GRANT privileges ON databasename.tablename TO ‘username’@’host’ [with grant option ] 

with grant option:允许被授予权限的人把这个权限授予其他的人。
一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

mysql> GRANT SELECT,UPDATE ON test to testuser21

授权用户只能本地访问

mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost'
    ->     WITH GRANT OPTION;12

授权用户可以远程访问

mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'%'
    ->     WITH GRANT OPTION;12

-- finley对test有所有权限。

mysql> GRANT ALL PRIVILEGES ON test.* TO 'finley'@'%' IDENTIFIED BY 'some_pass';12
-- finley对test有select,delete,update,create,drop权限。
mysql> GRANT SELECT,DELETE,UPDATE,CREATE,DROP ON test.* TO finley@'%' IDENTIFIED BY 'some_pass';12

重新载入赋权表

mysql> FLUSH PRIVILEGES;1

要远程连接,还需要设置/etc/mysql/mysql.conf.d/mysqld.cnf

#只允许localhost访问
#bind-address = 127.0.0.1
bind-address = 0.0.0.0123

解除授权
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from”:

--解除用户所有数据库(表)的所有权限(不包含赋权权限) 
mysql> REVOKE ALL PRIVILEGES ON *.* FROM finley;
--解除赋权权限  
mysql> REVOKE GRANT OPTION ON *.* FROM finley;  1234

删除用户

mysql> DELETE FROM mysql.user WHERE user='finley';1

设置与更改用户密码

SET PASSWORD FOR ‘username’@’host’ = PASSWORD(‘newpassword’); 

如果是当前登陆用户用:
SET PASSWORD = PASSWORD(“newpassword”);

mysql> SET PASSWORD FOR 'finley'@'%' = PASSWORD("123456");

修改settings.py文件

  • ALLOWED_HOSTS = ['127.0.0.1','服务器对外ip']或者ALLOWED_HOSTS = [‘*’]
  • 配置static根文件目录:STATIC_ROOT = os.path.join(BASE_DIR,'static_dist')
  • 将数据库的配置信息进行核对和修改
  • 测试成功后,将DEBUG = False

测试

进入项目根目录运行如下命令,在浏览器中查看,对比DEBUG关闭前后状态:

# 注意这里需要开启服务器对应端口的访问权限
python manage.py runserve 0.0.0.0:8000

收集静态文件

python manage.py collectstatic

3. uwsgi安装、测试及配置

安装

因为centos系统中的python3是后来配置的,这里需要先执行如下命令,在安装,否则直接安装会报错:

yum install python-dev

安装uwsgi:

pip install 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

完成后,在该目录下,执行如下命令,然后访问对应的ip和端口,查看是否返回Hello World,返回就说明成功:

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

配置

关于uwsgi的文件配置,都是与nginx相互配合的,这里我们使用socket也配置:
在项目根目录下创建一个名为:uwsgi.ini的文件,配置如下:

[uwsgi]

# Django相关配置
# 必须全部为绝对路径
# 项目路径
chdir=/home/study/django/django_01

# Django的wsgi文件
module=django_01.wsgi

# python虚拟环境的路径
home=/root/.virtualenvs/django_01

# 进程相关的设置
# 主进程
master=true
# 最大数量的工作进程
processes=10
# socket文件路径,绝对路径
# 该路径自己指配,但是要保持与nginx/conf.d中配置的.socket路径一致
socket=/var/run/django_01.sock
# 设置socket的权限 绝对路径
chmod-socket=666
# 退出时是否清理环境
vacuum=true

# 日志记录
#logoto         = /tmp/django_01_uwsgi.log

常用的uwsgi命令:

#启动:uwsgi –-ini 配置文件路径 例如:
uwsgi –-ini uwsgi.ini
#停止:uwsgi --stop uwsgi.pid路径 例如:
uwsgi –-stop uwsgi.pid

4. Nginx安装、测试及配置

安装

首先,我们还要先添加 EPEL 包的仓库源。使用如下命令

yum -y install epel-release

然后再执行安装Nginx命令。

yum -y install nginx

安装完成后,启动nginx

# 启动
service nginx start
# 关闭
service nginx stop
# 重启
service nginx restart

测试

安装完成后,可以直接在本地的浏览器上,访问,服务器的ip,看界面是否返回一个nginx界面。

配置

在目录/etc/nginx/conf.d下创建一个xxx.conf的文件,文件配置如下:

upstream django_01{
        server unix:///var/run/django_01.sock;
}
# 服务器配置
server {
        # 监听端口
        listen          80; # 建议80端口
        # 域名
        server_name     xxx.xxx.xxx.xxx;# 域名或服务器ip
        charset         utf-8;

        # 最大文件上传尺寸
        client_max_body_size    75M;

        # 静态文件访问的url
        location /static {
                # 静态文件地址
                alias /home/study/django/django_01/static_dist;
        }

        # 最后,发送所有的非静态文件请求到django服务器
        location / {
                uwsgi_pass django_01;
                # uwsgi_params文件地址
                include         /etc/nginx/uwsgi_params;
        }
}

每次更改nginx文件后,都需要重启。
配置完成后,执行如下命令,无错误时,就可以使用对应的ip或者域名进行网站的访问了。

uwsgi --ini uwsgi.ini
注意事项
  • 关于使用socket进行服务器间通信,xxx.sock文件存放的目录,建议放在var/run/文件下,否则可能因为文件权限问题导致报502的错误。

配置uwsgi+nginx可能报502错误的解决办法 参考链接:
https://serverfault.com/questions/504901/nginx-502-bad-gateway-runing-django-in-uwsgi

猜你喜欢

转载自www.cnblogs.com/achjiang/p/9899710.html
今日推荐