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服务。