一、部署Redis
#!/bin/bash
# Redis密码
redis_password="redis密码"
# Redis端口
redis_port=redis端口
# Redis容器名
redis_container_name="redis"
# Redis数据目录
redis_data_dir="/opt/redis/data"
# 创建Redis数据目录
mkdir -p "$redis_data_dir"
# 停止并删除已存在的Redis容器
docker stop "$redis_container_name" >/dev/null 2>&1
docker rm "$redis_container_name" >/dev/null 2>&1
# 运行Redis容器,设置宿主机IP作为集群节点通知地址
docker run -d \
--name "$redis_container_name" \
-p "$redis_port":6379 \
-v "$redis_data_dir:/data" \
-v /etc/localtime:/etc/localtime \
-v /etc/letsencrypt:/etc/letsencrypt \
redis:7.0.10 redis-server --appendonly yes --appendfilename appendonly.aof --requirepass $redis_password
# 等待3秒钟
sleep 3
# 检查Redis容器运行状态
if docker ps | grep -q "$redis_container_name"; then
echo "Redis container ($redis_container_name) is running."
else
echo "Failed to start Redis container ($redis_container_name)."
exit 1
fi
# 输出Redis日志
docker logs --tail 200 "$redis_container_name"
二、部署Mysql
#!/bin/bash
# 指定MySQL的根目录
MYSQL_DIR="/opt/mysql"
# 指定MySQL的root密码
MYSQL_ROOT_PASSWORD="数据库密码"
# 指定主机端口
HOST_PORT=数据库端口
# Mysql容器名
MYSQL_CONTAINER_NAME=mysql
# 检查容器名是否存在
if docker ps -a --filter name="$MYSQL_CONTAINER_NAME" | grep -q "$MYSQL_CONTAINER_NAME"; then
echo "容器名已存在,请选择其他容器名"
exit 1
fi
# 检查端口是否占用
if lsof -i :"$HOST_PORT" | grep -q LISTEN; then
echo "端口 $HOST_PORT 已被占用,请选择其他端口"
exit 1
fi
# 指定MySQL的数据目录
DATA_DIR="$MYSQL_DIR/data"
# 指定MySQL的配置文件目录
CONF_DIR="$MYSQL_DIR/conf"
# 创建数据目录(如果不存在)
mkdir -p "$DATA_DIR"
# 创建配置文件目录(如果不存在)
mkdir -p "$CONF_DIR"
# 指定MySQL的配置文件路径
MYSQL_CONFIG="$CONF_DIR/my.cnf"
# 将MySQL配置文件写入文件
cat > "$MYSQL_CONFIG" <<EOF
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
port=3306
log-error=/var/lib/mysql/error.log
pid-file=/var/lib/mysql/mysqld.pid
log-bin=/var/lib/mysql/mysql-bin
relay-log=mysql100
binlog_format=row
server-id=100
skip_name_resolve=on
innodb_buffer_pool_size = 1G
max_connections = 1000
secure-file-priv=''
default_authentication_plugin=mysql_native_password
auto_increment_increment=1
auto_increment_offset=1
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
gtid_mode=ON
enforce-gtid-consistency=true
max_allowed_packet=20M
EOF
# 创建并运行MySQL容器,并挂载数据目录和配置文件,开放远程登录端口
docker run \
--name $MYSQL_CONTAINER_NAME \
-v "$DATA_DIR":/var/lib/mysql:rw \
-v "$MYSQL_CONFIG":/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" \
-p "$HOST_PORT":3306 -d \
-v /etc/localtime:/etc/localtime \
-v /etc/letsencrypt:/etc/letsencrypt \
mysql:8.0.17 >/dev/null
# 等待MySQL服务启动
echo "等待MySQL服务启动..."
SECONDS=0
TIMEOUT=60
until docker exec $MYSQL_CONTAINER_NAME mysqladmin ping --silent; do
sleep 1
if [ $SECONDS -ge $TIMEOUT ]; then
echo "错误:等待MySQL服务启动超时"
exit 1
fi
done
echo "MySQL服务已启动"
echo "MySQL部署完成!"
三、部署XXL-job
#!/bin/bash
docker run -itd \
-e PARAMS="--spring.datasource.url=jdbc:mysql://数据库IP:端口/xxljob?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=数据库密码 --spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver" \
-p 9080:8080 \
-v /opt/tcloud/xxl-job/logs:/data/applogs \
--name xxljob \
-v /etc/localtime:/etc/localtime \
-v /etc/letsencrypt:/etc/letsencrypt \
xuxueli/xxl-job-admin:2.4.0
四、部署Nginx
docker run -tid --name=nginx \
--env TZ=Asia/Shanghai \
-p 80:80 \
-p 443:443 \
-v /opt/tcloud/nginx/conf.d:/etc/nginx/conf.d \
-v /opt/tcloud/nginx/log:/var/log/nginx \
-v /opt/tcloud/nginx/www:/etc/nginx/html \
-v /opt/tcloud/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v/opt/tcloud/nginx/ssl:/etc/nginx/ssl \
-v /etc/localtime:/etc/localtime \
-v /etc/letsencrypt:/etc/letsencrypt \
nginx:latest
主配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 500m;
include /etc/nginx/conf.d/*.conf;
}
https配置demo
server {
listen 443 default ssl;
server_name tclazz.com;
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
#-----------SSL配置-------------------------
ssl_certificate /etc/nginx/ssl/ssl证书文件名;
ssl_certificate_key /etc/nginx/ssl/ssl证书私钥;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL;
ssl_prefer_server_ciphers on;
location / {
# 代理转发服务地址
proxy_pass http://139.198.177.29:8080;
root html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
http 配置 demo
server {
listen 80;
server_name file.tclazz.com;
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
location / {
proxy_pass http://139.198.177.29:9000;
root html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
五、部署minio
docker run -tid --name=minio \
-v /home/minio_data:/data \
-v /opt/tcloud/minio/config:/root/.minio \
-e "MINIO_ROOT_USER=minio账号" \
-e "MINIO_ROOT_PASSWORD=minio密码" \
-p 9000:9000 \
-p 9001:9001 \
-v /etc/localtime:/etc/localtime \
-v /etc/letsencrypt:/etc/letsencrypt \
minio/minio server /data --console-address ":9001" -address ":9000"
评论区