侧边栏壁纸
博主头像
田少蛟的博客 博主等级

行动起来,活在当下

  • 累计撰写 14 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Docker部署基础设施

田少蛟
2024-10-25 / 0 评论 / 0 点赞 / 95 阅读 / 0 字
温馨提示:
本文最后更新于2024-12-01,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、部署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"

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  3. QQ打赏

    qrcode qq

评论区