美文网首页
Django+Nginx+uwsgi+MySQL部署blog

Django+Nginx+uwsgi+MySQL部署blog

作者: 张都尉 | 来源:发表于2020-07-28 15:13 被阅读0次

1.系统准备

  • centos7.5
  • python3的安装
  • 升级 系统源及安装如下所需工具及环境
yum -y  update
yum -y install git #安装git工具
yum -y install nginx #安装nginx
yum -y install python3
yum -y install python3-pip 
pip3 install virtualenv
yum -y install mysql-server
  • 更换PIP源
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

编译安装错误

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar -xf Python-3.6.4.tar
cd Python-3.6.4
./configure prefix=/usr/local/python3
make && make install
 
# 如果出现can't decompress data; zlib not available这个错误,则需要安装相关库
#安装依赖zlib、zlib-devel
yum install zlib zlib
yum install zlib zlib-devel

如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录

    #将原来的链接备份
    mv /usr/bin/python /usr/bin/python.bak
     
    #添加python3的软链接
    ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
     
    #测试是否安装成功了
    python -V

更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用

vi /usr/bin/yum
把#! /usr/bin/python修改为#! /usr/bin/python2
 
vi /usr/libexec/urlgrabber-ext-down
把#! /usr/bin/python 修改为#! /usr/bin/python2

在线rpm包安装mysql

[root@localhost local]# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
[root@localhost local]#  yum -y localinstall mysql57-community-release-el7-11.noarch.rpm 
[root@localhost local]# yum -y install mysql-community-server

启动mysql及设置开机启动

[root@localhost local]# systemctl start mysqld
[root@localhost local]# systemctl enable mysqld
[root@localhost local]# systemctl daemon-reload

修改mysql密码

mysql安装完成之后,会在/var/log/mysqld.log文件中给root生成了一个临时的默认密码。
[root@localhost local]# vim /var/log/mysqld.log

修改mysql密码,设置远程登陆:

[root@localhost local]# mysql -u root -p
mysql>  ALTER USER 'root'@'localhost' IDENTIFIED BY 'daasan7ujm^YHN';
Query OK, 0 rows affected (0.00 sec)
# 设置远程登录
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'daasan7ujm^YHN' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> exit

配置mysql编码

[root@localhost sysconfig]# vim /etc/my.cnf

#添加如下代码
character_set_server=utf8
init_connect='SET NAMES utf8'

配置mysql默认码为utf-8

[root@localhost sysconfig]# vim /etc/my.cnf

添加如下代码

character_set_server=utf8
init_connect='SET NAMES utf8'
  • wq保存后 退出

重启mysql

[root@localhost data]# systemctl restart mysqld

root用户查看编码

[root@localhost sysconfig]#  mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> 

最后本地连接测试,这里使用navicat:


创建数据库 my_blog

mysql> create database my_blog;
Query OK, 1 row affected (0.01 sec)

mysql> show create database my_blog;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| my_blog  | CREATE DATABASE `my_blog` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

代码部署

代码部署及数据迁移

  • 进入数据存储目录 /data/blog,创建python虚拟环境
cd /data/blog
virtualenv --python=python3.6 env # 创建python3.6的虚拟环境
source env/bin/activate # 进入虚拟环境
git clone https://github.com/stacklens/django_blog_tutorial.git  # clone blog项目


接下来修改django配置文件

my_blog/settings.py

# 关闭调试模式
DEBUG = False

# 允许的服务器
ALLOWED_HOSTS = ['*']

# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

在生成的虚拟环境内 安装库\收集静态资源\数据迁移

cd /data/blog
pip3 install -r requirements.txt
python manage.py collectstatic
python manage.py migrate

代码部署完成,接下安装Nginx

sudo systemctl start nginx

打开浏览器 访问服务器地址


  • nginx默认配置是不能用的,所以我们需要重新写入nginx配置文件.进入 /etc/nginx/sites-available 目录,这里是定义 Nginx 可用配置的地方。输入指令 sudo vi dusaiphoto.com 创建配置文件并打开 vi 编辑器:
(env) ~$ cd /etc/nginx
(env) ~$ mkdir sites-available
(env) /etc/nginx/sites-available$ 
(env) /etc/nginx/sites-available$ sudo vi myblog.conf

关于 vi 编辑器如何使用也不赘述了,这里只说两个最基本的操作:

按 i 键切换到编辑模式,这时候才可以进行输入、删除、修改等操作
按 Ctrl + c 退回到命令模式,然后输入 :wq + Enter 保存文件修改并退回到服务器命令行

回到正题,用 vi 在 dusaiphoto.com 文件中写入:

server {
  charset utf-8;
  listen 80;
  server_name x.x.x.x;  # 改成你的 IP

  location /static {
    alias /data/blog/my_blog/collected_static;
  }

  location /media {
    alias /data/blog/my_blog/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/x.x.x.x.socket;  # 改成你的 IP
  }
}

此配置会监听 80 端口(通常 http 请求的端口),监听的 IP 地址写你自己的服务器公网 IP。

配置中有3个规则:

- 如果请求 static 路径则由 Nginx 转发到目录中寻找静态资源
- 如果请求 media 路径则由 Nginx 转发到目录中寻找媒体资源
 - 其他请求则交给 Django 处理

这里创建一个可用配置的软链接

sudo ln -s /etc/nginx/sites-available/myblog.conf /etc/nginx/conf.d/myblog.conf

至此 Nginx 就配置好了,接下来搞定 Gunicorn。

有的读者无论怎么配置都只能看到 Nginx 欢迎页面,有可能是 sites-enabled 目录中的 default 文件覆盖了你写的配置。将 default 文件删掉就可以正常代理自己的配置文件了。

Gunicorn及测试

回到项目所在目录,并进入虚拟环境然后输入:

pip install gunicorn
systemctl reload nginx 
gunicorn --bind unix:/tmp/x.x.x.x.socket my_blog.wsgi:application # x.x.x.x为自己的IP

相关文章

网友评论

      本文标题:Django+Nginx+uwsgi+MySQL部署blog

      本文链接:https://www.haomeiwen.com/subject/zlqtrktx.html