安装 Docker
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
Docker 安装 Nginx 1.26
mkdir -p /docker/nginx/{html,logs}
docker run -d \
--name nginx \
-p 80:80 \
--restart unless-stopped \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /docker/nginx/logs:/var/log/nginx \
nginx:1.26
启动前在宿主机 /docker/nginx/ 目录创建 nginx.conf 文件,输入以下配置
user nginx;
worker_processes 16;
worker_rlimit_nofile 200000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$request_time"';
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
# 性能优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100000;
client_max_body_size 50m;
# open file cache
open_file_cache max=200000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
# gzip压缩
gzip on;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types
text/plain
text/css
application/json
application/javascript
application/xml;
# 负载均衡key(无token用IP)
map $http_token $lb_key {
"" $remote_addr;
default $http_token;
}
# upstream后端集群
upstream backend_cluster {
hash $lb_key consistent;
server 154.37.214.22:8000 max_fails=3 fail_timeout=60s;
server 38.244.14.62:8000 max_fails=3 fail_timeout=60s;
server 38.244.14.219:8000 max_fails=3 fail_timeout=60s;
server 154.9.252.127:8000 max_fails=3 fail_timeout=60s;
keepalive 256;
}
server {
listen 80 reuseport backlog=65535;
server_name _;
# 静态页面根路径
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# /viber API,强制 token
location /viber/ {
proxy_pass http://backend_cluster/;
proxy_http_version 1.1;
proxy_set_header Connection "";
# header透传
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Token $http_token;
# 代理超时
proxy_connect_timeout 6s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 缓冲区设置
proxy_buffer_size 32k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
# 故障切换
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
# 可选:单独访问日志
access_log /var/log/nginx/viber_access.log main buffer=16k flush=5s;
}
}
}
Docker 安装 Mysql 8.0.42
mkdir -p /docker/mysql/{data,conf.d,log}
docker run -d \
--name mysql \
-p 13306:3306 \
--restart unless-stopped \
-e MYSQL_ROOT_PASSWORD='szlnv&vs&j7luiQsBDEwsNusLsEiss' \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf.d:/etc/mysql/conf.d \
-v /docker/mysql/log:/var/log/mysql \
mysql:8.0.42
启动前在宿主机 /docker/mysql/conf.d 目录下创建 my.cnf 文件,输入以下配置
[mysqld]
########## 基础 ##########
user = mysql
port = 3306
skip-name-resolve
skip-host-cache
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
########## 字符集 ##########
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
########## 时区 ##########
default-time-zone = '+8:00'
########## 连接 ##########
max_connections = 500
max_connect_errors = 1000
wait_timeout = 28800
interactive_timeout = 28800
########## 缓存 ##########
table_open_cache = 4096
table_definition_cache = 4096
thread_cache_size = 100
########## InnoDB ##########
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
########## 临时表 ##########
tmp_table_size = 256M
max_heap_table_size = 256M
########## 排序 ##########
sort_buffer_size = 4M
join_buffer_size = 4M
########## 日志 ##########
log_error = /var/lib/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2
########## binlog(如果要主从复制开启) ##########
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
########## 安全 ##########
local_infile = 0
symbolic-links = 0
########## 兼容客户端 ##########
default_authentication_plugin = mysql_native_password
[client]
default-character-set = utf8mb4
Docker 安装 Redis 7
mkdir -p /docker/redis/{data,conf,logs}
docker run -d \
--name redis \
-p 16379:6379 \
--restart unless-stopped \
-v /docker/redis/data:/data \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /docker/redis/logs:/logs \
redis:7 redis-server /usr/local/etc/redis/redis.conf
宿主机 redis.conf 配置文件内容
#################################
# 网络配置
#################################
# 监听地址
# 0.0.0.0 表示允许所有IP访问
# 如果是内网服务器可以改成具体IP
bind 0.0.0.0
# Redis 端口
port 6379
# 保护模式
# yes = 未设置密码时拒绝远程访问
protected-mode yes
# TCP连接队列
tcp-backlog 511
# 客户端空闲多少秒断开
timeout 300
# TCP keepalive
tcp-keepalive 60
#################################
# 安全配置
#################################
# Redis访问密码(必须设置)
requirepass xm4UWT09fM$kVNCUSyJK4s0ZBPPIkahG
#################################
# 进程配置
#################################
# 是否后台运行
# Docker必须为no
daemonize no
# PID文件
pidfile /var/run/redis_6379.pid
#################################
# 日志配置
#################################
# 日志级别
# debug | verbose | notice | warning
loglevel notice
# 日志文件
# Docker建议输出到stdout
logfile ""
#################################
# 数据持久化(RDB)
#################################
# 自动快照规则
# 900秒内至少1个key修改
save 900 1
# 300秒内至少10个key修改
save 300 10
# 60秒内至少10000个key修改
save 60 10000
# RDB文件名
dbfilename dump.rdb
# 数据存储目录
dir /data
#################################
# AOF 持久化
#################################
# 开启AOF
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# AOF同步策略
# always = 每次写入
# everysec = 每秒同步(推荐)
# no = 由系统控制
appendfsync everysec
# 重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#################################
# 内存管理
#################################
# 最大内存(16GB服务器推荐4GB)
maxmemory 4gb
# 内存淘汰策略
# noeviction
# allkeys-lru(推荐)
# volatile-lru
# volatile-ttl
maxmemory-policy allkeys-lru
#################################
# 性能优化
#################################
# I/O线程
# Redis7支持多线程网络IO
io-threads 4
io-threads-do-reads yes
#################################
# 客户端限制
#################################
# 最大客户端连接
maxclients 10000
#################################
# 慢查询日志
#################################
# 慢查询阈值(微秒)
slowlog-log-slower-than 10000
# 保存慢查询数量
slowlog-max-len 128
#################################
# Lua脚本限制
#################################
# Lua执行超时时间
lua-time-limit 5000