woks项目录入文章功能及简单显示

此章节完成的任务是在admin界面可以录入文章,及简单的显示出文章样式

代码位置

git checkout woks-v0.0.1

数据库表创建

python manage.py makemigrations

python manage.py migrate

由于在makemigrations时,生成了很多数据库变更文件,我们不对这些文件

进行追踪。

vim .gitignore

增加如下内容:

migrations

markdown格式转html格式

import markdown2 markdown2.markdown(chapter.body)

git创建tag

用git创建tag(里程碑),方便记录自己完成的程度



woks项目

项目介绍

GNU's Not Unix,这句话是GNU的解释(http://www.gnu.org/)

这是一种递归的方式:有了git后,用git管理git自己的源码;有了c语言后,用c扩展c语言;

这是一个有意思的方式。

因此,woks项目用来记录技术系列文章,同时也记录woks完整的实现。

项目结构设计

一个分类Category,一个系列Series,一个Chapter,一个标签

项目代码托管

https://github.com/bxxfighting/buxingxing

文章格式

文章内容使用markdown语法编写

安装markdown2

文档:https://github.com/trentm/python-markdown2

源码:https://github.com/trentm/python-markdown2

pip install markdown2



使用多个远程库

开始的时候,我们自己创建了一个git用户,同时创建了一个远程库。

现在我需要把我的代码同时弄到github上去,因此就需要进行多个远程库的设置。

  1. github上创建库buxingxing

    这里只提一点,在创建库的时候,不要选initialize this repository with a README。

    创建后,会有提示,三种情况。现在我们属于第二种:

    git remote add origin git@github.com:bxxfighting/buxingxing.git git push -u origin master 但是我们不要直接这样执行

  2. 设置一下我们本地的配置

    git remote set-url --add origin git@github.com:bxxfighting/buxingxing.git

    因为我们之后已经增加过一个远程库了,现在属于追加一个远程库。

  3. 更新master分支

    git checkout master

    git merge origin/dev

    git push

    因为之后一直使用的分支是dev/online,没有用过master,

    所以master分支原来是没有代码的。

    而github上面的默认分支就是master,所以更新master分支代码,同时推送到远程分支。

  4. 推送其它分支

    上面将master分支代码更新成最新代码,同时推送到了远程库。

    其实其它分支也可以直接推送到github。

    git checkout dev

    git push

    这样,github上就有了两个分支master和dev了。



