从零搭建一台基于Python Django的web服务器

1.标题环境要求:

阿里云服务器 CentOS 7.5 64位
MySQL 8.0.25
Python 3.10
Nginx 1.24.0
uWSGI 2.0.21
Django 3.2.19

2.参考资料:

手把手教你在centos上配置Django项目(超详细步骤)
Centos7安装Python3.10
如何用 uWSGI 托管 Django

3.安装MySQL数据库

1. 安装前说明

1.1 查看是否安装过MySQL

  • 如果你是用rpm安装, 检查一下RPM PACKAGE:
rpm -qa | grep -i mysql # -i 忽略大小写
  • 检查mysql service:
systemctl status mysqld.service
1.2 MySQL的卸载

1. 关闭 mysql 服务

systemctl stop mysqld.service

2. 查看当前 mysql 安装状况

rpm -qa | grep -i mysql
# 或
yum list installed | grep mysql

3. 卸载上述命令查询出的已安装程序

yum remove mysql-xxx mysql-xxx mysql-xxx mysqk-xxxx

务必卸载干净,反复执行rpm -qa | grep -i mysql确认是否有卸载残留

4. 删除 mysql 相关文件

  • 查找相关文件
find / -name mysql
  • 删除上述命令查找出的相关文件
rm -rf xxx

5.删除 my.cnf

rm -rf /etc/my.cnf

2. MySQL的Linux版安装

2.1 CentOS7下检查MySQL依赖

1. 检查/tmp临时目录权限(必不可少)

由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。执行 :

chmod -R 777 /tmp

2. 安装前,检查依赖

rpm -qa|grep libaio //如果没有该依赖 运行 yum install libaio 下同
rpm -qa|grep net-tools

2.2 CentOS7下MySQL安装过程

1. 将安装程序拷贝到/opt目录下

在mysql的安装文件目录下执行:(必须按照顺序执行)

rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm 
rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm 
rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm
  • rpm是Redhat Package Manage缩写,通过RPM的管理,用户可以把源代码包装成以rpm为扩展名的文件形式,易于安装。
  • -i, --install 安装软件包
  • -v, --verbose 提供更多的详细信息输出
  • -h, --hash 软件包安装的时候列出哈希标记 (和 -v 一起使用效果更好),展示进度条

若存在mariadb-libs问题,则执行yum remove mysql-libs即可

2.3 查看MySQL版本

mysql --version 
#或
mysqladmin --version

2.4 服务的初始化

为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化:

mysqld --initialize --user=mysql

说明: --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登录后你需要设置一个新的密码。生成的临时密码会往日志中记录一份。

查看密码:

cat /var/log/mysqld.log

root@localhost: 后面就是初始化的密码

2.5 启动MySQL,查看状态

#加不加.service后缀都可以 
启动:systemctl start mysqld.service 
关闭:systemctl stop mysqld.service 
重启:systemctl restart mysqld.service 
查看状态:systemctl status mysqld.service

2.6 查看MySQL服务是否自启动

systemctl list-unit-files|grep mysqld.service
  • 如不是enabled可以运行如下命令设置自启动
systemctl enable mysqld.service
  • 如果希望不进行自启动,运行如下命令设置
systemctl disable mysqld.service

3. MySQL登录

3.1 首次登录

通过mysql -hlocalhost -P3306 -uroot -p进行登录,在Enter password:录入初始化密码

3.2 修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

3.3 设置远程登录

1. 确认网络

1.在远程机器上使用ping ip地址保证网络畅通

2.在远程机器上使用telnet命令保证端口号开放访问

2. 关闭防火墙或开放端口(以下内容了解即可不需要进行操作,因为线上的服务器大都开放了3306端口 如果没有开放手动在阿里云的官方网站 控制台中手动配置安全组即可 关于安全组的配置 下面会介绍到)

方式一:关闭防火墙

  • CentOS6 :
service iptables stop
  • CentOS7:
#开启防火墙
systemctl start firewalld.service
#查看防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#设置开机启用防火墙 
systemctl enable firewalld.service 
#设置开机禁用防火墙 
systemctl disable firewalld.service

方式二:开放端口

  • 查看开放的端口号
firewall-cmd --list-all
  • 设置开放的端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=3306/tcp --permanent
  • 重启防火墙
firewall-cmd --reload

4. Linux下修改配置

  • 修改允许远程登陆
use mysql;
select Host,User from user;
update user set host = '%' where user ='root';
flush privileges;

%是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。

注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置。

配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了。

**解决方法一:**升级远程连接工具版本

解决方法二:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123';

5.本地测试连接:

可以使用navicat 等图形化工具 进行测试连接
在这里插入图片描述

4.安装Python解释器

Centos7用yum安装的Python3版本比较旧,想要安装最新版本的Python3需要自己动手编译安装。下面就来讲讲安装步骤,主要分为这么几个步骤,依赖→下载→编译→配置。另外所有操作都是在root用户下进行。

4.1 依赖

