基本步骤

本文以腾讯轻量服务器的部署为例子:
系统: CentOS 7.

  1. pycharm环境下的开发
  2. linux服务器的环境搭建
    1. 开虚拟环境
    2. 安装python依赖模块
    3. 安装数据库
    4. 安装网关服务uWSGI
    5. 安装web服务器
  3. 把crm压缩文件传到服务器
  4. 把数据库导出并导入到服务器
  5. 设置settings,然后启动排错
  6. 完毕

慢慢研究一下这个轻量服务器,别着急,看看都能干什么。
wordpress可以用
在线图书馆系统
理解:

  • 轻量服务器就是一台简配的网络电脑而已
  • 镜像系统就是一个基本安装配置好的应用,即开即用

    Docker (轻量虚拟机)

    原文来源: https://blog.csdn.net/weixin_42724467/article/details/88838839
    不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久,而且可能会有冲突。
    如果想把两个应用程序隔离起来,可以在服务器上创建不同的虚拟机,不同的虚拟机放不同的应用,但是虚拟机的开销比较高。docker作为轻量级的虚拟机,是一个很好的工具。每一个docker就是一个容器,与其他的容器之间相互隔离,且可以同时运作。
    一切皆容器
    上线部署 - 图1

Tomcat (web服务器)

Thanks: https://blog.csdn.net/qq_44285562/article/details/102969252
tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活。 Tomcat的作者,取这个名字的初衷是希望,这一款服务器可以自力更生,自给自足,像Tomcat这样一种野生动物一般,不依赖其他插件,而可以独立达到提供web 服务的效果。
依赖环境:
为了正常运行,请务必确认当前java环境是JDK1.8.
在命令行中输入java -version进行校验
JDK9 不够稳定,特别是Tomcat7 无法在JDK9 中运行,请勿使用JDK9运行本Tomcat7,请切换至JDK8,

宝塔面板 BT panel

  • 干什么用的

宝塔面板主要用于管理、维护服务器使用,是一款服务器管理软件,可以可视化管理服务器,改变了过去运维人员必须熟练使用命令行的尴尬局面,等于是从dos时代跨越到了windows时代,提高了效率以及出错的概率。

  • 怎么用

看图点点鼠标即可,👇🏻
上线部署 - 图2

若有收获,就点个赞吧

  • 服务器的启动 ```python
  • shell >> ifconfig
    显示目前服务器状态,如果网卡ethxx后面显示的ip地址存在,则说明服务器启动 如下图 ```

腾讯轻量服务器

登录

  • macOS ssh登录方式

  • 在轻量服务器管理后台找到公网ip(101.42.xx.xx),username(比如root),password
    进入mac的终端:root >> ssh root@101.42.xx.xx
    然后按提示输入密码
    备注: 查看网络信息使用: ifconfig, 如果不能用yum install ifconfig -y (进行安装 -y 所有问题回答yes)
    登录过程中出现以下报错:
    上线部署 - 图3
    原因:轻量服务器的初始密码没有重置,在服务器端重置密码即可
    在服务器的shell中输入命令行 > > passwd root 或者 sudo passwd root
    或者可能是防火墙造成的,可以使用 一下命令关闭防火墙
    iptables -F # 清空防火墙规则 systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld.service # 禁止防火墙重启 systemctl status firewalld.service # 查看防火墙状态

  • 使用密钥对方式登录

原理: 目前最安全的加密方式,公钥存在服务器,私钥发给客户端,只有两者能匹配的情况下才能允许登录 - win下面安装putty - 服务器端生成密钥对,私钥自动下载到本地 - putty的generate key读取本地的私钥文件 - putty的session设置ip和端口,open登录

