项目部署
一、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.上传代码到服务器
将项目本地目录上传至服务器(各种云服务器,推荐阿里云)注册地址
方法一:
使用xshell连接阿里云,通过rz命令将本地目录压缩为zip后上传至服务器
在云服务器上,使用unzip解压项目压缩文件
方法二:
利用pycharm创建远程项目
同步代码
还有很多方法,大家慢慢研究。
5.安装python3以及虚拟环境
安装python3、virtualwrapper,请查看官方文档,步骤略。
创建虚拟环境
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.创建容器
-
创建redis配置文件
redis.conf
位置随便,建议放到一起管理,这里放到
~/.docker/redis
中
# ~/.docker/redis/redis.conf
# 配置项
# 端口,其他随意
port 6378
# 持久存储
appendonly yes
-
创建数据存放目录
放到
~/.docker/redis/data
中 创建容器
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.创建容器
-
创建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;
}
}
- 创建容器
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