- 基本步骤
- Docker (轻量虚拟机)
- Tomcat (web服务器)
- 宝塔面板 BT panel
- 腾讯轻量服务器
- Django-related settings
- the base directory (full path)
- 填写crm项目的第一层绝对路径
- Django’s wsgi file
- 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py
- 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
- the virtualenv (full path)
- 填写虚拟环境解释器的第一层工作目录
- process-related settings
- master master = true
- maximum number of worker processes
- 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?
- 如果是单进程,十万个请求,都丢给一个进程去处理
- 3个工作进程,十万个请求,就分给了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
- 3. 申请域名和域名解析
- 实际案例:部署实例
- 三、DOCKER容器
基本步骤
本文以腾讯轻量服务器的部署为例子:
系统: CentOS 7.
- pycharm环境下的开发
- linux服务器的环境搭建
- 开虚拟环境
- 安装python依赖模块
- 安装数据库
- 安装网关服务uWSGI
- 安装web服务器
- 把crm压缩文件传到服务器
- 把数据库导出并导入到服务器
- 设置settings,然后启动排错
- 完毕
慢慢研究一下这个轻量服务器,别着急,看看都能干什么。
wordpress可以用
在线图书馆系统
理解:
- 轻量服务器就是一台简配的网络电脑而已
- 镜像系统就是一个基本安装配置好的应用,即开即用
Docker (轻量虚拟机)
原文来源: https://blog.csdn.net/weixin_42724467/article/details/88838839
不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久,而且可能会有冲突。
如果想把两个应用程序隔离起来,可以在服务器上创建不同的虚拟机,不同的虚拟机放不同的应用,但是虚拟机的开销比较高。docker作为轻量级的虚拟机,是一个很好的工具。每一个docker就是一个容器,与其他的容器之间相互隔离,且可以同时运作。
一切皆容器
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时代,提高了效率以及出错的概率。
- 怎么用
看图点点鼠标即可,👇🏻
若有收获,就点个赞吧
- 服务器的启动 ```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)
登录过程中出现以下报错:
原因:轻量服务器的初始密码没有重置,在服务器端重置密码即可
在服务器的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登录
创建虚拟环境
- 安装虚拟环境 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 安装
- 安装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
宝塔面板上展示的防火墙页面:
防火墙新增一个端口:
备注: 端口要在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 # 从文件导入到数据库
再次:**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
创建supervisor.sock sudo touch /var/run/supervisor.sock sudo chmod 777 /var/run/supervisor.sock
启动之前,先stop之前的进程
ps -ef | grep supervisor
kill xxx再次启动管理器 supervisorctl -c /etc/supervisord.conf 报错如下: unix:///var/run/supervisor.sock refused connection 解决方法: service supervisord restart 重启supervisord,具体干什么不知道。
启动管理器 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
- pycharm开发完毕
最好基于云数据库开发,避免后续数据库迁移的麻烦
- 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
- 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文档查询
- 项目文件传输解压和基本配置
压缩项目文件成 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 (测试用端口)
如果不报错,可以进行下一步
- 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
- 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 # 停止进程
- 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
到此可以说基本部署完成,但还差一步
- 静态文件收集
打开网页发现静态文件无法访问,这是因为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
docker images 查看本地镜像文件
docker ps 查看正在运行的docker进程
docker ps -a 查看所有docker进程,包括历史上的
- 增
docker pull hello-world 下载docker镜像
docker run hello-world 创建容器 (也叫实例化一个容器) 如果不存在则自动去仓库下载
- 改
- 删