LAMP环境搭建(分布式)

LAMP是Linux Apache MySQL PHP的简写,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言,通常是网站。
本文介绍的是LAMP在三台Centos7上搭建分布式LAMP
http:192.168.1.109
mysql:192.168.1.111
php:192.168.1.105


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装Apache

主流网站服务器软件:
Apache:时间较早,模块化设计,几乎可以运行在所有操作系统上,性能稳定;配置相对复杂,自身无法解析动态网页。
nginx:高性能、高并发的网站和反向代理服务器,也可做邮件代理,阿里再开发tengine应用于天猫和淘宝。
tomcat:java应用服务器,也是servlet容器,可以认为是Apache的扩展,可以独立运行,也可以和Apache合作。
Apache与nginx的区别:
nginx:配置简洁、反向代理、负载均衡、静态数据处理能力是Apache3倍以上,消耗内存少。
Apache:跨所有平台、支持通用网关接口(cgi)、支持多种动态网站语言(php,python,perl,java),模块组件比nginx多,
运行稳定;配置复杂

Apache2.4版本
新特性:
MPM 支持在运行时装载;不过要开启这种特性
Apache安装步骤:
1、检查是否已安装rpm包httpd

[root@httpd ~]# rpm -q httpd
未安装软件包 httpd 
[root@httpd ~]# rpm -e httpd --nodeps
错误:未安装软件包 httpd 

2、安装前提软件
需要前提软件
apr-1.5.2.tar.gzapr-util-1.5.4.tar.gz
apr-util-1.5.4.tar.gz
zlib-1.2.8.tar.gz
pcre-8.39.tar.gz
openssl-1.0.1u.tar.gz
软件我会放在资源里可自行下载
如果编译安装无法执行,可能是开发软件工具没有安装,需要先安装开发软件:命令如下

[root@httpd ~]# yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel

将下载的前提软件放在/usr/src目录下
写编译安装脚本

[root@httpd ~]# mkdir /sh
[root@httpd ~]# cd /sh
[root@httpd sh]# vim qianti.sh

添加:

#!/bin/bash
cd /usr/src
tar zxf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install

cd ..
tar zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

cd ..
tar zxf zlib-1.2.8.tar.gz 
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib && make && make install

cd ..
tar zxf pcre-8.39.tar.gz
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install

cd ..
tar zxf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install

保存退出
执行脚本:

[root@httpd sh]# sh qianti.sh

3、安装Apache主程序
这里我的httpd包是httpd-2.4.25.tar.gz
如需使用最新版本可到官网http://httpd.apache.org/下载最新版本
这个版本的包放在资源里了
把httpd包放在/usr/src/目录下
编写安装脚本

[root@httpd ~]# cd /sh
[root@httpd sh]# vim httpd.sh

添加:

#!/bin/bash
cd /usr/src
tar zxf httpd-2.4.25.tar.gz
cd httpd-2.4.25
./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install

保存退出
执行脚本

[root@httpd sh]# sh httpd.sh

4、优化链接

[root@httpd ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin

添加系统服务

[root@httpd ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@httpd ~]# vim /etc/init.d/httpd

定位到第二行:修改为

# chkconfig: 35 85 15    		\\声明服务启动级别,开机启动顺序,关机关闭顺序
# description: apache 2.4.25	\\服务声明,简要信息

保存退出

chkconfig --add httpd			\\添加httpd到系统服务
chkconfig httpd on				\\设置服务开机自启(等同于:systemctl enable httpd)
systemctl start httpd			\\开启服务(等同于:service httpd start)

二、编译安装MySQL

在mysql服务器上
MySQL官网:https://www.mysql.com/

MySQL是一个关系型数据库,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MariaDB官网:https://mariadb.com

MariaDB是MySQL的一个分支,由MySQL原作者开发,MariaDB 5.5版本对应MySQL 5.5版本,而MariaDB 10.0版本对应MySQL 5.6版本,有以下版本:

Community 社区版
Enterprise 企业版
GA(Generally Available)通用版
DMR(Development Milestone Release)开发里程碑发布版
RC(Release Candidate)发行候选版
Alpha 内部测试版
Beta 开放测试版
MySQL的最新版本是 5.7GA和8.0DMR ,MariaDB的最新版本是10.3.7 。

下载软件包
我们可以到官网去下载对应版本的MySQL/MariaDB的包,在这里,我使用的是免编译的二进制包。在CentOS7之前的版本都有区分32位和64位,CentOS7可以直接选择64位的包下载,带有x86_64字样的就是64位的包,带有i686字样的就是32位的包。
也可以在我的资源里下载mysql的rpm包本地yum以下就可以直接使用mysql5.6版本
查看linux是多少位的:

# uname -i
x86_64

下载MySQL5.6的二进制包:

# cd /usr/local/src/

# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
正在解析主机 mirrors.sohu.com (mirrors.sohu.com)... 221.236.12.140
正在连接 mirrors.sohu.com (mirrors.sohu.com)|221.236.12.140|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:316320366 (302M) [application/octet-stream]
正在保存至: “mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz”

100%[=========================================================================>] 316,320,366  475KB/s 用时 14m 48s

2018-06-26 14:47:30 (348 KB/s) - 已保存 “mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz” [316320366/316320366])

