lamp架构

一.mysql的编译

1.获得 解压 mysql-boost-5.7.11.tar.gz
tar zxf mysql-boost-5.7.11.tar.gz 

这里写图片描述

2.进入解压后的目录中,开始源码编译三部曲

这里写图片描述

3.安装工具包和依赖包
yum install -y gcc gcc-c++  ncurses-devel bison openssl-devel zlib-devel

这里写图片描述
这里写图片描述

4.获取安装cmake工具,系统带的版本太低,cmake-2.8.12.2-4.el6.x86_64.rpm
yum install cmake-2.8.12.2-4.el6.x86_64.rpm

这里写图片描述

5.编译
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data  -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=./boost/boost_1_59_0/

这里写图片描述

6.编译完成后安装,时间较长,耐心等待(如果是虚拟机的话,可以增加内存和cpu)
make && make install 

这里写图片描述
大约过了半小时,编译安装完了
这里写图片描述

7.保留原配置文件
mv /etc/my.cnf /etc/my.cnf.bak

这里写图片描述

8.把启动脚本放到正常位置/etc/init.d/
  cd /usr/local/lnmp/mysql/support-files
  cp mysql.server /etc/init.d/mysqld -p  

这里写图片描述

9.新建mysql用户
useradd mysql

这里写图片描述

10.设置环境变量
vim ~/.bash_profile
          --PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
        source  ~/.bash_profile

这里写图片描述
这里写图片描述

11.初始化
mysqld --initialize  --user=mysql --basedir=/usr/local/lnmp/mysql/ --datadir=/usr/local/lnmp/mysql/data

这里写图片描述
(初始化密码:phlrCyiw=2lw)

12.权限问题

除了date其他所有人应该是root

