2024-11-24

Django+Gunicorn+nginx代理+Mysql,一个可以用内网域名访问的web网站(内网域名:websites.server)

在Django项目正式上线到CentOS系统的过程中,大致可以分为以下步骤:

1、准备CentOS服务器:确保服务器安装了Python环境和必要的工具(如git、pip等)。

网络环境 :/etc/sysconfig/network-scripts/网卡名称,第一步要致富先修路,没网的话,yum用不了,pip安装不了。内网都没法测试数据库,接下来的内网终端访问应用服务器不用想了。


接着根据自己的django项目用到的是哪个版本的python,自己摸索安装,centos有自带python版本,看看和自己用的版本是不是代差过大。

yum search python版本名称,看看有没有。没有的话更换yum源

接着yum install python具体版本号 ,按提示一步步完成。

成功后 pip3 install django,要是稳妥一点,先search一下版本号代差是不是过大,然后再install



2、部署代码:通过git将代码部署到服务器上。

git clone 你的项目托管URL(gitee    gitlab极狐     gitHub,或者你们公司自建的代码版本平台等等)。

自己写的网站,所以就不需要这个步骤了。

自己用来做测试,客户端,应用和数据库服务器都在同一台物理设备上,不用代码版本管理(问就是预算有限,没问题后期上云,可能会分开,加个nginx做反向代理)。

3、配置数据库:如果需要,配置数据库,比如创建数据库和用户。

这里用的是MySQL,步骤如下:

CentOs8安装MySQL8.0

在CentOS 8上安装MySQL 8.0,可以按照以下步骤操作:

下载MySQL官方的Yum Repository:

sudo dnf install https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm

安装MySQL服务器:

可能改名了,用dnf search mysql-server*查看对应的新版本名称

然后

sudo dnf install mysql-server.x86_64

启动MySQL服务:

sudo systemctl start mysqld

安全配置MySQL(设置root密码等):

sudo mysql_secure_installation

启动MySQL服务,并设置开机自启:

sudo systemctl enable mysqld

sudo systemctl start mysqld

登录MySQL

mysql -u root -p

linux如何安装mysqlclient

在Linux上安装mysqlclient库的步骤如下:

确保你有python-dev和default-libmysqlclient-dev(对于Python 3,可能是python3-dev和default-libmysqlclient-dev)包。

使用pip安装mysqlclient:

pip install mysqlclient

如果你使用的是Python 3,请使用以下命令:

pip3 install mysqlclient

如果在安装mysqlclient时遇到问题,可能需要先安装MySQL开发库。在基于Debian的系统上,你可以使用以下命令安装:

sudo apt-get install default-libmysqlclient-dev

在基于Red Hat的系统上,使用以下命令:

sudo yum install mysql-devel

或者,如果是基于Fedora的系统:

sudo dnf install mysql-devel

然后就是创建web应用的数据库 create database 数据库名称

创建交互用户 create user 用户名 identified by 密码

授予数据库的权限

grant 权限 on 数据库名称.* to 上面的用户

flush privilege;

安装了必要的开发库之后,再次尝试使用pip安装mysqlclient。如果你有多个Python版本,请确保使用对应版本的pip命令。这步骤如果不做,到时候makemigrations会报错。

4、创建虚拟环境:为项目创建一个隔离的Python环境

在Django中创建虚拟环境的步骤如下:

确保你已经安装了Python和pip。

安装virtualenv(如果你还没有安装的话):

pip install virtualenv

在你想要创建项目的目录中创建一个新的虚拟环境:

virtualenv my_project_env

这里my_project_env是虚拟环境的名字,你可以根据自己的喜好命名。

激活虚拟环境:

在Windows上:

my_project_env\Scripts\activate

在Unix或MacOS上:

sourcemy_project_env/bin/activate

现在你的虚拟环境已经激活,你可以安装Django:

pip install django

然后你可以创建一个新的Django项目:

django-admin startproject myproject

这里myproject是你的项目名称。

完成以上步骤后,你就在Django中成功创建了一个虚拟环境,并在其中安装了Django。

5、安装依赖:使用pip安装项目所需的依赖。

pip3 install 依赖名称,没什么好讲的。


6、收集静态文件:收集和部署静态文件。

省略,意义不大。因为这个项目动静分离做的不多。

7、配置Web服务器:配置Gunicorn或uWSGI作为服务器

正式上线还是要用Gunicorn,因为Gunicorn高性能、轻量级和高效的特点,django虽然同样有类似的功能,但是无法和该Gunicorn进程媲美,所以还是用这个,优化访问体验。

在Django项目中使用Gunicorn,你需要执行以下步骤:

确保已经安装了Gunicorn。如果没有安装,可以通过pip进行安装:

pip install gunicorn

在你的Django项目的根目录下创建一个gunicorn.conf.py配置文件,如果你有多个Django项目,确保使用正确的配置文件。

在配置文件中设置你的Django项目的相关配置,例如:

importos

bind ='127.0.0.1:8000'# 你的Gunicorn将运行在这个地址和端口

workers =3# 设置Gunicorn的工作进程数

# 设置虚拟环境路径

venv_path ='/path/to/your/virtualenv'

os.environ.update(

PATH=venv_path +'/bin:'+ os.environ.get('PATH'),

    VIRTUAL_ENV=venv_path,

)

# Django相关配置

