自动化--基于docker的基础数据库自动化部署
记录常用的运维脚本,基于docker部署常用数据库
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Date:2023-09-13 14:02
# Title:
address = '/home/data' #数据库部署的根目录
MYSQL_PWD = 'xxx' #mysql密码
MYSQL_PORT = '3306' #mysql容器开放端口
MYSQL_NAME = 'xxx' #默认创建的数据库容器名称
REDIS_PWD = 'xxx' #redis密码
REDIS_PORT = '5106' #redis容器开放的端口
REDIS_NAME = 'xxx' #redis容器名称
INFLUX_PWD = 'xxxx' #influxdb密码
INFLUX_PORT = '5107' #influxdb容器开放端口
INFLUX_NAME = 'xxxxx' #influxdb容器名称
mysql_config = '''
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
'''
influxdb_config = '''
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
engine = "tsm1"
wal-dir = "/var/lib/influxdb/wal"
[http]
auth-enabled = false
'''
influxdb_config1 = '''
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
engine = "tsm1"
wal-dir = "/var/lib/influxdb/wal"
[http]
auth-enabled = true
'''
redis_config = f'''
protected-mode no
port 6378
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass {REDIS_PWD}
# maxclients 10000
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
'''
import os
os.chdir(address)
# mysql构建
mysql_command = ["mkdir -p mysql/{etc,data,logs}","mkdir -p mysql/etc/conf.d"]
for command in mysql_command:
os.system(command)
with open('mysql/etc/my.cnf','w') as f:
f.write(mysql_config)
os.system(f"""
docker run -itd -p {MYSQL_PORT}:3306 --name {MYSQL_NAME} \
--privileged=true \
-e TZ="Asia/Shanghai" \
-v {address}/mysql/etc/my.cnf:/etc/my.cnf \
-v {address}/mysql/logs:/var/log \
-e MYSQL_ROOT_PASSWORD={MYSQL_PWD} mysql
""")
# redis构建
os.system("mkdir -p redis/conf")
with open('redis/conf/redis.conf','w') as f:
f.write(redis_config)
os.system(f"""
docker run -p {REDIS_PORT}:6378 --name {REDIS_NAME} \
--privileged=true \
-e TZ="Asia/Shanghai" \
-v {address}/redis/conf/redis.conf:/etc/redis/redis.conf \
-v {address}/redis/data:/data \
-itd redis redis-server /etc/redis/redis.conf --appendonly yes
""")
# influxdb构建
os.system('mkdir -p influx/conf/')
with open('influx/conf/influxdb.conf','w') as f:
f.write(influxdb_config)
os.system(f"""
docker run -itd --name {INFLUX_NAME} \
-p {INFLUX_PORT}:8086 \
--privileged=true \
-e TZ="Asia/Shanghai" \
-e INFLUXDB_GRAPHITE_ENABLED=true \
-v {address}/influx/conf/influxdb.conf:/etc/influxdb/influxdb.conf \
influxdb:1.8.10
""")
with open('create_auth.sh', 'w') as f:
f.write(f'''#! /bin/bash
influx -execute "CREATE USER \\"root\\" WITH PASSWORD '{INFLUX_PWD}' WITH ALL PRIVILEGES;"
''')
os.system(f'docker cp create_auth.sh {INFLUX_NAME}:create_auth.sh')
os.system(f'docker exec {INFLUX_NAME} bash create_auth.sh')
with open('influx/conf/influxdb.conf','w') as f:
f.write(influxdb_config1)
os.system(f'docker restart {INFLUX_NAME}')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南