Ubuntu虚拟机部署python3.6+Django1.11项目

系统: windows7
虚拟机: Oracle VM VirtualBox 部署的Ubuntu虚拟机
项目环境: python 3.6 + django 1.11 + Nginx + Gunicorn
开发工具: Pycharm

1.安装Ubuntu16.04系统
下载地址 http://cn.ubuntu.com/download/

2.使用ssh链接服务器(虚拟机)

# 1)  安装 ssh 
#打开 Ubuntu终端,输入命令:
sudo apt-get install openssh-server

# 2) ssh连接服务器(虚拟机)
#在 windows 系统中使用 Tortoise it(小乌龟)链接服务器
#选择一个文件夹右键点击Git Bash Here进入终端:
#  ssh远程连接,zzypy是用户名,192.168.1.102 是服务器ip
ssh zzypy@192.168.1.102 

#如果,虚拟机开启了防火墙,ssh不能链接虚拟机,解决方式:
#开启SSH
sudo ufw allow OpenSSH
#添加防火墙规则
# 允许外部访问本机的20/tcp (ssh)端口
sudo ufw allow 20/tcp        

3.Python环境搭建

# 1) 安装ppa(Personal Package Archives 个人软件包档案)
sudo add-apt-repository ppa:deadsnakes/ppa
# 2) 更新
sudo apt-get update
# 3) 安装python3.6(安装python最好带上版本号,直接下载python 是2.7版本的)
sudo apt-get install python3.6
# 4) 安装python-dev:
sudo apt-get install python3.6-dev
# 5) 安装 python-venv (虚拟环境中带有pip):
sudo apt-get install python3.6-venv
# 如果需要更新pip版本,使用下面的命令:
pip install --upgrade pip

4.安装MySQL数据库

# 1) 安装 mysql-server
sudo apt-get install mysql-server
# 输入 Mysql 密码(也可以不填,没试过,理论是不填就不需要密码)

# 2) 进入Mysql
mysql -uroot –p123456
SHOW VARIABLES LIKE '%char%';
# 显示数据的类型,latin 拉丁语,需要转换成utf8

# 3) 退出mysql,ctrl+D 或者 exit:
# 创建chartset.cnfn文件 
sudo vi /etc/mysql/conf.d/charset.cnfn
# 将 chartset.cnfn 文件移动到 charset.cnf文件夹中(注意命令是一句)
sudo mv /etc/mysql/conf.d/charset.cnfn /etc/mysql/conf.d/charset.cnf
# 文件chartset.cnfn 内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

# 4) 重启 Mysql: 
sudo systemctl restart mysql.service

# 5) 再次进入Mysql:
mysql -uroot –p123456
SHOW VARIABLES LIKE '%char%';
# 数据类型,全部变成utf8
exit

# 6) 安装 mysql-client
sudo apt-get install libmysqlclient-dev

# 7) 进入mysql 创建XXXX数据库
mysql -uroot –p123456
# XXXX 是你的数据库名
create database XXXX;
exit

5.部署项目

# 1) 创建虚拟环境并激活虚拟环境:
python3.6 -m venv venv
cd venv

# 2) 激活虚拟环境: 
. bin/activate

# 3) 安装 git(如果没网,就直接将项目复制到venv文件夹中):
sudo apt-get install git

# 4) 克隆git项目,输入git名称和密码
# 地址直接在git中复制就可以
git clone https://XXXXXXXX

# 5) 进入 项目 cd 项目目录,展示目录 ls,git拉取 git pull,拉取需要输入账号名称和密码

# 6) 安装 requirements.txt 中需要安装的模块包
# 如果安装速度慢,转换pypi镜像源:
 sudo vi /etc/pip.conf 
# 内容:
[global]
index-url=http://pypi.douban.com/simple/

[install]
trusted-host=pypi.douban.com

[list]
format=columns

# 完成之后,在安装requirements.txt:
pip install -r requirements.txt
# 如果需要添加新的插件,而文件中没有使用下面的命令,gunicorn 是插件的名称:
echo gunicorn >> requirements.txt

7) 添加 .env文件(链接的数据库是ubuntu本地的数据库,XXXX是数据库名称),这一步,是使用了.env文件,没有使用,可以不做
内容是:
DEBUG=True
DATABASE_URL=mysql://root:123456@127.0.0.1/XXXX

8) 创建数据表和数据迁移:
python manage.py migrate
# 查看数据库
mysql -uroot -p123456 XXXX
SHOW TABLES;
exit
9) 创建超级管理员(没有账号,无法登陆admin)
python manage.py createsuperuser
# 名称 邮箱 密码 自己决定

6.安装 Nginx

sudo apt-get install nginx

# 配置/etc/nginx/conf.d/django_nginx.conf和重启nginx:
sudo vi /etc/nginx/conf.d/django_nginx.conf
# 1)内容(server_name 好像可以写多个),
# 2)log 日志根据需求命名,
# 3)root 写的是项目路径,
# 4)proxy_pass 写 http://0.0.0.0:8000
# 5)其他的,一般不需要修改什么,如有要求,根据要求修改即可.
# XX 是你的项目名称
server {
    listen         8000; 
    server_name    0.0.0.0;
    server_name    127.0.0.1;
    server_name    192.168.1.102;   
    access_log      /var/log/nginx/XX_access.log;
    error_log       /var/log/nginx/XX_error.log;
    charset     utf-8;

    client_max_body_size 500M;
    root /home/venv/XX;
    location / {
        proxy_pass http://0.0.0.0:8000;
        proxy_set_header Host $host;
        proxy_set_header    X-Real-IP   $remote_addr; 
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
    location /static/ {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/venv/XX/static/;
    }
}

# 重启nginx
sudo service nginx restart

7.静态文件收集

#注意:STATIC_ROOT必须设置,而且和STATICFILES_DIRS文件名称不能一致
#在django的setting文件中,添加下面一行内容:
STATIC_ROOT = os.path.join(BASE_DIR, "site-static/")
# 输入命令:
python manage.py collectstatic

8.使用 gunicorn 运行项目

# 安装 gunicorn ,如果没有安装的话
pip install gunicorn
# XX 是你的项目名称
gunicorn XX.wsgi –b 0.0.0.0:8000

在浏览器中使用ubuntu ip:8000 展示项目,使用admin账号登录项目admin后台,到此项目部署完成.

*****可能用到的命令*****
history              历史记录
# 查看nginx服务的状态
sudo systemctl status nginx
# 停止nginx服务
sudo systemctl status nginx.service
# 当停止命令不管用的时候,可以使用
sudo systemctl kill nginx.service
# 重启nginx服务
sudo systemctl restart nginx.service
sudo apt-get install libxml*
list open files 是一个列出当前系统打开文件的工具.
sudo apt-get install lsof
netstat -ap | grep 8080  查看8080端口是谁在使用
kill -9 pid号  强制关闭占用端口的程序

欢迎,各位读者大大评论指正!
再次,感谢胡老师的指点!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值