初始化
解压下载的包:

# tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 

移动解压完的目录并更改名字为mysql(容易出现的错误,local下已经存在mysql文件,如果这样移动,会变成移动到mysql下,这样就会报错,mv前提前进入local看下是否已存在mysql文件夹)。

# [ -d /usr/local/mysql ] && mv /usrlocal/mysql /usr/local/mysql_old

# mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql

上面用到特殊符号&&,它表示当前面的命令执行成功时,才会执行后面的命令。如果/usr/local/mysql目录已经存在,就要把它改个名字,否则后面步骤会出错。

建立MySQL用户,启动mysql需要该用户:

# useradd -s /sbin/nologin mysql

# cd /usr/local/mysql

创建datadir,数据库文件会放到这里:

# mkdir -p data/mysql

更改权限,否则后面会报错:

# chown -R mysql:mysql data/mysql

进行初始化,指定用户为mysql,指定数据存放路径/usr/local/mysql/data/mysql:

# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper

上面出错了,有提示“Dumper”,我们可以查查

# yum list |grep perl | grep -i Dumper
perl-Data-Dumper.x86_64                   2.145-3.el7                    @base  
perl-Data-Dumper-Concise.noarch           2.020-6.el7                    epel   
perl-Data-Dumper-Names.noarch             0.03-17.el7                    epel   
perl-XML-Dumper.noarch                    0.81-17.el7                    base 

不知道的情况下,可以一个个去安装上面的包,这里我们知道是第一个,使用yum安装

# yum install -y perl-Data-Dumper.x86_64

再次初始化:

# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
FATAL ERROR: The parent directory for the data directory '/data/mysql' does not exist.
If that path was really intended, please create that directory path and then
restart this script.
If some other path was intended, please use the correct path when restarting this script.

提示没有这样的目录或文件,我们需要在data/mysql前面加上绝对路径

# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

又报错了,提示没有libaio.so.1,没有就安装:

# yum install -y libaio*

安装完之后再次执行初始化:

# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql

Installing MySQL system tables...2018-06-26 15:59:53 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-06-26 15:59:53 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2018-06-26 15:59:53 0 [Note] ./bin/mysqld (mysqld 5.6.36) starting as process 3349 ...
2018-06-26 15:59:53 3349 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-06-26 15:59:53 3349 [Note] InnoDB: The InnoDB memory heap is disabled
2018-06-26 15:59:53 3349 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-06-26 15:59:53 3349 [Note] InnoDB: Memory barrier is not used
2018-06-26 15:59:53 3349 [Note] InnoDB: Compressed tables use zlib 1.2.3
2018-06-26 15:59:53 3349 [Note] InnoDB: Using Linux native AIO
2018-06-26 15:59:53 3349 [Note] InnoDB: Using CPU crc32 instructions
2018-06-26 15:59:53 3349 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-06-26 15:59:53 3349 [Note] InnoDB: Completed initialization of buffer pool
2018-06-26 15:59:53 3349 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2018-06-26 15:59:53 3349 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2018-06-26 15:59:53 3349 [Note] InnoDB: Database physically writes the file full: wait...
2018-06-26 15:59:53 3349 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2018-06-26 15:59:54 3349 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2018-06-26 15:59:55 3349 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2018-06-26 15:59:55 3349 [Warning] InnoDB: New log files created, LSN=45781
2018-06-26 15:59:55 3349 [Note] InnoDB: Doublewrite buffer not found: creating new
2018-06-26 15:59:55 3349 [Note] InnoDB: Doublewrite buffer created
2018-06-26 15:59:55 3349 [Note] InnoDB: 128 rollback segment(s) are active.
2018-06-26 15:59:55 3349 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-06-26 15:59:55 3349 [Note] InnoDB: Foreign key constraint system tables created
2018-06-26 15:59:55 3349 [Note] InnoDB: Creating tablespace and datafile system tables.
2018-06-26 15:59:55 3349 [Note] InnoDB: Tablespace and datafile system tables created.
2018-06-26 15:59:55 3349 [Note] InnoDB: Waiting for purge to start
2018-06-26 15:59:55 3349 [Note] InnoDB: 5.6.36 started; log sequence number 0
2018-06-26 15:59:55 3349 [Note] Binlog end
2018-06-26 15:59:55 3349 [Note] InnoDB: FTS optimize thread exiting.
2018-06-26 15:59:55 3349 [Note] InnoDB: Starting shutdown...
2018-06-26 15:59:57 3349 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK

