Django项目名称:GTD
任务:Windows项目转移至Centos,并通过Nginx+uWSGI部署Django项目
GTD项目路径:/root/projects/gtd/
参考文章:http://projectsedu.com/2017/08/15/centos7-%E4%B8%8B%E9%80%9A%E8%BF%87nginx-uwsgi%E9%83%A8%E7%BD%B2django%E5%BA%94%E7%94%A8/
①获取Python3源码
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
②安装Python3所需依赖项
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
③解压
tar -xzvf Python-3.7.2.tgz
④编译及安装(需要进入解压目录)
./configure --prefix=/usr/local #安装目录为/usr/local
make && make install
⑤安装Django项目环境
#建议使用虚拟环境: pip3 install virtualenvwrapper
#配置virtualenvwrapper环境变量: vi .bashrc
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3
source /usr/local/bin/virtualenvwrapper.sh
#刷新.bashrc文件: source .bashrc
#.bashrc文件在用户家目录下
安装mysqlclient可能出现错误,需要安装依赖项:
yum -y install python-devel mariadb-devel
pip3 install mysqlclient
1、安装mariadb数据库(安装mysql数据库类似)
yum install -y mariadb-server #安装mariadb数据库
systemctl start mariadb #启动mariadb服务
systemctl enable mariadb #设置自启动
#ss -lpn src :3306 查看端口占用情况
firewall-cmd --add-port=3306/tcp #将3306端口开放,返回success
#一定要开放3306端口,否则无法远程登录mariadb数据库
mysql_secure_installation #进行安全初始化设置(包括root用户密码,匿名登入,远程登入等)
#只有在mariadb服务启动了才能执行成功,要不然一直报错:Can't connect to local Mysql server
2、数据库同步
①远程同步
第一步:设置bind-address
#bind-address = 127.0.0.1 表示只允许本机客户端访问,其他服务器不可访问
#bind-address = 0.0.0.0 表示不限制访问
vi /etc/my.cnf #在[mysqld]下面加入或修改
bind-address = 0.0.0.0
第二步:允许外部ip访问
#先进入mariadb或mysql,进入mariadb命令(mysql)与mysql一样:mysql -u root -p
#输入以下命令:表示允许root用户在任意('%')主机以密码('password')登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES; #刷新权限
第三步:外部主机连接mariadb数据库进行数据同步
②本地同步
导出为sql文件,并通过mysql命令导入。如:source path/data.sql;
1:添加Nginx仓库
yum install epel-release
2:安装Nginx
yum install nginx
3:启动Nginx
systemctl start nginx
#systemctl enable nginx 开机自启动
4:设置防火墙
注意:如果运行了防火墙,设置允许防火墙通过http、https流量,否则无法访问。
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
#启动之后即可网页访问:http://your_machine_ip/
#安装
pip3 install uwsgi
#测试uwsgi:GTD.wsgi为Django项目目录下的文件,与setting.py在同一文件夹(即GTD)下。
uwsgi --http :8000 --module GTD.wsgi
#可通过网页http://ip/访问
第一步:新建nginx配置文件:vi gtd_nginx.conf
,写入以下内容。
需要更改内容:
your_ip_address:替换为你主机的ip地址
/root/projects/gtd/media :你的Django项目的media目录,为完整路径
/root/projects/gtd/static :你的Django项目的static目录,为完整路径
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name your_ip_adderss ; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /root/projects/gtd/media; # 完整路径,指向django的media目录
}
location /static {
alias /root/projects/gtd/static; # 完整路径,指向django的static目录
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params; # the uwsgi_params file you installed
}
}
第二步:将gtd_nginx.conf加入Nginx启动配置文件
mv gtd_nginx.conf /etc/nginx/conf.d/
第三步:拉取Django项目所有需要的static file 到同一个目录
#在django的setting文件中,添加下面一行内容:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
#注意 STATIC_ROOT 与 STATICFILES_DIRS 不能同时存在,须注释或删除STATICFILES_DIRS
#运行命令
python manage.py collectstatic
第四步:重启并运行Nginx
第一步:新建gtd_uwsgi.ini配置文件(位置在gtd/conf/gtd_uwsgi.ini,即项目)。
注意:
chdir: 表示需要操作的目录,也就是项目的目录,为完整路径
module: wsgi文件的路径
processes: 进程数
virtualenv:虚拟环境的目录
# gtd_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /root/projects/gtd/
# Django's wsgi file
module = GTD.wsgi
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv = /root/.virtualenvs/gtd
logto = /tmp/gtd_log.log
第二步:修改setting.py文件。
①DEBUG=False
生产环境需要把DEBUG改为False,如果为True,则页面出差时会暴露内部代码及泄露信息。
②ALLOWED_HOSTS=['*']
在ALLOWED_HOSTS中添加'*'
,表示任意主机可访问。不设置则外部主机不可访问。
③注意,你可能需要更改mysql配置信息(如PASSWORD),防止与数据库密码不一致。
第三步:运行uwsgi
uwsgi -i /root/projects/gtd/conf/uwsgi.ini
访问:http://ip/
错误情况一:502错误。
原因:nginx访问某些目录无权限
解决:vim /etc/nginx/nginx.conf
把user nginx
改为user root
。
错误情况二:网页无样式。
原因:/etc/nginx/conf.d/gtd_nginx.conf 配置了代理静态文件目录(即media与static),而运行用户 无权限访问这些目录。
解决:赋予用户相应权限。
最后,附上部署成功后的项目图片。