• docker +haproxy+python web


    1、python web 端的dockerfile

    FROM python:2.7
    WORKDIR /code
    ADD . /code
    EXPOSE 80
    CMD python index.py

    2、index.py 网站首页py文件

    #!/usr/bin/python
    
    import sys
    import BaseHTTPServer
    from SimpleHTTPServer import SimpleHTTPRequestHandler
    import socket
    import fcntl
    import struct
    import pickle
    from datetime import datetime
    from collections import OrderedDict
    
    class HandlerClass(SimpleHTTPRequestHandler):
        def get_ip_address(self,ifname):
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            return socket.inet_ntoa(fcntl.ioctl(
                s.fileno(),
                0x8915,  # SIOCGIFADDR
                struct.pack('256s', ifname[:15])
            )[20:24])
        def log_message(self, format, *args):
            if len(args) < 3 or "200" not in args[1]:
                return
            try:
                request = pickle.load(open("pickle_data.txt","r"))
            except:
                request=OrderedDict()
            time_now = datetime.now()
            ts = time_now.strftime('%Y-%m-%d %H:%M:%S')
            server = self.get_ip_address('eth0')
            host=self.address_string()
            addr_pair = (host,server)
            if addr_pair not in request:
                request[addr_pair]=[1,ts]
            else:
                num = request[addr_pair][0]+1
                del request[addr_pair]
                request[addr_pair]=[num,ts]
            file=open("index.html", "w")
            file.write("<!DOCTYPE html> <html> <body><center><h1><font color="blue" face="Georgia, Arial" size=8><em>HA</em></font> Webpage Visit Results</h1></center>");
            for pair in request:
                if pair[0] == host:
                    guest = "LOCAL: "+pair[0]
                else:
                    guest = pair[0]
                if (time_now-datetime.strptime(request[pair][1],'%Y-%m-%d %H:%M:%S')).seconds < 3:
                    file.write("<p style="font-size:150%" >#"+ str(request[pair][1]) +": <font color="red">"+str(request[pair][0])+ "</font> requests " + "from &lt<font color="blue">"+guest+"</font>&gt to WebServer &lt<font color="blue">"+pair[1]+"</font>&gt</p>")
                else:
                    file.write("<p style="font-size:150%" >#"+ str(request[pair][1]) +": <font color="maroon">"+str(request[pair][0])+ "</font> requests " + "from &lt<font color="navy">"+guest+"</font>&gt to WebServer &lt<font color="navy">"+pair[1]+"</font>&gt</p>")
            file.write("</body> </html>");
            file.close()
            pickle.dump(request,open("pickle_data.txt","w"))
    
    if __name__ == '__main__':
        try:
            ServerClass  = BaseHTTPServer.HTTPServer
            Protocol     = "HTTP/1.0"
            addr = len(sys.argv) < 2 and "0.0.0.0" or sys.argv[1]
            port = len(sys.argv) < 3 and 80 or int(sys.argv[2])
            HandlerClass.protocol_version = Protocol
            httpd = ServerClass((addr, port), HandlerClass)
            sa = httpd.socket.getsockname()
            print "Serving HTTP on", sa[0], "port", sa[1], "..."
            httpd.serve_forever()
        except:
            exit()

    3、index.html 空文件

    4、haproxy.cfg 配置文件

    global
      log 127.0.0.1 local0
      log 127.0.0.1 local1 notice
    
    defaults
      log global
      mode http
      option httplog
      option dontlognull
      timeout connect 5000ms
      timeout client 50000ms
      timeout server 50000ms
    
    listen stats
        bind 0.0.0.0:70
        stats enable
        stats uri /
    
    frontend balancer
        bind 0.0.0.0:80
        mode http
        default_backend web_backends
    
    backend web_backends
        mode http
        option forwardfor
        balance roundrobin
        server weba weba:80 check
        server webb webb:80 check
        server webc webc:80 check
        option httpchk GET /
        http-check expect status 200

    5、docker-compose.yml 文件

    weba:
      build: ./web
      expose:
        - 80
    
    webb:
      build: ./web
      expose:
        - 80
    
    webc:
      build: ./web
      expose:
        - 80
    
    haproxy:
      image: haproxy
      volumes:
        - /opt/compose-haproxy-web/haproxy:/haproxy-override
        - /opt/compose-haproxy-web/haproxy:/usr/loacl/etc/haproxy
      links:
        - weba
        - webb
        - webc
      ports:
        - "81:80"
        - "71:70"
      expose:
        - "80"
        - "70"

    路径结构

     在compose-haproyx-web 目录下 执行docker-compose up 来启动项目

  • 相关阅读:
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    mysql备份及恢复
    mysql备份及恢复
    mysql备份及恢复
  • 原文地址:https://www.cnblogs.com/plefan/p/13748604.html
Copyright © 2020-2023  润新知