阿里云 项目部署 - 生鲜超市


环境:Ubuntu 16.04


 

 1、虚拟环境安装

参考:https://www.cnblogs.com/Eric15/articles/9593662.html

 1.1、安装虚拟环境virtualenv:

pip install virtualenv

 

1.2、安装virtualenvwrapper:

pip install virtualenvwrapper  # python2
pip3 install virtualenvwrapper  # python3

 

1.3、配置.bashrc文件:

 1)输入指令:

sudo find / -name virtualenvwrapper.sh   #找到virtualenvwrapper.sh文件路径

 

 2)配置.bashrc文件:

  vim .bashrc,进入编辑模式并添加:

# 添加的内容
export WORKON_HOME=$HOME/.envs  #虚拟环境都保存到 .envs文件夹中

VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'  #linux启动默认python2版本,而virtualenvwrapper安装是使用pip3安装,因此需注明这句代码

source /usr/local/bin/virtualenvwrapper.sh  #启动文件路径

 

 3)添加完成后,执行命令:source ~/.bashrc    #更新配置

 

1.4、创建虚拟环境

mkvirtualenv --python=/usr/bin/python3 mxshop

 

问题:执行上述命令出现:

 ModuleNotFoundError: No module named 'distutils.spawn'

解决方法:

 安装python3-distutils

  sudo apt-get install python3-distutils 

如果不能解决,请按顺序执行下列指令:

# apt-get update
# apt-get upgrade
# apt-get install <packagename>
---------------------

 

1.5、导出win系统下mxshop开发环境中所依赖的包:

 1)导出指令:pip freeze > requirements.txt

 2)到当前目录下找到:requirements.txt ,将此文件复制到linux下的MxOnline虚拟环境中

  注:需要在Ubuntu中安装lrzsz,才能在win下复制文件到Ubuntu中:apt install lrzsz

 3)当前目录下读取文件 并安装到虚拟环境中:pip install -r requirements.txt

 

 

 

安装过程可能会出现问题:

 Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-syed52n2/mysqlclient/

解决方法:

 sodu apt-get install libmysqlclient-dev python3-dev

解决问题后记得重新执行:pip install -r requirements.txt ,继续安装中断的依赖包


 至此,虚拟环境配置告一段落


2、 将win下mxshop数据库数据,传输到阿里云服务器中的mysql中

 Ubuntu下安装mysql参考:https://www.cnblogs.com/Eric15/articles/9198777.html

 步骤:安装mysql → 配置mysql配置文件(0.0.0.0)→ 设置密码(进入mysql客户端配置) → 用户权限配置(进入mysql客户端配置)

mysql安装及相关配置请参考上述链接

 

2.1、在阿里云服务器实例中,配置安全组信息:

  更多 → 网络和安全组 → 快速创建规则 → 配置规则 → 快速配置规则 → 进行mysql ssh 等相关端口配置

 

 

 

 

2.2、用Navicat连接阿里云服务器mysql

  

 2.2.1、新建数据库:mxshop

  

 2.2.2、将win系统下mysql中mxshop相关数据库数据,传输到阿里服务器中mxshop实例下的mysql中:

 


 

3、pycharm远程代码调试

基本配置都配置好了,我们来试试pycharm远程调试服务器项目 

上面配置时,我们在安全组规则中已经有用 快速创建规则 开发了相应端口,现在需要再做一步:

 

 

接着我们需要将代码同步到服务器中,然后利用pycharm远程调试代码

1)同步前,需要在pycharm中的mxshop项目下的setting中,做如下修改:

DEBUG = False   # 调试情况下可以不设为False ,但生产环境部署时需要配置成False ,静态文件路径另外配置

ALLOWED_HOSTS = ['*']

# mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mxshop',        #数据库名字
        'USER': 'root',          #账号
        'PASSWORD': '******',    #密码
        # 'HOST': '127.0.0.1',     #IP
        'HOST': '101.200.45.75',     #服务器的IP
        'PORT': '3306',          #端口
        #这里引擎用innodb(默认myisam)
        #因为后面第三方登录时,要求引擎为INNODB
        # 'OPTIONS':{'init_command': 'SET storage_engine=INNODB'}, #这样设置会报错,改为
        "OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
    }
}

 

2)在服务器下当前目录新建projects文件夹,再在projects目录下新建mxshop文件夹

 

 

3) Tools-->>Deployment-->>Configuration  ,新增配置,按下述步骤执行:

 

 

 

 

 

点击确定,然后执行:

 Tools-->>Deployment-->>Upload to mxShop :同步到服务器mxshop实例下的mxshop中去

 

  

 

 项目同步完成后,我们在服务器运行项目,浏览器访问项目地址试试:

python manage.py runserver 0.0.0.0:8000 # 进入项目下运行

 

访问结果: 

 url:101.200.45.75:8000

  

 

3)服务器上已经可以正常访问, 我们来配置pycharm下python环境,使win环境下的pycharm能正常调试服务器下的mxshop项目

 pycharm 的interpreter设置为服务器虚拟环境的python ,这样相当于在服务器上运行项目了

 

 

 

上述操作中间会加载一些数据,耐心等待完成。

数据加载完成,需要再配置访问端口:

 0.0.0.0:8000

 

 

这样,便配置完成了。

在win下的pycharm中运行项目,访问地址填写服务器的地址及8000,端口,也能正常访问数据了。

 


 

 4、Django + Uwsgi + Nginx 实现生产环境部署

 win环境下使用pycharm调试远程服务器代码已经完美实现,现在我们使用Django + Uwsgi + Nginx 部署我们的生产环境

