/opt//nginx112/sbin/nginx -t 检测语法是否成功
多虚拟主机
设置多个 server{}
nginx -s stop
nginx
访问日志功能
打开配置注释
log_format
access_log 访问记录
tail -f access.log
curl -i wangzhi.com/ip
location {
deny 192.168.11.37
deny 192.168.11.0/24
nginx 只能处理静态资源
动态资源:从数据库取 uwsgi 来处理 再给ngix
代理
local{
proxy_pass mubiaoip
iptables -L
负载均衡器
upstream nginx_pools(自定义的关键字){
server 192.168.11.37 weight=10
server 192.168.11.167 weight=1
}
server{
location {
proxy_pass http://nginx_pools;
调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服
务器
上传项目
xftp 上传文件夹
管理 Linux文件夹
python3
virtualenv 创建一个虚拟环境
mariadb yum install mariadb-server mariadb -y 查看进程端口
mysql -uroot -p
pymysql
mysql -uroot -p
navicat
grant all privileges(权限) on *.*(库,表) to 账户@主机名
远程连接设置哦设置所有库,所有表的所有权限,赋值权限给所有ip地址的root用户
mysql > grant all privileges on *.* to root@'%' identified by 'password';
#创建用户
mysql > create user 'username'@'%' identified by 'password';
#刷新权限
flush privileges;
linux防火墙要关闭,否则win去链接linux3306端口可能拦截
mysql数据导出
mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql win linux 的命令
[root@master ~]# mysql -uroot -p < /tmp/db.dump
uwsgi 处理静态文静性能很差所以用nginx--默认80端口,易于访问
include也是一个包含语法,将uwsgi_params参数导入nginx转发请求中
uwsgi_pass localhost:9000 也是反向代理 uwsgi linux 之间有协议,通过——pass转发
uwsg --http (指定协议) :8000 --wsgi-file(制定一个支持python wsgi协议的文件)
text.py
uWsgi热加载python程序
在启动命令后面加上参数
uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1
uwsgi配置文件
复制代码
uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建
uwsgi_nginx.ini,添加如下配置:
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
项目的绝对路径
chdir = /opt/mysite
# Django's wsgi file 相对路径
module = mysite.wsgi
# the virtualenv (full path) bin前的目录
home = /opt/venv
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 1
# the socket (use the full path to be safe 使用nginx
socket = 0.0.0.0:8000
如果不使用
http=0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
uwsgi --ini /uwsgi.ini
在Django的setting中 写入 STATIC_ROOT='/OPT/STATIC'
通过python3 manage.py collectstatic 收集所有你使用的静态文件保存到STATIC_ROOT!
location /static{
alias /opt/static; 别名的意思, 如果请求的是static就去optstatic下找
}
这里超哥要配置基于virtualenv的supervisor
由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!
#注意此时已经退出虚拟环境了!!!!!
yum install python-setuptools
easy_install supervisor
supervisord.conf配置文件参数解释
[program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/root/Envs/knight/bin/uwsgi /opt/knight/uwsgi.ini ; 程序启动命令,命令
必须写绝对路径
supervisord -c /etc/supervisor.conf 服务端跑起来
supervisorctl -c /etc/supervisor.conf 用supervisor去管理上面进程
stop XX
start all
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包
括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
改为true uwsgi主进程也可以被杀死
交互式 参数形式
supervisord -c /etc/supervisord.conf #启动supervisor
supervisorctl -c /etxc/supervisord.conf restart my #重启my项目 参数式
vue部署
下载VUE drf 项目
打包 npm install 失去安装package,json
npm run build 将VUE所有代码打包生成一个dist静态文件 index static
准备node 环境
打包环境
vue服务器内存如果存量太小,打包会失败
npm install 安装vue模块,生成node_modules文件夹
vue请求数据的文件改成后端服务器的地址
修改 /opt/vue_drf/luffyproject/src.restful.api.js
-i 替换到文件
sed -i "s/127.0.0.1/192.168.11.37/g" /opt/vue_drf/luffyproject/src.restful.api.js
s 替换 g 全局
进行打包,构建dist文件夹
npm run build
生成dist静态文件夹
后端
mkvirtualenv drf
pip3 freeze > allenvv.txt
pip3 install -r allenvv.txt
redis-server
redis-cli ping PONG
redis-server /opt/redis-4.0.10/redis-6379.conf
uwsgi 实现了Python想 wsgi协议的web服务器
uwsgi --http
--socket
--wsgi-file
--module
uwsgi.ini 写入了启动的命令
[uwsgi]
如果通过刷新就能访问 nginx需要加很多location匹配
redis
uwsgi
nginx
vue api.js 发送的正确的URL
启动所有节点 测试添加课程,访问页面,查看redis数据库中的信息
启动supervisor
[program:my_luffy]
command-/root/Envs/drf/bin/uwsgi /opt/vue_drf/luffy_boy/uwsgi.ini
stop---true
kill---true
启动supervisor服务端
supervisord -c /etc/supervisor.conf
supervisorctl -c /etc/supervisor.conf
增删该查curd 优化sql 视图
远程连接MySQL
mysql -uroot -p -h 192.168.11.37
set oasswire=PASSWORD("dd");
生产环境里不会死磕root用户,为了数据库的安全以及和其他用户协同管理数据库,就需要
创建其他数据库账户,然后分配权限,满足工作需求。
MariaDB [(none)]> create user yuchao@'127.0.0.1' identified by 'redhat123';
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select host,user,password from user where user='yuchao';
[root@master ~]# mysql -uyuchao -p -h 127.0.0.1
MariaDB [(none)]> show databases;
grant cerate on *.* to yuanqing@"%" identifyby 'mima'
移除权限
MariaDB [(none)]> revoke all privileges on *.* from yuchao@127.0.0.1;
[root@master ~]# mysql -uroot -p < /tmp/db.dump
MariaDB [(none)]>source /tmp/db/sql
navicat恢复
mysql xtrabackup 备份数据库插件
master主库配置
#修改配置文件
vim /etc/my.cnf
#修改内容
#解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为
mysql-bin
[mysqld]
server-id=1 用于区别从机
log-bin=mysql-bin
show master status
2.#题外话:如果提示密码太简单不复合策略加在前面加这句
mysql> set global validate_password_policy=0;
3.给从库账号授权,说明给chaoge从库复制的权限,在192.168.178.130机器上复制
grant replication slave on *.* to 'yuanqing'@'%';
实现对主数据库锁表只读,防止数据写入,数据复制失败
flush table with read lock;
scp /df/df/ root@192.168.11.167:/tmp
6.配置复制的参数,Slave从库连接Master主库的配置
mysql > change master to master_host='192.168.11.37',
master_user='yuanqing',
master_password='redhat',
master_log_file='qishi-bin.000001',
master_log_pos=759;
start slave
show slave status\G
grant select on *.* to yuanqing@"%"
redis
FLUSHDB 删除缓存数据
key * 查看数据
PUBLISH channel msg
将信息 message 发送到指定的频道 channel
SUBSCRIBE channel [channel ...]
订阅频道,可以同时订阅多个频道
1.启动redis服务端,准备配置文件
复制代码
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379 #定义持久化文件存储位置
dbfilename dbmp.rdb #rdb持久化文件
bind 10.0.0.10 127.0.0.1 #redis绑定地址
requirepass redhat #redis登录密码
save 900 1 #rdb机制 每900秒 有1个修改记录
save 300 10 #每300秒 10个修改记录
save 60 10000 #每60秒内 10000修改记录
!ps 上一次ps操作
redis-cli shutdown
save立刻持久化
appendonly yes
appendfsync everysec
平滑开启aof CONFIG set appendonly yes #开启AOF功能 CONFIG SET save "" #关闭
RDB功能
sed "s/6379/6380/g" redis-6379.conf >redis-6380.conf
6381/6382命令行
redis-cli -p 6381
SLAVEOF 127.0.0.1 6380 #指明主的地址
redis-cli -p 6382
SLAVEOF 127.0.0.1 6380 #指明主的地址
redis-cli -p 6379 info repliation info数据库信息
手动切换 SLAVEOF no one
SLAVEOF 127.0.0.1 6381
python redis.Reds(host=192.168.11.37,port=6379)
python redis.Sentinal([shaobing1,shaobing2
echo "slaveof 127.0.0.1 6379" >> redis-6380.conf
daemonize yes 后台运行
通过配置,开启redis-cluster
复制代码
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes #开启集群模式
cluster-config-file nodes-7000.conf #集群内部的配置文件
cluster-require-full-coverage no #redis cluster需要16384个slot都正常的时候才能
对外提供服务,换句话说,只要任何一个slot异常那
slot 自带 豆瓣codis ruby作者redsi.rb
window直接拖 rz-E
yum install lrzsz -y
sz rz上传文件
openstack 区块连 go
tcp/ip
c++ print
folang open-falcon
c语言入门
深入理解计算机系统
http权威指南
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem
#查看gem有哪些包
gem list -- check redis gem
收缩创建集群的命令 -name redis-trib.rb
#每个主节点,有一个从节点,代表--replicas 1
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
#集群自动分配主从关系 7000、7001、7002为 7003、7004、7005 主动关系
登录集群必须使用redis-cli -c -p 7000必须加上-c参数
-p 链接7000节点 -c 开启集群
ker
docker
docker search hello-docker 搜索镜像 就是去dockerHub搜说hello-docker
docker pull heool-world 下载公网的镜像
docker image ls 查看本地镜像 difest xiaoyan
docker images 同上
docker run hello-world 运行 可以用镜像id 前几个字母
docker container ls 所有在运行的容器
docker容器不许有后台在运行,否则就退出
docker ps -a 曾经运行的容器记录以及正在运行的
容器试运行应用程序的,所以必须有一个操作系统做基础
docker search centos
docker pull docker.io/centos
修改镜像加速工具
#一条命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://95822026.m.daocloud.io
原理是 daemon,json registry-mirror 的修改
systemctl status docker
修改配置文件
daemon,json
{"registry-mirrois":["http://f1361db2.m.daocloud.io"]}
systemctl restart docker
docker images
后台运行容器
-d参数:后台运行容器,返回容器ID
复制代码
[root@oldboy_python ~ 15:58:14]#docker run -d centos /bin/sh -c "while true;do
echo hello centos; sleep 1;done"
c0283f1077d16a2bf2597e269d51a02815334f7390f18a62ed7a4ba07f351b65
bin/sh 指定使用centos bash解释器
-c shell命令运行 每一秒运行centos
docker ps 正在运行的容器
docker logs -f 5f6缩写 相当于 tail -f 不间断打印
进入容器 docker exec -it 5f6 /bin/bash
-i -t 交互式的操作容器 卡其一个terminel终端用于linux交互
exit退出
docker run -it centos /bin.bash 开启并进入容器 交互式
查看内核 uname -r 查看所有信息 uname -a
ps -ef
uid pid cmd
那个用户执行的 进程号 命令
一个容器运行一个应用程序
微服务 docker etcd rpc k8s
docker images查看镜像
repository仓库信息 tag 标记 id
docker ps
names 运行的镜像pid image 运行的基础环境
docker logs 5f6 -f
应用程序想在docker中运行。必须要下载一个基础的操作系统 linux
docker rmi fces23sds 先删除依赖的容器, docker rm 59esdf2
docker run 运行镜像 -it centos /bin/bash 产生一个容器记录,且进入容器空间内
-it 交互式终端,代表我可以在容器中输入命令
/bin/bash 指定shell解释器
创建一个容器 总容器内安装vim
提交容器为新镜像
docker commit a3sdf shenzhen/centoos-vimzidingyimingming
run -it jingxiangdeid /bin/bash
导出镜像
docker save jingxiangmingzi > /opt/centos-vim/tar/gz
docker load </opt/centos-vim/tar/gz 导入镜像
启动容器 1 从镜像启动
2从停止的容器启动
docker stop 5f6
docker ps -a
docker start 5f6
例如,下面的命令输出一个hehe,之后终止容器。
[root@docker ~]# docker run centos /bin/echo "hehe" #这跟在本地直接执行
/bin/echo'hehe'
--name mingzi 容器起名字
cat /etc/os-release
无版图 ept yum
docker ps -aq 所有容器的id
docker stop `docker ps -aq` 1左边的符号 取出id再全部关闭
docker rm `docker ps -aq
docker rmi `docker iamges -aq
docker search training/webapp
[root@oldboy_python ~ 16:31:37]#docker run -d -P training/webapp python app.py
如果本地没有镜像文件 run 会自动下载
D后台运行 P 端口映射 随机映射 物理机的随机端口:容器内暴露的端口 用Python解释器
运行app 文件
访问宿主机的32769端口,就访问到容器的5000端口
ports 0.0.0.0:32769-》5000/tcp
netstat -tunlp \grpe 32769
listen 123659/docker-proxy docker的代理
指定端口映射,启动容器应用
docker run -d -p 9999:5000 --name my999app training/webapp python app.py
import unittest 测试模块
webapp 镜像制作
1基于Ubuntu 14.04操作系统
2默认进入/opt/webapp
3.在这个目录里存放了一些文件,app.py
4.通过容器内的命令,运行一个后台程序 python app.py
5最终生成一个web容器
docker port 82e 查看容器的端口映射关系
1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub
docker login
注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag chaoyu/centos-vim yuchao163/centos-vim
语法是: docker tag 仓库名 yuchao163/仓库名 Zz222200 密码
docker rmi -f fce 强制删除镜像
1.官方提供的私有仓库docker registry用法
https://yeasy.gitbooks.io/docker_practice/repository/registry.html
2.一条命令下载registry镜像并且启动私有仓库容器
私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的
/opt/data/registry下
端口映射容器中的5000端口到宿主机的5000端口
pull registry
-v 宿主机的文件夹:容器内的文件夹
检查网络通没通 yum install telnet
telnet 192.168.11.37 5000
docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
D后台运行 V数据卷挂在 P端口映射 registry 镜像名字
修改docker配置文件 让他支持http方式上传私有镜像
vim etc/docker/daemon.hson
[root@master /]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["192.168.119.10:5000"]
}
写入到docker服务中,写入到[Service]配置块中,加载此配置文件
vim /lib/systemd/system/docker.service
EnvironmentFile=-/etc/docker/daemon.json
8.修改了docker配置文件,重新加载docker
systemctl daemon-reload
9.重启docker
systemctl restart docker
重启docker服务,所有的容器都会挂掉
FROM centos 以次为基础镜像,进行二次构件镜像
LABEL maintainer="zuozhexingming"
LABEL mysql-version="5"
相当于注释
RUN 执行linux命令
RUN yum install nginx -y
WORKDIR /root 改变目录
不要用 RUN cd
ADD 本地资料添加到容器空间
ADD 本地文件 容器地址
ADD /opt/python3.6.tar.gz /opt/ 解压
COPY拷贝之灵 没有解压缩的命令 尽量用copy
ENV docker环境参数之灵
增加脚本可维护性
ENV MYSQL_VERSION 5.6 #设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}”
dockerfile
宿主机创建文件 flasktest.py
touch Dockerfile 名字不能改
FROM centos
LABEL maintainer="zuozhe"
安装python-setuptools 解决环境依赖
easy_install flask
COPY flasktest.py /opt/ 先对路径 以当前的docker为路径
WORKDIR /opt
EXPOSE 8080
CMD["python","flasktest.py"]
docker build -t qishiyiqi/flask-web . 打包当前路径的dockerfile
docker run -d -p 7000:8080 945
docker tag qishiyiqi/flask-web 192.168.11.37:5000/qishiyiqi-flaskweb
docker push 192.168.11.37:5000/qishi...
saltstack 远程执行系统
收集260台服务器ip 主机名
ssh
ifconfig hostname -I
hostname
webmin 在线unix管理工具 perl写的 (dns ldap saltstack nginx apche
cmdb 国产管理软件 python django saltstack运维资管平台
jumpserver 堡垒机
openstatck 云平台
运行方式 Master minion
运行salt依赖包
复制代码
python
zeromq 通信工具
pyzmp
pycrypto
msgpack-python
yaml 配置文件的语法
jinja2 模板与法库
yum install salt-master
salt-minion
确保两台机器通信
强制解析host ip minion1 dnsmasq私人解析器 docker就是
关闭防火墙策略 iptables -F
systemctl stop firewalld
grep -v "^#" /etc/salt/master
超哥的salt-master文件
复制代码
[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #绑定到本地的0.0.0.0地址
publish_port: 4505 #管理端口,命令发送
user: root #运行salt进程的用户
worker_threads: 5 #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506 #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master #日志文件地址
#自动接收minion的key
auto_accept: False
[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master DNS解析的主机地址
master_port: 4506
user: root
id: slave 本机姓名自定义
acceptance_wait_time: 10
log_file: /var/log/salt/minion
先启动儿子节点
系统出问题首先查看配置文件
salt-key -L 查看秘钥相关
salt-key -a qishiminion 接受儿子的密匙
salt "*" test.ping
salt "qishi" test.ping 正则检验是否有qishi名的主机
salt-key -f slave
Unaccepted Keys:
slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
[root@slave ~]# salt-call --local key.finger
local:
0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
因此可确认秘钥匹配,在master上接收秘钥
复制代码
[root@master ~]# salt-key -a slave 单独接受秘钥
-A接受所有的秘钥
儿子重启或首次启动,父亲才知道他在那里,才会传输秘钥
salt "erzi" cmd.run "echo'df'>/tmp/daye.txt"
salt "erzi" /etc/yum.repos.d/* /etc/yun.repos.d/
hostname -I 快速取出ip
--out=json 以json格式导出 控制输出结果的格式
pkg.remove nginx 卸载 调用本地的yum -y remove
[root@master 192.168.11.72 ~]$salt 'slave' service.start "nginx"
paramiko 学一下 操作SSH模块
$salt 'slave' grains.items
salt 'erzi'grains.items os
salt 'erzi'grains.item os ipv4
__repr__ 比str更详细 交互式输入变量自动打印repr 流畅的Python
$salt 'slave' grains.setval cpu_num 8
方法一,清空值
[root@master 192.168.11.72 ~]$salt 'slave' grains.delval cpu_info
.方法二 删除minion的grains配置文件,重启服务
[root@slave 192.168.11.71 ~]$rm -rf /etc/salt/grains
w
TTy 登陆的终端名字
:q! !强制的意思
rpm -ivh nginx anzhuang
-q chaxun -U gengxin yum装的才能查到
free -m 友善方式
top 系统动态进程查看
父目录不存在的时候添加 -p
etc/resolv.conf DNSyuming hostname zhujiming networks ipdizhi
上传图片卡死 499报错
调优nginx处理TCP的参数
修改nginx keepaliver 65s 修改超时参数
uwsgi.ini
oddo(crm框架) nginx uwsgi 三台阿里云 4万并发
vim 3种工作模式 命令 底线命令 编辑
nginx.conf 多个server() proxy_pass http://ip
解压后缀 .gz
gipz -d *.gz
tar -xf .tar
xz -d .xz
centos 系统服务管理命令
service network stop/start centos6
systemctl stop network cnetos7
kill pid
killall mariadb
window linux 传输文件
xftp scp lrzsz
没有docker解决依赖环境
Python pip导出 linux用yum导出
静态资源 存在磁盘上不会变的 nginx直接就能找到
rm -i 会提示是否真的删除
-r -f 递归文件及文件夹 强制
os subprocess
lsof netstat ss 查看端口信息
linux 下载软件包 wget curl yum
xshell putty winscp iterm securecrt win与linux链接工具 封装了SSH
过滤所有空白和注释行
grep -v "^#" file |grep -V "^$"
批量清理后台停止的容器
docker rm `docker ps -aq`
浙公网安备 33010602011771号