服务器部署Django项目

本文主要介绍服务器上搭建项目环境及部署项目。

操作系统:centos7 (这里使用腾讯云的服务器,个人认为安全可靠,对学生优惠,购买地址

一、安装python环境

(参考:https://www.cnblogs.com/stfei/articles/9456194.html)
1、安装相关依赖库(工具包)

yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

2、下载python3的源代码(在linux终端下输入命令)

cd /opt/
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

(python 源码下载地址:https://www.python.org/ftp/python/)

3、解压缩源代码

tar -xf Python-3.7.4.tar.xz

4、进入python3.7.4 目录

cd Python-3.7.4

5、生成编译脚本(指定安装目录)

./configure --prefix=/opt/python37

6、编译

make

7、编译成功后,编译安装

make install

8、切换到安装好了的python3.7目录

cd /opt/python37/

9、执行python3.7解释器

bin/python3.7

10、添加环境变量
ln -s 源文件路径 目标文件路径

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

11、添加pip3软连接

ln -s /opt/python37/bin/pip3 /usr/local/bin/pip3

12、验证

pip3 -V
python3 -V

二、创建python虚拟环境

1、安装virtualenv

pip install virtualenv

2、找到virtualenv.py的位置

find / -name 'virtualenv.py'

在这里插入图片描述

3、切换到virtualenv.py所在位置

cd /usr/python/lib/python3.7/site-packages

4、创建虚拟环境

python virtualenv.py 环境名称

在这里插入图片描述
补充:
如果不想使用以上方法创建环境,而是通过virtualenv直接创建环境,请参考:https://blog.csdn.net/t8116189520/article/details/82667561

5、启动虚拟环境
找到刚创建的虚拟环境的位置

find / -name '环境名称'

在这里插入图片描述
启动环境

source /usr/python/lib/python3.7/site-packages/test1/bin/activate

补充:
更多虚拟环境操作请参考:https://blog.csdn.net/weixin_42174361/article/details/81811868

三、安装mysql

(参考:https://blog.csdn.net/runner1920/article/details/79495368)
1、下载rpm文件

wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

2、安装rpm

rpm -ivh mysql57-community-release-el7-11.noarch.rpm

需要确认的时候请按y,安装完成后在/etc/yum.repos.d目录将新增mysql-community.repo和mysql-community-source.repo

3、安装mysql

yum install mysql-community-server

4、启动mysql服务

systemctl start mysqld

5、设置mysql开机启动

systemctl enable mysqld
systemctl daemon-reload

6、查找root密码
mysql安装完成之后,在/var/log/mysqld.log文件中为root用户生成默认密码。

grep 'temporary password' /var/log/mysqld.log

7、登录mysql

mysql -u root -p 默认密码

补充:
密码的格式【大小写字母+数字+特殊符号】

8、修改登录密码

set password for 'root'@'localhost'=password('新密码');

9、修改配置文件

vi /etc/my.cnf

配置修改如下:
[mysqld]
character_set_server=utf8
init_connect=’SET NAMES utf8’

10、重启mysql

systemctl restart mysqld

补充:
设置mysql允许外部连接访问请参考:https://blog.csdn.net/runner1920/article/details/79495595

四、安装与配置 Docker

(若没有使用Docker请跳过该步骤)
(参考:https://cloud.tencent.com/developer/labs/lab/10054)
1、安装 Docker 必要依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、用 yum 安装 Docker

yum install -y docker-ce

3、查看版本

docker -v

4、启动docker

service docker start

5、设置开机启动

chkconfig docker on

6、配置Docker
因为国内访问 Docker Hub 较慢, 可以使用腾讯云提供的国内镜像源, 加速访问 Docker Hub

echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
systemctl daemon-reload
service docker restart

五、安装Redis

(若没有使用Redis请跳过该步骤)
(参考:https://blog.csdn.net/u010651369/article/details/80677464)
1、下载安装包
官方网

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

2、解压

tar -zxvf redis-4.0.9.tar.gz

3、安装gcc依赖

yum install gcc

遇到选择,输入y即可

4、编译安装

make MALLOC=libc
make install

5、测试
找到至redis所在位置

find / -name 'redis-server'

在这里插入图片描述

启动redis

/usr/local/bin/redis-server 

6、修改Redis启动方式
修改redis.conf

daemonize no 修改为 daemonize yes 

大概在文件的136行

指定redis.conf文件启动(根据自己文件的路径)

/usr/local/bin/redis-server /root/project_res_store/redis-4.0.9/redis.conf

7、设置redis开机自启动

在/etc目录下新建redis目录

mkdir redis

将/usr/local/redis-4.0.9/redis.conf 文件复制一份到/etc/redis目录下,并命名为6379.conf

 cp /root/redis-4.0.9/redis.conf  /etc/redis/6379.conf

将redis的启动脚本复制一份放到/etc/init.d目录下

 cp /root/redis-4.0.9/utils/redis_init_script  /etc/init.d/redisd

设置redis开机自启动,先切换到/etc/init.d目录下,然后执行自启命令

 chkconfig redisd on

启动

service redisd start

补充:
虽然这些问题我都没遇过,但还是要补充一下解决方法。

如果出现service redisd does not support chkconfig ,请修改redisd文件,在第一行添加:

# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database

(redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10)

如果出现 process is already running or crashed 删除/var/run/redis_6379.pid 的文件即可。

8、开启远程连接
修改6379.conf文件中88行protected-mode为no
注释6379.conf文件中69行 bind 127.0.0.1 为 # bind 127.0.0.1

六、Nginx安装

(参考:https://cloud.tencent.com/developer/article/1147804)
1、下载
wget http://nginx.org/download/nginx-1.13.1.tar.gz

2、安装Nginx依赖
gcc、gcc-c++(如果已经安装可忽略)

yum install gcc      
yum install gcc-c++

pcre 、zilb

yum -y install pcre*
yum -y install zlib*

openssl (若需要支持 https 协议)

yum -y install openssl 
yum -y install openssl-devel

3、解压安装包

tar -z -xv -f nginx-1.13.1.tar.gz

4、编译

cd nginx-1.13.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre

提示:
–prefix:设置安装路径
–with-http_stub_status_module:支持nginx状态查询
–with-http_ssl_module:支持https
–with-pcre:为了支持rewrite重写功能,必须制定pcre

5、安装

make 
make install

6、启动

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

7、测试
http://服务器ip/
在这里插入图片描述
或:curl -I 服务器ip

七、Django项目部署

(项目部署建议创建新的虚拟环境用于运行部署后的项目)
1、生成requirements.txt文件
生成requirements.txt文件(将项目中安装的包,存放到requirements.txt文件中)

pip freeze > requirements.txt

2、安装requirements.txt的包
(安装在项目新的虚拟环境)

pip install -r requirements.txt

3、settings.py配置
复制settings.py,创建一个副本命名为pro_settings.py,修改配置如下。

DEBUG = False

# 填写你自己的ip和域名
ALLOWED_HOSTS = [" xxx.xxx.xxx.xxx", "127.0.0.1"]  
# 此处设置可以访问服务器的IP地址,*为允许所以地址

4、wsgi.py配置
修改项目的wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pro_res.pro_settings(pro_settings位置)')

application = get_wsgi_application()

5、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

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

测试uwsgi运行是否正常

curl 127.0.0.1:8000

测试访问
http://服务器ip:8000/

6、uwsgi 配置
在项目根目录中创建deploy目录,创建logs文件夹,用于存放日志文件,新建uwsgi_conf.ini文件。

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
socket=内网ip/127.0.0.1:8000
#直接做web服务器使用,Django程序所在服务器地址
#http=内网ip/127.0.0.1:8000
#项目目录
chdir=/home/project_res/pro_res
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=pro_res/wsgi.py
# 进程数
processes=4
# 线程数
threads=32
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/usr/python/lib/python3.7/site-packages/pro_res_server
buffer-size=32768

补充:
项目建议放在home目录,放在其它目录可能导致权限不够而无法访问项目

7、nginx配置
/usr/local/nginx/conf/nginx.conf

user  root;#自己的用户名
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {

    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
    # 监听端口
    listen      443;

    #启用 SSL 功能
    ssl on;

    #证书文件名称
    ssl_certificate 1_xxxxx_bundle.crt; 
    #私钥文件名称
    ssl_certificate_key 2_xxxxx.key; 
    ssl_session_timeout 5m;
    #请按照这个协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;

    # 服务器域名或者ip地址
    server_name 服务器公网ip 域名;

    # 编码
    charset     utf-8;

    # 文件最大上传大小
    client_max_body_size 75M;

    # 静态文件
    location /static {
        alias /home/project_res/pro_res/static;
    }

    # 主目录
    location / {
        uwsgi_pass  内网ip:8000;
        include    /usr/local/nginx/conf/uwsgi_params;
    }
}

    server {
    listen 80;
    #填写绑定证书的域名
    server_name 域名 服务器公网ip; 
    #把http的域名请求转成https
    rewrite ^(.*)$ https://$host$1 permanent; 
}


}

补充:
如果没有ssl证书文件,可将相应代码注释
nginx端口需和uwsgi端口一致(这里是8000端口)

8、启动/重启服务
启动nginx服务
进入nginx安装目录sbin下,输入命令./nginx -t
在这里插入图片描述
重启nginx服务(建议每一次修改nginx配置文件都重启)
进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可

启动uwsgi
切换到deploy目录中

uwsgi --ini uwsgi_conf.ini

停止uwsgi

uwsgi --stop uwsgi.pid

补充:
每一次修改uwsgi配置后,欲使其生效,需关闭uwsgi和nginx通信的端口(这里是8000端口),再重启

fuser -k 8000/tcp
uwsgi uwsgi_conf.ini

注意

以上所有涉及端口的操作,均需在腾讯云安全组开通相应端口,否则将无法访问。
在这里插入图片描述

心得

第一次使用云服务器配置项目环境、部署项目,面对不同的操作系统(centos7)也是满满的错误,只能说细节决定一切,上面的补充、建议,都是血一般的教训。
网站的搭建也不是随心所欲的,如果想要备案上线,就必须符合备案的要求,笔者之前就妄想搭建一个结合博客和哔哩哔哩的网站,功能繁多,结果备案成功的一个月后,因网站不符合个人性质被注销,需重新整改再备案,这无疑是白干一场,但在笔者开始搭建网站之前,问过许多前辈一些网站需注意的问题,却没有人提过备案,希望笔者的这次教训能对后来者有所帮助。
如果你想搭建一个网站,需要考虑是否组团,组团开发固然快速,只是所学知识不及个人开发,第一次开发建议一个人开发小项目,体验全栈开发,方便以后组团开发指导其它成员,笔者就因为想开发较大的项目浪费了不少时间。
网站开发过程往往不是一帆风顺的,可能有上千个bug等你,保持良好心态相信自己即可,很重要的一点还是要学会看官方文档。
笔者也创建了Python交流分享的QQ群,欢迎大家入群学习、共同进步,群号:812653899

最后,如果以上有哪些地方存在不足或错误,还请指正,希望这篇文章对你有帮助,谢谢观看!

猜你喜欢

转载自blog.csdn.net/qq_35526165/article/details/103157274