云服务器部署django项目流程?

一: 购买服务器、安装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

扫描二维码关注公众号,回复: 13136224 查看本文章

          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就会默认在后台运行,这样浏览器在访问的时候,日志就不在输出到控制台了,输入到我们配置的文件中去了。

猜你喜欢

转载自blog.csdn.net/weixin_42289273/article/details/115209574
今日推荐