Django在线教育平台项目完整实现(五)

九、生产环境部署

购买阿里云服务器ECS,镜像选择CentOS 7.6 64位

使用Nginx进行端口转发

使用uwsgi为容器,拉取Django

1.安装python3.7

1.安装依赖包

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel libffi-devel python-devel mariadb-devel

2.下载python源码

下载到root文件夹下

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz

3.将源码进行解压

tar -xzvf Python-3.7.3.tgz -C /tmp

进入解压目录

cd /tmp/Python-3.7.3/

4.将python3.7安装到/usr/local目录

./configure --prefix=/usr/local
make
make altinstall

5.更改/usr/bin/python链接,配置全局命令指向python3的可执行文件

-s参数为软链接,前面为源文件,后面为软链接文件(可理解为新建的快捷方式)

ln -s /usr/local/bin/python3.7 /usr/bin/python3

输入

python3

会进行版本号的显示,可按CTRL+D退出。

2.mariadb和redis

mariadb与mysql的接口完全一致
1.安装

sudo yum install mariadb-server

2.启动,重启

sudo systemctl start mariadb
sudo systemctl restart mariadb

查看mysql的进程

ps aux|grep mysql

设置安全规则,配置mysql的端口

3.设置bind-ip

vim /etc/my.cnf

按i

[mysqld]中:
# instructions in http://fedoraproject.org/wiki/Systemd下面加一行:

bind-address = 0.0.0.0

使得可以监听外部连接的请求

按ESC然后:wq

4.设置外部ip可以访问

先进入mysql

mysql -uroot

使得可以进行连接

*.*表示对所有库的所有表,root为用户名,%代表远程连接,123456为密码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

按CTRL+C退出。

再进行访问:

mysql -uroot -p

输入密码:123456

可进行访问。按CTRL+C退出。

重新启动:

sudo systemctl restart mariadb

5.设置阿里云的对外端口

在阿里云控制台中的实例-网络和安全组-安全组配置-配置规则-入方向-快速添加,规则方向选择入方向,授权策略选择允许,勾选22、23、80、443、3306、6379端口。

在入方向中手动添加,授权策略选择允许,优先级选1,协议类型选择自定义TCP,目的输入8000/8000,源填入0.0.0.0/0。

使用本地的Navicat尝试是否可以成功连接数据库。(端口输入3306)。

6.安装mysqlclient

pip install mysqlclient

7.安装redis

yum install redis

将redis启动

service redis start

查看redis进程

ps aux|grep redis

进入redis:

redis-cli

CRTL+C可退出。

3.安装Nginx

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx

查看nginx进程:

ps aux|grep nginx

4.配置虚拟环境

安装依赖包:

yum install python-setuptools python-devel

安装virtualenvwrapper:

由于直接使用pip安装会出现问题,使用pip3.7来建立软链接进行安装:

ln -s /usr/local/bin/pip3.7 /usr/bin/pip3
pip3 install --upgrade pip
pip3 install virtualenvwrapper

编辑.bashrc文件
查找文件位置:

sudo find / -name virtualenvwrapper.sh

记住此路径。

此路径为下面结尾处添加中第二行中的路径,若出现问题,可按显示的路径进行修改。

vim ~/.bashrc

按i,在结尾处添加:

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

这里为source /上述路径/virtualenvwrapper.sh

ESC,输入:wq再回车。

重新加载.bashrc文件

source ~/.bashrc

使用python3来新建虚拟环境

mkvirtualenv -p python3 mxonline

进入虚拟环境

workon mxonline

退出虚拟环境

deactivate

可使用Pycharm专业版进行上传:

菜单栏-Tools-Deployment-Configuration

添加SFTP,输入服务器名mxonlineserver,输入IP,账号密码等

在Mapping中设置本地和服务器的映射文件夹,点击Deployment path右侧可连接到服务器选择文件夹,

在root目录下新建MxOnline文件夹(和本地项目文件名保持一致),然后选中该文件夹-OK

当进行项目文件的上传时:

选中要上传的文件夹-菜单栏-Tools-Deployment-Upload to mxonlineserver,

便会上传到服务器中的相应文件夹,并且和当前项目的路径保持一致

如果只修改了其中一个文件,选中该文件进行上传便会自动覆盖。

将整个项目文件进行上传。

先安装xadmin的依赖包

