15 中期项目之搭建博客系统
要求:
lb01和lb02的80和443端口开放,其他端口不开,外网开放
其他服务器关闭外网
web服务器nginx监控uwsgi,uwsgi端口是8008
实现全栈https
1、 准备服务器
主机 ip 身份 lb01 192.168.15.5 七层负载均衡 web01 192.168.15.7 web服务器 web02 192.168.15.8 web服务器 web03 192.168.15.9 web服务器 db01 192.168.15.51 数据库 m01 192.168.15.71 跳板机 2、db01配置
1.创建数据库
mysql -uroot -p
CREATE DATABASE `djangoblog`
2.配置字符集
3.配置防火墙规则
只有内网可访问
yum install iptables-services -y systemctl start iptables iptables -F iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT iptables -t filter -A INPUT -p ALL -j DROP
3、web服务器配置
1.下载代码
cd /opt git clone https://gitee.com/lylinux/DjangoBlog.git
2.安装相关依赖
cd DjangoBlog
yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y yum install gcc python3-devel mysql-devel -y
3.修改数据库配置文件
vim /opt/DjangoBlog/DjangoBlog/settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ.get('DJANGO_MYSQL_DATABASE') or 'djangoblog', 'USER': os.environ.get('DJANGO_MYSQL_USER') or 'root', 'PASSWORD': os.environ.get('DJANGO_MYSQL_PASSWORD') or '123456', 'HOST': os.environ.get('DJANGO_MYSQL_HOST') or '172.16.1.51', 'PORT': int( os.environ.get('DJANGO_MYSQL_PORT') or 3306), 'OPTIONS': { 'charset': 'utf8mb4'}, }}
4.安装模块
cd /opt/DjangoBlog pip3 install -Ur requirements.txt -i http://pypi.douban.com/simple/
数据库迁移:python3 manage.py makemigrations
python3 manage.py migrate
5.创建超级用户
cd /opt/DjangoBlog python3 manage.py createsuperuser
6.创建测试数据
cd /opt/DjangoBlog python3 manage.py create_testdata
7.收集静态文件
cd /opt/DjangoBlog python3 manage.py collectstatic --noinput python3 manage.py compress --force
8.启动测试:
python3 manage.py runserver 0.0.0.0:8008
9.安装uwsgi
pip3 install uwsgi
10.编辑项目启动配置文件
cd /opt/DjangoBlog
vim myuwsgi.ini
[uwsgi] # 端口号 socket = :8008 # 指定项目的目录 chdir = /opt/DjangoBlog # wsgi文件路径 wsgi-file = DjangoBlog/wsgi.py # 模块wsgi路径 module = DjangoBlog.wsgi # 是否开启master进程 master = true # 工作进程的最大数目 processes = 4 # 结束后是否清理文件 vacuum = true
11.启动uwsgi
uwsgi -d --ini my_uwsgi.ini
12.配置Nginx连接uwsgi
cd /etc/nginx/conf.d
vim blog.conf
# 配置一个网站 server { # 监听的端口 listen 80; # 配置域名 server_name blog.com; # 配置路径 location / { # 加载Nginx代理uwsgi的配置项 include uwsgi_params; # 指定uwsgi的访问地址 uwsgi_pass 127.0.0.1:8008; # 连接uwsgi的超时时间 uwsgi_read_timeout 2; # 自定义uwsgi代理项目的路径及配置项 uwsgi_param UWSGI_SCRIPT DjangoBlog.wsgi; # 指定python项目的路径 uwsgi_param UWSGI_CHDIR /opt/DjangoBlog; # 索引文件 index index.html index.htm; # 客户端上传文件的最大值 client_max_body_size 35m; } }
13.nginx.conf内容如下
# 工作进程启动用户 user nginx; # 启动的worker进程数 worker_processes auto; # 指定错误日志的路径 error_log /var/log/nginx/error.log notice; # 指定nginx的进程PID pid /var/run/nginx.pid; # 配置事件 events { # worker进程中的最大的连接数 worker_connections 1024; } # http配置模块 http { # include是将其他文件导入进来 include /etc/nginx/mime.types; # default_type 指定nginx处理文件的默认类型 default_type application/octet-stream; # 定义日志的格式 log_format main '$remote_addr-$http_host - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 定义日志的路径 access_log /var/log/nginx/access.log main; # 高效读取文件 sendfile on; #tcp_nopush on; # 长链接超时时间 keepalive_timeout 65; # 设置gzip压缩 #gzip on; # 加载其他配置文件 include /etc/nginx/conf.d/*.conf; }
14.重启或启动Nginx
systemctl restart nginx
15.配置防火墙规则
只有内网可访问
yum install iptables-services -y systemctl start iptables iptables -F iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT iptables -t filter -A INPUT -p ALL -j DROP
4、lb01配置
全栈https参考:
/etc/nginx/conf.d/blog.conf
upstream blog { server 172.16.1.7; server 172.16.1.8; server 172.16.1.9; } server { listen 80; server_name blog.com; return 302 https://blog.com; } server { server_name blog.com; listen 443 ssl; ssl_certificate /etc/nginx/ssl_key/server.crt; ssl_certificate_key /etc/nginx/ssl_key/server.key; location / { proxy_pass http://blog; include proxy_params; } }
5、windows的hosts文件配置
192.168.15.5 blog.com
6、测试
https://blog.com/