创建虚拟环境

  1. 安装虚拟环境 virtualenv
    - 为什么要安装它
    避免单个解释器负载过高
    避免不同的应用的应用环境冲突,术语叫做:解耦
    根据实际情况灵活删改,不影响其他环境和解释器本体
    保持每个虚拟环境只保留必要的依赖模块
    - 怎么安装
    pip3 install -i https://pypi.douban.com/simple virtualenv
    - 创建虚拟环境
    virtualenv —python=python3 env1
    # —no-site-packages 不带任何默认的模块,一个完全干净的空间
    # — python=python3 指定解释器
    # env1 虚拟环境的名字
    - 虚拟机下面安装模块
    pip3 install -i https://pypi.douban.com/simple django==1.11.9
    正常安装,没有特别
    - 启动虚拟环境
    source /opt/env1/bin/activate
    运行之后的效果 (env2) [root@VM-24-16-centos env2]# 前面多了(env2)
    # opt是虚拟环境的安装目录 # source的作用只是在PATH变量前面加上了usr/env1/bin:
    因为每个虚拟环境对应都是不同的解释器,且依赖环境不同,所以没有冲突问题
    - 快速复制当前环境到虚拟机
    pip3 freeze > requirements.txt # 把当前解释器所有用到的模块导出到文件
    把文件发送给linux机器,然后安装此文件即可,自动读入安装
    linux机器>> pip3 install -i https://pypi.douban.com/simple -r requirements.txt
    只要有一个模块失败,都失败,所以可以vim他,删掉失败的模块。 注意参数-r表示read
    - 退出虚拟环境
    deactivate

部署CRM步骤

  • python3安装环境

which python3 # 查看python3已经安装好 /usr/bin/python3

pip3 list # 查看python已安装模块
asn1crypto (0.24.0)
attrs (19.3.0)
cffi (1.11.5)

  • django 安装
  1. 安装django模块 pip3 install -i https://pypi.douban.com/simple django==3.2
    2. 升级pip3工具 pip
    3 install -i https://pypi.douban.com/simple —upgrade pip # 豆瓣源比较快
    3. 创建django项目 django-admin startproject mycrm
    4. 创建app cd cycrm # 必须在项目文件夹下创建app django-admin startapp app01
    5. 编写一个测试视图函数
    5.1 vim urls.py # 编辑路由
    5.2 vim app01/views.py #编辑视图函数
    5.3 注册app vim settings.py
    6. 启动django
    6.1 python3 manage.py makemigrations # 迁移数据库
    6.2 python3 manage.py migrate # 迁移数据库
    6.3 python3 manage.py runserver 0.0.0.0:9000 # 启动9000端口
    报错:9000端口没有反应,应该是防火墙没放行此端口 如果服务器的防火墙没有放行这个端口,则需要在服务器上放行这个端口,或者选用系统已经放行的端口,比如443

宝塔面板上展示的防火墙页面:
上线部署 - 图4 防火墙新增一个端口:
上线部署 - 图5
备注: 端口要在8000以上,避免冲突,如果是http一般选择TCP协议 ,可以勾选限制访问IP来源

  • 从pycharm里面导入一个项目到centos 服务器

部署crm的步骤:
第一步: 创建虚拟环境
第二步:快速复制当前环境到虚拟机
pip3 freeze > requirements.txt # 把当前解释器所有用到的模块导出到文件
把文件发送给linux机器,然后安装此文件即可,自动读入安装
linux机器>> pip3 install -i https://pypi.douban.com/simple -r requirements.txt

第三步:把项目文件传输到服务器上 scp /user/mycrm.zip root@ipxxx:/opt/env2
unzip mycrm.zip # 解压到当前目录
第四步: cd mycrm python3 manage.py runserver # 试跑一下,看看报什么错误
第五步: 发现sqlite3数据总是报错,干脆装一个mysql
安装mysql yum install mariadb-server mariadb -y # 第一个是服务器端,第二个是客户端 -y 一律回答yes
启动mariadb (mysql的一个linux版本)
systemctl start mariadb
停止mariadb
systemctl stop mariadb
修改mariadb的登录权限表
mysqld_safe —skip-grant-tables —skip-networking &
开机自启
systemctl enable mariadb

第六步:导出数据库到服务器
本机>> mysqldump -uroot -p —all-databases > alldata.sql # 导出数据库全部数据到alldata文件
本机>> scp alldata.sql root@101.42.229.000:/opt/env2 # scp 传送文件到服务器指定目录
服务器>> mysql -uroot -p < /opt/alldata.sql # 从文件导入到数据库

  1. 再次:**python3 manage.py runserver 0.0.0.0:9000 可以跑通** 说明项目本身没问题