cd /root/MxOnline/xadmin/
workon mxonline
pip install -r requirements.txt

其内容为:

django-crispy-forms==1.10.0
django-import-export==2.5.0
django-reversion==3.0.8
django-formtools==2.2
future==0.18.2
httplib2==0.9.2
six==1.15.0
xlwt==1.3.0
xlsxwriter==1.3.7
requests==2.25.1

再返回上级目录安装项目的依赖包

cd ..
pip install -r requirements.txt

其内容为:

django==2.2
mysqlclient
pillow
django-pure-pagination
redis
django-simple-captcha
alibabacloud_dysmsapi20170525==2.0.9

进行数据库的数据同步:

在Navicat中连接的远程数据库中新建一个mxonline数据库,选择本地的mxonline库,右键-数据传输,目标选择远程的数据库将数据进行同步。

在MxOnline/settings.py中:

修改数据库名和密码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "mxonline",
        'USER': "root",
        'PASSWORD': "123456",
        # 若是线上的可以指向线上的地址
        'HOST': "127.0.0.1"
    }
}

选中settings.py,菜单栏-Tools-Deployment-Upload to mxonlineserver

在此链接进行下载:https://github.com/twz915/DjangoUeditor3
复制文件夹里面的DjangoUeditor文件夹,放到环境下的lib/site-packages/下

服务器上的为:/root/.virtualenvs/mxonline/lib/python3.7/site-packages/

使用FileZilla将该路径下的DjangoUeditor进行替换

进行项目的运行:

要在项目的根目录下运行此命令

python manage.py runserver 0.0.0.0:8000

访问:公网IP:8000,即可看到网站。输入:公网IP:8000/xadmin,即可看到网站后台管理系统,关闭服务器命令行端口后便无法访问。

5.安装uwsgi

pip install uwsgi

6.测试uwsgi

要在虚拟环境下,项目的根目录下运行此命令

拉起项目

uwsgi --http :8000 --module MxOnline.wsgi

此时访问:公网IP:8000,页面便可访问,但会出现静态文件缺失的情况。

按CTRL+C可退出。

7.配置Nginx

在项目的根目录下新建conf文件夹,再在其中新建一个nginx和uwsgi子文件夹

在nginx文件夹下新建一个File,命名为uc_nginx.conf

在conf/nginx/uc_nginx.conf中:

# the upstream component nginx needs to connect to
# nginx遇到端口转发时,转发到8001端口
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
# 公网ip地址
server_name 填入IP地址; # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
# 使用nginx来配置时,静态文件不再由Django进行代理
# /填入目录/MxOnline/media
location /media  {
    alias /root/MxOnline/media;  # 指向django的media目录
}

