博主萌新一个,花了两天小学django并且搭建了一个简单的,且有故意设计漏洞的blog网站。目前该项目架设在百度云服务器上,访问http://106.12.38.12:81/index/即可。但是,部署到apache2居然也花了我两天的时间,本以为很简单,没想到有点坑。我建议如果有项目急着用,可以考虑我这一套方案,亲测有用。
准备工作:
- ubuntu 16.04
- python3 (博主用的3.5.2)
- django可以用到python支持的版本
- apache2
请尽量与我版本保持一致,ubuntu下还好,坑不算太大。如果是新手,个人推荐用ubuntu,除非你对linux非常熟悉,ubuntu服务器的优点:
- 开机apache2等都自动启动,不需要额外设置
- 安装软件非常方便 apt-get 搞定
- 安装ssh,git等也非常容易
预热工作:
- 经常下载失败或者慢的,请尝试更换软件源。
方法:
1. 软件源的位置在/etc/apt/sources.list
无论什么时候请养好备份的习惯
sudo cp /etc/apt/source.list /etc/apt/old.list
2. 打开source.list文件
sudo vim /etc/apt/source.list
3. 复制源到source.list 中(我选择的是 阿里源,也可以选择其他源,这里就不提供了。)
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
4. 更新安装包文件
sudo apt-get update
sudo apt-get upgrade
这一步之后,下载应该不会出现失败和网速慢问题,博主也因此浪费过很多时间。
- 打开sftp服务,方便上下传文件。
sudo apt-get install open-sshserver
这个坑了博主,貌似找不到,有异议在底下评论,我不是太清楚这个。
下面这个命令有用
sudo apt-get install openssh-server
很像吧,不仔细发现不了。
正式开始:
由于自带python3所以可以直接:python3
root@instance-qmy3xqro:~# python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
查看python版本,是否满足你的要求。如果要修改版本可以参照https://www.cnblogs.com/legendbaby/p/5038790.html和https://www.cnblogs.com/helloxwr/p/6503608.html,灵活使用就行。
安装pip3
sudo apt-get install python3-pip
然后更新一下
pip3 install --upgrade pip
安装django
pip3 install -v django==2.0.7
装适合自己的版本就行。
这个时候可以上传你的django目录文件到服务器上
运行
python3 manage.py runserver 0.0.0.0:8000
这个属于django运行环境问题,不赘述,应该没什么大问题。如果有可能就是数据库要重新初始化一下:
sudo rm -rf
删除db.sqlite3和article目录下的migrations文件夹
python manage.py migrate
apache部署
安装 apache2 和 mod_wsgi
sudo apt-get install apache2
# Python 2
sudo apt-get install libapache2-mod-wsgi
# Python 3
sudo apt-get install libapache2-mod-wsgi-py3
确认apache2版本号
apachectl -v
要准备一个新的网站就得有一个新的配置文件,ubuntu的apache2配置文件在 /etc/apache2/ 下
这个目录下/etc/apache2/sites-available/,是没有
sitename
.conf文件的所以
sudo vi /etc/apache2/sites-available/sitename.conf
内容先写出以下这样:
我是把项目直接放在/usr下的
<VirtualHost *:80>
ServerName www.yourdomain.com
ServerAlias otherdomain.com #当前虚拟主机的别名
ServerAdmin XXX@163.com
Alias /media/ /usr/blog/media/
Alias /static/ /usr/blog/static/
#没有media的可以不写,有其他文件的可以自行添加。
<Directory /usr/blog/media>
Require all granted
</Directory>
<Directory /usr/blog/static>
Require all granted
</Directory>
WSGIScriptAlias / /usr/blog/blog/wsgi.py
#指定你的wsgi.py的位置
<Directory /usr/blog/blog>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
第一个blog指的是project的名字第二个指的是app的名字。
如下图:
接下来修改wsgi.py文件,把apache2和你的网站project联系起来了
import os
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0,PROJECT_DIR)
os.environ["DJANGO_SETTINGS_MODULE"] = "blog.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
linux对用户权限很敏感
- 设置目录文件权限
cd /usr
sudo chmod -R 644 blog #项目名称
sudo find #blog -type d | xargs chmod 755
如果你使用的是
sqlite3数据库
,还会提示
Attempt to write a readonly database
,同样要给www-data写数据库的权限。
sudo chgrp www-data blog
sudo chmod g+w blog
sudo chgrp www-data blog/db.sqlite3 # 更改为你的数据库名称
sudo chmod g+w blog/db.sqlite3
激活网站
sudo service apache2 reload
sudo a2ensite sitename.conf
sudo service apache2 restart
然后可以在你的浏览器上输入127.0.0.1或者输入你使用的服务器的公网ip等。如果成功会显示apache默认界面,如图:
为什么不显示我们的django项目呢,原因是apache2默认占用了80端口,而我们部署的工程也是80端口,这样就产生冲突。
方法:
- 进入这个目录/etc/apache2/sites-available找到sitename.conf
vim /etc/apache2/site-available/sitename.conf
<VirtualHost *.80>#改为<VirtualHost *.81>或者其他端口号
- 修改ports.conf 该文件在/etc/apache2目录下
修改 Listen 80 与你上面修改的端口相对应。vim ports.conf
再来一遍
sudo service apache2 reload
sudo a2ensite sitename.conf
sudo service apache2 restart
不出意外应该显示正常网页了。
最后:
这是我第一次写博客,问题多多,希望评论指正,如果有什么问题,评论也可以提问。
本博客借鉴多家网站实现了该项目,本文只是集中解决可能遇到的问题。