阿里云服务器配置(一)基础

  1. 目录

    卸载阿里云盾监控

    安装docker

    安装docker-compose                                                             

    有网环境安装redis   

     docker安装mysql5.7.35       

    第三步:拷贝容器配置文件

    第四步:删除容器,重新启动新容器

     防火墙设置                                

     docker安装RabbitMq  

    注意事项:使用高版本rabbitmq:3.8.14版本及以上,启动了rabbitmq容器,管理端口(默认15672)无法使用,需要开启rabbitmq-plugins

    linux

     通过war安装Jenkins  

    第一步:下载Jenkins的war包     下载地址:https://jenkins.io/download/​

    第二步:启动Jenkins

    第三步:访问Jenkins

    第四步:安装插件

     docker安装nginx

    了解docker中默认路径conf

    html

    安装gitlab

    第一步:下载gitlab包

    第二步: 安装gitlab

    第三步:修改对外暴露的IP及端口

    第四步:验证GitLab是否安装成功


    卸载阿里云盾监控

    查看系统版本 

    cat /etc/redhat-release

    wget http://update.aegis.aliyun.com/download/uninstall.sh
    sh uninstall.sh
    wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh
    sh quartz_uninstall.sh

    删除残留

    pkill aliyun-service
    rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service
    rm -rf /usr/local/aegis*
  2. 安装docker

    安装文件

             将以上文件放入data目录下,授权并执行安装脚本,安装包在百度云盘中,链接如下:链接:https://pan.baidu.com/s/19Kop9_E-OZmnkrAW9OjMbA 
    提取码:dock 

    chmod   +x    /data/docker-install.sh
    sh /data/docker-install.sh
    

    注意:日志在/data/docker/lib/containers下,阿里云日志在/var/lib/docker/containers下。将daemon.json文件放入/etc/docker下,这里是日志配置  daemon.json文件如下

    {
      "registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"],
    	"log-driver": "json-file",
    	"log-opts": {
    		"max-size": "50m",
    		"max-file": "10"
    	}
    
    }

  3. 安装docker-compose                                                             

    安装文件

             将以上文件放入data目录下,授权并执行安装脚本

    cd /data
    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose#
    docker-compose -v
  4. 有网环境安装redis   

    下载镜像并建好目录

    docker pull redis
    mkdir /data/redis
    mkdir /data/redis/data
    mkdir /data/redis/conf

     创建redis.conf文件并放入/data/redis/conf下,这个文件用来映射配置文件的目录。             创建文件并启动镜像

    docker run -p 6379:6379  --name redis --restart=always -v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /data/redis/data:/data  -d redis redis-server /usr/local/etc/redis/redis.conf --requirepass root --appendonly yes 
  5. 安装redis哨兵模式

    Redis集群的哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。 哨兵模式作用:                                                                                  1.通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。              2.当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。                                                                           除了监控Redis服务之外,哨兵之间也会互相监控。本文采用一主、双从、三哨兵方式                        

    部署方式为:docker compose:

    第一步:创建redis docker-compose.yml配置文件

    version: '3.4'
    services:
      master:
        image: redis
        container_name: redis-master
        restart: always
        command: redis-server --port 16380 --requirepass 123456   # 16380 是定义的主库端口,默认:6379;  --requirepass 123456 是redis密码。
        ports:
          - 16380:16380   # 将容器的16380端口映射到宿主机的16380端口上,第一个16380为宿主机端口。
    
      slave1:
        image: redis
        container_name: redis-slave-1
        restart: always
        command: redis-server --slaveof 127.0.0.1 16380 --port 16381 --requirepass 123456 --masterauth 123456   # 127.0.0.1 16380 为主库ip和端口(此处我们使用宿主机的ip和主库映射出来的端口);16381 是定义的从库端口,默认:6379;  --requirepass 123456 是redis密码; --masterauth 123456 是主库的密码。
        ports:
          - 16381:16381
    
    
      slave2:
        image: redis
        container_name: redis-slave-2
        restart: always
        command: redis-server --slaveof 127.0.0.1 16380 --port 16382 --requirepass 123456 --masterauth 123456   # 127.0.0.1 16380 为主库ip和端口(此处我们使用宿主机的ip和主库映射出来的端口);16382 是定义的从库端口,默认:6379;  --requirepass 123456 是redis密码; --masterauth 123456 是主库的密码。
        ports:
          - 16382:16382

    注意:其中的ip改成宿主机的ip  ;                                                                                                         第二步:执行启动命令 在当前目录下执行启动命令                

    docker-compose -f docker-compose.yml up -d

    第三步:创建sentinel-docker-compose.yml  sentinel1.conf   sentinel2.conf  sentinel3.conf配置文件                                                                                    sentinel-docker-compose.yml如下

    version: '3.4'
    services:
      sentinel1:
        image: redis
        container_name: redis-sentinel-1
        command: redis-sentinel /data/dockerfile/redis-sentinel/sentinel1.conf # 自定义路径,可更改,但是需要和volumes中的路径相同。
        restart: always
        ports:
          - 26380:26380
        volumes:
          - ./sentinel1.conf:/data/dockerfile/redis-sentinel/sentinel1.conf # 自定义路径,可更改,但是需要和command中的路径相同。
    
      sentinel2:
        image: redis
        container_name: redis-sentinel-2
        command: redis-sentinel /data/dockerfile/redis-sentinel/sentinel2.conf
        restart: always
        ports:
          - 26381:26381
        volumes:
          - ./sentinel2.conf:/data/dockerfile/redis-sentinel/sentinel2.conf
    
      sentinel3:
        image: redis
        container_name: redis-sentinel-3
        command: redis-sentinel /data/dockerfile/redis-sentinel/sentinel3.conf
        restart: always
        ports:
          - 26382:26382
        volumes:
          - ./sentinel3.conf:/data/dockerfile/redis-sentinel/sentinel3.conf
    

    sentinel1.conf 如下   

    port 26380
    dir /tmp
    sentinel monitor mymaster 116.62.218.173 16380 2
    sentinel auth-pass mymaster 123456
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

       sentinel2.conf 如下       

    port 26381
    dir /tmp
    sentinel monitor mymaster 116.62.218.173 16380 2
    sentinel auth-pass mymaster 123456
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

        sentinel3.conf 如下     

    port 26383
    dir /tmp
    sentinel monitor mymaster 116.62.218.173 16380 2
    sentinel auth-pass mymaster 123456
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes

           第四步:执行启动命令 在当前目录下执行启动命令                                                             

    docker-compose -f sentinel-docker-compose.yml up -d

    执行完后如下所示              docker搭建redis哨兵模式完成,如果主从复制不成功,可以关闭防火墙                                                     

    systemctl stop firewalld

    配置文件中连接如下

    redis:
        password: 123456
        timeout: 5000
        sentinel:
          master: mymaster
          nodes: ip:26380,ip:26381,ip:26382

                             

  6.  docker安装mysql5.7.35       

    第一步:拉取mysql镜像

    docker pull mysql:5.7.35

    第二步: 启动mysql容器 查看数据文件存放路径

    docker run -d \
    -p 3306:3306 \
    --name mysql \
    -e MYSQL_ROOT_PASSWORD=root  \
    mysql:5.7.35
    
    docker exec -it mysql bash
    
    mysql -uroot -p
    # Enter password:root
    
    # mysql> show variables like '%datadir%'; /var/lib/mysql/
    show variables like '%datadir%'; 
    
    # 新建文件夹,将数据库的文件放到/data/mysql/data 以免容器挂了以后文件丢失
    mkdir -p /data/mysql/data
    
    show global variables like '%lower_case%';
    # lower_case_table_names | 1  1是不区分大小写 0区分大小写
    

    第三步:拷贝容器配置文件

    mkdir -p /data/mysql5.7/conf
    #镜像内的配置文件路径为/etc/mysql/mysql.conf.d
    docker cp mysql:/etc/mysql/mysql.conf.d /data/mysql5.7/conf
    #镜像内的配置文件路径为/var/log
    mkdir -p /data/mysql5.7/logs
    docker cp mysql:/var/log /data/mysql5.7/logs

    mysql容器的配置文件存在 /etc/mysql 下

    第四步:删除容器,重新启动新容器

    docker stop mysql
    docker rm mysql
    
    docker run -d \
    -p 3306:3306 \
    --name mysql \
    -v /data/mysql5.7/conf:/etc/mysql/mysql.conf.d \
    -v /data/mysql/data:/var/lib/mysql/ \
    -e MYSQL_ROOT_PASSWORD=veryan \
    --restart always  \
    mysql:5.7.35 --lower-case-table-names=1 
    --max-allowed-packet=32505856
    
  7.  防火墙设置                                

    防火墙开机启动
    systemctl enable firewalld.service 

    查看防火墙状态(注意:服务器对内端口和对外端口要分别开,不然访问不一样

    firewall-cmd --state 或 systemctl status firewalld
    

    关闭防火墙

    systemctl stop firewalld.service

    开启防火墙

    systemctl start firewalld.service

    开放8080,3306,6379端口

    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --zone=public --add-port=6379/tcp --permanent

    重启

    systemctl restart firewalld.service

    重新加载

    firewall-cmd --reload

    重启防火墙可能会造成docker服务出现如下错误

    Error response from daemon: Cannot restart container 9983490cee19: driver failed programming external connectivity on endpoint

    重新启动docker服务就可以了

    systemctl restart docker
    netstat -ntlp   //查看当前所有tcp端口
    netstat -ntulp | grep 80   //查看所有80端口使用情况
    netstat -ntulp | grep 3306   //查看所有3306端口使用情况                                   firewall-cmd --list-ports //查看当前所有端口使用情况
  8.  docker安装RabbitMq  

    第一步:拉取镜像

    docker pull rabbitmq:3.7.7-management

    第二步: 根据下载的镜像创建和启动容器

    mkdir -p /data/rabbitMq
    
    
    docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v /data/rabbitMq:/var/lib/rabbitmq --restart=always --hostname onenext5.1_Rabbit -e RABBITMQ_DEFAULT_VHOST=onenext  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin  rabbitmq:3.7.7-management
    
    
    #查看rabbitmq服务状态
    service rabbitmq-server status

    说明:

    -d 后台运行容器;

    --name 指定容器名;

    -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);

    -v 映射目录或文件;

    --hostname  主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);

    -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)可以使用浏览器打开web管理端:http://Server-IP:15672                                       

     第三步:可以使用浏览器打开web管理端:http://Server-IP:15672,输入用户名:admin,密码 :admin

    注意事项:使用高版本rabbitmq:3.8.14版本及以上,启动了rabbitmq容器,管理端口(默认15672)无法使用,需要开启rabbitmq-plugins

    启动容器后,进入容器,命令如下

    docker exec -it rabbitmq bash
    

     执行rabbitmq-plugins enable rabbitmq_management

    # rabbitmq-plugins enable rabbitmq_management
    
    
    Enabling plugins on node rabbit@c47a12f3024b:
    rabbitmq_management
    The following plugins have been configured:
      rabbitmq_delayed_message_exchange
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_prometheus
      rabbitmq_web_dispatch
    Applying plugin configuration to rabbit@c47a12f3024b...
    The following plugins have been enabled:
      rabbitmq_management
    
    started 1 plugins.
    

    这样就可以访问rabbitmq的管理界面(前提是管理端口对外开放)

    linux

    /usr/local/rabbitmq_server-3.7.0/sbin目录下输入

    新增用户

    rabbitmqctl add_user zhangsan admin123

     新增用户guest guest,并授权

    rabbitmqctl stop_app; rabbitmqctl reset; rabbitmqctl start_app; rabbitmqctl add_user guest guest; rabbitmqctl set_permissions -p / guest ".*" ".*" ".*";

    设置用户级别

    用户级别:

    1、administrator 可以登录控制台、查看所有信息、可以对rabbitmq进行管理

    2、monitoring 监控者 登录控制台,查看所有信息

    3、policymaker 策略制定者 登录控制台,指定策略

    4、managment 普通管理员 登录控制台

    rabbitmqctl set_user_tags zhangsan administrator

    注:1.保存镜像为tar包 docker save   镜像 -o  文件保存位置

    docker save rabbitmq:3.7.7-management  -o  /data/rabbitmqrabbitmq:3.7.7-management.tar

    2.载入为tar包镜像

    docker load -i rabbitmqrabbitmq:3.7.7-management.tar

    3.获取root权限 最后面/是指定文件夹 ,不指定是当前目录下的所有目录

    chown root -R ./

    4.清空文件

    使用cat命令情况,命令如下:
    cat /dev/null > file_name

  9.  通过war安装Jenkins  

    第一步:下载Jenkins的war包     下载地址:https://jenkins.io/download/

    第二步:启动Jenkins

    在这里我们通过Java方式来启动Jenkins,只需要一行命令就可以搞定。

    测试启动Jenkins:java -jar /data1/jenkins/jenkins.war --httpPort=19601

    其中,/data1/jenkins/jenkins.war是我存放 war包 的路径,httpsPort=19601 是当前指定访问的端口是 19601

    也可以通过后台方式启动Jenkins,命令如下:

    nohup java -Djava.awt.headless=true -DJENKINS_HOME=/data1/jenkins -jar /data1/jenkins/jenkins.war --httpPort=19601 
    
    jenkins的工作空间DJENKINS_HOME=/data1/jenkins,此时在/data1/jenkins里面有个plugins文件夹,将插件解压后放到plugins文件夹内,重启Jenkins即可

    第三步:访问Jenkins

    访问Jenkins的地址:http://ip地址:19601 (19601是上一步指定的端口)

    根据界面的提示,到路径 /home/appuser/.jenkins/secrets/initialAdminPassword 下找出密码,然后复制填入即可。

    [appuser@cnshaappdlv023 jenkins]$ cat /home/appuser/.jenkins/secrets/initialAdminPassword
    7a5075230bd64108a58eb375b41600b6
    [appuser@cnshaappdlv023 jenkins]$

    第四步:安装插件

    有网环境可以联网安装插件,无网环境离线安装插件,启动时指定了jenkins的工作空间DJENKINS_HOME=/data1/jenkins,此时在/data1/jenkins里面有个plugins文件夹,将插件解压后放到plugins文件夹内,重启Jenkins即可。

  10.  docker安装nginx

    了解docker中默认路径
    conf

    /etc/nginx/nginx.conf














    html

    /usr/share/nginx/html

    /var/log/nginx

    第一步:拉取镜像

    docker pull nginx

     第二步: 根据下载的镜像创建和启动容器

    #镜像id为05f64a802c26
    docker run --name tmp-nginx-container -d 05f64a802c26
    
    mkdir -p /data1/jenkins/nginx/
    
    docker cp tmp-nginx-container:/etc/nginx/nginx.conf /data1/jenkins/nginx/nginx.conf
    docker cp -a tmp-nginx-container:/usr/share/nginx/html /data1/jenkins/nginx
    docker cp -a tmp-nginx-container:/etc/nginx/conf.d /data1/jenkins/nginx/conf.d
    docker cp -a tmp-nginx-container:/var/log/nginx /data1/jenkins/nginx
    
    docker rm -f tmp-nginx-container
    
    docker run --name mynignx -e TZ="Asia/Shanghai" -d -p 80:80 -v /data1/jenkins/nginx/html:/usr/share/nginx/html -v /data1/jenkins/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data1/jenkins/nginx/conf.d:/etc/nginx/conf.d -v /data1/jenkins/nginx/logs:/var/log/nginx 05f64a802c26
  11. 安装gitlab

    第一步:下载gitlab包

    安装过程参考 了这一篇博文     centos 7离线安装中文版GitLab - 民工黑猫 - 博客园centos 7.6通过离线方式安装中文版GitLab。由于在线安装下载很慢,推荐使用离线安装。离线安装方法: 第1步,下载gitlab安装包 从【清华大学开源软件镜像站 】下载最新中文版ghttps://www.cnblogs.com/yyee/p/13060076.html  但是安装之后网页访问gitlab一直是502,弄了一个下午人都整崩溃了,最后第二天通过如下命令知道gitlab启动问题出在哪,才解决

    gitlab-rake gitlab:check SANITIZE=true --trace  

    第二次出现这个问题使用GitLab的官网去寻找解决办法,README.md · master · GitLab.org / omnibus-gitlab · GitLab 
    ctrl+f 502 找到官方教程中说502出现的问题

    Note that on a single-core server it may take up to a minute to restart Unicorn and Sidekiq. Your GitLab instance will give a 502 error until Unicorn is up again.

    It is also possible to start, stop or restart individual components.

    sudo gitlab-ctl restart sidekiq 
    Unicorn supports zero-downtime reloads. These can be triggered as follows:

    sudo gitlab-ctl hup unicorn 
    Note that you cannot use a Unicorn reload to update the Ruby runtime.

    正式的安装过程                                                                                                                                 从【清华大学开源软件镜像站 】下载最新中文版gitlab安装包,安装包里自带了简体中文汉化包。清华大学开源软件镜像站下载地址 :https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/,下载最新的gitlab-ce-14.4.1-ce.0.el7.x86_64.rpm

    第二步: 安装gitlab

    安装前需要安装 policycoreutils-python依赖

    yum install policycoreutils-python

    安装gitlab,命令如下:

    rpm -ivh gitlab-ce-14.4.1-ce.0.el7.x86_64.rpm

    安装成功就会出现如上界面 (这个是同别的地方粘贴的,自己安装的没有截图,其实只是版本不一样,界面是一样的)

    gitlab常用命令如下:

    sudo gitlab-ctl start    # 启动所有 gitlab 组件;
    sudo gitlab-ctl stop        # 停止所有 gitlab 组件;
    sudo gitlab-ctl restart        # 重启所有 gitlab 组件;
    sudo gitlab-ctl status        # 查看服务状态;
    sudo gitlab-ctl reconfigure        # 启动服务;
    sudo vim /etc/gitlab/gitlab.rb        # 修改默认的配置文件;
    gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab,出问题后这个超级推荐;
    sudo gitlab-ctl tail        # 查看日志;
    

    第三步:修改对外暴露的IP及端口

    编辑gitlab配置文件

    vi /etc/gitlab/gitlab.rb

    修改对外访问的域名或IP:

    # 修改 external_url 'example.gitlab.com' 这一句
    external_url 'http://localhost:9091'  #修改成你自己的IP或域名:端口
    

    ps: 注意这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放范围内的端口。

    重新加载配置

    gitlab-ctl reconfigure     #重新生成相关配置文件,执行此命令时间比较长

    配置gitlab开机自动启动

    systemctl enable gitlab-runsvdir.service
    systemctl start gitlab-runsvdir.service
    # 关闭gitlab的自动启动命令:systemctl disable gitlab-runsvdir.service

    启动GitLab

    systemctl stop firewalld   #关掉防火墙,要不然9091端口不能对外访问
    gitlab-ctl restart         #重启gitlab

    输出下面信息表示启动成功:

      

    查看 gitlab 版本
    #查看版本
    cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

    第四步:验证GitLab是否安装成功

    浏览器地址栏输入 http://192.168.0.101:9091

    http://192.168.0.101:9091/

    用户名:root,第一次访问gitlab需要强制更改密码。密码在/etc/gitlab/initial_root_password下

    登录成功进入的页面:

        










    第5步,设置为简体中文

    先登录GitLab,登录成功后,在Gitlab后台的系统设置里配置简体中文。

    设置路径:Setting--Preferences--Language ,将字符集修改为简体中文。

     经过这一步设置,简体中文版设置完成。

    第6步,创建项目,为项目分配用户

    (1) 创建项目

    进入管理中心 >> 点击左边导航菜单的【项目】 >> 点击【新建项目】按钮 新建一个项目

       

    然后新建一个项目 demo1.MvcOne,创建项目后会生成项目的仓库地址。

     创建项目后会自动生成项目的仓库地址,进入项目详细页面可以看到仓库地址为:

    (2) 创建群组和用户

    创建一个群组,群组名字为: MvcOneGroup

    创建一个用户,用户名字为:user1

    将user1加入群组MvcOneGroup

    (3) 设置用户密码

     创建好用户user1后,需要给user1用户设置密码,因为默认密码为空。

      

    从用户管理页面,进入user1用户的编辑页面设置密码:

     (4) 将用户加入群组

    将user1用户加入群组MvcOneGroup,选择Developer角色级别,这个级别可以对项目进行检出与修改提交操作。

      

    (5) 将demo1.MvcOne项目邀请用户及群组

    进入demo1.MvcOne项目管理页面,点击【Manage access】按钮,邀请用户或群组。

      邀请用户及群组,邀请user1用户及MvcOneGroup群组加入demo1.MvcOne项目,被邀请的单个用户及群组都有访问项目的权限。

     邀请成功后的成员列表:

    第7步,用git命令检出项目到本地目录

    在本机先安装Git客户端,然后在本地目录右键,选择【Git Bash Here】打开 Git命令行窗口。

    输入检出命令,在弹出的授权对话框中输入用名:user1  密码:12345678

    git clone http://192.168.0.101:9091/root/demo1.mvcone.git

     输出上面提示说明项目库检出成功,可以往demo1.mvcone.git项目库里提交代码了。     

  12. 镜像导入导出示例

    导出镜像
    docker export 02c0c5d8767a > /data/onenext5.1_minio.tar

    导入镜像
    docker import - onenext5.1_minio < /data/onenext5.1_minio.tar

    docker import - onenext5.1-frontend:5.1 < /tmp/onenext5.1_frontend.tar

    docker import - onenext5.1-redis:5.1 < /tmp/onenext5.1_redis.tar

    保存镜像
    docker save 02c0c5d8767a > /data/onenext5.1_minio.tar

    载入镜像
    docker load < /data/onenext5.1_minio.tar


    rabbitmq
    导出镜像
    docker save rabbitmq:3.7.7-management  -o  /data/rabbitmqrabbitmq:3.7.7-management.tar
    上传后其他服务器加载镜像
    docker load -i rabbitmqrabbitmq:3.7.7-management.tar 

    docker镜像批量打包
    docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o /tmp/onenext5.1.tar
     

        

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值