为了在学习python,本来想用python的框架django搭建一个个人学习博客,也就是现在看到的这个。但是经历是痛苦的,本地早早建好了一django个简易博客。而环境的配置不是难点,最难的是根据环境配置网站,可以说为了成功搭建这个博客,我整整用三天时间。
这个django博客链接http://python.zhezhejuan.com:8888/,可以看到确实是可以运行,但其实我是非常不满意的,为啥,就凭那尾部的8888,我已经大失所望,因为我找不到办法去掉他。所以你现在看到了一个http://python.zhezhejuan.com这个站点,没错,他是用php做的。对于才学python十多天时间的新手来说,我实在是找不好的办法,只好先放放,先用php弄个简单的博客出来,等自己基础根据扎实在来解决这个难题!
虽然很失败的经理,但是也要记录一下:
用宝塔管理网站项目是现在比较流行的方式,我相信很多人跟我一样,而最新宝塔系统是用python2.7写的,如果我再配置个python写的网站对原先站点有没有影响?可以肯定的告诉你,完全没有,亲测,哈哈
刚开始在网上找相关资料,发现居然没有这方面的,这就尴尬了。只能一部部摸索:
1,首选我觉得应该建立个虚拟环境,用virtualenv来独立管理博客项目:
所以按照virtualenv:
pip install virtualvev #居然可行,那么宝塔中肯定有pip包的,我没有去看,大家可以pip list看看
2,然后建立独立站点:
宝塔有专门的建立站点功能,我现在先用virtualvenv来建立目录,等下在创建站点的时候关联这个目录,所有网站都在www/wwwroot目录,所以我也这么干
cd /www/wwwroot/
virtualenv --no-site-pacjages --distribute python
source python/bin/activate
3,进入虚拟环境就可以安装自己想要的包了
pip install Django==1.11.8
pip install uwsgi
pip install python2.7
4,所需的包安装好,开始创建django项目
cd python
django-admin startproject blog_jian
cd blog_jian
python manage.py startapp blog
django项目创建好了。我之前想用宝塔直接关联这个项目站点,可是他会给我配置各种php环境,而且nginx的端口问题也在这里尤为明显,当我后面跑的时候,服务器里面的所有网站都无法打开,报django错误。bug太多,来不及记录了,博客毕竟没建立好,可惜了!
下面把本地的项目放到你创建的目录来,运行:
python manage.py runserver 0.0.0.0:8000
你有可能会打开,有可能打不开,我的经历是,端口没有放行,去阿里云后台放行端口,就在安全组那里,找不到就百度。然后在宝塔后台“安全”里面放行端口,你可能还会发现显示“外网不通”,什么原因?我也不知道,都设置对了,就是不能打开端口,你去把服务器,nginx等等,你能想到的都重启下看看。还是不行如我这样,就直接用了8888端口,没错,是宝塔原始端口。
python manage.py runserver 0.0.0.0:8888
打开连接,你会发现网站跑起来了,可是你关闭putty,网站就跟着挂了,这时候就用到uwsgi了,他是什么,去百度,反正就是个服务器,他跑,你网站也会跑,不过据说uwsgi和nginx一起才完美!
5,配置uwsgi
在项目目录下创建个uwsgi.ini文件,复制下面代码:
uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/www/wwwroot/blog_jian/
# 指定项目的application
module=blog_jian.wsgi:application
# 指定sock的文件路径
socket=/usr/local/nginx2/logs/uwsgi.sock
# 进程个数
workers=5
pidfile=/usr/local/nginx2/logs/uwsgi.pid
# 指定IP端口
http=0.0.0.0:8888
# 指定静态文件
static-map=/static=/www/wwwroot/blog_jian/blog/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/usr/local/nginx2/logs/uwsgi.log
上面nginx2是我在服务器里面安装的第二个nginx,原装的nginx在www/server目录里面,为什么要安装两个nginx,一切都是尝试,当我用原装的nginx跑项目的时候,服务器所有网站都跟着挂了,我的想法是这个python不去碰其它网站的配置是不是就不会影响了,所以我又安装一个nginx
好了又回到uwsgi这来,你配置好后就可以运行一下,看能不能跑起来
uwsgi --ini /www/wwwroot/blog_jian/uwsgi.ini
打开网站看看吧,能跑,那么肯定就没问题,遇到端口被占,可以先关nginx
service nginx stop
一个尴尬的事情是,nginx一关,所有网站都要挂了,这是在宝塔安装django的麻烦
6, nginx配置
老实说,这个东西难倒我了,一个pid进程,就让我弄了一天,当你运行uwsgi的时候,上面pid会被创建,一个明显的问题就是跑nginx时报错端口被占用。所以你还要关闭nginx服务
service nginx stop
而前面我已经说过我又在服务器里安装了一个nginx,为了不让项目影响其他网站的运行,思路是nginx安装到其它目录,原始宝塔nginx是安装在www/server里面的,我把新的nginx安装在usr/local文件里:
由于nginx依赖于openssl、pcre和zlib,所以在安装nginx时,需要先安装pcre和zlib(为了方便起见,我把pcre、zlib、nginx的包放到了同一个目录下)。这个是别的教程里说的,我不确定宝塔有没有这项依赖,为了避免麻烦,我就当他没有。
openssl本机已经安装故不做说明
1、安装pcre
从pcre的官网下载tar.gz包,官网地址为:https://sourceforge.NET/projects/pcre/files/pcre/,在这里我下载的是:pcre-8.39.tar.gz
tar -zxvf pcre-8.39.tar.gz
cd pcre-8.39
./configure
make
make install
2、安装zlib
从zlib的官网下载tar.gz包,官网地址为:http://zlib.Net/,在这里我下载的是:zlib-1.2.8.tar.gz
tar -xvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install
3、安装nginx
从nginx的官网下载tar.gz包,官网地址为:http://nginx.org/en/download.html,在这里我下载的是: nginx-1.11.6.tar.gz
tar -zxvf nginx-1.11.6.tar.gz
cd nginx-1.11.5
./configure --sbin-path=/usr/local/nginx2/sbin/nginx --conf-path=/usr/local/nginx2/conf/nginx.conf --pid-path=/usr/local/nginx2/sbin/nginx.pid --with-http_ssl_module --with-pcre=../pcre-8.39 --with-zlib=../zlib-1.2.8
make
make install
至此,nginx就安装完毕
4、配置并启动nginx
经过上面的安装步骤和目录设置,nginx的启动程序就是/usr/local/nginx2/sbin/nginx,配置文件是/usr/local/nginx2/conf/nginx.conf,可在配置文件里修改端口、反向代理路径等
server {
listen 8888; #修改端口
location ~* /examples{
proxy_pass http://localhost:8888; #修改反向代理
}
启动nginx的命令为:
/usr/local/nginx2/sbin/nginx -t //测试nginx.conf的配置是否正确
/usr/local/nginx2/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //根据nginx.conf里的配置,启动nginx服务
7,现在可以配置项目的nginx
在项目目录www/wwwroot/blog_jian创建一个blog.conf目录,并复制下面的代码:
user www www;
worker_processes 1;
error_log /usr/local/nginx2/logs/error.log;
error_log /usr/local/nginx2/logs/error.log notice;
error_log /usr/local/nginx2/logs/error.log info;
pid /usr/local/nginx2/logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /usr/local/nginx2/conf/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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8888;
server_name localhost;
charset utf-8;
access_log /www/wwwroot/blog_jian/nginx_access.log;
error_log /www/wwwroot/blog_jian/nginx_error.log;
client_max_body_size 75M;
location /static {
alias /www/wwwroot/blog_jian/blog/static;
}
location / {
include /usr/local/nginx2/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:8888;
}
}
}
然后关闭nginx和uwsgi,再运行这个blog.conf开启nginx服务
/usr/local/nginx2/sbin/nginx -s stop #关闭nginx
uwsgi --stop uwsgi.pid 关闭uwsgi,如果你运行nginx没有被占用端口,可以不用关
开启nginx:
nginx -c /www/wwwroot/blog_jian/blog.conf
其实还有很多bug,已经过了两天,现在来复盘不够完美,如果有大神指点下万分感谢!毕竟自己就是个菜鸟