• opsmanage 自动化运维管理平台


    关闭防火墙、selinux

    更换阿里云 yum源

    依赖环境

    yum install -y epel-release
    yum install vim net-tools nmon htop rsync tree ntp iftop wget clamav -y

     安装easy_install

    cd /tools
    [root@jason tools]# wget --no-check-certificate  https://pypi.python.org/packages/f7/94/eee867605a99ac113c4108534ad7c292ed48bf1d06dfe7b63daa51e49987/setuptools-28.0.0.tar.gz#md5=9b23df90e1510c7353a5cf07873dcd22
    [root@jason tools]# tar -xzvf setuptools-28.0.0.tar.gz
    [root@jason tools]#cd setuptools-28.0.0
    [root@jason tools]#python  setup.py  install
    

    安装pip

    # wget --no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz -O pip-1.5.5.tar.gz
    # tar -xzvf pip-1.5.5.tar.gz
    # cd pip-1.5.5/
    # python setup.py install
    # pip install -U pip 
    

    安装模块

    依赖环境

    yum install -y mysql-devel python-devel

    # cd /mnt/
    # git clone https://github.com/welliamcao/OpsManage.git
    # cd /mnt/OpsManage/
    #vim  requirements.txt  
    将Django版本改为1.8.17
    # pip install -r requirements.txt 
    pip install paramiko

     

    安装Redis

    # wget http://download.redis.io/releases/redis-3.2.8.tar.gz
    # tar -xzvf redis-3.2.8.tar.gz
    # cd redis-3.2.8
    # make
    # make install
    # vim redis.conf

    修改以下配置

    daemonize yes #128行

    loglevel warning #158行
    logfile "/var/log/redis.log" #163行
    bind 你的服务器ip地址 #61行
    例如: bind 127.0.0.1 192.168.88.201

    image.png

    # cd ../
    # mv redis-3.2.8 /usr/local/redis
    # /usr/local/redis/src/redis-server /usr/local/redis/redis.conf

    开机自启

    将/usr/local/redis/src/redis-server /usr/local/redis/redis.conf加入到/etc/rc.d/rc.local

    安装mysql

    配置文件添加

    [root@jason ~]# cat /etc/my.cnf |grep -Ev '^%|^$'
    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
    [mysqld]
    character_set_server = utf8
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ##添加
    #
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

     创建数据库opsmanage ,并赋予全部权限

    # mysql -uroot -p
    mysql> create database opsmanage DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 
    mysql> grant all privileges on opsmanage.* to root@'%' identified by 'jason_zhang';
    mysql> FLUSH PRIVILEGES;
    

     配置OpsManage

    [root@jason ~]# cd /mnt/OpsManage/
    [root@jason OpsManage]# cd OpsManage/
    [root@jason OpsManage]# cat settings.py |grep -Ev '^%|^$'
    #!/usr/bin/env python  
    # _#_ coding:utf-8 _*_ 
    """
    Django settings for OpsManage project.
    Generated by 'django-admin startproject' using Django 1.9.12.
    For more information on this file, see
    https://docs.djangoproject.com/en/1.9/topics/settings/
    For the full list of settings and their values, see
    https://docs.djangoproject.com/en/1.9/ref/settings/
    """
    import os
    import djcelery
    from celery import  platforms
    from kombu import Queue,Exchange
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ''' celery config '''
    djcelery.setup_loader()
    BROKER_URL = 'redis://192.168.199.224:6379/4'    ##redis的IP、端口和库  
    CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend'
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TASK_SERIALIZER='pickle'
    CELERY_ACCEPT_CONTENT = ['pickle','json']
    CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
    CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24
    CELERYD_MAX_TASKS_PER_CHILD = 40
    CELERY_TRACK_STARTED = True
    CELERY_ENABLE_UTC = False
    CELERY_TIMEZONE='Asia/Shanghai'
    platforms.C_FORCE_ROOT = True
    #celery route config
    CELERY_IMPORTS = ("OpsManage.tasks.assets","OpsManage.tasks.ansible",
                      "OpsManage.tasks.cron","OpsManage.tasks.deploy",
                      "OpsManage.tasks.sql","OpsManage.tasks.sched")
    CELERY_QUEUES = (
        Queue('default',Exchange('default'),routing_key='default'),
        Queue('ansible',Exchange('ansible'),routing_key='ansible'),
    )
    CELERY_ROUTES = {
        'OpsManage.tasks.sql.*':{'queue':'default','routing_key':'default'},
        'OpsManage.tasks.assets.*':{'queue':'default','routing_key':'default'},
        'OpsManage.tasks.cron.*':{'queue':'default','routing_key':'default'},
        'OpsManage.tasks.sched.*':{'queue':'default','routing_key':'default'},
        'OpsManage.tasks.ansible.AnsibleScripts':{'queue':'ansible','routing_key':'ansible'},
        'OpsManage.tasks.ansible.AnsiblePlayBook':{'queue':'ansible','routing_key':'ansible'},
    }
    CELERY_DEFAULT_QUEUE = 'default'
    CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
    CELERY_DEFAULT_ROUTING_KEY = 'default'
    REDSI_KWARGS_LPUSH = {"host":'192.168.199.224','port':6379,'db':4} 
    REDSI_LPUSH_POOL
    = None # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'kd8f&jx1h^1m-uldfdo3d#10d9mbc-ijjz!tozusy@aw#h+875' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['*'] # Channels settings CHANNEL_LAYERS = { "default": { "BACKEND": "asgi_redis.RedisChannelLayer", # use redis backend "CONFIG": { "hosts": [("localhost", 6379)], "channel_capacity": { "http.request": 1000, "websocket.send*": 10000, }, "capacity": 10000, }, "ROUTING": "OpsManage.routing.channel_routing", # load routing from our routing.py file }, } # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'OpsManage', 'rest_framework', 'djcelery', 'channels', 'storages', 'wiki', 'orders', 'api', 'filemanage', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # 'django.middleware.csrf.CsrfResponseMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), } ROOT_URLCONF = 'OpsManage.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ["/mnt/OpsManage/OpsManage/static/",'/mnt/OpsManage/OpsManage/templates/'], ##根据下载的opsmanage存放位置 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'OpsManage.wsgi.application' # Database # https://docs.djangoproject.com/en/1.9/ref/settings/#databases DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'opsmanage', 'USER':'root', 'PASSWORD':'jason_zhang', 'HOST':'192.168.199.224' # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # Internationalization # https://docs.djangoproject.com/en/1.9/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Shanghai' STATIC_URL = '/static/' STATICFILES_DIRS = ( '/mnt/OpsManage/OpsManage/static/', ) MEDIA_ROOT = os.path.join(BASE_DIR,'upload/') MEDIA_URL = '/upload/' SFTP_CONF = { 'port':22, 'username':'root', 'password':'welliam', 'timeout':30 } WORKSPACES = '/var/lib/opsmanage/workspaces/' LOGIN_URL = '/login'

    生成数据表与管理员账户

    yum remove python-gssapi.x86_64    不然会django、Paramiko报错 

    # cd /mnt/OpsManage/
    # python manage.py makemigrations OpsManage
    # python manage.py makemigrations wiki
    # python manage.py makemigrations orders
    # python manage.py makemigrations filemanage
    # python manage.py migrate
    # python manage.py createsuperuser
    

    启动部署平台

    # cd /mnt/OpsManage/
    # python manage.py runserver 0.0.0.0:8000
    

     

    注意,启动后,会占用当前终端,需要调整时开启新终端登录

    http://192.168.199.224:8000

     

    配置Celery异步任务系统

    celery-分布式异步任务调度系统

    了解:https://blog.csdn.net/bojie5744/article/details/52965668

    # echo_supervisord_conf > /etc/supervisord.conf
    # export PYTHONOPTIMIZE=1
    # vim /etc/supervisord.conf
    

     在最后面加上

    [program:celery-worker-default]
    command=/usr/bin/python manage.py celery worker --loglevel=info -E -Q default
    directory=/mnt/OpsManage
    stdout_logfile=/var/log/celery-worker-default.log
    autostart=true
    autorestart=true
    redirect_stderr=true
    stopsignal=QUIT
    numprocs=1
    
    [program:celery-worker-ansible]
    command=/usr/bin/python manage.py celery worker --loglevel=info -E -Q ansible
    directory=/mnt/OpsManage
    stdout_logfile=/var/log/celery-worker-ansible.log
    autostart=true
    autorestart=true
    redirect_stderr=true
    stopsignal=QUIT
    numprocs=1
    
    
    [program:celery-beat]
    command=/usr/bin/python manage.py celery beat
    directory=/mnt/OpsManage
    stdout_logfile=/var/log/celery-beat.log
    autostart=true
    autorestart=true
    redirect_stderr=true
    stopsignal=QUIT
    numprocs=1
    
    [program:celery-cam]
    command=/usr/bin/python manage.py celerycam
    directory=/mnt/OpsManage
    stdout_logfile=/var/log/celery-celerycam.log
    autostart=true
    autorestart=true
    redirect_stderr=true
    stopsignal=QUIT
    numprocs=1
    

     启动celery

    # /usr/bin/supervisord -c /etc/supervisord.conf    #注意centos7上路径
    # supervisorctl status #要检查是否都是running状态
    

     

     

    SQL审核

    自行安装Inception与SQLadvisor,SQLadvisor可执行文件请放在OpsManage服务器/usr/bin/sqladvisor路径 (不支持阿里云RDS)
    详看inception+archery SQL审核平台 https://www.cnblogs.com/xiaoyou2018/p/9936585.html


    参考:http://blog.51cto.com/11555417/2155028
    https://github.com/welliamcao/OpsManage
    https://www.oschina.net/p/opsmanage

    Python 进程管理工具 Supervisor 使用教程
    https://www.restran.net/2015/10/04/supervisord-tutorial/

  • 相关阅读:
    MP3 Lame 转换 参数 设置(转)
    数据库SQL优化大总结之 百万级数据库优化方案(转)
    IndexedDB:浏览器里内置的数据库(转)
    【译】微型ORM:PetaPoco【不完整的翻译】(转)
    'NoneType' object has no attribute '__getitem__'
    关于python的整形(int)自动转长整形(long)的问题
    1-redis使用笔记
    Flask deployment on gunicorn with flask script
    Celery从入门到放弃
    SELECT中的CAST
  • 原文地址:https://www.cnblogs.com/xiaoyou2018/p/9938943.html
Copyright © 2020-2023  润新知