因本项目是采用Django + vue 前后端分离的项目,不好处理生产环境,我们借用之前做好的mxonline项目(在线教育平台),在阿里服务器上部署我们的生产环境

创建虚拟环境 → 导出虚拟环境依赖包到服务端安装 → 数据库同步 → 项目同步,这些同上面介绍的类似,此处不再累述

4.1、安装并使用Nginx(不在虚拟环境安装)

 4.1.1、Nginx安装及启动指令

sudo apt-get install nginx   # 安装
sudo /etc/init.d/nginx start    # start nginx

 4.1.2、copy nginx下的uwsgi_params(位置:/etc/nginx)文件到你的Django项目目录下,不用作任何改动:

 下面已经做好路径处理,可以不用这步操作,部署时忽略4.1.2 这一步骤

#cp 源文件 目标文件
cp ./uwsgi_params ~/projects/MxOnline
    # ./ :当前目录
    # ../:上级目录
    # /  :根目录

 

 浏览器访问:http://101.200.45.75/  ,结果:

 

 4.1.3、为mxshop项目生成Nginx配置文件 :mxonline_nginx.conf  ,放置于MxOnline项目目录下:

# 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:8001; # 用于与uwsgi通信,与uwsgi设置保持一致
}
 
# configuration of the server
server {
    # the port your site will be served on
    listen      9000; #监听的端口
    # the domain name it will serve for
    server_name www.eduonline.com 101.200.45.75; # 服务器地址
    charset     utf-8;
 
    # max upload size
    client_max_body_size 75M;   # adjust to taste
 
    # Django media
    location /media  {
        alias /root/projects/MxOnline/media;  # 用户下载上传等静态文件路径,绝对路径
    }
 
    location /static {
        # alias /MxOnline/static; # 静态文件路径,绝对路径
        alias /root/projects/MxOnline/static; # 静态文件路径  
    }
# Finally, send all non-media requests to the Django server.

  #一切动态的访问均交由Django自己处理
  location / {
     uwsgi_pass django;
     include
/etc/nginx/uwsgi_params; # the uwsgi_params file you installed ,uwsgi_params的路径
  }
}

 

  4.14、为 mxonline_nginx.conf 做一个软连接,将此配置文件生成一个快捷方式,放到:/etc/nginx/sites-enabled/ 下,如软连接不行,则将该配置文件复制或移动到/etc/nginx/sites-enabled/ 下:

ln -s ./celery_nginx.conf /etc/nginx/sites-enabled/

 

  4.15、静态文件配置

  1)在Django的setting中配置:STATIC_ROOT  ,用于将Django所有静态文件cp一份放置在一个地方,方便Nginx调用:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")  # 静态文件路径

#同时注释掉 STATICFILES_DIRS
# STATICFILES_DIRS = [
#    os.path.join(BASE_DIR,'static'),
#    ]

 

   2)接着,执行指令:

    将所有静态相关的文件都集中到static中

python manage.py collectstatic

 

  3)将静态文件路径配置到mxonline_nginx.conf中:

location /static {
        # alias /MxOnline/static; # 静态文件路径,本项目静态文件路径在根目录下的MxOnline项目中
        alias /root/projects/MxOnline/static; # 静态文件路径 }

 

4.2、Uwsgi配置

4.2.1、Uwsgi安装(在虚拟环境中安装)

pip3 install uwsgi

4.2.2、配置uWSGI配置文件:mxonline_uwsgi.ini ,放于mxonline项目目录下:  

[uwsgi]
http = :8800  #uwsgi 即浏览器的访问端口,Nginx+uwsgi时不需要用到,
#the local unix socket file than commnuincate to Nginx
socket = 127.0.0.1:8001  #用于跟Nginx之间的通信
# the base directory (full path)
chdir = /root/projects/MxOnline  #项目的绝对地址
# Django's wsgi file
wsgi-file = MxOnline/wsgi.py #项目中Celery_test文件夹内的wsgi.py文件
# maximum number of worker processes
processes = 4 #4个进程
#thread numbers startched in each worker process
threads = 2  # 2个线程
 
daemonize = /var/log/uwsgi.log #日志
# virtualenv = /root/.envs/mxonline # 虚拟环境路径 绝对路径 #monitor uwsgi status stats = 127.0.0.1:9191 #监控进程 # clear environment on exit vacuum = true #退出时清除环境

 


至此,Nginx、uWSGI相关配置便配置完成,接下来启动服务便可以了:

1、启动Nginx:

/etc/init.d/nginx start
# /etc/init.d/nginx restart
#
service Nginx start

2、启动uwsgi: 

 进入MxOnline项目目录下启动uwsgi:

uwsgi celery_uwsgi.ini

 

至此,Django + Uwsgi + Nginx 生产环境部署便完成了。

访问url:http://101.200.45.75:9000/index/

页面效果:

 

 


 

访问url页面问题概况:

 1、如果出现forbidden错误,则是Nginx.conf权限问题,

 解决:

  1.  cd /etc/nginx
  2.  vim nginx.conf
  3.    将 user www-data; ,这句代码改成:user root;

 2、静态文件(css、js、图片等)not found问题

 解决:Nginx配置文件下,media路径没配好,参考上述配置


 阿里云域名解析 ,待续。。

posted on 2018-09-26 02:14  Eric_nan  阅读(331)  评论(0编辑  收藏  举报