Filling help tables...2018-06-26 15:59:57 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-06-26 15:59:57 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2018-06-26 15:59:57 0 [Note] ./bin/mysqld (mysqld 5.6.36) starting as process 3371 ...
2018-06-26 15:59:57 3371 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-06-26 15:59:57 3371 [Note] InnoDB: The InnoDB memory heap is disabled
2018-06-26 15:59:57 3371 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-06-26 15:59:57 3371 [Note] InnoDB: Memory barrier is not used
2018-06-26 15:59:57 3371 [Note] InnoDB: Compressed tables use zlib 1.2.3
2018-06-26 15:59:57 3371 [Note] InnoDB: Using Linux native AIO
2018-06-26 15:59:57 3371 [Note] InnoDB: Using CPU crc32 instructions
2018-06-26 15:59:57 3371 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-06-26 15:59:57 3371 [Note] InnoDB: Completed initialization of buffer pool
2018-06-26 15:59:57 3371 [Note] InnoDB: Highest supported file format is Barracuda.
2018-06-26 15:59:57 3371 [Note] InnoDB: 128 rollback segment(s) are active.
2018-06-26 15:59:57 3371 [Note] InnoDB: Waiting for purge to start
2018-06-26 15:59:57 3371 [Note] InnoDB: 5.6.36 started; log sequence number 1625977
2018-06-26 15:59:57 3371 [Note] Binlog end
2018-06-26 15:59:57 3371 [Note] InnoDB: FTS optimize thread exiting.
2018-06-26 15:59:57 3371 [Note] InnoDB: Starting shutdown...
2018-06-26 15:59:59 3371 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  ./bin/mysqladmin -u root password 'new-password'
  ./bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

Alternatively you can run:

  ./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file ./my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as ./my-new.cnf,
please compare it with your file and take the changes you need.

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

可以看到,上面出现了两个OK,这就说明初始化成功,还可以检验一下

# echo $?
0

输出为0,说明上一条命令已经正确执行。
配置MySQL
首先复制配置文件:

# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y

打开配置文件,做以下修改:

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
 innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin = 

# These are commonly set, remove the # and set as required.
 basedir = /usr/local/mysql
 datadir = /usr/local/mysql/data/mysql
 port = 3306
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.

其中,basedir是MySQL包所在的路径,datadir是定义的存放数据的地方,port定义MySQL服务监听的端口,如果不定义默认就是3306,server_id定义该MySQL服务的ID号,用于做主从配置。

然后复制启动脚本文件并修改其属性:

# cp support-files/mysql.server /etc/init.d/mysqld

# chmod 755 /etc/init.d/mysqld

然后修改启动脚本:

# vim /etc/init.d/mysqld
  
basedir=/usr/local/mysql  
datadir=/usr/local/mysql/data/mysql  

接下来将启动脚本加入系统服务项并设置开机启动:

# chkconfig --add mysqld

# chkconfig mysqld on

最后启动服务:

# service mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql/localhost.localdomain.err'.
. SUCCESS!

上面已经启动成功,如果没有成功启动,我们也可以到/usr/local/mysql//data/mysql目录下查看错误日志。

检查MySQL是否启动的命令为:

