新接手公司微信公众号项目,项目后端使用django框架开发,postgresql数据库,由于公众号转发URL需要外网IP,个人买了一年阿里云服务器,新人优惠力度非常大,选个低配用于学习非常划算,回到刚买的服务器,开始安装环境,限于本人能力及精力有限,写博客仅做个人编写的技术文档,能够给大家提供一点点帮助的话就更有价值了,其中个别错误请见谅。
1.安装postgresql数据库,参考我的另一篇博客:https://www.cnblogs.com/lis-arc/p/11497388.html
2.安装nginx
(1)在线安装(我用的这个方法):
yum install nginx
systemctl start nginx
(2)离线安装
首先检测nginx的安装环境
yum -y install gcc gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
下载nginx包:
wget http://nginx.org/download/nginx-1.9.9.tar.gz # 这个包比较老了,第一次安装的时候用的版本配置有点问题,后来安了这个版本的,也可以去官网看看
解压缩 tar -xzvf nginx-1.9.9.tar.gz
到解压缩后的目录中 cd nginx-1.9.9
执行一下命令:
运行文件 ./configure
make
make install
安装完成后生成目录/usr/local/nginx/,其中conf目录为配置文件,sbin为启动文件,logs为日志文件,其他可以自己研究研究
/usr/local/nginx/sbin/nginx 启动服务,指定参数-s reload可重新加载服务,-s stop停服务。
完成后在本地浏览器输入服务器外网IP可以看到nginx的欢迎页面,说明nginx已经安装成功并启动
2.安装gunicorn
我使用的python3创建的django项目,gunicorn是python的模块,直接使用命令pip3 install gunicorn 即可
其他依赖根据自己的环境安装,使用django框架访问postgresql数据库需要安装psycopg2模块
3.上传django项目,使用gunicorn启动项目
在postgtresql数据库中新建数据库实例
CREATE DATABASE DATABASE_01 ;
创建用户
CREATE USER USER_01 WITH PASSWORD $PASSWORD;
配置django项目settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DATABASE_01',
'USER': 'USER_01',
'PASSWORD': '$PASSWORD',
'HOST': 'localhost',
'PORT': '5432',
}
}
比如我的项目是/home/abc/Abc项目,到Abc下,执行命令gunicorn Abc.wsgi:application --bind 127.0.0.1:8080启动服务并监听8080端口,如果数据库连接失败去检查一下pg_hba.conf和postgresql.conf文件
4.修改nginx的配置文件,nginx.conf
server { listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:7000;
}
location /static/ {
root /home/abc/Abc;
}
nginx -s reload重新加载nginx
好了,迫不及待的在本地浏览器访问阿里云服务,发现服务起来了,但是没有加载样式,gunicorn并不能托管样式,所以还需要指定nginx来托管样式
5.nginx托管django样式
nginx.conf配置文件中 location /static/ {} 中已经指定了静态文件的加载目录,但是django的后台管理需要收集静态文件
$ python manage.py collectstatic
如果没有在配置文件中指定STATIC_ROOT需添加静态文件目录
STATIC_ROOT = 'static'
重启服务,登陆后台发现样式已经加载出来了
如果没有加载查看一下/var/log/nginx/error.log日志文件,如果提示Permission denied说明nginx没有对静态文件的访问权限,在配置文件里找到user配置项,修改nginx用户为web服务用户,重启nginx。