部署Django+Nginx+Uwsgi

创建Unix账户:

adduser username

添加sudo:

vim /etc/sudoers

root ALL=(ALL:ALL) ALL下一行加上创建的用户

更新apt-get:

sudo apt-get update

安装Python3和pip3
网上搜索或者下面这代码(ubuntu16.0.4下)

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:jonathonf/python-3.6
##检查包并安装
sudo apt-get update
sudo apt-get install python3.6

##安装pip3:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3.6

升级pip3
运行pip3出现如下错误

Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

解决:pip文件在usr/bin目录下,cd进去,进行以下修改

把下面的三行

from pip import main
if __name__ == '__main__':
    sys.exit(main())

换成下面的三行

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

然后问题就解决了。

使用pip安装virtualenvwrapper并配置环境

1.创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

2.在~/.bashrc中添加行:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

3.运行:

source ~/.bashrc

.

export WORKON_HOME=$HOME/.virtualenvs # 虚拟环境创建的地方
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python36/bin/python3 # 指定虚拟使用的python解释器路径
或/usr/bin/python3.6
source /usr/local/bin/virtualenvwrapper.sh # 每次登陆用户自动执行下脚本,
或source ~/.local/bin/virtualenvwrapper.sh

创建指定Python版本的虚拟环境

使用virtualenvwrapper :

命令:

mkvirtualenv django --python=python3.5 (django为虚拟机名字,--python=指定python版本)

安装Uwsgi:

pip install uwsgi

测试uwsgi:

创建test.py文件,内容如下:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

用uwsgi启动test.py文件,命令:

uwsgi --http :8000 --wsgi-file test.py 

然后用在浏览器打开IP:8000,如果显示出Hello Worle,则表示正确

安装并配置ngxin

apt-get install nginx

浏览器打开 IP:80如果出现

Welcome to nginx!

则表明Nginx已经成功启动

一般安装好就会默认启动,默认端口是80,用浏览器打开IP:80,如果看到nginx欢迎界面则表示安装成功,失败的原因可能是端口被占用或者使用阿里云没有在控制台开放这些端口。列出所有端口的命令:netstat -ntlp

配置nginx:
首先要将 uwsgi_params 文件拷贝到项目文件夹下.
拷贝过来后这个文件不用修改。
原始的 uwsgi_params 文件在/etc/nginx/目录下
新创建一个 nginx 配置文件, Hello_nginx.conf
内容如下:

# the upstream component nginx needs to connect to
upstream django {
        server 127.0.0.1:8000;
}

# configuration of the server

server {
        # the port your site will be served on
        listen      80; # 端口号
        # the domain name it will serve for
        server_name 47.104.97.87; # 服务器 ip 或是域名
        charset     utf-8;
    
        # Django media
        location /media  {
            alias /home/yww/djangotest/Hello/media; # 媒体文件所在文件夹
        }

        location /static {
            alias /home/yww/djangotest/Hello/static; # 静态文件所在文件夹
        }
         # max upload size
        client_max_body_size 75M;   # adjust to taste

        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include     /home/yww/djangotest/Hello/uwsgi_params; #uwsgi_params 路径
        }
}

这个配置文件告诉 nginx 从文件系统中拉起 media 和 static 文件作为服务,同时响应 django 的 request
在 /etc/nginx/sites-enabled 目录下创建本文件的连接, 使 nginx能够使用它:

sudo ln -s /home/yww/djangotest/Hello/Hello_nginx.conf /etc/nginx/sites-enabled/

如果没有sites-enabled这个文件,编辑 /etc/nginx/nginx.conf文件,然后用下面这个include代替配置文件里的include,保存后自己创建一个sites-enabled就OK

include /etc/nginx/sites-enabled/*;

在项目的settings.py中添加以下内容

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR, "static")]

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

然后运行

python3 manage.py collectstatic

测试 nginx 静态文件和媒体文件服务

service nginx restart

测试一下静态文件是否可以读取 访问 http://<服务器 ip>:8000/static/admin/css/base.css 看看是否正常显示这个文件 然后检查media文件是否已经正常 在项目根目录下新建一个 media 文件夹, 放入任意一张图片, 名字改为test.jpg 访问 http://<服务器 ip>:8000/media/test.jpg 看看是否正常显示图片

如果显示的是403,可以修改以下nginx.conf,我的这个文件在/etc/nginx/nginx.conf,将第一行用户权限改为user root;

测试nginx+uwsgi

找到第6步创建的test.py文件, 放到 Django 项目根目录下测试运行命令:

uwsgi --socket :8001 --wsgi-file test.py

访问 http://<服务器 ip>:8000/ 如果能够显示 hello, world 就行了

用 UNIX socket 取代 TCP port 对 Hello_nginx.conf 做如下修改:

upstream django {
        #server 127.0.0.1:8001; # 去掉这行
        server unix:///root/tyut/tyut.sock; # 新建这行
}

然后重启服务器, 并运行 uWSGI, 代码如下:

uwsgi --socket Hello.sock --module Hello.wsgi --chmod-socket=662

访问 http://<服务器 ip>:8000/ 如果能够显示 django 的测试页面就大功告成了

使用 ini 文件运行 uwsgi 上面的这个命令太长了, 也很容易写错, 我们可以写一个文件来方便运行 uwsgi 在项目根目录下创建一个 uwsgi.ini

新建uwsgi.ini 配置文件, 内容如下:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/bobby/Projects/MxOnline
# Django's wsgi file
module          = MxOnline.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
threads         = 64
max-requests    = 10000
# 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 = /home/bobby/.virtualenvs/mxonline

logto = /tmp/mylog.log

#注:
#    chdir: 表示需要操作的目录,也就是项目的目录
#    module: wsgi文件的路径
#    processes: 进程数
#    virtualenv:虚拟环境的目录


# workon mxonline
# uwsgi -i 你的目录/Mxonline/conf/uwsgi.ini &

安装MySQL

sudo apt-get install mysql-server
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

设置外部ip可以访问
先进入mysql才能运行下面命令:
mysql 直接进入就行

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

FLUSH PRIVILEGES

mysqlclient

apt-get install libmysqlclient-dev python3-dev

安装MongoDB

使用阿里源安装

这里采用安装方法参考官方给的安装方式,其链接为:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
但是由于是国外服务器会下载很慢,所以这里采用的是阿里源作为下载来源:
step1. 导入公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 

step2. 创建源文件

ubuntu14:

echo "deb [ arch=amd64 ] http://mirrors.aliyun.com/mongodb/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

ubuntu16

echo "deb [ arch=amd64,arm64 ] http://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

step3. 更新本地数据包

sudo apt-get update

step4. 安装最新版本

sudo apt-get install -y mongodb-org 

启动mongodb服务

sudo service mongod stop  #停止服务
sudo service mongod start  #启动服务
sudo service mongod restart #重新启动服务
sudo service mongod status #查看状态

允许开机启动,默认当重启服务器后,mongodb服务会停止,需要设置开机启动mongodb服务

sudo systemctl enable mongod

#修改mongo配置文件

vim /etc/mongod.conf

#重启服务

sudo service mongod restart
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值