文章目录
在开发机上的准备工作
- 确认项目没有bug
- 用开发项目的虚拟环境进入Django的项目目录,用
pip freeze > requirements.txt
将当前环境的包导出到requirements.txt
文件中,方便在部署的时候安装。 - 将项目上传到服务器上的
/srv
目录下
/srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务) - 关于如何从开发机上传项目到服务器上,可以用scp,git等形式。这里推荐使用git的形式
- git init 初始化
- git remote add origin https://gitee.com/用户个性地址/HelloGitee.git 关联远程仓库
- git pull origin master 把远程仓库中的文件拉到本地实现统一
- git add . 将当前目录所有文件添加到git暂存区
- git commit -m “first desc”’ 提交并备注提交信息
- git push origin master 推送到仓库
在服务器上的准备工作
配置国内yum源
想用linux的软件,yum默认去从centOS的官网去下载,而官网又在国外,速度会很慢,因此首先要配置yum源。
yum源的仓库路径在 /etc/yum.repos.d/ 如图所示
新建一个文件夹allbak,把所有的yum仓库移动到allbak文件夹下
这个时候用yum在安装软件就会报错,如下图
配置国内的yum源
1.在/etc/yum.repos.d/目录底下,定制我们自己的repo仓库
2.https://opsx.alibaba.com/mirror 阿里巴巴的镜像站 查看帮助文档
3.下载阿里巴巴的yum仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget下载文件后 -O参数指定放到某个目录,且改名
4.清除yum缓存 yum clean all
5.生成新的阿里云的yum软件缓存 yum makecache
6.在配置epel额外的仓库源,这个仓库里存放了很多第三方软件,例如Redis,MySQL nginx
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
7.最好再生成yum缓存 yum makecache
8.请随心所欲的使用yum工具
编译安装Python3
1.下载Python3的源码
cd /opt
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
安装Python3之前,环境依赖解决,很重要!
通过yum安装工具包,自动处理依赖关系,每个软件包按空格分割
提前安装好这些软件包,日后就不会出现很多坑
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
2.解压缩源码包
下载好Python3的源码包并且安装完工具包后,
tar -xvf Python-3.7.5.tgz
3.切换源码包目录
cd Python-3.7.5
4.编译且安装
4.1.释放编译文件makefile --prefix指定文件路径
./configure --prefix=/opt/python3.7/
图中makefile
就是用来编译且安装的
4.2. 编译且安装
make && make install
4.3 配置环境变量
echo $PATH查看环境变量
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ys/.local/bin:/home/ys/bin
这个变量赋值操作,只是临时生效,需要写入文件,永久生效 PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ys/.local/bin:/home/ys/bin:/opt/python3.7/bin
linux有一个全局个人配置文件 /etc/profile
vim /etc/profile
在最后添加PATH
source /etc/profile
读一下文件
这个时候 python3.7 pip都已经出来了 编译安装成功!
安装virtualenv
非常简单,一行命令就搞定!
pip3 install virtualenvwrapper
设置Linux的环境变量,每次启动就加载virtualenvwrapper
把下面两行代码添加到 ~/.bashrc文件中
打开文件
vim ~/.bashrc
写入以下两行代码
export WORKON_HOME=/root/Envs #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3 #指定python解释器
source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
然后读取文件,使得生效,此时已经可以使用virtalenvwrapper
source ~/.bashrc
注意:
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
这个参数不要在添加了,不然光报错,有点坑
基本使用virtualenvwrapper
创建一个虚拟环境:
$ mkvirtualenv django2
这会在 ~/Envs 中创建 django2文件夹。
在虚拟环境上工作:激活虚拟环境django2
$ workon django2
再创建一个新的虚拟环境
$ mkvirtualenv django1.1
virtualenvwrapper 提供环境名字的tab补全功能。
当有很多环境, 并且很难记住它们的名字时,这就显得很有用。
workon还可以任意停止你当前的环境,可以在多个虚拟环境中来回切换
workon django1.1
workon django2
也可以手动停止虚拟环境
deactivate
删除虚拟环境,需要先退出虚拟环境
rmvirtualenv django2
安装MySQL5.7
一 安装mysql源
- 创建mysql目录
/home/mysql
- 进入mysql目录
cd /home/mysql
- 下载mysql源安装包(可在http://dev.mysql.com/downloads/repo/yum/ 获取源安装包地址)
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
- 安装mysql源
yum localinstall mysql57-community-release-el7-11.noarch.rpm
- 检查mysql源安装情况
yum repolist enabled | grep 'mysql.*-community.*'
执行命令后返回上述结果表示mysql源安装成功。
二 安装mysql
- 安装mysql
yum install mysql-community-server
- 启动mysql
systemctl start mysqld
- 查看启动状态
systemctl status mysqld
- 设置开机启动
systemctl enable mysqld
systemctl daemon-reload
三 配置mysql
- 修改密码策略
mysql5.7默认带有密码查检策略,密码默认策略要求:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误。 - 可通过修改
/etc/my.cnf
文件来达到修改密码策略目的,具体方式修改方式如下:
如果不需要密码策略,在my.cnf
文件中添加如下配置禁用即可:
validate_password = off
然后重新启动mysql服务使配置生效:
systemctl restart mysqld
- 修改root密码
mysql安装后,系统会自动初始化一个密码,通过如下命令查看:
grep 'temporary password' /var/log/mysqld.log
[root@172 mysql]# grep 'temporary password' /var/log/mysqld.log
2017-12-14T11:02:37.459592Z 1 [Note] A temporary password is generated for root@localhost: ju/,8f1;O!J8
# 密码为localhost:后的字符,本例为:ju/,8f1;O!J8
使用root和默认密码登录mysql
mysql -uroot -p
,然后输入默认密码登录。
修改root密码,可通过以下两种方式:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password';
mysql> set password for 'root'@'localhost'=password('your password');
- 配置默认编码
通过修改/etc/my.cnf
文件,在[mysqld]下添加编码配置,如下:
[mysqld]
character_set_server=utf8
init_connect=’SET NAMES utf8’
重启服务生效(systemctl restart mysqld
)
重启后查看数据库默认编码格式如下:
mysql> show variables like ‘character%’;
安装redis
待续
安装memcached
待续
生产环境下Django项目的配置
-
首先要把项目从git上拉下来,
cd /srv
- git init
- git remote add origin https://gitee.com/yanyunhan/xfz_bushu.git
- git pull origin master
-
项目拉下来之后,进入虚拟环境根据
requirements.txt
安装项目的环境依赖- pip install -r requirements.txt
- 在安装mysqlclient时出现了问题,出错的原因在于缺少依赖
yum install gcc mariadb-devel
pip install mysqlclient
-
在mysql数据库中,创建项目对应的库
-
执行
python manage.py migrate
命令,迁移文件,映射到数据库中,创建相应的表。 -
设置
ALLOW_HOST
为你的域名,以及ip地址。 -
执行
python manage.py runserver 0.0.0.0:8000
然后在你自己的电脑浏览器上输入http://你的服务器的ip地址:8000/
访问下网站所有页 面,确保所有页面都没有错误。 -
修改时区,不然数据库的时间对不上
-
设置
DEBUG=False
,避免如果你的网站产生错误,而将错误信息暴漏给用户。 -
收集静态文件:
python manage.py collectstatic
方便后面给nginx用。
STATIC_URL = '/static/'
# STATIC_ROOT收集到静态文件到哪里
STATIC_ROOT = os.path.join(BASE_DIR,'static_dist')
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
收集完成!
安装uwsgi
1.uwsgi是一个应用服务器,非静态文件的网络请求就必须通过它完成。它也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过pip install uwsgi
就可以了。(uwsgi必须安装在系统级别的python环境中,不要安装到虚拟环境中)
用豆瓣镜像源安装 pip install uwsgi -i https://pypi.douban.com/simple/
运行简单的test
命令:uwsgi --http :8000 --wsgi-file /opt/test.py
解释:
http :8000 使用http协议,端口8000
wsgi-file test.py : 加载指定的文件
测试文件:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
2.使用命令uwsgi --http :8000 --module xfz.wsgi --virtualenv=/root/Envs/django2。用uwsgi
启动项目,如果能够在浏览器中访问到这个页面,说明uwsgi
可以加载项目了。一定要注意路径不要写错!
3.如果uwsgi可以正常加载你的项目,那么就可以编写uwsgi配置文件了,在项目的路径下面,创建一个文件叫做zhiliaoketang_uwsgi.ini
的文件,然后填写以下代码:
[uwsgi]
# Django相关的配置
# 必须全部为绝对路径
# 项目的路径
chdir = /srv/zhiliaoketang
# Django的wsgi文件
module = xfz.wsgi
# Python虚拟环境的路径
home = /root/Envs/django2.2
# 最大数量的工作进程
# socket文件路径,绝对路径
socket = /srv/zhiliaoketang/xfz.sock
# 设置socket的权限
chmod-socket = 666
# 退出的时候是否清理环境
vacuum = true
安装nginx
nginx是一个web服务器。擅长加载静态文件和接收http请求。
1、安装Nginx 现在非常简单了,一条命令就可以实现了。
yum install -y nginx
2、启动Nginx并设置开机自动运行
systemctl start nginx.service
systemctl enable nginx.service
3.登录浏览器查看是否成功
4.编写nginx配置文件
在/etc/nginx/conf.d
目录下,新建一个文件,叫zlkt.conf
,然后将以下代码粘贴进去:
upstream zlkt{
server unix:///srv/zhiliaoketang/xfz.sock;
}
server {
listen 80;
server_name 192.168.1.128;
charset utf-8;
# 最大的文件上传尺寸
client_max_body_size 75M;
# 静态文件访问的url
location /static {
alias /srv/zhiliaoketang/static_dist;
}
# 非静态文件请求到django服务器
location / {
uwsgi_pass zlkt;
include /etc/nginx/uwsgi_params;
}
}
写完配置后,可以测试配置文件是否设置成功 nginx -t
,另外每次修改配置文件,都要重新启动nginx
systemctl restart nginx
最后,配置完nginx的配置文件,然后在你的项目文件夹下修改你的uwsgi的配置文件,要注意的是
socket要一致!然后启动你的项目uwsgi --ini zhiliaoketang_uwsgi.ini
,登录浏览器查看,是不是发现你的静态文件都已经加载出来,说明你的django项目+uwsgi+nginx部署成功,恭喜恭喜!
如果出现了502错误,那么80%是你的uwsgi配置文件出现了问题,认真检查,最好把配置文件全部内容重新删除,然后在重新写,我就出现了这个问题。配置文件检查确认无语,但网页就是加载不出来,我把文件整个删除,然后又重新复制,再次启动发现网页已经正常的加载出来,非常的无语。。。
supervisor管理uwsgi
让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,会自动的重启。
1.supervisor
的安装,在系统级别的python环境下pip install supervisor
2. 在项目的根目录下创建一个文件叫做supervisor.conf
。内容如下:
# supervisor的程序名字
[program:mysite]
# supervisor执行的命令
command=uwsgi --ini zlkt_uwsgi.ini
# 项目的目录
directory = /srv/zhiliaoketang
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/srv/zhiliaoketang/log/supervisord.log
# 输出的错误文件
stderr_logfile=/srv/zhiliaoketang/log/supervisord.err
[supervisord]
# log的级别
loglevel=info
```shell
# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001
# 登录supervisorctl的用户名和密码
username = admin
password = 123
[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = 123
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
然后使用命令supervisord -c zlkt_supervisor.conf
运行就可以了。
以后如果想要启动uwsgi
,就可以通过命令supervisorctl -c supervisor.conf
进入到管理控制台,然后可以执行相关的命令进行管理:
* status # 查看状态
* start program_name #启动程序
* restart program_name #重新启动程序
* stop program_name # 关闭程序
* reload # 重新加载配置文件
* quit # 退出控制台