linux部署服务相关基础操作:磁盘挂载、jdk安装、docker安装、docker-compose环境安装、mysql、redis、jenkins等

磁盘挂载

1、运行mount查看数据盘挂载信息。
	返回结果中没有/dev/vdb1的信息。
2、运行fdisk -l查看数据盘分区信息。
3、格式化磁盘   mkfs -t ext4 /dev/vdb
     3.1、  (格式化后这一步跳过)运行cat /etc/fstab查看数据盘分区/dev/vdb1原有的挂载点名称。
4、运行mkdir /data重新创建数据盘分区的挂载点。
5、运行mount /dev/vdb /data重新挂载数据盘分区。
6、运行df -h查看挂载结果。
7、卸载 umount /dev/vdb

jdk 安装

1、下载所需jdk资源 上传至服务器
2、创建 /usr/local/java目录
    mkdir /usr/local/java
3、解压jdk 至/usr/local/java目录
    tar -xzvf jdk8.tar.gz.gz -C /usr/local/java
4、配置环境变量。
    编辑/etc/profile文件,添加JDK的路径到环境变量中。
    vim /etc/profile
    编辑后的配置文件内容为
        export JAVA_HOME=/usr/local/java/jdk1.8.0_60 
        export CLASSPATH=$JAVA_HOME/lib/ 
        export PATH=$PATH:$JAVA_HOME/bin
5、使环境变量生效。执行source /etc/profile命令,使刚刚设置的JDK环境变量立即生效。
6、验证安装。使用Java命令(如java -version)检查JDK是否安装成功。如果看到JDK版本信息,表示安装成功

docker 安装

1、清理或卸载旧的或已安装的docker版本
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
2、设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

异常解决
    cd /etc/yum.repos.d
    #根据自己服务器的版本 下载对应的yum 选一个即可
    wget http://mirrors.aliyun.com/repo/Centos-8.repo
    或
    wget http://mirrors.aliyun.com/repo/Centos-7.repo
3、安装docker 其中需要输入命令 一直输 y
    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4、启动docker 至此 docker已安装完成
    sudo systemctl start docker

docker-compose环境安装

1、安装git
sudo yum install -y git
2、安装maven
sudo yum install -y maven
3、安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
5、安装docker
sudo yum install -y docker-ce
6、启动服务
sudo systemctl start docker
7、安装docker-compose 如果用命令下载不下来 可以自行去别处下载 然后拷贝至/usr/local/bin/目录下
curl -L https://github.com/docker/compose/releases/download/v2.17.1/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose
8、授权
sudo chmod +x /usr/local/bin/docker-compose
9、检测版本号
docker-compose -v

基于docker-compose 安装mysql redis jenkins nginx等

1、编辑docker-compose.yml 需要什么 就自行添加什么
    services:
      mysql:
        image: mysql:8.0.31
        container_name: mysql
        environment:
          # 时区上海
          TZ: Asia/Shanghai
          # root 密码
          MYSQL_ROOT_PASSWORD: 12345678
          # 初始化数据库
          # MYSQL_DATABASE: fishery-cloud
        ports:
          - "3306:3306"
        volumes:
          # 数据挂载
          - /data/docker/mysql/data/:/var/lib/mysql/
          # 配置挂载
          - /data/docker/mysql/conf/:/etc/mysql/conf.d/
        command:
          # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=0
        privileged: true
        network_mode: "host"
    
      redis:
        image: redis:6.2.7
        container_name: redis
        ports:
          - "6379:6379"
        environment:
          # 时区上海
          TZ: Asia/Shanghai
        volumes:
          # 配置文件
          - /data/docker/redis/conf:/redis/config
          # 数据文件
          - /data/docker/redis/data/:/redis/data/
        command: "redis-server /redis/config/redis.conf"
        privileged: true
        network_mode: "host"
      
      jenkins:
          user: root                                 # 为了避免一些权限问题 在这我使用了root
          restart: always                            # 重启方式
          image: jenkins/jenkins:2.346.3-lts-jdk8    # 指定服务所使用的镜像,指定jdk版本
          container_name: jenkins                    # 容器名称
          environment:
            JAVA_OPTS: "-server -Xms512m -Xmx1024m"
          ports: # 对外暴露的端口定义
            - 8082:8080                              # 访问Jenkins服务端口
            - 50000:50000
          volumes: # 卷挂载路径
            - /data/docker/jenkins:/var/jenkins_home  # 这是我们一开始创建的目录挂载到容器内的jenkins_home目录
            - /var/run/docker.sock:/var/run/docker.sock          # 这是为了我们可以在容器内使用docker命令
            - /usr/bin/docker:/usr/bin/docker                    # 这是为了我们可以在容器内使用docker命令
            - /usr/bin/docker-compose:/usr/bin/docker-compose    # 这是为了我们可以在容器内使用docker-compose命令
      
      nginx-web:
          image: nginx:1.22.1
          container_name: nginx-web
          environment:
            # 时区上海
            TZ: Asia/Shanghai
          ports:
            - "80:80"
            - "443:443"
          volumes:
            # 证书映射
            - /opt/docker/nginx/cert:/etc/nginx/cert
            # 配置文件映射
            - /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
            # 配置文件映射
            - /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d
            # 页面目录
            - /data/docker/nginx/html:/usr/share/nginx/html
            # 日志目录
            - /data/docker/nginx/log:/var/log/nginx
          privileged: true
          network_mode: "host"