# ps aux |grep mysqld				#结果应该大于2行
root       3494  0.0  0.0  11816  1612 pts/0    S    16:32   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data/mysql --pid-file=/usr/local/mysql/data/mysql/localhost.localdomain.pid
mysql      3655  0.5 24.3 1300820 453380 pts/0  Sl   16:32   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/mysql/localhost.localdomain.err --pid-file=/usr/local/mysql/data/mysql/localhost.localdomain.pid --port=3306
root       3681  0.0  0.0 112720   984 pts/0    S+   16:36   0:00 grep --color=auto mysqld

# netstat -lntp |grep 3306				#查看是否在监听3306端口
tcp6       0      0 :::3306                 :::*                    LISTEN      3655/mysqld 

如果是上面这样的情况,说明MySQL启动成功。

另外,停止MySQL服务:

#systemctl stop mysql

还可以以命令行的方式启动脚本,–defaults-file指定配置文件,指定用户,指定目录,最后加上&符号,放到后台执行。

# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &

以命令行的方式启动的mysql脚本不能直接stop,可以使用killall停止服务。

使用killall会停止当前的写读操作,再将没有写入到磁盘中的数据写到磁盘里面去,写完之后再将进程杀死。

如果遇到mysql的进程杀不死,可能说明数据量比较大,在慢慢写入磁盘,这时候不要使用kill -9强制杀死进程,可能会损坏数据。

最后,MariaDB的安装方法与MySQL大致相同,这里不做更多赘述。

三、安装php

所需软件
libmcrypt-2.5.7.tar.gz
php-5.6.27.tar.gz
放在资源里自行下载
在php服务器上
1.安装前提软件

[root@php ~]#  yum -y install epel-release
[root@php ~]#  yum -y install gcc gcc-c++ libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-deve

2.将libmcrypt-2.5.7.tar.gz php-5.6.27.tar.gz 包放在/usr/src目录下
进入/usr/src/目录下解包编译安装

[root@php ~]# cd /usr/src/
[root@php src]# tar zxf libmcrypt-2.5.7.tar.gz
[root@php src]# cd libmcrypt-2.5.7/
[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install

3.安装php

[root@php ~]# cd /usr/src/
[root@php src]# tar zxf php-5.6.27.tar.gz 
[root@php src]# cd php-5.6.27/
[root@php php-5.6.27]#  ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install

4.提供 php 配置文件

[root@php ~]# cp /usr/src/php-5.6.27/php.ini-production /etc/php.ini

5.为 php-fpm 提供脚本

[root@php ~]# cd /usr/src/php-5.6.27/
[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm 
[root@php php-5.6.27]# chkconfig --add php-fpm
[root@php php-5.6.27]# chkconfig php-fpm on

6.提供 php-fpm 配置文件并编辑

[root@php ~]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@php ~]# vim /usr/local/php5.6/etc/php-fpm.conf

修改内容如下:

pid = run/php-fpm.pid   //;去掉
listen = 192.168.1.105:9000  // php服务器的地址
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

保存退出
7.启动php-fpm服务

[root@php ~]# systemctl start php-fpm

四、测试Apache与php的静/动分离

1.启用Apache服务的代理转发

[root@httpd ~]# vim /usr/local/httpd/conf/httpd.conf

找到下面三行,去除#号:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Include conf/extra/httpd-vhosts.conf

找到AddType所在行,添加:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

定位至 DirectoryIndex,改为:

DirectoryIndex index.php index.html 

保存退出
重启httpd服务

[root@httpd ~]# systemctl restart httpd

2.配置虚拟主机文件

# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf

删除其他内容带#的不删
添加:

<VirtualHost *:80>
 ServerAdmin webmaster@php.com
 DocumentRoot "/var/www/php"
 ServerName www.php.com
 ServerAlias php.com
 ErrorLog "logs/php.com-error_log"
 CustomLog "logs/php.com-access_log" common
 ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.0.106:9000/var/www/php/$1
<Directory "/var/www/php">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

保存退出
3.测试

在 php 服务器上的/var/www/php 目录下创建.php 的测试页:
创建目录

#mkdir -p /var/www/php
[root@php ~]# vim  /var/www/php/index.php 

添加:

<?php
phpinfo();
?>

保存退出

在http服务器上也创个目录

# mkdir -p /var/www/php

在mysql服务器上测试访问Apache,会出现php内容这就证明成功了
注:图片中的IP地址忽略,访问还是httpd服务器的地址
在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值