vim newcrm/newcrm/settings.py #修改 allow_host, 数据库连接参数

第七步: 修改settings里面数据库连接的参数和 mycrm.init.py的内容,具体参考django章节 第七部: 数据库内容导入

成功使用django-runserver部署到服务器

  有一些报错:<br />报错: 某某model table不存在 <br />forms 依赖于models时,model不存在的报错, 所以先要把依赖于model字段先注释掉 

安装uWSGI

它是c语言编写的高效网关socket,把网络传输来的二进制数据转成python可读数据
uWSGI是nginx和django之间的沟通工具,帮助收发编解码

  • 安装

pip3 install -i https://pypi.douban.com/simple uwsgi

报错如下:
plugins/python/uwsgi_python.h:2:10: 致命错误:Python.h:没有那个文件或目录
#include

原因和解决:缺少依赖模块 python-devel, 装上就好了
yum install python36-devel # 注意 python36是python版本号,36不能省略
然后再次尝试pip3 install ,有点慢,先去喝点水
🙂 Successfully installed uwsgi-2.0.20 小小成功

  • 编写uWSGI的配置文件

vim uwsgi.ini ```shell [uwsgi]

Django-related settings

the base directory (full path)

填写crm项目的第一层绝对路径

chdir = /opt/env2/newcrm

Django’s wsgi file

填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py

这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件

module = newcrm.wsgi

the virtualenv (full path)

填写虚拟环境解释器的第一层工作目录

home = /opt/env2

process-related settings

master master = true

maximum number of worker processes

代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?

如果是单进程,十万个请求,都丢给一个进程去处理

3个工作进程,十万个请求,就分给了3个进程去分摊处理

processes = 3

the socket (use the full path to be safe)

这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用

socket = 0.0.0.0:8000

线上不会用http参数,因为对后端是不安全的,用socket参数是安全的连接,用nginx反向代理去访问

后端程序是运行在防火墙内部,外网是无法直接访问的 # 临时使用http参数,便于我们用浏览器调试访问 http = 0.0.0.0:9000

… with appropriate permissions - may be needed

chmod-socket = 664

clear environment on exit

vacuum = true


- 启动uWSGI 

uwsgi --ini ./uwsgi.ini #指定配置文件启动后端 (一个uWSGI驱动一个django)  

- 关闭uWSGI  

ps -ef |grep uwsgi   # 查看进程,找到pid<br />kill -9 170515           # 杀死对应进程,-9强制 170515=pid<br />pkill -9 uwsgi           # 一键杀死所有与uwsgi相关的进程,广谱杀虫剂 

- uWSGI对于静态请求无法响应,只能依赖于nginx ,所以接下来让nginx出场  

<a name="tA5dY"></a>
### supervisor 工具

- **功能**:

进程管理工具<br />一旦uWSGI宕机,自动重启<br />一键启动多个进程  
```python
比如,crm的部署技术栈
nginx+uwsgi+django+mysql  ,我们可以手动的,单独启动每一个进程 

还可以通过supervisor一键启动这四个进程,进行批量管理,批量启停 ,很好用
  • 安装

yum install supervisor -y (如果程序小就不用换下载源)

  • 生成配置文件

echo_supervisord_conf > /etc/supervisor.conf

修改配置文件
vim /etc/supervisor.conf # 在最下面添加如下内容

写入如下内容

#[program:xx]是被管理的进程配置参数,xx是进程的名称

[program:s25crm]      ; 自定义的计划名称 分号后面表示注释 
command = /opt/env2/bin/uwsgi --ini /opt/env2/uwsgi.ini  ;写入启动uwsgi的命令 supervisor其实就是在帮你执行命令而已!
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程

stdout_logfile=/a/path  ; 进程标准输出文件的保存路径, 可以监控程序的运行情况
  • 启动supervisor , 进入supervisor管理器

supervisord -c /etc/supervisord.conf #启动supervisor服务端,指定配置文件启动
启动之后会产生master进程,和worker进程
管理终端长这样:
supervisor>

