django项目--项目部署

2019-09-16  本文已影响0人  昆仑草莽

项目部署

一、Django配置

1.settings.py配置

复制全局settings.py配置文件(或者直接修改),创建一个名为deploy_settings.py的副本,修改DEBUG=False。

DEBUG = False
​
# 填写你自己的ip和域名
ALLOWED_HOSTS = ["www.hhxpython.com", "localhost", "127.0.0.1"] 

2.wsgi.py配置

# 修改settings.py同目录下的wsgi.py文件
​
import os
​
from django.core.wsgi import get_wsgi_application
​
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyBlog.pro_settings')
​
application = get_wsgi_application()

3.生成requirement.txt文件

# 在xshell中生成requirements.txt文件(将项目中安装的包,存放到requirements.txt文件中)
​
pip freeze > requirements.txt

4.上传代码到服务器

将项目本地目录上传至服务器(各种云服务器,推荐阿里云)注册地址

方法一:

方法二:

还有很多方法,大家慢慢研究。

5.安装python3以及虚拟环境

    mkvirtualenv dj_pro
   # 进入到虚拟环境
    workon dj_pro
    # 安装包
    pip install -r requirements.txt

6.uwsgi安装测试

# 进入到虚拟环境
workon dj_pro
​
# 安装uwsgi
pip install uwsgi

测试uwsgi是否安装成功:

# 测试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

测试uwsgi运行是否正常:

curl 127.0.0.1:8000</pre>

7.uwsgi配置

在项目根目录中创建deploy目录,新建uwsgi_conf.ini文件。

[uwsgi]
# 使用nginx连接时使用,Django程序所在服务器地址
# 选择内网IP和端口
socket=127.0.0.1:8000
​
# 项目根目录
chdir=/home/wcf/code/tztz
​
#项目中wsgi.py文件的相对目录
wsgi-file=tzproject/wsgi.py
​
# 进程数
processes=2
​
# 线程数
threads=2
​
# uwsgi服务器的角色
master=True
​
# 存放进程编号的文件
pidfile=uwsgi.pid
​
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
​
# 指定虚拟环境所在目录,不能填相对目录
virtualenv=/home/wcf/.virtualenvs/tzproject
​

8.启动uwsgi

切换到deploy目录中,创建logs文件夹,用于存放日志文件

# 启动uwsgi
uwsgi --ini uwsgi_conf.ini &
​
# 停止uwsgi
uwsgi --stop uwsgi.pid
​

二、在docker下安装并配置redis

1.下载镜像

运行docker pull下载redis镜像,注意选择版本为4.0.9

$ docker pull redis:4.0.9</pre>

2.创建容器

  1. 创建redis配置文件redis.conf

    位置随便,建议放到一起管理,这里放到~/.docker/redis

    # ~/.docker/redis/redis.conf
    # 配置项
    # 端口,其他随意
    port 6378
    # 持久存储
    appendonly yes
  1. 创建数据存放目录

    放到~/.docker/redis/data

  2. 创建容器

    docker run --network host -d -v /home/wcf/.docker/redis/data:/data -v /home/wcf/.docker/redis/redis.conf:/usr/local/etc/redis/redis.conf --name djredis redis:4.0.9 redis-server /usr/local/etc/redis/redis.conf

注意把上面的/home/wcf/.docker/redis/data/home/wcf/.docker/redis/redis.conf分别替换成你的数据目录和配置文件目录,把--name后的djredis改成你想给容器取的名字。

如果创建成功,运行docker ps就会显示刚才创建的redis

三、在docker下安装并配置nginx

1.下载镜像

运行docker pull下载nginx镜像,注意选择版本为1.14.0

$ docker pull nginx:1.14.0

2.创建容器

  1. 创建nginx配置文件default.conf注意名字不能改

    位置随便,建议放到一起管理,这里放到~/.docker/nginx

  # ~/.docker/nginx/defautl.conf
    ​
    upstream MyBlog {
     # 此处为uwsgi运行的ip地址和端口号
     server 127.0.0.1:8000;
    }
    ​
    ​
    server {
     # 监听端口
     listen      80;
    ​
     # 服务器域名或者ip地址 除了这里改成你的域名之外,其他地方都不要动
     server_name localhost hhxpython.com;
    ​
     # 编码
     charset     utf-8;

     # 文件最大上传大小
     client_max_body_size 75M;

     # 媒体文件
     location /media  {
     alias /usr/share/nginx/media;
     }

     # 静态文件
     location /static {
     alias /usr/share/nginx/static/;
     }

     # 主目录
     location / {
     uwsgi_pass  MyBlog;
     include    /etc/nginx/uwsgi_params;
     }
    }
    
  1. 创建容器
    docker run --network host --name djnginx -v /home/wcf/code/tztz/media:/usr/share/nginx/media -v /home/wcf/code/tztz/static:/usr/share/nginx/static -v /home/wcf/.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro -d nginx:1.14.0

上面的三个 -v参数后面的值需要根据你的目录进行修改

其中/home/wcf/code/tztz/media改成你的媒体文件路径

其中/home/wcf/code/tztz/static改成你的静态文件路径

其中/home/wcf/.docker/nginx/default.conf改成你自定义的配置文件路径

注意,冒号后面的值不要动。

四、直接在云服务上安装nginx

1.Installing Nginx

# 安装nginx
sudo apt-get update 
sudo apt-get install nginx 
# 启动nginx,查看启动状态,如果启动状态未active,则代表启动成功
sudo systemctl start nginx && sudo systemctl status nginx
# 默认开启80端口,可以查看一下是否提供web服务
curl -I 127.0.0.1

2.nginx 管理命令

To stop your web server, type:

sudo systemctl stop nginx

To start the web server when it is stopped, type:

sudo systemctl start nginx

To stop and then start the service again, type:

sudo systemctl restart nginx

If you are simply making configuration changes, Nginx can often reload without dropping connections. To do this, type:

sudo systemctl reload nginx

By default, Nginx is configured to start automatically when the server boots. If this is not what you want, you can disable this behavior by typing:

sudo systemctl disable nginx

To re-enable the service to start up at boot, you can type:

sudo systemctl enable nginx

3.nginx配置

创建/etc/nginx/conf.d/nginx_dj_pro.conf文件:

upstream MyBlog {
 # 此处为uwsgi运行的ip地址和端口号
 server 172.18.168.123:8000;
}
​
server {
 # 监听端口
 listen      80;
​
 # 服务器域名或者ip地址
 server_name 39.108.191.165 ;
​
 # 编码
 charset     utf-8;

 # 文件最大上传大小
 client_max_body_size 75M;

 # 媒体文件
 location /media  {
 alias /home/Conner/MyBlog/media;
 }

 # 静态文件
 location /static {
 alias /home/Conner/MyBlog/static;
 }

 # 主目录
 location / {
 uwsgi_pass  MyBlog;
 include    /etc/nginx/uwsgi_params;
 }
}
​
# 修改sudo vim /etc/nginx/nginx.conf
# 第一行开头修改用户,将www-data改为你当前的用户
​
user username;
# 测试nginx配置文件是否正确,
sudo nginx -t -c /etc/nginx/nginx.conf
# 打印如下内容,则没问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
​
# 重新加载配置
sudo nginx -s reload -c /etc/nginx/nginx.conf
上一篇下一篇

猜你喜欢

热点阅读