编译Python源码需要依赖许多库,在编译过程中出现的一些常见问题大部分是没有安装相关依赖库。这里举几个例子。

比如说下面的警告信息,就是没有安装相关的依赖库。

在这里插入图片描述

再比如说下面这个,是因为OpenSSL的版本太旧,需要安装openssl11 ,并且在编译的时候设置编译FLAG,后续会介绍到。
在这里插入图片描述

然后安装依赖

yum -y groupinstall "Development tools"
yum install -y ncurses-devel gdbm-devel xz-devel sqlite-devel tk-devel uuid-devel readline-devel bzip2-devel libffi-devel
yum install -y openssl-devel openssl11 openssl11-devel

4.2下载

安装完依赖之后就可以去官网下载最新版本的源码了。官网地址:https://www.python.org/。打开官网之后选择Download→ Source code,选择最新Stable Releases版本的Gzipped source tarball下载即可。

本文直接在Centos上下载

mkdir -p /doc/temp && cd /doc/temp
wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz

4.3 编译

编译主要需要注意的问题是设置编译FLAG,以便使用最新的openssl库。

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)

结果如下

设置好了之后,进入源码目录

tar xvzf Python-3.10.4.tgz
cd Python-3.10.4

然后直接编译安装即可,需要花一点时间。

./configure --enable-optimizations && make altinstall

安装完成后验证一下是否安装成功

/usr/local/bin/python3.10 --version
/usr/local/bin/pip3.10 --version

4.4 配置

配置快捷命令
通过设置软链接简化命令输入

#设置

ln -sf /usr/local/bin/python3.10 /usr/bin/python3
ln -sf /usr/local/bin/pip3.10  /usr/bin/pip3

再验证一下设置是否正确

python3 --version
 提示信息:Python 3.10.3
pip3 --version
 提示信息:pip 22.0.4 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)

4.5 配置pip源(不需要配置 了解即可 因为阿里云服务器自动配置好了)

由于网络原因,官方的pip源无法访问,会出现类似如下错误

Could not fetch URL https://pypi.org/simple/pip/: There was a problem
confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi.org’, port=443):
Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1,
‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer
certificate (_ssl.c:997)’))) - skipping

所以需要替换成国内源,方法如下。

新建pip配置文件

mkdir -p ~/.pip
touch ~/.pip/pip.conf

编辑配置文件,配置如下。

vim ~/.pip/pip.conf