11.进度supervisor任务管理终端
看到如下的结果,表示你自定义的任务s25crm,也就是uwsgi进程,正确的启动了
supervisorctl -c /etc/supervisord.conf
(venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf
s25crm                           RUNNING   pid 41451, uptime 0:01:34

supervisor>
12.看到了上面的界面说明进入了,任务管理终端 

13.supervisorctl的管理命令
提供了如下命令
(venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf
s25crm                           RUNNING   pid 41451, uptime 0:01:34
supervisor>
supervisor>start s25crm
supervisor>stop s25crm 
supervisor>status 
supervisor>start all 
supervisor>stop all
  • supervisor的报错 unix:///tmp/supervisor.sock no such file报错 ```python 现象:supervisor命令出现unix:///tmp/supervisor.sock no such file报错

原因:在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理导致无法使用supervisorctl命令,此时:

解决方案: 修改supervisor.conf文件,修改到/var/run/及/var/log/目录,具体配置就不进行贴了,简单直接搜索tmp进行修改即可。 重启supervisor服务,记得kill原来服务。

1、打开配置文件

这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉

2、修改权限 sudo chmod 777 /var/run
sudo chmod 777 /var/log

  1. 创建supervisor.sock sudo touch /var/run/supervisor.sock sudo chmod 777 /var/run/supervisor.sock

  2. 启动之前,先stop之前的进程
    ps -ef | grep supervisor
    kill xxx

  3. 再次启动管理器 supervisorctl -c /etc/supervisord.conf 报错如下: unix:///var/run/supervisor.sock refused connection 解决方法: service supervisord restart 重启supervisord,具体干什么不知道。

  4. 启动管理器 supervisorctl -c /etc/supervisord.conf
    提示如下: runnewcrm STARTING



<a name="gXLcg"></a>
### 安装nginx : engine x
   优秀的配载web服务器,可以分流静态请求,均衡负载,反向代理   

- yum安装

yum install -i https://pypi.douban.com/simple nginx

- 编译安装方式
   - 从淘宝官网下载tengin  
   - 解压,编译 
   - make & make install  
- Nginx目录:<br />conf   配置文件<br />html   静态文件目录<br />logs   日志<br />sbin   可执行文件

<a name="SDJO0"></a>
#### nginx配置

   - 找到nginx的安装目录    ps -ef | grep nginx      (/usr/local/lighthouse/softwares/nginx)
   - 本机安装目录是  opt/tng233/   (tengin 2.33版本)
   - cd /usr/local/lighthouse/softwares/nginx/conf 
   - 编辑配置文件   vim  /opt/tng233/conf/nginx.conf 
```shell
#user  nobody;
#  定义nginx的工作进程数,以cpu核数 为准
worker_processes  5;
# 想用哪个用能,直接打开注释,或者写进来即可
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
# pid文件的作用是,pid是用于启停进程的号码
# ps -ef去获取nginx的进程id
# 吧pid写入到 此 nginx.pid文件中,
pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# 这个http区域,是nginx的核心功能区域
http {
    include       mime.types;
    default_type  application/octet-stream;
    #打开此nginx的访问日志功能,即可查看日志
    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
    #  一个html文件 达到4m大小
    #  传输图片 等等都是高兴的 1080p图片
    #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
    gzip  on;

    # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
    # 浏览器下次访问网站,速度就几乎是秒开了
    # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
    #
    #这里的server区域配置,就是虚拟主机的核心配置
    # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
    #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
    #   目前这里是第一个server {} 区域块,端口是85
    server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        # 讲师机器的配置,也就是去  /s25python/ 这个目录下 寻找 40x.html
        error_page  404  /40x.html;
        #access_log  logs/host.access.log  main;


       #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        # nginx的域名匹配,所有的请求,都会进入到这里
        # 例如  192.168.178.140:85/lubenwei.jpg
        #    192.168.178.140:85/menggededianhua.txt
        location / {
            #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
            #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
            root   /s25python/;
           # index参数,用于定义nginx的首页文件名字  ,只要在/s25nginx目录下存在index.html文件即可
            index  index.html index.htm;
        }

    }

#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
# 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
# 这里是第二个虚拟主机的配置了
server  {
listen 89;
server_name  _;
#nginx的域名匹配
# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
location  / {
        root   /s25linux/;
        index  index.html;
}
}
}
备注: 
nginx的配置文件以分号结束,默认访问的站点     80端口
  • 启动

首次启动
nginx 只能使用一次
nginx -s reload # 软重启 (使用绝对路径 /opt/tng233/sbin/nginx -s reload)
nginx -s stop # 停止进程

http{ # nginx的核心功能配置

server{}   # 虚拟主机代码块

location{}  # 域名匹配代码块

}

配置文件位置: tng233/conf
worker_processes 进程数,以cpu核数为准

pid 用于启停进程,可以把pid写入指定文件中

events 每个worker的最大连接数

log_format main 日志功能,即可查看日志

gzip on 开启压缩

nginx -t 检查配置文件是否合法
nginx -s reload. 重新载入配置文件

基于域名的多虚拟主机

基于端口的多虚拟主机
server {
# 端口号
listen 85;

server {
# 端口号
listen       85;

# 主机名没有的话,写_
    server_name  _;

#更改nginx的编码支持
    charset utf-8;

# 错误页面存放的地址,去root定义的目录下查找
    error_page  404  /40x.html;

# 第二个虚拟主机文件存放目录
    location / {
        root   html85;
        index  index.html index.htm;
    }
}

shift+%找到括号的另外一半

404页面修改
error_page

nginx访问日志

日志文件存储的位置 分析客户的访问行为,便于维护以及后续的优化,防止爬虫的骚扰,以及躲在代理后面的用户

access_log logs/access.log main;
$remote_addr 远程ip地址$remote_user 远程用户
[$time_local] 日期$request 请求方式
$status 状态码$body_bytes_sent 数据量
$http_referer 代理$http_user_agent 浏览器
$http_x_forwarded_for

Nginx反向代理


正向代理:代理客户端
反向代理:代理服务器端

代理服务器:
location {
proxy_pass http://xx.xx.xx.xx:85;

}

Nginx负载均衡

相当于代理多台机器,且根据均衡算法,合适的分流

简单轮询机制
upstreem server_pool1  {
server  192.168.178.140:90;
server  192.168.178.140:95;
}

# 备注 upstream必须放在server块的上面,不能在里面

# 加权轮询
upstreem server_pool1  {
server  192.168.178.140:90 weight=4;
server  192.168.178.140:95 weight=1;

}

# 代理服务器配置 
server {
location {  与上面代理池的设置相对应
proxy_pass  http://server_pool1
}
}

Nginx + uWSGI + Django 的部署

在前面基础上做的修改:
nginx.conf
location {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8000; # 用于连接uswgi的socket
}
uwsgi.ini :
修改uWGSI配置文件 http改成socket 0.0.0.0:8000 # 收听nginx从8000转来的讯息

django model = mycrm.wsgi

重启supervisor
supervisor> restart runnewcrm

静态文件丢失 ( 发现css样式和图片丢失)
此时发现静态文件丢失,例如如下的静态文件

http://192.168.178.143/static/js/common.js
http://192.168.178.143/static/css/style.css
http://192.168.178.143/static/js/jquery.validate.min.js

还得配置nginx接收所有的django静态文件,修改命令如下
第一步:修改django的配置文件,收集所有的静态文件,放入一个统一管理的目录
vim newcrm/settings.py
STATIC_ROOT=’/s25static/‘ #作用是定义一个统一管理的目录,收集所有crm的静态文件

第二步:用命令收集静态文件
python3 manage.py collectstiac # 成功显示收集了n个文件到目录/s25static/

第三步: 通过nginx去找到如下的静态文件即可
vim conf/nginx.conf
# 在location路径解析中做个别名即可
location /static {
alias /crmstatic;
}
重启nginx -s reload 大功告成

3. 申请域名和域名解析

    来到部署的最后一步,网站通过ip地址可以访问了,但是对用户还是不友好,这里需要一个好记的域名指向ip地址,需要下面三个步骤 
* 申请域名
可以在腾讯,阿里等大厂的主页上找到域名购买的连接,目前主要域名后缀为com, cn, gov等,新的后缀名比如:.shop, .site, .auto, .xyz 等等也比较火爆,根据需要启用即可。
这里跟域名相关的是服务器空间的物理位置,尽量离目标用户近、访问快是主要的考虑;第二个考虑是域名备案的要求,国内的服务器必须备案,麻烦一点,香港和国外的网站不涉及备案,且国外访问速度都比较好。

* 解析域名
  域名解析有以下几种:
  A, 域名到ip地址    www: www.xx.com , @: xx.com (不带头)   *: .*.xx.com (泛解析)   
  CNAME  别名到域名
  MX  邮件
  NS  解析服务器

  案例:
  做了两个A记录    www 指向 101.42.xx.xx   @  指向 101.42.xx.xx  *
  报错:
  可以ping通,但是网页访问提示访问被拒绝,不知道问题在哪里,有以下两种可能:
  a, 服务器有问题,不接受访问 
  b, 域名没有备案,据说备案检查80和443端口,不知道有没有办法通过检查 
  等待解决方案中..... (2022.5.16日发现,原来域名解析中把域名弄错了,所以修电脑时先看看有没有插电,再找其他毛病,改过来,等10分钟左右,就可以了。 .site域名目前还没遇到备案问题。后面再看看)   


* 备案域名 
   需要提交资料给工信部,符合国家规定的才可以备案,公司或者个人都可以。 

域名备案问题:
  国内备案一般需要一周左右时间,需要注册的信息比较多,如果不想备案的话,可以采用非80端口的方法(说实话,百度的这个方法已经失效,已经不行了。 ) 另外可行的方法是CDN加速器方法,就是通过国外的第三方dns做一下跳转,这个是付费的,注册账号只能试用一段时间。 
  最好的办法还是老老实实备案,打点时间富裕

实际案例:部署实例

在centos7服务器上部署crm

  1. pycharm开发完毕

最好基于云数据库开发,避免后续数据库迁移的麻烦

  1. linux虚拟环境准备

安装virtualenv
新建虚拟环境:
cd /opt
virtualenv —python=python3 env1
启动虚拟环境
source /opt/env1/bin/activate
成功的结果,提示符变为: (env1) root #
虚拟环境中安装django
pip3 install -i https://pypi.douban.com/simple django==1.11.9

  1. mysql数据库安装和导入

安装mariadb
yum install mariadb-server mariadb -y # 第一个是服务器端,第二个是客户端 -y 一律回答yes
启动mariadb (mysql的一个linux版本)
systemctl start mariadb
停止mariadb
systemctl stop mariadb
登录mysql,与标准版本的mysql客户端相同,进去以后新建数据库 paycrm
从开发端的数据库中导出数据:
mysqldump -h ‘yourhostname’ -uroot -p -B your_database_name > paycrm.sql
导入数据库到服务器
scp paycrm.sql root@101.0.0.0:/opt/env1 # 传到服务器
mysql -uroot -p < paycrm.sql
成功的话,会提示成功导入多少条
配置文件位置 /etc/my.cnf , 具体配置信息,可以到mysql文档查询

  1. 项目文件传输解压和基本配置

压缩项目文件成 paycrm.zip
传输:
scp paycrm.zip root@101.0.0.0:/opt/env1 #传输到服务器 /opt/env1 目录下
服务器端解压:
unzip paycrm.zip 得到 /opt/env2/paycrm 文件夹
修改setting.py 配置
vim /opt/env2/paycrm/paycrm/settings.py
修改其中的databases = { HOST:0.0.0.0, USER:root, PASSWORD: xxx, NAME: paycrm }
修改 ALLOWED_HOSTS = [‘*’, ]
测试django
cd /opt/env2/paycrm
python3 manage.py runserver 0.0.0.0:9000 (测试用端口)
如果不报错,可以进行下一步

  1. uwsgi配置

安装:
pip3 install -i https://pypi.douban.com/simple uwsgi
配置:
vim uwsgi.ini
设置下面三项即可:
chdir = /opt/env2/newcrm
module = newcrm.wsgi
home = /opt/env2
sock = 0.0.0.0:9000 (用于nginx连接,如果测试可以直接设置 http )
启动:
uwsgi —ini ./uwsgi.ini

  1. nginx配置

安装
yum install -i https://pypi.douban.com/simple nginx
配置:
找到nginx的安装目录 ps -ef | grep nginx
本机安装目录是 opt/tng233/ (tengin 2.33版本)
编辑配置文件 vim /opt/tng233/conf/nginx.conf
具体配置信息上上面的nginx一节
首次启动
nginx 只能使用一次
nginx -s reload # 软重启 (使用绝对路径 /opt/tng233/sbin/nginx -s reload)
nginx -s stop # 停止进程

  1. supervisor启动

作用:确保uwsgi始终不掉线,如果掉线自动重启
安装
yum install supervisor -y (如果程序小就不用换下载源)
配置
生成配置文件
echo_supervisord_conf > /etc/supervisor.conf
修改配置文件
vim /etc/supervisor.conf # 在最下面添加如下内容
具体配置信息,看上面supervisor一节具体设置内容:
主要是这句: command = /opt/env1/bin/uwsgi —ini /opt/env1/uwsgi.ini
启动
supervisorctl -c /etc/supervisor.conf
如果显示 paycrm RUNNNIG pid: xxxxxx
到此可以说基本部署完成,但还差一步

  1. 静态文件收集

打开网页发现静态文件无法访问,这是因为nginx对于静态文件直接提供服务,不经过django,所以需要把
django下的静态文件收集到nginx下,步骤如下:
第一步:修改django的配置文件,收集所有的静态文件,放入一个统一管理的目录
vim newcrm/settings.py ,添加:
STATIC_ROOT=’/paycrmstatic/‘ #作用是定义一个统一管理的目录,收集所有crm的静态文件

第二步:用命令收集静态文件
python3 manage.py collectstatic
# 成功显示如右: 516 static files copied to ‘/paycrmstatic’.

第三步: 修改nginx的配置文件,去找到如下的静态文件即可
vim /opt/tng233/conf/nginx.conf
# 在location路径解析中做个别名即可
location /static {
alias /paycrmstatic;
}

重启nginx -s reload
如果找不到bash,加绝对路径 /opt/tng233/sbin/nginx -s reload
没显示就对了

到此部署案例胜利完工

  • 备注, 常用命令:

传文件到服务器命令
scp /Users/wongbrank/pythonProjec/paycrm/dipay/models.py root@101.42.xxx.175:/opt/env2
解压文件
unzip xxxfile.zip
启动虚拟环境命令
source /opt/env2/bin/activate
移动文件命令,把views下所有文件都移动
mv /opt/env2/views/ paycrm/dipay
显示命令别名
alias
快速启动supervisor
restart_all (已经做了别名)
拷贝整个目录文件到别处
cp -r
/opt/env2/paycrm/dipay/static

  • 维护中的问题

如果发现运行错误,还是需要python3 manage.py runserver 0.0.0.0:9000, 来看系统报错提示

三、DOCKER容器

一句话说明白:
为了不改应用代码,在别的平台上也能跑,发明了虚拟机
为了节约虚拟机的消耗,发明了docker
所以docker是轻量虚拟机:性能高,移植方便,资源占用少

三大基本概念

镜像 image 容器模板,利用镜像可以生成自己的容器
容器 container 容器是真正应用运行的小虚拟环境
仓库 repository 存放镜像的地方
注册 registry 把镜像上传给官方或者第三方,免费or收费皆可

安装

  • mac

https://docs.docker.com/desktop/mac/install/
下载dmg文件,正常安装即可

  • centos

yum install docker -y

  • ubuntu
  • windows

    docker增删改查

docker images 查看本地镜像文件
docker ps 查看正在运行的docker进程
docker ps -a 查看所有docker进程,包括历史上的

docker pull hello-world 下载docker镜像
docker run hello-world 创建容器 (也叫实例化一个容器) 如果不存在则自动去仓库下载