记录运维、全栈开发踩坑笔记
服务器初始化
适配系统:CentOS Linux release 7.9 拿到云服务器,第一件事:安全初始化 初始化核心目标清单: 系统完整更新 + 自动清理冗余包、缓存 创建普通运维用户,禁用 root 直连操作 SSH 密钥免密登录、加固 SSH(改端口、禁密码、禁 root 登录) Firewalld 防火墙最小化放行端口 Fail2ban 防 SSH 暴力破解,自动拉黑恶意 IP 开启 TCP BBR 网络加速 时区、基础运维工具安装 一键自动化初始化脚本 一、基础系统信息查看命令 # 系统版本 cat /etc/os-release # 内核版本 uname -r # 系统位数 uname -m # 内存 free -h # 磁盘挂载 df -h 二、系统更新 + 清理冗余包 / 缓存(你需求的 yum 全套) CentOS7 使用 yum,对应 Ubuntu apt full-upgrade/autoremove/autoclean 功能整合: # 1. 全量升级所有软件、内核、安全补丁 yum update -y # 2. 自动卸载无用孤立依赖、旧内核冗余包 yum autoremove -y # 3. 清理yum下载的rpm缓存包 yum clean all # 4. 重建本地软件源缓存,加速后续安装 yum makecache 单行整合一键执行: ...
安装Docker
适配系统:CentOS Linux release 7.9 前置说明 安全初始化完成后安装 Docker+Compose 插件 + Portainer 可视化面板 Docker 优势同文档不变,仅系统安装逻辑适配 CentOS7。 架构校验命令: uname -m # 输出x86_64 64位,满足安装要求 一、卸载系统旧版本 Docker 组件 CentOS7 自带旧版 docker,先清理避免冲突 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 二、安装依赖 & 配置 Docker 官方 YUM 源 安装 yum 工具依赖 yum install -y yum-utils ca-certificates curl 添加 Docker 官方 YUM 仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 刷新 yum 缓存 yum makecache fast 三、安装 Docker Engine + Compose 全套组件 yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 四、启动 Docker 并设置开机自启 systemctl start docker systemctl enable docker # 查看运行状态 systemctl status docker 五、配置国内 Docker 镜像加速(解决拉取慢) mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.m.daocloud.io", "https://docker.1panel.live", "https://dockerproxy.net", "https://docker.xuanyuan.me", "https://docker-0.unsee.tech", "https://registry.cyou" ] } EOF # 重载系统服务配置,重启docker生效 systemctl daemon-reload systemctl restart docker # 验证镜像配置是否加载成功 docker info 六、普通用户免 sudo 操作 docker(对应前文创建的 buer 用户) 报错:permission denied while trying to connect to the Docker daemon socket 执行以下命令 ...
安装MySQL
这是一篇踩坑笔记,主要记录的是问题排查的过程。 问题:docker-compose部署Postgres通过nginx的TCP转发机制避免对外暴露接口而一直报错:Connection attempt time out、Connection Refused、Connection Reset。 场景说明 使用docker-compose分开独立部署posetgres和nginx容器,借助nginx的TCP转发机制暴露15432端口给外部,隐藏5432端口,达到保护数据库连接安全的目的。 使用的自定义目录是/dev-ops,手动创建容器共用网络: # 基础创建 docker network create middleware_net 创建mysql容器 /dev-ops目录下新建mysql的docker-compose-mysql.yml version: "3.8" services: mysql: image: mysql:8.0-debian container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: Root@123456 MYSQL_DATABASE: test_db MYSQL_ROOT_HOST: '%' volumes: - ./mysql/data:/var/lib/mysql:z - ./mysql/conf/my.cnf:/etc/mysql/my.cnf:ro networks: middleware_net: networks: middleware_net: external: true /dev-ops目录下新建文件夹用于容器内部路径绑定: mkdir -p /dev-ops/mysql/data mkdir -p /dev-ops/mysql/conf /dev-ops/mysql/conf下新建文件my.cnf: [mysqld] # 字符集修正 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 基础配置 pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv = /var/lib/mysql-files # 关闭严格报错可选 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 最大连接 max_connections = 1000 default-storage-engine = INNODB # innodb优化 innodb_buffer_pool_size = 512M innodb_log_file_size = 256M # 时区 default_time_zone = '+8:00' [mysql] default-character-set=utf8mb4 启动镜像,进入/dev-ops目录: ...
安装Nginx、SSL证书
Docker部署镜像的关键知识点: 镜像的无状态原则:镜像属于只读模版,打包程序、运行环境,本身不存储运行时产生的数据;同一镜像可以启动多个容器(沙箱),相互独立、互不干扰;容器销毁后容器内临时数据直接丢失。 数据的持久化要求:容器生命周期结束后数据丢失,而磁盘挂载将业务数据、配置文件剥离容器保存,实现数据脱离容器独立留存。 Nginx简介 2002年Igor Sysoev 开发 Nginx,目标用于俄罗斯高流量门户网站,解决大并发、高访问场景下 Apache 性能孱弱的痛点。 出色的核心设计包括: 多进程+IO多路复用:Master进程处理主线、Worker进程处理连接,单个进程可以维护成千上万个TCP连接。 事件驱动异步非阻塞:IO读写使用异步处理,静态文件、反向代理等待磁盘/网络期间,处理其他请求,效率拉满。 模块化架构:内核极简,大多数功能(SSL、gzip、rewrite、限流、缓存)以插件模块实现,按需编译,轻量无冗余。 经典能力场景: 反向代理:接收请求后转发,隐藏后端真实IP,实现安全隔离。 负载均衡:内置轮询、加权轮询、IP哈希策略,流量分发,分摊压力。 动静分离:静态资源本地读取,动态接口转发给后端服务。 热重载:nginx -s reload,Master生成Worker处理新请求,就Worker处理完后销毁,全程服务不中断。 Docker启动Nginx 磁盘挂载关键目录: /dev-ops/ ├── nginx/ │ ├── conf/ │ ├── html/ │ ├── logs/ │ └── ssl/ └── docker-compose.yml 创建对应目录: sudo mkdir -p /dev-ops/nginx/{conf,html,logs,ssl} 有三个必要的文件:基础配置(/dev-ops/nginx/conf/nginx.conf)、服务配置(/dev-ops/nginx/conf/conf.d/default.conf)和首页(/dev-ops/nginx/html/index.html) # /dev-ops/nginx/conf/nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } # /dev-ops/nginx/conf/conf.d/default.conf server { listen 80; listen [::]:80; location / { root /usr/share/nginx/html; index index.html; } location /api { root /usr/share/nginx/html; index index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } # /dev-ops/nginx/html/index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Nginx</title> </head> <body> Hi Boy, Congratulations on your successful deployment! </body> </html> 容器编排文件/dev-ops/docker-compose.yml ...