• s11 day Linux 和nginx 部署


     

    https://www.cnblogs.com/pyyu/p/9481344.html

    1,开机初始化的配置
    iptables -F 清空防火墙
    /etc/init.d/iptables stop  #关闭iptables
    setenforce 0  #暂停selinux
    
    #编译安装python3
    
    环境准备
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
    
    #下载python3的源码包
    wget https://www.python.org/ftp/python/3.4.7/Python-3.4.7.tar.xz
    #解压缩源码包
    xz -d Python-3.4.7.tar.xz
    tar -xf Python-3.4.7.tar 
    #切换python3目录 
    cd Python
    -3.4.7
    #释放脚本文件
    .
    /configure --prefix=/opt/python347
    #编译,编译安装
    make
    && make install
    #建立软连接
    ln
    -s /opt/python347/bin/python3 /usr/local/bin/python3
    #将编译的python3的环境变量添加到pATH
    vim
    /etc/profile
    #写入到配置文件,永久生效 在最底行写入
    export PATH
    =$PATH:/opt/python347/bin/ 然后 source /etc/profile
    使得配置文件生效
    #python解释器的自动补全功能 yum install
    -y readline-devel -y pip install readline import readline,rlcompleter readline.parse_and_bind('tab:complete')
    #python虚拟环境 virtualenv
    --no-site-packages venv
    #创建venv虚拟环境 #激活虚拟环境 source venv
    /bin/activate
    #虚拟环境主要是对环境变量进行更改 echo $PATH
    #退出虚拟环境 deactivate #ipython pip3 install ipython
    #交互式的解释器 #notebook pip3 install notebook

    安装python

    1,开机初始化的配置
    iptables -F 清空防火墙
    /etc/init.d/iptables stop  #关闭iptables
    setenforce 0  #暂停selinux
    
    #编译安装python3
    
    环境准备
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
    
    #下载python3的源码包
    wget https://www.python.org/ftp/python/3.4.7/Python-3.4.7.tar.xz
    #解压缩源码包
    xz -d Python-3.4.7.tar.xz
    tar -xf Python-3.4.7.tar
    #切换python3目录
    cd Python-3.4.7
    #释放脚本文件
    ./configure --prefix=/opt/python347
    #编译,编译安装
     make && make install 
     #建立软连接
     ln -s /opt/python347/bin/python3 /usr/local/bin/python3

    下载 readline
     yum install -y readline -devel


    查看环境变量:

    [root@tencentcloud ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin




     虚拟环境的安装

    #python虚拟环境
    virtualenv --no-site-packages venv #创建venv虚拟环境
    #激活虚拟环境
    source venv/bin/activate
    #虚拟环境主要是对环境变量进行更改
    echo $PATH
    #退出虚拟环境
    deactivate

    1. 下载NGINX 

    wget http://nginx.org/download/nginx-1.14.0.tar.gz

    2.解压

    tar xf nginx-1.14.0.tar.gz 

    3. 编译安装三部曲 

    进入 nginx 目录下 ,注意目录里有个configure 文件
    ./configure --prefix=/opt/nginx-1.14.0
    
    make && make install

    4.开启服务

    4.启动nginx,进入sbin目录,找到nginx启动命令
    cd sbin
    ./nginx #启动
    ./nginx -s stop #关闭
    ./nginx -s reload #重新加载

    5.查看conf文件

    cat conf/nginx.conf
    [root@tencentcloud nginx-1.12.2]# cat conf/nginx.conf
    
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #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;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    View Code

    6.创建软连接

    [root@tencentcloud nginx-1.12.2]# ln -s  /sbin/nginx  /sbin/

     

    5.关闭防护墙

    chkconfig iptables off  
    
    永久关闭。
    chkconfig|grep ipt
    vim /etc/selinux/config

     6. 去掉文件里的# 和空行 

    egrep -v "^$|#" nginx.conf.default
    
    
    egrep -v "^$|#" nginx.conf.default >nginx.conf
    

      

    4. 测试 

    curl 10.10.0.1
            
            
    今日内容:
        saltstack(python编写的自动化工具)
        原本公司的组织架构是;  
            apahce+oralce数据库+redis+saltstack+java+perl(收费)
            走向一个开源,免费的技术架构(省钱)
            nginx + mysql + redis +stal +java +python(glances一个开源的服务器监控工具)
            
        ansible + 一号车面试的时候,ansible+python+django 开发的cmdb平台
        saltstack + python +django  运维平台
        
    #salt环境准备,需要再两台机器一起执行
    准备好2台服务器
    master 192.168.12.44
    slave  192.168.12.45
    #设置好本地/etc/hosts解析
    vim /etc/hosts#写入以下解析记录
    192.168.12.44 master
    192.168.12.45 slave
    #关闭服务器安全策略
    /etc/init.d/iptables stop
    iptables -F
    #关闭服务器selinux
    getenforce #检测selinux是否开启
    setenforce 0 #临时关闭selinux
    #使用sed永久关闭selinux(此步骤需要重启linux)
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    
    #epel源配置,默认的yum源提供的软件包有限,epel源提供额外的软件包下载(新的仓库)
    #下载epel源
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    #清空yum源缓存,然后更新新的yum缓存(非必须的操作)
    yum clean all
    yum makecache 
    #yum install xxx
    
    #安装salt-master   #############################
    yum install salt-master -y
    #安装好后修改配置文件/etc/salt/master 
    #写入如下配置即可
    [root@master ~]# grep -v '^#' /etc/salt/master |grep -v '^$'
    interface: 0.0.0.0
    publish_port: 4505
    user: root
    worker_threads: 5
    ret_port: 4506
    pidfile: /var/run/salt-master.pid
    log_file: /var/log/salt/master
    
    #启动salt-master
    /etc/init.d/salt-master start  #启动
    /etc/init.d/salt-master status  #查看状态
    /etc/init.d/salt-master stop #停止
    
    
    #修改minion的配置   ######################
    yum install salt-minion -y 
    #vim /etc/salt/minion
    [root@slave ~]# grep -v '^#' /etc/salt/minion |grep -v '^$'
    master: master
    master_port: 4506
    user: root
    id: slave
    output: nested
    backup_mode: minion
    acceptance_wait_time: 10
    random_reauth_delay: 60
    log_file: /var/log/salt/minion
    #修改完配置之后,启动salt-minion
    /etc/init.d/salt-minion start 
    
    
    ######################
    #salt-master和salt-minion都启动之后
    #在salt-master端执行
    [root@master ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    slave    #此时已经出现slave
    Rejected Keys:
    
    #然后salt-master 通过命令接收slave节点的key
    [root@master ~]# salt-key -a slave
    The following keys are going to be accepted:
    Unaccepted Keys:
    slave
    Proceed? [n/Y] y
    Key for minion slave accepted.
    
    #确认接收秘钥后,检验minion秘钥是否被接收
    [root@master ~]# salt-key -L
    Accepted Keys:
    slave
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    
    ########################
    #此时salt-master已经和salt-minion通信了
    #测试用master 控制minion,创建一个文本
    [root@master ~]# salt 'slave' cmd.run 'echo '我是master,我在slave上创建了一个文本' > /tmp/master.txt'
    
    #############
    #在minion节点查看效果即可
    [root@slave ~]# cat /tmp/master.txt 
    我是master,我在slave上创建了一个文本
    
    #
    在主节点上,可以分发命令,一条命令即可获取所有被管控机器的ip,hostname等信息
        
    Unaccepted Keys:
    slave:  15:f2:0c:ea:be:b3:72:b1:c9:78:61:79:9b:3c:2e:47
    
    local:
            15:f2:0c:ea:be:b3:72:b1:c9:78:61:79:9b:3c:2e:47
    
    
    
    #############################################################################################################
    #uWSGI 安装配置
    #更详细的查看博客 https://www.cnblogs.com/pyyu/p/9481344.html
    #基础环境配置
    yum groupinstall "Development tools"
    yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
    #提前安装好python3环境
    https://www.cnblogs.com/pyyu/p/7402145.html
    #virtualenv
    #请确保你的虚拟环境正常工作
    https://www.cnblogs.com/pyyu/p/9015317.html
    #安装django1.11
    pip3 install django==1.11
    #创建django项目mysite
    django-admin startproject mysite
    #创建app01
    python3 manage.py startapp app01
    
    #mysite/settings.py
    #settings.py设置
    ALLOWED_HOSTS = ['*']
    install app01
    
    #mysite/urls.py
    from app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^hello_django/', views.hello),
    ]
    
    #app01/views.py
    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    def hello(request):
        print('request is :',request)
        return HttpResponse('django is ok ')
    
    #pip3安装uwsgi
    #进入虚拟环境venv,安装uwsgi
    (venv) [root@slave 192.168.11.64 /opt]$pip3 install uwsgi
    #检查uwsgi版本
    (venv) [root@slave 192.168.11.64 /opt]$uwsgi --version
    2.0.17.1
    #检查uwsgi python版本
    uwsgi --python-version
    ############################################
    #启动一个python web服务
    uwsgi --http :8000 --wsgi-file test.py
    http :8000: 使用http协议,端口8000
    wsgi-file test.py: 加载指定的文件,test.py
    #test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
    
    #uWsgi热加载python程序
    
    #在启动命令后面加上参数
    uwsgi --http :8088 --module mysite.wsgi --py-autoreload=1 
    #此时修改django代码,uWSGI会自动加载django程序,页面生效
    运行django程序
    
    #mysite/wsgi.py  确保找到这个文件
    uwsgi --http :8000 --module mysite.wsgi
    module mysite.wsgi: 加载指定的wsgi模块
    
            
        
        
    #二、nginx+uWSGI+django+virtualenv+supervisor(进程管理工具)发布我们的django项目
    
    
    1.配置nginx,通过反向代理结合uWSGI
    
           location / {
                root   html;
                include /opt/nginx112/conf/uwsgi_params;
                uwsgi_pass 0.0.0.0:8000;
                index  index.html index.htm;
            }
    
    2.安装好supervisor
    #在python2环境下安装
    yum install python-setuptools
    easy_install supervisor
    #通过命令生成supervisor的配支文件
    echo_supervisord_conf > /etc/supervisord.conf
    #然后再/etc/supervisord.conf末尾添加上如下代码!!!!!!
    [program:s10_django]
    command= /home/venv1/bin/uwsgi --uwsgi 0.0.0.0:8000 --chdir /home/mysite --home=/home/venv1 --module mysite.wsgi
    directory=/home/mysite
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    
    3.启动好nginx
    /opt/nginx112/sbin/nginx
    
    4.启动supervisor 
    supervisord -c /etc/supervisord.conf
        -管理supervisor的命令
        supervisorctl start s10_django 
        supervisorctl stop  s10_django 
        supervisorctl restart s10_django
        
    5.此时访问192.168.12.44 访问nginx的80端口,已经反向代理找到后端的django应用
    
    
    
    ####补充:
    PS1命令提示符的更改
    export PS1='[u@h w 	]$'
    #使得永久生效
    vim /etc/profile
    #写入
    export PS1='[u@h w 	]$'
    
    
    
        
        
    #三、docker容器基本使用
    
    大家可能接触到的服务器环境(代码运行的环境)
    
    物理机+centos 
    
    vmware esxi  + centos 
    
    阿里云/腾讯云/亚马逊云
    
    docker容器   (项目跑在容器中)
    
        
    
    
    #环境准备
    #查看linux发行版
    cat /etc/redhat-release 
    #内核版本查看
    uname -r 
    #安装docker,配置yum的epel源
    yum install docker 
    
    #启停docker 
    systemctl status docker  #检查docker状态
    systemctl start  docker #启动docker
    systemctl stop    docker  #关闭docker
    
    
    #配置docker镜像源加速
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
    #查看镜像源加速
    [root@oldboy_python ~ 14:33:39]#cat /etc/docker/daemon.json
    {
        "registry-mirrors": ["http://95822026.m.daocloud.io"],
        "insecure-registries": []
    }
    
    #下载hello-world镜像
    docker pull hello-world
    #查看docker镜像
    docker images 
    #运行docker hello-world镜像
    docker run 镜像名/镜像id/镜像id的前3位
    #搜索docker镜像(image)
    docker search centos 
    docker search django(#搜索django镜像)
    #运行一个交互式的centos容器
    docker run -it centos /bin/bash 
    #在后台运行一个容器,执行shell,每秒打印一个hellodocker,(此命令会返回一个容器id)
    docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"
    #查看容器进程
    docker ps #用于查看正在运行的容器
    docker ps -a #用于查看所有运行过的容器
    #查看容器运行的日志
    docker logs 容器id
    #删除容器
        -先停止正在运行的容器
        docker stop 容器id
        docker rm 容器id
        -强制删除正在运行的容器
        docker rm -f 容器id
    #删除已有的docker镜像(image)
    docker rmi 镜像id
    
    #https://www.cnblogs.com/pyyu/p/9485268.html  docker部署博客
    
    
    ###########重要性
    1.uwsgi发布django程序
    2.docker容器的使用
    3.mysql主从复制
    4.把笔记所有linux命令敲一遍
  • 相关阅读:
    数组和类集排序总结
    toString()方法
    冒泡排序java
    Scanner类输入字符串和整形数字
    身份证分组
    jsonp的实质
    在伪数组上部署iterator方法
    获取属性的方法
    合并以及对于引用克隆
    深度复制对象已解决循环引用
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9499172.html
Copyright © 2020-2023  润新知