os.environ['DJANGO_SETTINGS_MODULE'] ='your_project_name.settings'

project_dir = os.path.dirname(os.path.abspath(__file__))

sys.path.insert(0, project_dir)

启动Gunicorn服务器,通过指定你的配置文件:

gunicorn -c gunicorn.conf.py your_project_name.wsgi:application

以上步骤将启动一个Gunicorn服务器,根据你的配置文件运行你的Django项目。记得替换your_project_name为你的实际项目名称。

8、配置Nginx:作为反向代理服务器,提供安全的HTTP访问(没有的话理论上可以访问,但是不安全,因为真实端口会被知道)。

django如何用nginx做反向代理

在Django中使用Nginx做反向代理,你需要配置Nginx来转发请求到Django应用的服务器。以下是配置Nginx作为反向代理的基本步骤和示例配置:

安装Nginx。

修改Nginx配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/your_site)。

以下是一个简单的Nginx配置示例,假设你的Django应用运行在本地的8000端口上:

server {

    listen 80;

    server_name websites.server;

    location / {

        proxy_pass http://0.0.0.0:8000;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

    }

    location /static/ {

        alias /path/to/your/django/static/;

    }

}

在这个配置中:

listen 80; 指定Nginx监听80端口。

server_name 指定域名。

location / 块定义了转发规则,所有请求都会被转发到 http://localhost:8000。

proxy_set_header 设置了必要的HTTP头,以确保Django应用可以获取到正确的原始请求信息。

location /static/ 块定义了静态文件的路径,确保Nginx可以直接提供静态文件服务。

确保替换 your_domain.com、localhost:8000 和 /path/to/your/django/static/ 为你的实际域名、Django应用的运行地址和静态文件的实际路径。

配置完成后,重启Nginx以应用更改:

sudo systemctl restart nginx

或者如果你不使用systemd:

sudo service nginx restart

现在,Nginx将作为反向代理服务器,转发对 your_domain.com 的请求到你的Django应用。

9、配置Supervisor:管理Gunicorn进程,确保项目服务持续运行(django自带)。

在Django项目中配置Supervisor以管理Gunicorn进程,确保项目服务持续运行,你需要执行以下步骤:

安装Supervisor:

pip install supervisor

创建Supervisor配置文件:

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件 /etc/supervisord.conf 或者在 /etc/supervisor/conf.d/ 目录下创建一个专门的配置文件,例如 your_project.conf,并添加以下内容,配置你的Gunicorn进程:

[program:your_project]

command=/path/to/your/env/bin/gunicorn --workers3your_project.wsgi:application

directory=/path/to/your/project

user=your_username

stdout_logfile=/path/to/your/logs/gunicorn.log

stderr_logfile=/path/to/your/logs/gunicorn.err.log

autostart=true

autorestart=true

stopsignal=QUIT

确保替换以上配置中的 /path/to/your/、your_project、your_username 和 your_project.wsgi 为你的实际路径和项目名称。

启动Supervisor控制台:

supervisord -c /etc/supervisord.conf

管理Supervisor进程:

# 启动所有进程

supervisorctl start all

# 停止所有进程

supervisorctl stop all

# 重启所有进程

supervisorctl restart all

# 查看所有进程状态

supervisorctl status

确保你的Supervisor配置文件中的路径和项目设置正确无误,以保证Gunicorn能够正确启动你的Django项目。

9、设置安全:配置安全性相关的设置,如限制文件权限、使用安全中间件等。

以后了解了再说,再回来补充。。。

成功后的效果(未用nginx做代理服务器之前):




登录上去,个人空间里的照片和视频都有默认文件,可以根据自己选择手动修改。,当然这个网站刚刚创建起来,暂时没有注册很多用户,所以主页上面其实内容不会太多。


随便测试一个功能,看看能不能成功,


测试成功。




成功后的效果(用nginx做代理服务器之后):

我设置的域名: websites.server  (内网域名,内网IP,公网域名和公网IP以后买云服务器试试看)

当然,内网域名要在你自己的dns服务器上做映射。内网终端得有这个dns服务器的缓存才能访问。






完成!



备注: centos系统如何将内网IP地址映射成内网域名

在CentOS系统中,可以通过编辑/etc/hosts文件来将内网IP地址映射到内网域名。以下是步骤和示例:

打开终端。

使用文本编辑器(如vi或nano)打开/etc/hosts文件。

sudo vi /etc/hosts

或者

sudo nano /etc/hosts

在文件中添加一行,将内网IP地址映射到内网域名。

例如,如果内网IP是192.168.1.10,你想将它映射到域名internal.server,那么添加如下行:

192.168.1.10 internal.server

保存并关闭文件。

如果你想通过这个内网域名访问服务,确保DNS解析被禁用。可以通过编辑/etc/resolv.conf来实现,注释掉或删除所有的nameserver行。

sudo vi /etc/resolv.conf

在文件中添加:

# Generated by NetworkManager

nameserver 0.0.0.0

nameserver 127.0.0.1

测试域名解析是否成功。

ping internal.server

如果成功,会看到ICMP回显请求从你的内网IP地址发出,并收到回显响应。

请注意,这种方法只适用于同一内网中的设备,因为/etc/hosts文件是本地的DNS解析策略。如果你需要在外网中使用内网域名,你需要设置一个动态DNS服务或者使用DDNS服务。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容