基于ubuntu16.04+apache2.4+django+python3(非virtualenv解决方案)

    博主萌新一个,花了两天小学django并且搭建了一个简单的,且有故意设计漏洞的blog网站。目前该项目架设在百度云服务器上,访问http://106.12.38.12:81/index/即可。但是,部署到apache2居然也花了我两天的时间,本以为很简单,没想到有点坑。我建议如果有项目急着用,可以考虑我这一套方案,亲测有用。

准备工作:

  1. ubuntu 16.04 
  2. python3 (博主用的3.5.2)
  3. django可以用到python支持的版本
  4. 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.htmlhttps://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对用户权限很敏感

  1. 设置目录文件权限
进入到你项目所在的上一级目录,也就是当前目录下ls会显示你的项目。
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目录下
    vim ports.conf 
    修改  Listen 80 与你上面修改的端口相对应。

再来一遍


sudo service apache2 reload 
sudo a2ensite sitename.conf
sudo service apache2 restart

不出意外应该显示正常网页了。



最后:

这是我第一次写博客,问题多多,希望评论指正,如果有什么问题,评论也可以提问。

本博客借鉴多家网站实现了该项目,本文只是集中解决可能遇到的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值