Django 博客项目部署到阿里云服务器 Ubuntu系统

部署前提:项目在本地能正常运行!

环境搭建

  • 本地所需准备
  • 云服务器操作
  • 安装虚拟环境
  • 数据迁移
  • 安装nginx和uWSGI
    • 配置nginx
    • 安装uwsgi
  • 部署后项目修改

本地所需准备

1、我使用的是 Xshell 和 Xftp ,Xshell 用于连接云服务器,Xftp 用于本地与云服务器之间文件的传输,这两个软件都是可以去官网免费安装个人版的。

2、使用了mysql等数据库保存数据的看,直接使用django自带的数据库的可以略过。
找到项目使用的数据库,我的是myblog,导出数据库,结构与数据都要。

云服务器操作

1、通过Xshell连接上服务器后,切换到 home 文件夹,再使用Xftp 把 整个博客项目文件与导出的数据文件拖到该文件里
Django 博客项目部署到阿里云服务器 Ubuntu系统_第1张图片
Django 博客项目部署到阿里云服务器 Ubuntu系统_第2张图片

2、检查Ubuntu 系统的python版本,

python --version

看看是不是与你写的项目使用的版本差不多。

我安装的是Ubuntu 20 ,系统自带了 python 3.8 刚好与我做项目使用的一样
,就不需要安装另外版本的了

直接安装pip

sudo apt-get install pip3

安装虚拟环境

1、安装虚拟环境

sudo pip3 install virtualenv

2、安装虚拟环境扩展管理工具

sudo pip3 install virtualenvwrapper

如果安装 virtualenvwrapper 失败,可以看我的另一篇文章https://blog.csdn.net/ling_lang/article/details/107237473

3、配置虚拟环境扩展工具

vim ~/.bashrc

在.bashrc中添加一下信息:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

export WORKON_HOME = $HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

保存后运行

source ~/.bashrc

4、创建虚拟环境

mkvirtualenv -p python3 虚拟环境名称

进入、退出虚拟环境操作

#进入
workon 虚拟环境名称
#退出
deactivate

5、创建后进入虚拟环境

django项目中用到的很多包在Ubuntu里都没有,我们需要移植到Ubuntu中来
,进入项目根目录下,执行以下命令收集安装的包,就是生成一个包的清单文件pages.txt。

pip freeze > plist.txt

命令过后会在当前文件夹下产生一个pages.txt文件,通过以下命令安装所需要的包

pip3 install -r pages.txt

数据迁移

1、安装MySQL

​sudo apt-get update
sudo apt-get install mysql-server 
sudo apt-get install mysql-client

2、安装完成以后,输入密码,进入MySQL,创建一个与你项目中使用的数据库名称一样的数据库。

# 进入数据库
mysql -u root -p
# 退出
exit;

创建数据库

create database myblog;

3、退出数据库,进入你迁移过来的myblog.sql所在目录 (/home),开始还原数据

sudo mysql -u root -p myblog.sql

4、配置mysql文件:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

将下列代码该为注释状态:

# bind-address = localhost

以上的环境安装就差不多了,在阿里云的终端中运行Django项目,进入虚拟环境,然后cd到项目目录下,python manage.py runserver 看能不能启动项目,如果可以说明项目本身已经没有问题了。如果不能说明可能是项目本身的问题或者是没有安装好所需要用的包。

安装nginx和uWSGI

Django 博客项目部署到阿里云服务器 Ubuntu系统_第3张图片
这两个包在最好在终端和虚拟环境都安装,也没啥坏处

1、nginx 安装

sudo apt-get update
sudo apt-get install nginx

2、安装成功后,用浏览器访问你的阿里云IP地址,可以看到nginx的欢迎页面

3、nginx 常用命令

service nginx start   #启动
service nginx stop    #停止
service nginx reload  #重启
/etc/init.d/nginx restart #重启

配置nginx

一般是要修改/etc/nginx/sites-available/default 文件,
在这里插入图片描述
这里我们可以直接自己创建一个文件来指向该文件,在 /home 创建一个nginx.conf 的文件,进入该文件,添加一下代码:

upstream django {
	server 127.0.0.1:8000;# 这里填你自己的在本机时访问的地址

}
server {
    listen 80; 
    server_name **.**.**.**; #此处写你的服务器ip
    charset utf-8;

    client_max_body_size 75M;

    location /static {
    	# 用于存放静态文件的文件夹
        alias /home/myblog/nginx/static;
    }

    location / {
		uwsgi_pass 127.0.0.1:8000;
		include /etc/nginx/uwsgi_params;
    }

}

保存退出,进入/etc/nginx/sites-enabled ,删除default文件

cd /etc/nginx/sites-enabled
rm default

在 /etc/nginx/sites-enabled 目录下,设置软连接

ln -s /home/nginx.conf librepath

nginx配置已经完成,因为在配置中有一个用于存放静态文件的文件夹,我们需要去创建出来,进入/home/myblog 创建 /nginx/static;

cd /home/myblog
mkdir -p nginx/static

接着进入你的项目里的settings.py 文件,指定静态文件地址 ,增加以下内容:

STATIC_ROOT='/home/myblog/nginx/static/'

完成后保存退出。

执行以下命令收集静态文件:

python3 manage.py collectstatic

安装uwsgi

1、安装依赖,不确定有没有用,不过装了也没关系

apt-get install build-essential python3 # python/python3
apt-get install python3-dev
pip3 install uwsgi

2、配置

进入到你的项目根目录下,创建三个文件:
uwsgi.ini 、 run.log 和 uwsgi.pid;
第一个是配置文件,第二个是日志文件,第三个是记录uwsgi所用的端口号。

进入 uwsgi.ini,输入以下内容:

[uwsgi]
chdir = /home/myblog # 项目根目录               
module = myblog.wsgi  # /home/myblog/mgblog/myblog.wsgi
socket = :8000  # 你在本机访问时的端口
master = true         
processes = 5   # 开启的线程数
daemonize = /home/myblog/run.log
disable-logging = true
wsgi-file = myblog/wsgi.py
pidfile=/home/myblog/uwsgi.pid

以上所有的环境就搭建完成了。

然后还要进入项目的settings.py 修改以下代码:

DEBUG = False
ALLOWED_HOSTS = ['写你的服务器的公网ip']

保存退出

最后一步,进入uwsgi.ini 所在目录下,重启 nginx 和uwsgi :

/etc/init.d/nginx restart #我比较喜欢用这个命令,有重启提示
uwsgi --ini uwsgi.ini

以上就是整个项目的部署全过程了,我花了一天半的时间才搞定的,好难啊,出现各种问题,所以趁热打铁就把整个部署过程记录下来,分享给大家,希望对大家有所帮助。

部署后项目修改

当你修改了项目时,也是需要重启这两个的,有时候项目内容虽然修改了,但是,你重启以后网页内容并没有变,此时端口被占用了,需要手动杀死uwsgi 进程:

uwsgi.pid 可以查进程号

你也可以通过以下命令找到进程号并结束它:

查询

netstat -ap | grep :8000

结束

kill -9 进程号

然后重启 nginx 和uwsgi 。

来自我的个人博客http://www.granet.top/

你可能感兴趣的:(Python,3,#,Django,Linux)