chown root.mysql /usr/local/lnmp/mysql/* -R
chown mysql.mysql /usr/local/lnmp/mysql/data -R

这里写图片描述
这里写图片描述

13.ok重启数据库服务,登陆,修改密码
/etc/init.d/mysqld start
mysql -p密码   ##登陆
alter user root@localhost identified by 'redhat';

这里写图片描述

#万一忘记了密码:
/etc/init.d/mysqld stop
       mysqld_safe --skip-grant-tables &
       mysql

       select * from user\G;
       update user set authentication_string=password('westos') where user='root';

二.php-fmp

1.获得解压php-5.6.20.tar.bz2
tar jxf php-5.6.20.tar.bz2 
2.进入解压后的目录
[root@host1 ~]# cd php-5.6.20

这里写图片描述

3.解决依赖问题
这些仓库可以提供
yum install libxml2-devel-2.7.6-14.el6.x86_64
    yum install openssl-devel-1.0.1e-15.el6.x86_64
    yum install libcurl-devel.x86_64 
    yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64
    yum install libpng-devel-1.2.49-1.el6_2.x86_64
    yum install freetype-devel-2.3.11-14.el6_3.1.x86_64
    yum install gmp-devel-4.3.1-7.el6_2.2.x86_64
    yum install net-snmp-devel.x86_64
这几个第三方下载:这里已经下好了再家目录下
    libmcrypt-2.5.8-9.el6.x86_64.rpm  
    libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
    re2c-0.13.5-1.el6.x86_64.rpm

这里写图片描述

4.解决依赖问题安装

这里写图片描述
这里写图片描述

5编译
./configure --prefix=/usr/local/lnmp/php  --with-config-file-path=/usr/local/lnmp/php/etc --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash

报错缺个依赖包
这里写图片描述
安装好后继续编译:总之却那个依赖包安装就行
这里写图片描述
出现这个标示ok
这里写图片描述

6.安装
make && make install

这里写图片描述

7.文件的配置:刚才编译使我们指定路径/usr/local/lnmp/,来看看有没有东西

这里写图片描述
有东西,看上去好了

7.1新建个nginx用户
useradd nginx

这里写图片描述

7.2进入到/usr/local/lnmp/php/etc

复制php-fpm.conf.default 为php-fpm.conf
复制刚才解压的目录/root/php-5.6.20/下的php.ini-production(开发配置文件)到当前目录(/usr/local/lnmp/php/etc)下的php.ini

cd /usr/local/lnmp/php/etc
cp -p php-fpm.conf.default php-fpm.conf
cp /root/php-5.6.20/php.ini-production /usr/local/lnmp/php/etc/php.ini

这里写图片描述

7.3修改时区
vim php.ini (/usr/local/lnmp/php/etc)
       ------->>date.timezone =Asia/Shanghai

这里写图片描述

7.4配置启动脚本

复制刚解压的目录下的sapi/fpm/init.d.php-fpm到 /etc/init.d/php-fpm,给x权限(看清楚,别复制错了)

cp -p /root/php-5.6.20/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

这里写图片描述
这里写图片描述

/etc/init.d/php-fpm start

这里写图片描述

三.nginx安装

1.获得解压nginx-1.10.1.tar.gz和nginx-sticky-module-ng.tar.gz(模块)

这里写图片描述

2.解压两个包

这里写图片描述

3.进入 nginx-1.10.1.tar.gz解压的目录中
[root@host1 ~]# tar zxf nginx-1.10.1.tar.gz 
[root@host1 ~]# tar zxf nginx-sticky-module-ng.tar.gz 

取消bug测试

vim /root/nginx-1.10.1/auto/cc/gcc 

这里写图片描述
这里写图片描述
取消版本号(安全考虑)

vim /root/nginx-1.10.1/src/core/nginx.h 

这里写图片描述
这里写图片描述

4.编译(注意依赖)
./configure --prefix=/usr/local/lnmp/nginx  --with-http_ssl_module --with-http_stub_status_module  --add-module=/root/nginx-sticky-module-ng

这里写图片描述
如果报错安装对应依赖,这里缺少pcre-devel.x86_64 0:7.8-6.el6

yum install pcre-devel.x86_64 0:7.8-6.el6

安装完再次编译

5.安装
[root@host1 nginx-1.10.1]# make && make install 

这里写图片描述

6.刚才指定编译路径/usr/local/lnmp/进去看看

这里写图片描述

cd /usr/local/lnmp/nginx/html/
vim index.php
   ----<?php
    phpinfo()   
       ?>

这里写图片描述

7.配置nginx文件
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
  ---->>
   2 user  nginx;
   3 worker_processes  auto;

   12 events {
   13     worker_connections  65535;
   14 }

   43         location / {
   44             root   html;
   45             index index.php index.html index.htm;
   46         }


   65         location ~ \.php$ {
   66             root           html;
   67             fastcgi_pass   127.0.0.1:9000;
   68             fastcgi_index  index.php;
   69         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
   70             include        fastcgi.conf;
   71         }

这里写图片描述
这里写图片描述
这里写图片描述
注意点:nginx配置文件第13行1024标示nginx缓存最大文件数,再/etc/security/limits.conf 修改

vim /etc/security/limits.conf 
           -- nginx    -    nofile   65535

这里写图片描述
保存退出,查看是否有问题,没有问题启动nginx

/usr/local/lnmp/nginx/sbin/nginx -t
/usr/local/lnmp/nginx/sbin/nginx

这里写图片描述

8浏览器查看nginx的默认发布目录/usr/local/lnmp/nginx/html

这里写图片描述

三.论坛为例数据库的链接说明

1.获得论坛模块解压
yum install unzip
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/  ##解压到nginx默认发布目录
[root@host1 ~]# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/

这里写图片描述

2.进入到nginx默认发布目录

这里新建了一个目录bbs,把upload下的所有东西移到了bbs目录下

[root@host1 ~]# cd /usr/local/lnmp/nginx/html/
[root@host1 html]# ls
50x.html  index.html  index.php  readme  upload  utility
[root@host1 ~]# cd /usr/local/lnmp/nginx/html/
[root@host1 html]# ls
50x.html  index.html  index.php  readme  upload  utility

浏览器前端论坛怛建
这里写图片描述

点击我同意,好多x得解决问题
这里写图片描述

加权限注意功过目录在那
cd  /usr/local/lnmp/nginx/html/bbs/
         chmod 777config/ -R
     chmod 777 data/ -R
     chmod 777 uc_client/ -R 
     chmod 777 uc_server/ -R 

这里写图片描述
刷新下网页就可以进行下一步了
这里写图片描述
填写数据库密码,管理员密码等信息,点击下一步
这里写图片描述
报错,数据库链接错误
这里写图片描述

3.数据库配置
#3.1配置/usr/local/lnmp/php/etc/php.ini
vim /usr/local/lnmp/php/etc/php.ini
--->
1001 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1150 mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
1209 mysqli.default_socket =/usr/local/lnmp/mysql/data/mysql.sock

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

#3.2配置/usr/local/lnmp/mysql/date
chmod 755 /usr/local/lnmp/mysql/data/
#3.3重新加载php服务开启数据库
/etc/init.d/php-fpm reload

这里写图片描述

刷新网页,ok
这里写图片描述
这里写图片描述
数据库查看下
这里写图片描述
这里写图片描述

四.memcache 再pfp-fpm

1.lnmp服务端安装yum install memcached.x86_64(仓库就有)
yum install memcached

这里写图片描述

2.开启memcached服务
/etc/init.d/memcached start  (netstat -anlpute | grep 11211  11211端口要开启)

这里写图片描述

3.环境变量 为了使用phpize
vim ~/.bash_profile 
----->>PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
source ~/.bash_profile 

这里写图片描述
这里写图片描述

4.获得解压memcache-2.2.5.tgz
tar xf memcache-2.2.5.tgz

这里写图片描述

5.6.进入到解压后的目录memcache-2.2.5
[root@host1 ~]# cd memcache-2.2.5
[root@host1 memcache-2.2.5]# phpize 

这里写图片描述

6.编译,安装
[root@host1 memcache-2.2.5]# ./configure --enable-memcache
[root@host1 memcache-2.2.5]#make && make install

这里写图片描述

这里写图片描述

7.查看模块
cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls

这里写图片描述`

####8.php -m | grep memcache什么也没有正常(php加载的模块)

php -m | grep memcache

这里写图片描述

9.给php加入memcahce模块
vim  /usr/local/lnmp/php/etc/php.ini 
  -----862 extension=memcache.so
/etc/init.d/php-fpm reload

这里写图片描述
这里写图片描述
再次检查模块有没有加载,加载则正常,否则有问题

php -m | grep memcache
   ----->>memcache 

这里写图片描述

10.进入memcache-2.2.5.tgz解压后的目录,cp两个文件到nginx的默认发布目录中
[root@host1 ~]# cd memcache-2.2.5
[root@host1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/ 
[root@host1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
11.修改memcache.php
cd /usr/local/lnmp/nginx/html/
vim memcache.php 
22 define('ADMIN_USERNAME','memcache');    // Admin Username
   23 define('ADMIN_PASSWORD','123');         // Admin Password  改密码为123
28 $MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array  ##服务器ip这里是本地服务器
 29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array  注释掉只有一台服务器

这里写图片描述

12.浏览器查看
http://172.25.254.1/memcache.php
http://172.25.254.1/example.php

这里写图片描述
这里写图片描述

http://172.25.254.1/example.php每刷新一次,http://172.25.254.1/memcache.php的hits率就会上升,memcache缓存
这里写图片描述

真机测试:

ab -c 10 -n 1000 http://172.25.254.1/memcache.php
ab -c 10 -n 1000 http://172.25.254.1/example.php

五.memcache 再nginx

1.获得解压openresty-1.13.6.1.tar.gz
[root@host1 ~]# tar zxf openresty-1.13.6.1.tar.gz 

这里写图片描述

2.进入解压后的目录编译
cd openresty-1.13.6.1
./configure --add-module=/root/nginx-sticky-module-ng  --without-http_ssl_module
gmake 
gmake install
3.关闭 /usr/local/lnmp/nginx/sbin/nginx
 /usr/local/lnmp/nginx/sbin/nginx  -s stop  

这里写图片描述

4.把/usr/local/lnmp/nginx/html/下的几个网页复制到/usr/local/openresty/nginx/html/
cp /usr/local/lnmp/nginx/html/index.php  /usr/local/openresty/nginx/html/
cp /usr/local/lnmp/nginx/html/example.php  /usr/local/openresty/nginx/html/
cp/usr/local/lnmp/nginx/html/memcache.php  /usr/local/openresty/nginx/html/
5.编辑/usr/local/openresty/nginx的配置文件
vim /usr/local/openresty/nginx/nginx.conf
  --->>
   2 user  nginx;
   3 worker_processes  auto;

  12 events {
  13     worker_connections  65535;

  18         upstream memcache{
  19         server 172.25.254.6:11211;
  20         keepalive 512;
  21         }

  66      location /memc{
  67         internal;
  68         memc_connect_timeout 100ms;
  69         memc_send_timeout 100ms;
  70         memc_read_timeout 100ms;
  71         set $memc_key $query_string;
  72         set $memc_exptime 300;
  73         memc_pass memcache;
  74         }

  77      location ~ \.php$ {
  78           set $key $uri$args;
  79           srcache_fetch GET /memc $key;
  80           srcache_store PUT /memc $key;
  81           root    html;
  82           fastcgi_pass   127.0.0.1:9000;
  83           fastcgi_index  index.php;
  84         # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  85             include        fastcgi.conf;
  86         }
 /usr/local/openresty/nginx/sbin/nginx  -s reload  ##重新加载
6.浏览器查看 出现以下标识成功默认发布目录/usr/local/openresty/nginx/html/
http://172.25.254.1/

这里写图片描述
真机shell
ab -c 10 -n 1000 http://172.25.254.1/memcache.php
ab -c 10 -n 1000 http://172.25.254.1/example.php
对比memcache再php-fmp和nginx的Requests per second: 1167.27 [#/sec] (mean)每秒请求数据帧,要比memcache再php-fmp高出许多

六.Tomcat+nginx+memcache

1.get jdk-7u79-linux-x64.tar.gz和get apache-tomcat-8.5.24.tar.gz
2.解压到/usr/local/
tar  zxf jdk-7u79-linux-x64.tar.gz   -C /usr/local/
tar  zxf  apache-tomcat-8.5.24.tar.gz   -C /usr/local/

这里写图片描述

3.做个链接或者重命名复制等都可以,为了方便
ln -s /usr/local/jdk1.7.0_79/   /usr/local/java 
ln -s /usr/local/apache-tomcat-8.5.24/   /usr/local/tomcat

这里写图片描述

4.java环境变量设置
vim /etc/profile
   export JAVA_HOME=/usr/local/java
   export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
   export PATH=$PATH:$JAVA_HOME/bin
source  /etc/profile
echo $PATH   ##查看

这里写图片描述
这里写图片描述
这里写图片描述

5.再/mnt下写一个简单的java程序
cd /mnt
vim  test.java
  -----
public class test{
        public static void main(String[] args)
        {
                System.out.println("hello world!");
        }
}

这里写图片描述
这里写图片描述
ok,没问题

6.启动tomcat
/usr/local/tomcat/bin/startup.sh    ##启用tomcat

这里写图片描述
浏览器测试
这里写图片描述

7.写一个test.jsp(Tomcat的默认发布目录 cd /usr/local/tomcat/webapps/ROOT/)
vim /usr/local/tomcat/webapps/ROOT/test.jsp
 -------host1 time is:<%=new java.util.Date() %>

这里写图片描述
浏览器:http://172.25.254.1:8080/test.jsp
这里写图片描述

8.我们让每次访问不需要输入端口号8080
vim /usr/local/openresty/nginx/conf/nginx.conf
  ------>>
 63         location ~ \.jsp$ {
 64             proxy_pass   http://127.0.0.1:8080;
 65         }
/usr/local/openresty/nginx/sbin/nginx -s reload

这里写图片描述
这里写图片描述

浏览器查看
这里写图片描述
或者再前边定义tomcat,后边引用也行
这里写图片描述
这里写图片描述

9.添加两台tomcat服务器
#1.把host1的/usr/local/tomcat 和java各考份到host2的/usr/local下
cd /usr/local
 scp -r tomcat/ host2:/usr/local/
 scp -r java/ host2:/usr/local/

这里写图片描述

2.把host1下的/etc/profile考份给host2的/etc/profile,环境变量,也可以手动添加
 vim /etc/profile
  export JAVA_HOME=/usr/local/java
  export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
echo $PATH  ##检查下

这里写图片描述

3.进入到host2的/usr/local/tomcat/webapps/ROOT修改test.jsp
vim /usr/local/tomcat/webapps/ROOT/test.jsp
  host2 time is:<%=new java.util.Date() %>
/usr/local/tomcat/bin/startup.sh   重启tomcat服务

这里写图片描述

4.host1修改nginx配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
   22          upstream tomcat {
   23          sticky;
   24          server 172.25.254.1:8080;
   25          server 172.25.254.2.8080;
   26        }

这里写图片描述
这里写图片描述

5.浏览器查看,不管怎么刷新就是不会显示2的test.jsp,这是因为memcache起作用了,第4步的nginx配置文件23行sticky模块,浏览器缓存了,第一次访问请求到的数据缓存起来,后边访问直接返还,
172.25.254.1/test.jsp

这里写图片描述
基于上边的实验,修改nginx配置文件注释掉sticky行,重新加载nginx
这里写图片描述
这里写图片描述

浏览器再次查看:
这里写图片描述
这里写图片描述

nginx+tomcat+memcached

系统环境:rhel6 x64 selinux and iptables disabled
主机角色:node1: 192.168.0.91:nginx tomcat memcached
node2: 192.168.0.92:tomcat memcached
软件下载:http://www.nginx.org
http://code.google.com/p/memcached-session-manager/
这里写图片描述
session 的序列化方案官方推荐的有 4 种:
1. java serialization
2. msm-kryo-serializer
3. msm-javolution-serializer
4. msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,此实验我们采用 kryo 方式。

1.把如下软件包放置到host1和host2的/usr/local/tomcat/lib 目录中
kryo-1.03.jar
kryo-serializers-0.8.jar
memcached-2.5.jar
memcached-session-manager-1.5.1.jarmemcached-session-manager-tc7-1.5.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.5.1.jar
reflectasm-0.9.jar

host1
这里写图片描述
host2
这里写图片描述

2.编辑tomcat的配置文件

host1

vi /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager  className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
  failoverNodes="n1"  #在 node2 上此项设置为“n2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
/usr/local/tomcat/bin/startup.sh 
/etc/init.d/memcached start

这里写图片描述
这里写图片描述
开启memcache,重启tomcat
这里写图片描述
host2

vim /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager    className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
  failoverNodes="n2"  #在 node2 上此项设置为“n2requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

/usr/local/tomcat/bin/startup.sh 

这里写图片描述
完成后重启tomcat,安装mamcached,并启动
这里写图片描述
这里写图片描述

至此,ok
为了实验效果,我们再host1和host2写个明显的测试页test.jsp(保存到/usr/local/tomcat/webapps/ROOT/)

vim  /usr/local/tomcat/webapps/ROOT/test.jsp

内容:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

这里写图片描述
这里写图片描述
完成后给host2考份

scp /usr/local/tomcat/webapps/ROOT/test.jsp host2:/usr/local/tomcat/webapps/ROOT/

这里写图片描述

这个时候浏览器测试,什么也不会显示,因为我们用的是tomcat8以上版本,换个低点的:测试,实验步骤同上

apache-tomcat-7.0.37.tar.gz 

完成配之后nginx注释掉了sticky,默认轮询,启动各自的tomcat检测下:
host1的tomcat服务正常
这里写图片描述
host2的tomcat服务正常
这里写图片描述
这里写图片描述
这里写图片描述
实验:
这里写图片描述
输入user1,123;user2,234,提交

cd /usr/local/tomcat/logs
cat  cat catalina.out

这里写图片描述
这里写图片描述
host2查看缓存
这里写图片描述
关闭host1的tomcat,浏览器再怎么刷新数据也不会丢失
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值