[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url=
        http://pypi.douban.com/simple/
        http://mirrors.aliyun.com/pypi/simple/
#proxy = [user:passwd@]proxy.server:port
[install]
trusted-host=
        pypi.tuna.tsinghua.edu.cn
        pypi.douban.com
        mirrors.aliyun.com
ssl_verify: false

上面配置了清华,豆瓣,阿里的源,并且关闭了ssl验证。当然如果有需要还可以设置代理,把注释掉的proxy那行放开即可。

再验证一下

pip3 install --upgrade pip

以上就是Centos7安装最新版Python3的全步骤,下次再见。

作者:神文仙武 https://www.bilibili.com/read/cv15970563 出处:bilibili

5 安装NGINX

5.1 下载nginx安装包

进入到 nignx的官网: nginx
点击右侧 download
https://nginx.org/en/download.html
在这里插入图片描述

5.2 进入Linux服务器下载安装

进入home目录,执行下面命令,我这里安装的是1.24.0版本。

#进入到某个目录下面 不一定非得是家目录
cd /home/ 
# 下载包
wget https://nginx.org/download/nginx-1.24.0.tar.gz 
# 如果没有 wget 命令 可以使用 以下命令进行安装:
yum install wget  

下载完成后,执行解压命令:

tar -zxvf nginx-1.13.7.tar.gz

进入解压后的nginx-1.13.7文件夹,依次执行以下命令:

./configure
make
make install

nginx一般默认安装好的路径为/usr/local/nginx

在/usr/local/nginx/conf/中先备份一下nginx.conf文件,防止我们出错。

cd /usr/local/nginx/conf/ 
cp nginx.conf nginx.conf.bak

后续会更改这个配置文件

进入/usr/local/nginx/sbin/目录 执行 ./nginx -t 命令先检查配置文件是否有错,没有错就执行以下命令 启动nignx:

./nginx
#查看nignx服务
ps -ef | grep nginx 
#关闭所有 nginx服务(有关nginx的更多操作命令 请自行百度)
pkill -9 nignx

终端没有任何提示就证明nginx启动成功。

5.3 通过浏览器访问测试:

输入 http://服务器ip地址 如果出现 欢迎页面 说明nginx安装成功
在这里插入图片描述

6. 在服务器安装virtualenv(用来管理虚拟环境的)

★ 建议大家都安装一个virtualenv,方便不同版本项目管理。虚拟环境这块大家可以自行百度进行了解,当然也可以直接按照我下面的步骤进行

pip3 install virtualenv
# 我们也给它建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
# 安装成功在根目录下建立文件夹,主要用于存放env,当然项目你也可以创建一个文件夹存放。
mkdir -p /data/env

7.为即将上线的Django项目创建一个单独的虚拟环境

7.1 切换到/data/env/下,创建虚拟环境。

#这里的djangoenv名称可以自己定义但是后面步骤一定要跟你所定义的名称相同
virtualenv --python=/usr/bin/python3 djangoweb
#进入虚拟环境
cd /data/env/djangoweb/bin
# 启动虚拟环境:
source activate
# 退出虚拟环境的命令
deactivate

7.2 进入之后,你就会发现下面红框中的内容就是自己定义的名称

在这里插入图片描述

7.3 在虚拟环境中安装 uwsgi ,用于替换 Django 开发环境中 python manage.py runserver 的操作 后续需要配置与nginx进行连接

pip3 install uwsgi
# 注意:uwsgi 的 可执行文件在 虚拟环境目录下 后续会用到
/data/env/djangoweb/bin

8 将本地的Django项目部署到Linux服务器

上面的步骤已经将整个大致的环境安装好了,接下来我们就需要把自己本地的项目搬运上来。

8.1 在本地项目目录下把当前的环境依赖包导出到requirements.txt文件

pip freeze > requirements.txt

★ 注意:这里是在自己本地上进行的,导出你整个项目需要的依赖包

8.2、把项目源码压缩打包(不建议 实际开发中都是从git中进行下载)。

8.3、把项目上传到服务器对应的目录里,解压。

这里我使用的是Fileziila软件进行上传的,大家可以自己去下载相关的ftp软件,把自己项目上传到服务器。
在服务器中解压,可以先安装支持ZIP的工具

yum install -y unzip zip
# 解压zip文件
unzip 文件名.zip

8.4、进入上面创建的虚拟环境(djangoweb),然后进入项目安装目录requirements.txt里的依赖包。

pip3 install -r requirements.txt

8.5、导入数据库到服务器。

关于数据库的导入步骤:

方式一:

注意:如果只是需要数据库表结构不需要测试数据的话,最简单的方法 本地项目连上服务器的数据 然后重新执行一下迁移 就OK了

方式二:

8.5.1 进入数据库

mysql -u root -p

8.5.2 创建与项目中相应的名称的数据库

create database kulsblog;
use kulsblog
source /你导入sql文件的目录地址

8.6 、通过python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查。

这里需要注意使用python3来执行manage.py,否则会出现报错情况!

8.7.配置uwsgi文件(重点!!!)

我的网站项目路径是/www/cms_system ,在项目根目录下 与项目同名的应用目录下(一般这个目录下会有一个wsgi.py文件) 创建 cms_system.ini

[uwsgi]
http=0.0.0.0:8000 #后续与nginx连接的时候 需要把http改成socket
chdir=/www/cms_system #项目根目录
wsgi-file=cms_system/wsgi.py #相对项目根目录 wsgi.py 文件路径
process=2 #进程数 与cpu核数一致即可
threads=2 #线程数
master=True
pidfile=/tmp/project-master.pid #uwsgi启动 pid(进程号) 存放路径
max-requests=5000 
daemonize=uwsgi.log # uwsgi 启动日志 

注意 粘贴完了以后把我写的注释删掉

8.7.1 进入到虚拟环境中启动uwsgi服务(一定要进入虚拟环境,一定要使用虚拟环境中的uwsgi启动项)

source /data/env/cms_system_env/bin/activate
#启动uwsgi服务
/data/env/cms_system_env/bin/uwsgi --ini  /www/cms_system/cms_system/cms_system.ini
#如果运行没有报错 应该是启动成功了 

8.7.2 测试uwsgi服务是否成功

ps -ef | grep uwsgi

打开本地浏览器 输入http://ip地址:8000 如果能够正常访问Django 说明uwsgi启动成功

注意:在测试之前一定要设置服务器的安全组,让服务器开发对应的端口

打开阿里云官网控制台 找到服务器ECS 点开对应的云服务器
在这里插入图片描述
在这里插入图片描述

8.8 配置nginx与uwsgi连接

8.8.1 打卡nignx的配置文件 找到 location /选项

在这里插入图片描述
替换原来的 root 和 index 选项

8.8.2 修改 项目的uwsgi 配置(cms_system.ini)

[uwsgi]
#http=0.0.0.0:8000 #后续与nginx连接的时候 需要把http改成socket
socket=127.0.0.1:8000
chdir=/www/cms_system #项目根目录
wsgi-file=cms_system/wsgi.py #相对项目根目录 wsgi.py 文件路径
process=2 #进程数 与cpu核数一致即可
threads=2 #线程数
master=True
pidfile=/tmp/project-master.pid #uwsgi启动 pid(进程号) 存放路径
max-requests=5000 
daemonize=uwsgi.log # uwsgi 启动日志 

8.8.3 注意重启uwsgi服务

注意:只要修改的nginx配置 uwsgi配置 Django代码 都需要重启nignx服务、uwsgi服务

8.8.4 打开本地浏览器 输入ip地址 测试是否上线成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值