远程访问移植到虚拟机centos上的Django项目
centos7网络设置python虚拟环境管理在虚拟环境安装项目所需要的包安装Nginx1.16修改Django配置公网通过frp访问虚拟机中Django项目
centos7网络设置
将虚拟机上的centos7的网络连接方式设置为桥接模式
关闭防火墙:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
查看本地ip地址:
ip add
python虚拟环境管理
首先安装好python3,并注意与centos7自带的python2的共存问题
pip3 安装virtualenv,创建管理虚拟环境:
出错,显示缺少OpenSSL模块
[withong@withong ~]$ rpm -aq|grep openssl # 搜索openssl 包是否安装
openssl-1.0.2k-16.el7_6.1.x86_64
openssl-libs-1.0.2k-16.el7_6.1.x86_64
openssl098e-0.9.8e-29.el7.centos.3.x86_64
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
估计是太久没更新,更新openssl试试:
从官网下载最新的openssl:https://www.openssl.org/source/
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
参考升级过程:https://www.cnblogs.com/itbsl/p/11275728.html
[root@withong openssl-1.1.1d]# openssl version
OpenSSL 1.1.1d 10 Sep 2019
升级成功,再次尝试安装virtualenv
还是报错,在stackoverflow看到如下解决方法:
还需要对python3.7重新进行编译安装 带上ssl参数
cd Python-3.7
./configure
make
sudo make install
编译安装python3.7可参考:https://www.cnblogs.com/Liuyt-61/p/11621773.html
操作一:
成功安装virtualenv
pip3安装virtualenv拓展包:
pip3 install virtualenvwrapper
操作二:创建一个文件夹,用于存放所有的虚拟环境:
命令:mkdir -p /home/python/virtualenvs (目录自定义)
操作三:设置环境变量,把下面两行添加到~/.bashrc里。
命令:vim ~/.bashrc
添加:export WORKON_HOME=/home/python/virtualenvs (绝对路径)
添加:source /usr/bin/virtualenvwrapper.sh # 每次登陆用户自动执行下脚本
添加:export VIRTUALENVWRAPPER_PYTHON=/usr/local/python36/bin/python3 # 指定虚拟使用的python解释器路径
命令::wq!或者:x----保存设置
命令:source ~/.bashrc ----使修改生效
在虚拟环境安装项目所需要的包
pip3 install ......
安装Nginx1.16
进入Nginx下载主页:http://nginx.org/en/download.html
操作一:
用yum安装依赖项
yum install gcc pcre-devel zlib-devel
解压:
$ sudo tar -zxvf nginx-1.11.5.tar.gz # 解压缩
$ cd nginx-1.11.5
$ ./configure --prefix=/usr/local/nginx # 检查平台安装环境
--prefix=/usr/local/nginx 是nginx编译安装的目录(推荐),安装完后会在此目录下生成相关文件
如果前面的依赖库都安装成功后,执行./configure --prefix=/usr/local/nginx命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。进行源码编译并安装nginx
$ make # 编译
$ make install # 安装
启动服务
$ /usr/local/nginx/sbin/nginx
重启服务
$ /usr/local/nginx/sbin/nginx -s reload
停止服务
$ /usr/local/nginx/sbin/nginx -s stop
查看服务
$ ps -ef | grep nginx # 查看服务进程
将整个Django项目文件移植到centos7中,试启动下:
修改Django配置
uwsgi的配置
进入项目根目录下的settings.py文件:
DEBUG=FALSE
ALLOWED_HOSTS=[‘*’]
在项目根目录新建ini文件,作为wsgi的配置文件:
[uwsgi]
#使用nginx连接时使用
#socket=127.0.0.1:8080
#直接做web服务器使用
http=127.0.0.1:8080
#项目目录
chdir=/Users/smart/Desktop/dj/bj17/dailyfresh
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=dailyfresh/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
virtualenv=/Users/smart/.virtualenvs/dailyfresh
uwsgi的启动和停止:
启动:uwsgi –-ini 配置文件路径 例如:uwsgi –-ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid路径 例如:uwsgi –-stop uwsgi.pid
nginx
nginx 配置转发请求给uwsgi
location / {
include uwsgi_params;
uwsgi_pass uwsgi服务器的ip:port;
}
nginx配置处理静态文件:
django settings.py中配置收集静态文件路径:
STATIC_ROOT=收集的静态文件路径 例如:/var/www/dailyfresh/static;
django 收集静态文件的命令:
python manage.py collectstatic
执行上面的命令会把项目中所使用的静态文件收集到STATIC_ROOT指定的目录下。
收集完静态文件之后,让nginx提供静态文件,需要在nginx配置文件中增加如下配置:
location /static {
alias /var/www/dailyfresh/static/;
}
nginx转发请求给另外地址:
在location 对应的配置项中增加 proxy_pass 转发的服务器地址。
如当用户访问127.0.0.1时,在nginx中配置把这个请求转发给172.16.179.131:80(nginx)服务器,让这台服务器提供静态首页。
配置如下:
location = /{
proxy_pass http://172.16.179.131;
}
9.2.4 nginx配置upstream实现负载均衡
ngnix 配置负载均衡时,在server配置的前面增加upstream配置项。
upstream dailyfresh {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
公网通过frp访问虚拟机中Django项目
frp项目地址:https://github.com/fatedier/frp
首先确保你有一台具有公网ip的服务器
在阿里云上配置frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
在虚拟机上的centos7中配置frpc.ini
[common]
server_addr = xx.xx.xx.xx # 阿里云上的公网ip
server_port = 7000 frp通信端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
local_ip = 127.0.0.1
local_port = 80 #网站使用的端口
custom_domains = xx.xx.xx.xx # 阿里云上的公网ip 或域名
启动不同服务器的frp:
前端开启,关闭就会失效
./frps -c ./frps.ini
后段开启
nohup ./frps -c ./frps.ini &
在浏览器里访问xx.xx.xx.xx:8080 成功进入主页
如果需要在公网上访问多个虚拟机中的项目,但是没有域名的情况下,可以采取如下措施,亲测有效,只需要修改frpc.ini:
例如有两个端口分别为887,888的项目:
[web_9990]
type = http
local_ip = 127.0.0.1
local_port = 887 #网站使用的端口
custom_domains = a.free.domain #随便写个域名保证唯一
[web_9991]
type = http
local_ip = 127.0.0.1
local_port = 888 #网站使用的端口
custom_domains = b.free.domain #随便写个域名保证唯一
重启服务
接下来修改host文件 linux: /etc/hosts :
追加
xx.xx.xx.xx a.free.domain
xx.xx.xx.xx b.free.domain
xx.xx.xx.xx 是你的公网服务器IP 地址
刷新 host文件,使得新配置生效:
linux: systemctl restart nscd
打开浏览器
输入: a.free.domain:887 即可访问 web项目 web_887
输入: b.free.domain:888 即可访问 web项目 web_888
成功进入不同web项目的主页
更多推荐
所有评论(0)