文章目录
前言
本篇博客是腾讯云服务器(阿里云服务器也可以)的搭建流程,所需的软件为CentOS 7.5、Python 3.7.8、Django 3.1、Nginx、uWSGI,如果使用Django开发网站的话,这是一个不错的选择,通过本教程,你可以将Django开发的网站部署到服务器上。
1. 安装更新开发工具及各种依赖包
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc automake autoconf libtool make wget
2. 安装Python3
- 下载Pyhton3到/usr/local目录【很慢啊,我直接在本地下载后,通过WinSCP上传的】
cd /usr/local
wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tgz
- 解压Python源码包
tar -zxvf Python-3.7.8.tgz
- 进入Python-3.7.8目录,编译安装
cd Python-3.7.8
./configure --prefix=/usr/local/python3
make && make install
- 建立软链接方便在终端中直接使用(添加到系统环境变量中)
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
- 检查一下版本
python3 -V
pip3 -V
- 升级一下pip3的版本(可选)
pip3 install --upgrade pip
3. 配置虚拟环境
- 安装virtualenv,方便不同版本项目管理
pip3 install virtualenv
- 建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
- 安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的
mkdir -p /data/env
mkdir -p /data/wwwroot
- 切换到/data/env/下,创建指定版本的虚拟环境
cd /data/env/
virtualenv --python=/usr/bin/python3 pyweb
- 启动虚拟环境
cd /data/env/pyweb/bin
source activate
- 退出虚拟环境
deactivate
4. 安装MySQL
- 下载并安装MySQL官方的 Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
- 使用上面的命令就直接下载了安装用的Yum Repository,直接yum安装
yum -y install mysql57-community-release-el7-10.noarch.rpm
- 安装MySQL服务器
yum -y install mysql-community-server
- 首先启动MySQL
systemctl start mysqld.service
- 查看MySQL运行状态,若出现active (runing)则表示MySQL已启动
systemctl status mysqld.service
- 在日志文件中找出root密码
grep "password" /var/log/mysqld.log
- 进入数据库
mysql -u root –p
- 更改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
5. 安装Django和uWSGI
- 安装Django和uWSGI(安装之前先进入虚拟环境)
pip3 install django
pip3 install uwsgi
- 还要在安装一下pymysql,因为本地用的MySQL为8.0版本,为了兼容调试方便
pip3 install pymysql
- 建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
- 开启防火墙
# 查看防火墙是否开启
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
- 开启端口(添加8001端口并重新加载策略配置)
需要在服务器管理界面配置一下安全组,加入8001端口
firewall-cmd --zone=public --add-port=8001/tcp --permanent
- 重新加载策略配置,以使新配置生效
firewall-cmd --reload
- 查看开放的端口及进程
netstat -tunlp
netstat -lnp| grep 8001
- 在网站项目的根目录下/data/wwwroot/ChatRobot创建一个名为test_uwsgi.py的文件
cd /data/wwwroot
mkdir ChatRobot
cd ChatRobot
vim test_uwsgi.py
# 文件内容如下:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
# 内容写入之后 ESC 退出输入模式,切换到命令模式
# :w 保存 :q 退出
- 输入如下命令启动uWSGI,此时在电脑浏览器输入ip:8001然后回车,即可看到浏览器显示Hello World字样,代表服务器可以接收来自浏览器的请求了
uwsgi --http :8001 --wsgi-file /data/wwwroot/ChatRobot/test_uwsgi.py
- 通过以下命令即可以启动uWSGI及端口
uwsgi --chdir /data/wwwroot/ChatRobot --home /data/env/pyweb --http :8001 --module=ChatRobot.wsgi:application
此时在浏览器输入ip,不出意外的话网站已经加载进来,只是缺少了静态文件。
6. 安装及配置Nginx
在安装之前,先说一下网站的目录,下面我们要添加几行代码:
# 在urls.py文件中添加如下代码
from django.urls import path
from tencent import views
urlpatterns = [
path('wx', views.TencentView, name='TencentView')
]
# 在views.py文件中添加如下代码
from django.http import HttpResponse
def TencentView(request):
return HttpResponse(content="haha this is a tencent")
- 安装epel库
yum install epel-release –y
- 安装Nginx库
yum -y install nginx
- 启动Nginx服务(确保80端口已经开启且没被占用,如果没开启,请参考上面的配置通过防火墙打开端口)
systemctl start nginx.service
或
service nginx start
- 配置Nginx,使用如下命令找到安装路径
find / -name nginx.conf
- 更改nginx.conf文件如下:
#user nobody;
worker_processes 2;
error_log /data/wwwroot/ChatRobot/error.log;
error_log /data/wwwroot/ChatRobot/error.log notice;
error_log /data/wwwroot/ChatRobot/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log /data/wwwroot/ChatRobot/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip on;
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /data/wwwroot/ChatRobot/static;
proxy_connect_timeout 18000;
proxy_send_timeout 18000;
proxy_read_timeout 18000;
}
location /media {
alias /data/wwwroot/ChatRobot/media;
}
location / {
uwsgi_pass 127.0.0.1:8001;
include /etc/nginx/uwsgi_params;
}
}
- 配置完成后,检查一下是否合法
nginx -t
- 在网站项目的根目录下创建名为robot_uwsgi.ini的配置文件,内容如下:
[uwsgi]
chdir = /data/wwwroot/ChatRobot
home = /data/env/pyweb
module = ChatRobot.wsgi:application
master = true
processes = 4
harakiri = 600
max-requests = 5000
socket = 127.0.0.1:8001
uid = 1000
gid = 2000
pidfile = uwsgi.pid
daemonize = uwsgi.log
vacuum = true
- 启动uWSGI和Nginx
uwsgi --ini /data/wwwroot/ChatRobot/chatrobot_uwsgi.ini
service nginx start
- 查看uWSGI和nginx是否启动成功
ps -aux | grep uwsgi
ps -aux | grep nginx
- 此时在浏览器输入IP地址即可访问到网站
OK!可以了!
- 如果想结束运行,可以使用下面的指令
pkill -9 uwsgi
pkill -9 nginx
7. Django部分补充
- 建立一个工程
django-admin startproject ChatRobot(工程名)
- 启动MySQL数据库,并创建名为
tencent
的数据库
net start MySQL80(我的本地MySQL是8.0版本的)
mysql -uroot -p
create database tencent;
- 在
__init__.py
中添加代码,以兼容MySQL8.0版本
import pymysql
pymysql.install_as_MySQLdb()
- Django默认使用SQLite数据库,在
settings.py
文件中配置使用MySQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tencent',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': '数据库服务器IP,本地是localhost',
'PORT': '端口名,默认是3306',
}
}
- 创建一个应用
python manage.py startapp tencent(应用名)
- 在
settings.py
文件中,将'tencent'
加入到INSTALLED_APPS
中 - 启动
# ip可以不写,即默认本机ip
# 端口号可以不写,默认为8000,可以修改
python manage.py runserver ip:port