欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django项目如何部署到阿里云服务器

程序员文章站 2022-07-09 20:17:20
...


现在我们先默认项目长这样:

你的项目名/
├── 你的项目名
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├──  文件夹
│        
├── static
│   ├── 文件夹
│   └──  文件夹
└── templates
    ├── 文件夹
    └── 文件夹

阿里云服务器购买

购买云服务器的镜像推荐使用ubuntu18.04
安全组可以勾选HTTP 80端口

在阿里云上搭建项目及安装数据库

使用Git bash将本地项目文件推送到github远程仓库
  • 先在github建立repository(假设起名叫abc),初始化一个readme.md
  • 在本地在一个空文件夹内用Git bash将项目克隆过来
git clone https://github.com/xxx/abc
  • 将本地项目推送到github:
    然后拷贝你的本地原项目文件到这个abc中,之后: (将本地的仓库推送到远程的仓库)
cd abc/
git add .
git commit -m '项目上传到github'
git push origin 
将github仓库导入阿里云

在阿里云实例列表中打开远程连接,进入控制台

sudo apt-get update
apt install git

git clone https://github.com/xxx/abc

到现在,项目就从github克隆到阿里云啦!

安装依赖
pip3 install django
安装数据库
sudo apt-get install mysql-server
sudo apt-get install libmysqlclient-dev
pip3 install mysqlclient
如何将本地的数据库内容导入到阿里云呢?
  1. 使用Navicat, 将本地是数据库 “转储SQL文件” ->"结构+数据"保存为.sql文件
  2. 用Navicat连接阿里云远程数据库 . **这里有三个"坑"要注意啦 !!!**见下面"mysql问题"
mysql问题
  • 创建用户: 用户默认不能在其他地方登录,所以创建用户,任何地址登录
    在阿里云控制台:
    mysql -u root -p回车, 进入mysql
use mysql
show tables;
desc user;
grant all privileges on *.* to 'myuser'@'%' identified by '123456';
flush privileges;
select host,user from user;

(注:这里的myuser和123456可以换成你想要的用户名和密码)
然后你就可以看到:

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | myuser           |
. . .
+-----------+------------------+
5 rows in set (0.00 sec)
  • 端口: 阿里云3306端口没有开放, 把端口开放
实例那里, 更多->网络和安全组->安全组配置->(跳转页面)
->配置规则->(跳转页面)
->入方向->手动添加->目的:选择:MySQL(3306), 源:选择:0.0.0.0/0 ->保存
  • mysql服务器的配置: 配置文件中bind-address默认只能用本地连接,所以更改
vim /etc/mysql/mysql.conf.d/mysqld.cnf

进入文件后将bind-address一行前面加#注释掉
如何操作呢???见下:

按下键盘i,就可以进入插入模式了,如下界面左下角的INSERT,标志着进入插入模式成功.
修改内容,
按键esc退出插入模式,如下,右下角的INSERT已消失
最后保存修改并退出编辑界面:  先使用命令:wq,然后再按下enter键

Navicat测试连接阿里云Mysql

接着 重启mysql服务:

service mysql restart

然后就可以测试连接了!!!
在Navicat连接:

连接名随便起比如aliyun-mysql
主机填写你的阿里云服务器实例的公网IP
端口:3306
用户名:上面我们创建的myuser,或者当初你创建的其他名字
密码:上面我们创建的123456或者当初你创建的其他密码

然后就可以连接成功啦!
右键aliyun-mysql新建数据库~起个名字嘞,和原项目名一样吧,比如abc
点击新建的数据库abc, 运行SQL文件,选择我们之前转储的.sql文件~

修改settings.py文件

然后让我们回到阿里云控制台:
修改settings.py文件:

vim 项目名/settings.py
其中host用私有的IP地址
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': 'xxx',
        'PORT': '3306',
    }
}

ALLOWED_HOSTS = ['*'] 或者改为你想要的ip地址

运行文件时候, 报错有哪些模块没有导入,pip3 install xxx

最后:

python3 manage.py runserver 0.0.0.0:80

访问实例的公网IP地址~
可以看到你的网站啦

uwsgi和nginx的部署

wsgi: 让任意一个服务器都能搭配任意一个web框架,需要遵守wsgi的通用网关接口,就是一个协议
uwsgi: uwsgi就是实现了wsgi的web服务器,可以接受客户端的请求,并转发响应的程序。

使用uwsgi+django就可以实现一个基本的网站功能,为什么还需要nginx???
nginx:nginx是一个专业的HTTP服务器,可以作为代理服务器使用。

搭建uwsgi启动项目
  1. 安装uwsgi: pip3 install uwsgi --upgrade

  2. 配置uwsgi.ini文件:
    创建uwsgi.ini文件
    创建script目录,存放配置
    编辑uwsgi.ini文件内容

    进入到与manage.py同级的目录下
    mkdir script
    vim uwsgi.ini 编辑内容如下:
    
#uwsig使用配置文件启动
[uwsgi]
#项目目录
chdir=/var/www/你的项目名
#指定项目的application
module=你的项目名.wsgi:application
#指定sock的文件路径 
socket=/var/www//你的项目名/script/uwsgi.sock
#进程个数
workers=5
pidfile=/var/www/你的项目名/script/uwsgi.pid
#指定IP端口 
http=0.0.0.0:8000
#指定静态文件
static-map=/static=/var/www/你的项目名/static/
#启动uwsgi的用户名和用户组
uid=www-data
gid=www-data
#启用主进程
master=true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#序列化接受的内容,如果可能的话
thunder-lock=true
#启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/var/www/bookshop/script/uwsgi.log
# 权限
chmod-socket = 666
chown-socket = www-data

现在ls看一下有什么呢?
你的项目名 manage.py script uwsgi.ini ... ...
安装nginx并进行测试:apt-get install nginx
访问公网IP可以看到:
django项目如何部署到阿里云服务器
然后创建项目的配置文件,或者直接修改原nginx配置文件都可以

vim /etc/nginx/sites-available/webtest.conf

修改成如下:

server {
    listen      80;
    server_name django-web-你的项目名;
    charset     utf-8;
 
    client_max_body_size 75M;

    location / {
        uwsgi_pass  unix:///var/www/你的项目名/script/uwsgi.sock;
        include     /etc/nginx/uwsgi_params;
    }
    
    #location /media  {
    #    alias /path/to/project/media;
    #}
 
    location /static {
        alias /var/www/你的项目名/static/;
    }
 
}

创建完配置文件后创建软连接

sudo ln -s /etc/nginx/sites-available/webtest.conf /etc/nginx/sites-enabled/webtest.conf

tips:如果在浏览器访问新配置未生效时,可以删除默认生效配置

 rm /etc/nginx/sites-enabled/default

拷贝项目到/var/www这个目录

cp -r /root/你的项目名/你的项目名 /var/www/

启动uwsgi服务

uwsgi --ini uwsgi

启动nginx,重新加载配置文件

nginx -s reload

如果端口被占用了,或者说如何重新部署项目

如果遇到下面情况:(That port is already in use)
django项目如何部署到阿里云服务器

netstat  -anp  |grep  端口号

或者

sudo lsof -i:端口号

查出来是被谁占用,它的pid是什么
用下面的方法来停止

kill -9 pid

django项目如何部署到阿里云服务器
然后就可以正常访问啦