项目开发环境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicornphp
发布出来供须要的同窗借鉴参考。文中若有错误请多多指正!html
转载请注明出处!https://blog.markhoo.comnode
部署前的准备python
要部署项目就要先购买服务器,如腾讯云,阿里云等等mysql
注意:服务器在国内的话,必需要备案!否则没法使用。nginx
阿里云优惠券:点击前往领取
腾讯云代金券:点击前往领取
腾讯云首页:点击直达
腾讯云西南区云产品促销连接:点击直达
腾讯云服务器购买连接:点击直达git
域名购买选择,能够到百度云,腾讯云,阿里云,GoDaddy,namecheap等等github
购买域名后就是解析域名,打开域名解析面板,添加解析记录
记录类型:A
主机记录:test.markhoo.com,这个markhoo.com是你的一级域名,二级域名你能够设置为www.markhoo.com
解析线路:能够默认也能够选别的
记录值:填写你的服务器IP地址
TTL:域名生效时间,也就是多久生效
设置好以上内容,点击肯定。解析完成sql
主机记录中这个markhoo.com是你的一级域名,二级域名你也能够设置为 www.markhoo.com 或者别的 xxx.markhoo.com 也能够。
注意:域名是否在国内购买不重要,只要服务器不在大陆购买,即便未备案照样可使用。要是要解析的服务器是大陆服务商则必需要备案。备案后一个域名能够同时接入多个服务商。shell
域名解析记录类型说明:
- A:将域名指向一个IPv4地址
- AAAA:将域名指向一个IPv6地址
- CNAME:将域名指向另一个域名
- NS:将子域名指定其余DNS服务器解析
- MX:将域名指向邮件服务器地址
- SRV:记录提供特定的服务的服务器
- TXT:文本长度限制512,一般作SPF记录(反垃圾邮件)
- CAA:CA证书颁发机构受权校验
- 显性URL:将域名302重定向到另一个地址
- 隐性URL:与显性URL相似,可是会隐藏真实目标地址
主要用于远程登陆服务器进行相关操做。在官网注册后发送下载连接到你的注册邮箱,或者到搜索引擎搜索下载。
我的版免费,企业版收费。
下载后一路点击下一步,完成。
登陆服务器步骤:
点击左上角'文件'--'新建'
而后弹出对话框
常规:名称,这个你能够随便取什么名字
协议:SSH,通常默认
主机:空,填上你的服务器IP地址
端口号:22,默认的就行
填好以上选项内容,点击左侧的'用户身份验证',而后看右侧,方法选择'Password',在下面输入你的服务器登陆用户名和密码,最后点击下面的'链接'。
登陆成功!进入界面。
百度网盘官网软件下载连接:
连接: https://pan.baidu.com/s/19K5q1JkmD9qnYaGRTALyLg 密码: r6hx
首先用xshell登陆服务器
经过 yum 安装 Nginx
> yum install nginx
启动 Nginx 服务
> systemctl start nginx
或者
> systemctl start nginx.service > systemctl enable nginx.service
访问服务器IP地址,能够看到 nginx 的欢迎界面
Nginx相关命令:
中止nginx
> nginx -s stop
重启nginx
> nginx -s reload
因为centos7.5本来默认安装了Python2,并且这个Python2不能被删除,由于有不少系统命令,好比yum都要用到。
如下操做首先要用xshell登陆到服务器
输入Python命令,查看能够得知是Python2.7.5版本
输入
> which python
能够查看位置,通常是位于/usr/bin/python目录下。
下面介绍安装Python3的方法
首先安装依赖包
> yum -y groupinstall "Development tools" > yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
而后根据本身需求下载不一样版本的Python3,我下载的是Python3.5.2
注:若是速度不够快,能够直接去官网下载,利用WinSCP等软件传到服务器上指定位置。
个人存放目录是/usr/local/python3,使用命令:
> mkdir /usr/local/python3
创建好一个空文件夹,进入该目录
> cd /usr/local/python3
使用一下命令下载压缩包
> wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
而后解压压缩包安装Python3
> tar -xvJf Python-3.5.2.tar.xz > cd Python-3.5.2 > ./configure --prefix=/usr/local/python3 > make && make install
最后建立软连接
> ln -s /usr/local/python3/bin/python3 /usr/bin/python3 > ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
在命令行中输入python3测试
升级pip3命令:
> pip3 install --upgrade pip
Django 项目中会有一些 CSS、JavaScript 等静态文件,为了可以方便地让 Nginx 处理这些静态文件的请求,咱们把项目中的所有静态文件收集到一个统一的目录下,这个目录一般位于 Django 项目的根目录,而且命名为 static。为了完成这些任务,须要在项目的配置文件里作一些必要的配置:
myblog/settings.py # 其余配置... STATIC_URL = '/static/' # 加入下面的配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。
为了安全起见,在生产环境下须要关闭 DEBUG 选项以及设置容许访问的域名。打开 settings.py 文件,找到 DEBUG 和 ALLOWED_HOSTS 这两个选项,将它们设置成以下的值:
myblog/settings.py DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.markhoo.com']
ALLOWED_HOSTS 是容许访问的域名列表,127.0.0.1 和 localhost 是本地访问的域名,.markhoo.com 是访问服务器的域名(换成你本身的域名)。域名前加一个点表示容许访问该域名下的子域名,好比 www.markhoo.com test.markhoo.com 等二级域名一样容许访问。若是不加前面的点则只容许访问 markhoo.com。
项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,咱们将所有依赖写入一个叫 requirements.txt 的文本文件中。激活本地的虚拟环境(若是你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt 命令:
> (myblog_env) D:\Djangoprojects\myblog> > pip freeze > requirements.txt
这时项目根目录下会生成了一个 requirements.txt 的文本文件,其内容记录了项目的所有依赖。因为有一些依赖包也有前后依赖关系,该调整的须要进去txt文件调整一下。
若是上传到服务器后修改,可使用 'vi (文件名称)' 打开文件,而后点击键盘 'i' 键切换到输入模式。
修改完须要退出,先按键盘 'Esc' 键,而后输入 ':wq' 保存退出。若是不想修改又没法退出能够用 ':q!' 强制退出,这样不会保存你修改的内容
更多的vi、vim命令使用方法能够自行到搜索引擎搜索学习,这里就不一一讲解了。
将代码上传到 GitHub 等代码托管平台,这样咱们就能够方便地把代码拉取到服务器了。
若是访问慢或者打不开GitHub的话,能够上传到国内的Gitee或者Coding
安装Git能够到官网 https://git-scm.com 下载,安装的话能够一直下一步,完成。
首先你须要一个GitHub 、 Gitee 、 或者Coding帐号,因此尚未的话先去注册吧!
https://github.com
https://gitee.com
https://coding.net
1.进入Github首页,点击New repository新建一个项目
2.填写相应信息后点击create便可
Repository name: 仓库名称
Description(可选): 仓库描述介绍
Public, Private : 仓库权限(公开共享,私有或指定合做者)
Initialize this repository with a README: 添加一个README.md
gitignore: 不须要进行版本管理的仓库类型,对应生成文件.gitignore
license: 证书类型,对应生成文件LICENSE
通常能够填写项目仓库名称,点击create就能够了。由于免费用户只有 Gitee 才能够建立私有仓库
3.建立好项目仓库后,在项目仓库页面点击Clone or dowload会出现一个地址,copy这个地址备用。
4.接下来就到本地操做了,首先右键你的项目,若是你以前安装git成功的话,右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,这里咱们选择Git Bash Here进入界面,个人本地项目名为myblog。
5.接下来输入以下代码(关键步骤),把github上面的仓库克隆到本地
> git clone (粘贴上你以前复制的地址)
6.操做步骤5之后你的本地项目文件夹下面就会多出个文件夹,该文件夹名即为你github上面的项目名,如我多出了个myblogsite文件夹,咱们把本地项目文件夹下的全部文件(除了新多出的那个文件夹不用),其他都复制到那个新多出的文件夹下。
7.接着继续输入命令 cd myblogsite,进入myblogsite文件夹
8.接下来依次输入如下代码便可完成其余剩余操做:
> git add . (注:别忘记后面的.,此操做是把myblogsite文件夹下面的文件都添加进来) > git commit -m "提交信息" (注:“提交信息”里面换成你须要,如“first commit”) > git push -u origin master (注:此操做目的是把本地仓库push到github上面,此步骤须要你输入GitHub账号和密码)
注意:数据库文件不要上传!要是SQLLITE3里面有你测试的重要数据,将可能会泄露。
接下来须要把代码上传到服务器了。我服务器上存放代码的目录结构通常是这样的:
/home/markhoo/ sites/ markhoo.com/ myblog_env/ myblog/
一台服务器可能部署多个网站,全部网站代码都放在 sites/ 目录下。markhoo.com/ 这个文件夹以网站的域名命名,便于区分。myblog_env 是 python 虚拟环境目录。myblog 是 Django 博客项目目录。
建立这个目录结构,注意目录名替换为你本身的域名,之后涉及到 markhoo.com 的地方一般都要替换你本身的域名,后面就再也不一一指出了。
备注:上面的个人目录结构.可能会有新手看不懂,解释一下,就像下面这样一直建立下去
/home/markhoo/sites/markhoo.com/
最后的 myblog_env 和 myblog 是同级目录位于markhoo.com下,这里本身先不要建立。
建立目录的命令为: mkdir (文件夹名称)
删除目录的命令为: rmdir (文件夹名称)
为了避免影响外界环境的清洁,因此咱们使用虚拟环境来配置 Django 项目
首先用xshell登陆到你的服务器,而后按一下步骤操做
> pip3 install virtualenv
接下来建立虚拟环境,先进入到 markhoo.com 目录下,而后运行 virtualenv 命令建立虚拟环境:
> [root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com > [root@instance-pkb22o0h markhoo.com]# virtualenv -p /usr/bin/python3 –-no-site-packages myblog_env
命令说明:
-p: 指定你要虚拟的Python版本,这里选择了本地的python3
–-no-site-packages:表示在创建虚拟环境时不将原版本中的第三方库拷贝过来,这样就能得到一个纯净的Python环境。
myblog_env:代表在该目录下,创建一个叫作myblog_env的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁创建的。
virtualenv的命令使用方法:
建立虚拟环境:
$ virtualenv -p /usr/bin/python3.5 –-no-site-packages myblog_env
启动虚拟环境:
$ source myblog_env/bin/activate
退出虚拟环境:
$ deactivate
删除虚拟环境:
$ rm –r myblog_env
检查一下虚拟环境是否建立成功,运行 ls 命令列出当前目录下的文件和文件夹,看到 myblog_env 这个文件夹说明虚拟环境建立成功。
> [root@instance-pkb22o0h markhoo.com]# ls > myblog_env
因为我只是测试项目,因此使用了Python自带的venv。
先进入到 markhoo.com 目录下,而后运行 python3 -m venv myblog_env 建立虚拟环境:
> [root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com > [root@instance-pkb22o0h markhoo.com]# python3 -m venv myblog_env
检查一下虚拟环境是否建立成功,运行 ls 命令列出当前目录下的文件和文件夹,看到 myblog_env 这个文件夹说明虚拟环境建立成功。
> [root@instance-pkb22o0h markhoo.com]# ls > myblog_env
接着再从代码仓库把项目代码拉取过来,把 git clone 后的地址换成你本身的 GitHub 仓库地址!
> [root@instance-pkb22o0h markhoo.com]# git clone https://github.com/MarkHoo/myblog.git
运行 ls 命令检查一下是否拉取成功:
> [root@instance-pkb22o0h markhoo.com]# ls > myblog myblog_env
多了 myblog 文件夹(文件夹名称由你的 GitHub 仓库名决定),说明拉取成功了。
接下来执行命令,启动虚拟环境
> [root@instance-pkb22o0h markhoo.com]# source myblog_env/bin/activate > (myblog_env) [root@instance-pkb22o0h markhoo.com]#
安装项目环境依赖
> (myblog_env) [root@instance-pkb22o0h markhoo.com]# cd myblog > (myblog_env) [root@instance-pkb22o0h myblog]# pip3 install -r requirements.txt
收集静态文件
运行 python manage.py collectstatic 命令收集静态文件到 static 目录下
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py collectstatic
生成数据库
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate
建立超级用户
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser
而后就会出现如下内容,第一个是用户名,第二个是邮箱,第三和第四是密码(输入时没有任何显示,实际上已经输入了)。最后显示建立成功!
> Username (leave blank to use 'root'): admin > Email address: admin@markhoo.com > Password: > Password (again): > Superuser created successfully.
备注:这里使用的是Django默认生成的sqlite3数据库,我使用了这个,简单写写博客够用了。
启动 Django
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000
若是没有报错,就说明 Django 已经安装成功了,打开浏览器输入你的服务器IP:8000,就能够看到你的网站了
退出 Django
按 ctrl+c 退出 Django 服务
安装并启动 mariadb
由于 CentOS 7 以后的版本都不在提供 Mysql 安装源,这里咱们使用 mariadb 代替 mysql,依次执行下列命令
> yum install mariadb mariadb-server -y > yum install MySQL-python -y > systemctl start mariadb
对 mariadb 进行初始化设置
- 执行下面命令,根据提示操做
- 设置新密码为 test
- 默认密码为空,直接回车便可
> mysql_secure_installation
使用设置的密码登录 mariadb
- 登录 db,这里假设密码被设置为 admin123
> mysql -uroot -ptest
建立一个数据库
> create database myblog;
成功后,输入 exit 命令退出 db
> exit
修改配置文件,与 Mysql 数据库相关联
编辑 myblog/settings.py
# Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myblog', 'PASSWORD':'admin123', 'USER': 'root', 'HOST':'127.0.0.1', 'PORT':'3306', } }
建立 Django 数据库
> (myblog_env) [root@instance-pkb22o0h myblog]# cd /home/markhoo/sites/markhoo.com/myblog > (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate
建立超级用户
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser
而后就会出现如下内容,第一个是用户名,第二个是邮箱,第三和第四是密码(输入时没有任何显示,实际上已经输入了)。最后显示建立成功!
> Username (leave blank to use 'root'): admin > Email address: admin@markhoo.com > Password: > Password (again): > Superuser created successfully.
启动 Django
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000
若是没有报错,就说明 Django 已经安装成功了,而且跟 Mysql 的链接正常。打开浏览器输入你的服务器IP:8000,就能够看到你的网站了
退出 Django
按 ctrl+c 退出 Django 服务
Gunicorn 通常用来管理多个进程,有进程挂了Gunicorn 能够把它拉起来,防止服务器长时间中止服务,还能够动态调整 worker 的数量,请求多的时候增长 worker 的数量,请求少的时候减小。
在虚拟环境下,安装 Gunicorn:
> (myblog_env) [root@instance-pkb22o0h myblog]# pip3 install gunicorn
测试Gunicorn是否能启动你的项目服务
> (myblog_env) [root@instance-pkb22o0h myblog]# gunicorn --bind 0.0.0.0:8000 myblog.wsgi:application
注意:myblog.wsgi:application这里的myblog对应的是 /home/markhoo/sites/markhoo.com/myblog/myblog, 根据本身的修改。浏览器输入域名,能够看到访问成功了!
访问ip地址看浏览器是否能正常查看内容(此时没有退出虚拟环境)
完成测试后,按CTRL-C 中止 Gunicorn 运行
退出虚拟环境
> deactivate
建立一个 Gunicorn Systemd Service 文件,直接运行如下命令
> vim /etc/systemd/system/gunicorn.service
修改内容以下:
[Unit] Description=gunicorn daemon After=network.target [Service] User=root Group=nginx WorkingDirectory=/home/markhoo/sites/markhoo.com/myblog ExecStart=/home/markhoo/sites/markhoo.com/myblog_env/bin/gunicorn --workers 3 --bind unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock myblog.wsgi:application [Install] WantedBy=multi-user.target
必定要注意本身的项目路径和虚拟环境路径
WorkingDirectory与ExecStart 修改成本身的路径
开启Gunicorn服务并开机自启,运行如下命令
> systemctl start gunicorn > systemctl enable gunicorn
接下是配置 Nginx 来处理用户请求
配置nginx代理经过Gunicorn
依次运行如下命令
> (myblog_env) [root@instance-pkb22o0h myblog]# cd /etc/nginx/ > (myblog_env) [root@instance-pkb22o0h nginx]# ls > conf.d fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi > default.d fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi > (myblog_env) [root@instance-pkb22o0h nginx]# vi nginx.conf
或者直接运行
> vim /etc/nginx/nginx.conf
打开后默认的内容以下:
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
找到server内容进行修改,具体内容以下:
server { listen 80; server_name markhoo.com 0.0.0.0; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/markhoo/sites/markhoo.com/myblog; } location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock; } }
注意修改本身的IP地址或域名,还有文件路径
server_domain_or_IP 表明你的IP地址或域名
- 这里的域名为 markhoo.com,其次必定要添加 0.0.0.0 不然没法访问,两个之间用空格隔开。
- 全部URL 带有 /static 的请求均由 Nginx 处理,alias 指明了静态文件的存放目录。
- 其它请求转发给 Django 处理。proxy_pass 后面使用了 unix 套接字,其做用是防止端口冲突,这里就再也不详述。
修改所涉及到的vim命令使用方法:使用 'vi (文件名称)' 是打开文件,而后点击键盘 'i' 键切换到输入模式。修改完须要退出vim编辑器,先按键盘 'Esc' 键,而后输入 ':wq' 保存退出。若是不想修改又没法退出能够用 ':q!' 强制退出,这样不会保存你修改的内容。
更多的vi、vim命令的具体使用方法能够自行到搜索引擎搜索学习,这里也不一一讲解了。
修改nginx的权限
> usermod -a -G root nginx > chmod 710 /home/ > nginx -t
若是没有报错,就行下一步操做
开启nginx服务并开机自启
> systemctl start nginx > systemctl enable nginx
如今,一切配置完成!你能够访问你的域名了!