启用django的admin

  1. 创建django及admin必须的数据库表

    python manage.py migrate

    现在已经可以访问http://47.92.71.110/admin了,但是没有样式,

    也就是找不到静态文件。

  2. 设置静态文件路径

    vim buxingxing/settings.py

    增加如下内容:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    提交代码、部署

  3. 创建静态文件目录

    cd /var/www/buxingxing

    mkdir static

  4. 配置nginx

    vim /etc/nginx/sites-available/default

    增加如下内容:

    location /static/ { alias /var/www/buxingxing/static/; }

    重新加载nginx

    service nginx reload

  5. 将静态文件搜集到静态文件目录

    python manage.py collectstatic

    现在再次访问,样式出现了。

  6. 创建admin登录用户

    python manage.py createsuperuser

    现在就有了登录用户。

  7. 忽略掉static下所有文件,不进行git追踪

    vim .gitignore

    增加如下内容:

    static static/*

    提交部署

  8. admin使用中文及中国时间

    vim buxingxing/settings.py

    修改内容如下:

    LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'

    提交修改后,部署



部署项目

  1. 安装nginx

    sudo apt install nginx

    如果已经安装过apache,会出现端口冲突,需要先停掉apache,再运行nginx,因为我这里没有安装apache,所以在安装完nginx时,就自动运行了。

    现在可以访问一下,看看是否已经可以访问了。

    http://47.92.71.110/ # 这是我阿里云的ip,还未绑定域名,以后会绑定到http://buxingxing.com/

  2. 安装gunicorn

    sudo pip3 install gunicorn

  3. 代码部署

    cd /var/www/

    sudo su -m

    git clone git@localhost:/home/git/repo/buxingxing.git

    cd /var/www/buxingxing/

    git checkout online

    这里clone时,还是需要输入密码,这是因为root用户的ssh密钥没有放到git的认证key中

    ssh-keygen -t rsa

    scp /root/.ssh/id_rsa.pub git@localhost:/home/git/

    切换到git用户,操作

    su git

    cd /home/git/

    cat id_rsa.pub >> .ssh/authorized_keys

  4. 用gunicorn做代理

    在xx用户下,切换到dev分支,开始创建gunicorn配置文件

    su xx cd /home/xx/workspace/buxingxing/ vim buxingxing/gunicorn.conf

    在文件中增加如下内容:

    ```python import os import multiprocessing

    CUR_DIR = os.path.dirname(os.path.dirname(file))

    bind = "127.0.0.1:28988" workers = multiprocessing.cpucount() * 2 + 1 chdir = CURDIR daemon = True ```

    使用git提交代码:

    git add .

    git commit -m "增加gunicorn配置"

    git push

    git checkout online

    git merge origin/dev

    git push

    到这里代码已经提交了。

  5. 拉取gunicorn代码

    切换到root用户

    sudo su

    cd /var/www/buxingxing/

    git pull

    运行gunicorn:

    gunicorn buxingxing.wsgi:application -c buxingxing/gunicorn.conf

  6. 配置nginx

    编辑文件vim /etc/nginx/sites-available/default

    location / { proxy_redirect off; proxy_pass http://localhost:28988; }

    在location里只保留以上内容,其它均删除

    重新加载nginx

    service nginx reload

    再次访问http://47.92.71.110/就可以看到有关django的内容页面了。



使用git管理代码

  1. 安装git

    sudo apt install git

  2. 创建git用户

    sudo useradd git -m -s /bin/bash

    sudo passwd git

  3. 切换用户到git并进入git的主目录

    su git

    cd /home/git/

  4. 创建代码库目录

    mkdir repo

    cd repe

  5. 初始化代码库

    git --bare init buxingxing.git

  6. 生成ssh密钥

    ssh-keygen -t rsa

    使用默认值就可以,所以都直接回车

  7. 切换用户到工作用户xx,并同样生成ssh密钥

    su xx

    cd /home/xx/

    ssh-keygen -t rsa

  8. 将xx的公钥发送给git用户

    scp .ssh/id_rsa.pub git@localhost:/home/git/

  9. 切换用户用git

    su git

    cd /home/git/

  10. 将xx用户传来的公钥放入认证key中

    cat id_rsa.pub >> .ssh/authorized_keys

  11. 配置一些方便的git操作

    切换用户到xx

    su xx

    git config --global user.email 305526954@qq.com

    git config --global user.name xx

    git config --global push.default matching

    git config --global alias.st "status"

    git config --global alias.lo "log —oneline"

  12. 回到django项目目录,使用git管理代码

    cd /home/xx/workspace/buxingxing/

    git init . git remote add origin git@localhost:/home/git/repo/buxingxing.git

    这里先创建一个文件,来告诉git,哪些文件不需要管理

    vim .gitignore

    增加如下内容:

    python *.pyc __pycache__ __pycache__/*

    现在执行git管理代码的一般操作:

    shell git add . git commit -m "Django基本配置完成,开始使用git管理" git push origin master git branch --set-upstream-to=origin/master master

  13. 现在已经基本上完成git的开始使用操作

    下面创建几个分支用于开发、测试、部署使用

    online 分支用于正式环境的部署 git checkout -b online git push origin online git branch --set-upstream-to=origin/online online

    test分支用于测试环境的部署 git checkout -b test git push origin test git branch --set-upstream-to=origin/test test

    dev分支用于开发环境 git checkout -b dev git push origin dev git branch --set-upstream-to=origin/dev dev

    查看现在所有远程分支及本地分支 git branch -a

    在以上创建了三个分支,功能不同,同时真正的工作中多人一起工作,一般都需要自己创建自己的工作分支,当完成任务后,合并到dev分支上,自测。

    然后将dev合并到test分支上,进行联测。

    最后所有都通过了,将代码合并到online分支,部署上线



创建django项目

  1. 安装django

    sudo pip3 install Django==1.11.3

    这里指定了django的版本

    sudo pip3 install Django这样不指定版本就安装最新版本

    我就是使用的当时最新版本1.11.3

  2. 创建工作目录

    mkdir workspace

    /home/xx/workspace/ # 此时目录结构

  3. 创建项目

    django-admin startproject buxingxing

    /home/xx/workspace/buxingxing # 此时目录结构

  4. 创建App

    python manage.py startapp woks

    python manage.py startapp yax

    python manage.py startapp ganx

    我这里连续创建了三个App

  5. 配置settings中的INSTALLED_APPS

    增加4创建的三个app

    python 'woks', 'yax', 'ganx',

  6. 配置settings中的DATABASES

    'ENGINE': 'django.db.backends.mysql', 'NAME': 'buxingxing', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': 3306,

  7. 创建数据库buxingxing

    mysql -uroot -p

    create database buxingxing /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

  8. 配置django,启用dbshell

    在buxingxing/__init.py中加入如下内容:

    python import pymysql pymysql.install_as_MySQLdb()

    然后执行:

    python manage.py dbshell

    现在就可以进入dbshell命令行

    在python2.7的时候,操作mysql使用的是MySQL-python,但是python3.5不支持,所以使用官方的pymysql,这就是以上操作的原因。



安装一些必要软件

  1. 安装mysql

    sudo apt install mysql-server

    在安装过程中只有一步是设置密码

    安装完成后,测试登录:

    mysql -uroot -p

  2. 使用python3.5

    由于Ubuntu16.04安装了python2.7和python3.5,我想直接python默认使用python3。

    先删除python的软链接

    sudo rm /usr/bin/python

    重新建立python3的软链接

    sudo ln -s /usr/bin/python3 /usr/bin/python

  3. 安装python3的包管理工具pip3

    sudo apt install python3-pip

    设置pip源

    mkdir .pip # 创建pip配置目录

    vim .pip/pip.conf 编辑pip配置文件,增加内容如下

    [global] trusted-host=mirrors.aliyun.com index-url=http://mirrors.aliyun.com/pypi/simple/

    更新pip

    pip install --upgrade pip

  4. 安装python3 mysql客户端

    sudo pip3 install pymysql



创建用户

环境:阿里云

操作系统: Ubuntu 16.04 64位

  1. 以root用户登录

  2. 创建用户xx,指定shell及创建Home

    useradd xx -m -s /bin/bash

  3. 为用户xx,创建密码

    passwd xx

    输入自己的密码

  4. 编辑权限文件

    vim /etc/sudoers

    增加如下内容:

    xx ALL=(ALL:ALL) ALL

  5. 退出后,使用xx用户重新登录