location /static {
    alias /root/MxOnline/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

在uwsgi文件夹下新建一个File,命名为uwsgi.ini

在conf/uwsgi/uwsgi.ini中:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
# The root directory of the project
chdir           = /root/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
# the socket (use the full path to be safe
socket          = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
# Path to the virtual environment
virtualenv = /root/.virtualenvs/mxonline

# Path for storing logs
#logto = /tmp/mylog.log

可使用命令查看虚拟环境的路径

ls ~/.virtualenvs/

选中conf文件夹,菜单栏-Tools-Deployment-Upload to mxonlineserver

启动uwsgi:

切换到uwsgi.ini文件所在目录下:

cd /root/MxOnline/conf/uwsgi/
uwsgi -i uwsgi.ini

使用Nginx来访问uwsgi:

新开一个服务器命令行端口

将uc_nginx.conf放到nginx的配置文件路径中,再重启一下nginx,就会加载此配置文件。

cd /root/MxOnline/conf/nginx/

将该配置文件加入到nginx的启动配置文件路径中

cp uc_nginx.conf /etc/nginx/conf.d/

更改nginx的配置文件:

vim /etc/nginx/nginx.conf

按i进行修改

user nginx;
worker_processes auto;

改为:

user root;
worker_processes auto;

ESC后输入:wq,保存退出。防止出现权限问题。

重新启动nginx:

sudo systemctl restart nginx

直接访问公网IP可看到网站。

但访问公网IP/xadmin,静态文件显示还有问题,因为xadmin的静态文件在xadmin文件夹的根目录下。

此时,拉取所有需要的static file到同一个目录:

在MxOnline/settings.py中:

# 省略
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 配置静态文件的访问,在本地开发时注释掉
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 省略

注:若在本地运行项目,注释掉STATIC_ROOT = os.path.join(BASE_DIR, 'static')

选中settings.py文件夹,菜单栏-Tools-Deployment-Upload to mxonlineserver

到项目的根目录下:

cd /root/MxOnline/

可将各个app下的静态文件拉取到同一个目录之下:

python manage.py collectstatic

提示文件夹已存在,是否要覆盖,输入yes,回车。(若输入错误按CTRL+BACKSPACE进行删除)

再访问公网IP/xadmin,可看到静态文件已完全展示。

若访问页面时出现502,是uwsgi挂掉,重新启动uwsgi即可。

查看uwsgi进程:

ps aux|grep uwsgi

关闭uwsgi:

pkill -f uwsgi -9

关闭所有的uwsgi:

killall -s INT uwsgi

重启uwsgi,kill掉进程,uwsgi会自动进行重启。(修改代码之后需要重新启动)

pkill -f uwsgi

即使关掉命令行窗口,该IP依然可以进行网站的访问,因为uwsgi在启动之后做了后台运行的逻辑。

通过域名方式访问网站:

可在万网进行域名的购买,然后进行ICP备案,之后点入阿里云域名控制台,点击域名的解析-添加记录,记录类型选择A,输入主机记录(即子域名),记录值填入公网IP,TTL选择默认10分钟即可。

此时访问主机记录.购买的域名或直接访问购买的域名,会跳转到网站。

8.补充注意

在MxOnline/settings.py中:

DEBUG改为False

# SECURITY WARNING: don't run with debug turned on in production!
# 设置为False,便不会进行静态文件的代理,在本地开发时设置为True
DEBUG = False

若为True,在访问网站时输入一个错误的URL后缀,会显示Django的异常栈,这些信息比较敏感,会造成泄露。

选中settings.py文件夹,菜单栏-Tools-Deployment-Upload to mxonlineserver

重启uwsgi:

pkill -f uwsgi

此时再访问网站,输入一个错误的URL后缀,就会看到自己定义的404页面。

在本地开发时要设置为True,不然异常无法看到。且要注释掉STATIC_ROOT = os.path.join(BASE_DIR, 'static'),数据库密码修改回root。

在每次迭代更新时,若有静态文件的变更(css、js)需要运行python manage.py collectstatic命令。

查看nginx的日志文件

cd /var/log/nginx/

正常情况下可看访问日志:

tail -f access.log

可按CTRL+C退出。

异常可看错误日志:

tail -f error.log

可按CTRL+C退出。

Django报的错误会显示到uwsgi的日志中:

在conf/uwsgi/uwsgi.ini中:

可指定日志文件的存放位置

# Path for storing logs
logto = /tmp/mylog.log

查看日志:

cd /tmp/
tail -f mylog.log

GitHub地址:OnlineEducationPlatform

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
今日头条是一家知名的新闻资讯平台,而优特教育是一家教育机构,提供学习编程的课程。Python是一门流行的编程语言,DjangoPython一个Web框架,用于快速开发Web应用程序。 据了解,优特教育开发了一个基于PythonDjango的博客项目,在学生们学习编程的过程中,可以使用这个项目来实践和展示自己的技术能力。这个博客项目的源码是指该项目的代码和相关资源。 这个博客项目主要包含以下功能: 1. 用户注册与登录:用户可以注册一个账号,并使用该账号登录系统,以便进行后续操作。 2. 文章发布与管理:注册用户可以发布自己的文章,并对已发布的文章进行编辑、删除等管理操作。 3. 文章分类与标签:用户可以对自己的文章进行分类和添加标签,方便其他用户浏览和搜索。 4. 评论与回复:用户可以对其他用户的文章进行评论,并进行回复交流。 5. 用户权限管理:系统管理员可以对用户的权限进行管理,例如设置管理员权限或普通用户权限。 通过这个博客项目,学生们可以学习和掌握PythonDjango的开发技术,了解和应用Web开发的相关知识。他们可以学习如何设计和实现一个完整的Web应用,如何处理用户注册与登录、发布与管理文章等功能。 总结而言,优特教育开发的Python Django博客项目的源码,是一个帮助学生学习和实践编程技术的实际项目。通过这个项目,学生们可以了解到实际项目开发过程中的各种需求和技术挑战,并通过实际操作提升他们的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值