一: 购买服务器、安装python依赖、安装需要的python版本
1. 购买阿里云服务器,并登陆阿里云服务器,我这里购买的是Ubuntu18.04版本
2. 先升级apt,如果不升级后续下载很多软件都会找不到
apt update
3. ubuntu中安装python相关的依赖
由于默认下载的太慢,我们先修改从阿里云镜像下载,详情见链接: https://blog.csdn.net/weixin_42289273/article/details/103794253
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
centos7中需要安装的相关依赖:
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel libffi-devel python-devel mariadb-devel
4. ubuntu18.04中默认自带的python2.7.17和3.6.9,如果需要其它版本可以自行下载
5. 下载python3.7.3
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
6. 创建安装目录
mkdir -p /usr/local/python3
7. 解压安装包
tar -zxvf Python-3.7.3.tgz
8. 执行相关命令
(1)进入解压后的目录
(2)执行./configure
./configure --prefix=/usr/local/python3 #/usr/local/python3为安装目录
执行完configure命令后,configure 命令执行完之后,会生成一个 Makefile 文件,这个 Makefile主要是被下一步的 make 命令所使用( Linux 需要按照Makefile 所指定的顺序来构建 (build) 程序组件)。
(3)执行make指令
make
make实际就是编译源代码,并生成执行文件。
(4)再执行make install 命令
make install
make install实际上是把生成的执行文件拷贝到之前configure命令指定的目录/usr/local/python3下。
到这里安装已经结束,下面是配置环境。
9. 建立python3的软连接,由于默认python3指向了系统自带的python3.6.9,所以我们可以将python3.7指向新安装的python3.7.3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3.7
10 测试是否安装成功
$ python3.7 -V
Python 3.7.3
$ pip3.7 -V
pip 18.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
如果pip3.7 -V找不到,可以尝试创建一下pip3.7的软链接:
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3.7
以上python安装配置的参考网址:https://blog.csdn.net/qq_27825451/article/details/100034135
二、 安装mysql
(1)安装详情见链接: https://blog.csdn.net/weixin_42289273/article/details/106883571
(2)如何设置安装的Mysql允许远程连接见链接: https://blog.csdn.net/weixin_42289273/article/details/115213192
三、 安装redis
sudo pip install redis
四、 安装nginx
# 安装Nginx,安装完成后会自动启动Nginx
sudo apt install nginx
# 检测nginx是否成功安装启动
systemctl status nginx
# 也可以从浏览器访问Nginx服务器进行检测
http://your_server_ip
# 常用命令
systemctl start nginx # 启动nginx服务
systemctl stop nginx # 停止nginx服务
systemctl restart nginx # 重启Nginx服务
systemctl status ngingx # 检查Nginx服务状态
其它更多nginx相关命令、文件、目录、配置、log日志等内容,详情请见链接:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04#prerequisites
五、 虚拟环境virtualenv和virtualenvwrapper的安装和配置
安装详情见链接: https://blog.csdn.net/weixin_42289273/article/details/106748908
六、如何同步本地代码到远程阿里云服务器
(1)方法1:scp命令,详情见链接:https://blog.csdn.net/weixin_42289273/article/details/103794198
(2)方法2: 使用pycharm上传项目
优先推荐使用Pycharm上传,因为当我们更改了项目中的一个文件后,我们只需要通过Pycharm同步一下即可。
(3)安装项目环境依赖:
pip install -r requirements.txt
由于requirements.txt中需要安装mysqlclient,但是我们的云服务器系统中缺少它的环境所以报错
OSError: mysql_config not found
解决办法:安装mysqlclient所需要的环境:
sudo apt install libmysqlclient-dev
然后在安装就可以了。
(4) 将数据库同步到阿里云服务器中的数据库
1. 先将数据库导出成sql文件:mysqldump -uroot -p 数据库名>文件名.sql
2. 然后navicat premium 连接阿里云数据库,然后创建一个数据库,最终右键数据库中的表,运行上面的sql文件,数据和表结构就全部导入了
(5)修改django项目中settings.py文件中的配置
1. 修改 ALLOWED_HOSTS = ["*"]
2. 修改数据库DATABASES的配置
(6)使用django自带的服务器测试项目是否能正常启动:(前提:我们的阿里云网络配置安全组中要加入了8000端口)
python manage.py runserver 0.0.0.0:8000
如果正常启动了,打开浏览器访问一下试试吧。
七、uwsgi和nginx的配置
(1)安装uwsgi
pip install uwsgi
(2)测试uwsgi是否可以拉起django的项目,项目根目录下输入下面代码(uwsgi可以监听http端口,也可以监听socket端口)
uwsgi --http :8000 --module 项目名.wsgi
使用浏览器范文一下试试吧。
注意此处是:项目名.wsgi,不是项目名/wsgi。此时浏览器虽然可以访问了,但是静态文件还不能正常加载,后面我们在配置Nginx做静态文件的代理
(3)使用pycharm在项目根目录下新建一个conf目录,conf目录里面新建两个目录nginx和uwsgi目录
(4)在新建的nginx目录中新建一个文件uc_nginx.conf,文件中输入如下代码
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket 此处的端口号需要和下面uwsgi配置的端口号保持一致
server 127.0.0.1:8001; # 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 你的ip地址 ; # 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 你的目录/Mxonline/media; # 指向django的media目录
}
location /static {
alias 你的目录/Mxonline/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
}
}
(5) conf/uwsgi目录下新建一个uwsgi.ini配置文件,文件中代码如下
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/mayanan/MxOnline
# Django's wsgi file
module = MxOnline.wsgi
# the virtualenv (full path)
# process-related settings
# master
master = true
# maximum number of worker processes 进程数配置可以根据cpu核数 2*cpu+1
processes = 10
# the socket (use the full path to be safe 此处的端口号需要和nginx中配置的端口号保持一致
socket = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv = /home/mayanan/.virtualenvs/mxonline
logto = /home/mayanan/MxOnline/log/uwsgi.log
注: chdir: 表示需要操作的目录,也就是项目的目录;
module: wsgi文件的路径
processes: 进程数
virtualenv:虚拟环境的目录
(6)nginx和uwsgi配置文件都配置好后,就通过Pycharm上传conf目录
(7)启动 uwsgi
uwsgi -i 你的目录/Mxonline/conf/uwsgi/uwsgi.ini
(8)将nginx配置文件加入到nginx的启动配置文件中,也就是建立nginx配置文件的软链接
sudo ln -s 你的目录/Mxonline/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
为了防止nginx访问静态文件的权限问题,我们把nginx的主配置文件修改一下: vim /etc/nginx/nginx.conf , 改成:user root;
(9)运行nginx,运行之前先要关掉我们之前运行的nginx
sudo systemctl stop nginx
sudo /usr/sbin/nginx
这里需要注意 一定是直接用nginx命令启动, 不要用systemctl启动nginx不然会有权限问题
(10)此时,我们的uwsgi和nginx服务已经都启动了,我们在浏览器输入公网ip访问测试一下吧,记得由于http默认访问80端口,而我们配置的nginx就是监听的80端口,所以只需输入Ip地址访问就可以了,
访问前端页面,一切正常,当我们访问后台管理页面的时候发现静态文件都没有加载,是因为静态文件分离的问题,我们需要把项目中所有的静态文件都汇总到一起
(11)拉取所有需要的static file 到同一个目录,在django的setting文件中,添加下面一行内容: (该命令可以将所有app下的静态文件全部拉取到同一个目录)
STATIC_ROOT = os.path.join(BASE_DIR, "static")
先关闭uwsgi服务, 运行命令 python manage.py collectstatic, 收集完毕后,在重新启动uwsgi服务, 然后浏览器在访问一下前台页面和后台页面,一切都正常了。
(12)如何后台运行uwsgi,只需要把终端关掉,uwsgi就默认在后台运行了。
(13)uwsgi开启了好几个进程,如果我们修改了django项目中的代码,如何一下全部重启uwsgi中的进程
pkill -f uwsgi
八、配置域名和服务器之间的映射
(1)阿里云服务器云解析DNS中增加两条记录
(2)nginx配置文件中的server_name后面,将域名增加进去即可
此处需要注意的是:域名增加需要增加两个一个是主域名比如:aliyun.com 还有一个也需要增加进去:www.aliyun.com
九、部署后的注意事项以及如何排查错误日志
注意事项:settings.py
(1)DEBUG 一定要改为False
(2)本地pycharm开发调试的话一定要把STATIC_ROOT注释掉,把DEBUG改为True,数据库密码如果本地跟线上不一致的话也需要修改一下
(3)如果项目中新增app或者现有app中增加一些静态文件,如css、js、images等,需要在云服务器中进行python manage.py collectstatic静态文件的收集
(4)有时间可以学习一下docker完成自动化部署项目
排查Bug:
(1)错误日志的两个log日志文件,nginx错误日志和uwsgi错误日志
(2)nginx日志文件有两个,一个正常访问文件access.log,一个error.log文件,在 /var/log/nginx 目录下面
(3)django本身报的错误就会显示在uwsgi错误日志里面
注意:如果想让日志正常输入到文件中,我们不能使用先前的pkill命令进行重启,因为这样重启的话日志还不会输入到文件重去,我们需要先彻底把uwsgi关闭掉,ps aux|grep uwsgi 命令查出它的进程号,使用kill -9 pid杀死进程,
然后在重新启动uwsgi: uwsgi -i conf/uwsgi/uwsgi.ini ,启动后不要ctrl+c关闭,而是直接关闭终端,这样uwsgi就会默认在后台运行,这样浏览器在访问的时候,日志就不在输出到控制台了,输入到我们配置的文件中去了。