2、上传docker-compose.yml 和相关配置文件至/data/docker 目录下
	2.1 、mysql配置 my.cnf中的内容
bash 复制代码
[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

# 设置东八区时区
default-time_zone = '+8:00'

# 设置密码验证规则,default_authentication_plugin参数已被废弃

# 改为authentication_policy

#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password

# 限制导入和导出的数据目录
# 为空,不限制导入到处的数据目录;
# 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
# 为NULL,禁止导入与导出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=

init_connect='SET collation_connection = utf8mb4_0900_ai_ci'

init_connect='SET NAMES utf8mb4'

character-set-server=utf8mb4

collation-server=utf8mb4_0900_ai_ci

skip-character-set-client-handshake

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

skip-name-resolve

max_connections=1600
lower_case_table_names=0
skip-log-bin

2.2 、redis配置 redis.conf

bash 复制代码
# redis 密码
requirepass 12345678

# key 监听器配置
# notify-keyspace-events Ex

# 配置持久化文件存储路径
dir /redis/data
# 配置rdb
# 15分钟内有至少1个key被更改则进行快照
save 900 1
# 5分钟内有至少10个key被更改则进行快照
save 300 10
# 1分钟内有至少10000个key被更改则进行快照
save 60 10000
# 开启压缩
rdbcompression yes
# rdb文件名 用默认的即可
dbfilename dump.rdb

# 开启aof
appendonly yes
# 文件名
appendfilename "appendonly.aof"
# 持久化策略,no:不同步,everysec:每秒一次,always:总是同步,速度比较慢
# appendfsync always
appendfsync everysec
# appendfsync no

2.3 、nginx配置 nginx.conf

bash 复制代码
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 限制body大小
    client_max_body_size 100m;

    # gzip 压缩
    gzip on;
    gzip_min_length 1k;
    gzip_disable "MSIE [1-6]\.";
    gzip_comp_level 5;
    gzip_types text/css text/javascript text/xml text/plain application/json application/javascript application/x-javascript application/xml application/xml+rss;
    gzip_http_version 1.1;

    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;

    upstream server {
        ip_hash;
        # gateway 地址
        server 127.0.0.1:8080;
        # server 127.0.0.1:8081;
    }

    server {
        listen       80;
        server_name  localhost;

        # https配置参考 start
        #listen       443 ssl;

        # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
        #ssl on;
        #ssl_certificate      /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_certificate_key  /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_session_timeout 5m;
        #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #ssl_prefer_server_ciphers on;
        # https配置参考 end

        # 演示环境配置 拦截除 GET POST 之外的所有请求
        # if ($request_method !~* GET|POST) {
        #     rewrite  ^/(.*)$  /403;
        # }

        # location = /403 {
        #     default_type application/json;
        #     return 200 '{"msg":"演示模式,不允许操作","code":500}';
        # }

        # 限制外网访问内网 actuator 相关路径
        location ~ ^(/[^/]*)?/actuator(/.*)?$ {
            return 403;
        }

        location / {
            root   /usr/share/nginx/html;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
3、执行命令安装 mysql redis nginx-web
    cd /data/docker
    docker-compose up -d mysql redis nginx-web
    
    问题1:如果执行上面的命令失败,可以尝试按以下方式解决
        在 docker-ce 中,已废弃/etc/sysconfig/docker 这种配置方式,转而采用
        /etc/docker/daemon.json 来配置
        将 docker 的下载镜像的仓库,修改为国内的友商的镜像仓
        vim /etc/docker/daemon.json 
        修改内容为
        {
          "registry-mirrors": ["https://9xi9dqfp.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
        }
        然后重启docker  
            sudo systemctl daemon-reload
            sudo systemctl restart docker
    问题2:如果执行命令后容器生成成功了,但是未启动成功,可查看对应容器日志,解决对应问题
        1、如果是Can't open the append-only file: Permission denied 类的,则给对应宿主机目录加上权限即可 
            例: chmod 777 /data/docker/redis/data  
相关推荐
Daniel 大东4 分钟前
idea 解决缓存损坏问题
java·缓存·intellij-idea
wind瑞11 分钟前
IntelliJ IDEA插件开发-代码补全插件入门开发
java·ide·intellij-idea
HappyAcmen11 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
马剑威(威哥爱编程)16 分钟前
读写锁分离设计模式详解
java·设计模式·java-ee
鸽鸽程序猿17 分钟前
【算法】【优选算法】前缀和(上)
java·算法·前缀和
修道-032318 分钟前
【JAVA】二、设计模式之策略模式
java·设计模式·策略模式
九圣残炎23 分钟前
【从零开始的LeetCode-算法】2559. 统计范围内的元音字符串数
java·算法·leetcode
当归102436 分钟前
若依项目-结构解读
java
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
iiiiiankor1 小时前
C/C++内存管理 | new的机制 | 重载自己的operator new
java·c语言·c++