- 博客(114)
- 收藏
- 关注
原创 Docker新手入门——————镜像优化
文章目录1. 镜像优化要求1.1 直接建立1.2 清理构建镜像中间产物1.3 使用多阶段构建镜像1. 镜像优化要求要求:选择最精简的镜像(重)减少镜像层数清理镜像构建的中间产物。注意优化网络请求(提高构建速度)尽量使用构建缓存使用多阶构建镜像(重)1.1 直接建立1)创建dockerfile:部署一个nginx镜像[root@docker docker]# vim dockerfileFROM rhel7EXPOSE 80COPY dvd.repo /etc/yum.rep
2020-09-07 17:30:22
289
原创 Docker新手入门——————dockerfile详解、常用的命令
文章目录1.dockerfile常用命令1.1 COPY拷贝一个文件1.2 ADD1.3 EXPOSE暴露端口1.4 VOLUME1.5 WORKDIR 切换目录1.6 RUN 在容器中进行修改1.7 CMD 与ENTRYPOINT 容器启动后运行的指令1.7.1 ENTRYPOINT的shell模式1.7.2 ENTRYPOINT的exec模式*1.7.3 CMD1.dockerfile常用命令1)FROM:指定base镜像,如果本地不存在会从远程仓库下载。2)MAINTAINER:镜像作者,写入邮
2020-09-07 16:08:55
566
原创 Docker新手入门——————了解镜像的分层、使用docker commit构建镜像、使用dockerfile构建镜像
文章目录1.镜像的分层结构2. 镜像的构建2.1 修改后不保存就会消失2.1 修改保存构建新的镜像1.镜像的分层结构1)docker容器启动之后是共享宿主机的。查看当前的docker信息。[root@docker docker]# docker info # 查看docker信息………………WARNING: bridge-nf-call-iptables is disabled # 出现两个错误WARNING: bridge-nf-call-ip6tables is disabled[
2020-09-07 14:20:30
315
原创 Docker新手入门——————什么是Docker、配置阿里云镜像、运行一个docker容器
文章目录1. 了解Docker1.1 什么是Docker?1. 了解Docker1.1 什么是Docker?1)为什么要出现了docker服务器?环境和配置会导致部署的项目出现不同的效果(或者错误),不同的版本环境的兼容,对运维人员的考验。解决办法就是:将代码、环境、配置、数据等整个打包发送给运维人员,再部署就可以运行。也就是说运维工程师的工作就变成了:安装一个个【原始环境、代码、配置、数据等】的一个个包的部署。也就是说,以前是教代码,现在是交镜像。2)docker的理念:一次构建处处运
2020-09-07 08:17:11
271
原创 自动化运维[python]——————python中的逻辑语句for、break、continue、exit、实现命令行提示符
文章目录1.使用if判断闰年2.输入年月判断这个月有多少天3.for循环1.1 求和1+……+1001.2 输入一个数字求他的阶乘1.3 登录系统的入口雏形4. 理解break、continue、exit5.实现命令行提示符1.使用if判断闰年闰年要满足以下几个要求:能被4整除且不能被100整除或者可以被400整除代码如下:# _*_coding:utf-8_*_# @Time :9/5/20 9:00 PM# @Author :Song# @Filename
2020-09-05 22:09:44
120
原创 自动化运维[python]——————python中的逻辑语句if以及逻辑运算符
文章目录1.逻辑语句if2. else3.逻辑运算3.1 and3.2 or3.3 not4.逻辑运算演练4.1 练习14.2 练习21.逻辑语句ifif是判断:如果条件满足,才能做某件事。如果条件不满足,就做另外一件事,或者什么也不做。判断语句又被称作分支语句,正是有了判断,才让程序有了更多的分支。判断语句的语法:if 要判断的条件: 条件成立时要做的事情注意:代码的缩...
2020-09-05 20:58:00
371
原创 自动化运维[python]——————python中的输入[input( )、getpass模块、raw_input( )]与输出[print( )]
文章目录1.接收用户从键盘输入的数据1.1python3中1.1.1 普通输入回显input( )1.1.2 密码输入不回显(getpass模块)1.2 python2中1.2.1 数字bool可用input( )1.2.2 字符串使用raw_input( )1.3 python3中接收数据进行比较2.输出print( )2.1 整型2.1.1 直接输出整数2.1.2 整数固定长度2.2 字符串2...
2020-09-05 20:57:36
329
原创 自动化运维[python]——————python中的数据类型[整型、浮点型、字符串型、bool型]以及数据类型的转换
文章目录1.整型2.浮点型3.字符串型4.bool型5.数值类型的转换5.1 整型转换为浮点型5.2 浮点型转换为整型5.3 字符串型转换看情况5.3.1 字母型字符串5.3.2 数字型字符串6.删除变量1.整型在 Python 中,可对整数执行加( + )减( - )乘( * )除( / )运算。>>> a = 1 # 定义变量a是整形定义后可以在直接查看打印变量。...
2020-09-05 20:57:26
197
原创 自动化运维[python]——————python中的程序与变量
文章目录1.程序1.1什么是程序1.2 程序是如何执行的1.3 程序的作用2.变量2.1 什么是变量2.2 定义变量2.3 变量名的规范2.3.1 标识符2.3.2 关键字2.3.3 变量的命名规则2.3.4 驼峰命名法1.程序1.1什么是程序编程我们编的是程序,什么是程序?用一种语言写出来的有逻辑性,可执行的,而且能有结果的文档。1.2 程序是如何执行的那么程序是如何让执行的?...
2020-09-05 20:57:16
81
原创 自动化运维[python]——————linux安装pycharm以及pycharm的配置和格式设定
文章目录1.安装pycharm1.1 为什么安装pycharm1.2 启动pycharm1.安装pycharm1.1 为什么安装pycharm上一篇文章中,我们写的第一个python程序,是使用vim文本写出来的,很不方便。我们记得在windows中,我们写c程序或者java程序时没有说就在word中写,很不方便。也就是说,我写一个小的程序我可以在vim里写;我想验证一个概念的时候可以在交...
2020-09-05 20:57:05
350
原创 自动化运维[python]——————python2与python3的区别,第一个python程序
文章目录1.第一个python语言1.1使用python3解释器1.2 使用python2解释器2.python2与python3的区别2.1 编码格式1.第一个python语言我们写程序,一定是一段代码,一个文件。在写python程序时,我们首先建立一个".py"结尾的python脚本文件,这样在执行脚本的时候,计算机就会使用python解释器进行翻译,最后执行。我们按照联合国规定,第一...
2020-09-05 20:56:55
160
原创 自动化运维[python]——————python解释器的源码编译安装
1.下载安装python1.1红帽将python编译进内核如果你使用的是红帽的系统,那么我们带开一个Terminal,输入python,我们发现红帽系统将python编译进了内核。1.2 python的下载但是python 2.7.5 对于我们来说已经有些过时了,python已经出到3.7版本了,我们我们还是稳中求胜,使用最经典的python3.6。首先我们在python官网下载pyt...
2020-09-05 20:56:46
282
原创 自动化运维[python]——————python概述
1.python的起源Python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python’s Flying...
2020-09-05 20:56:37
381
原创 企业级数据库集群[Mysql]——————mysql的全同步复制(组复制)
文章目录1.了解mysql的全同步复制2. 搭建集群2.1 单主模型1.了解mysql的全同步复制MySQL组复制是MySQL 5.7.17开始引入的新功能,为主从复制实现高可用功能1)组复制模型它支持单主模型和多主模型两种工作方式(默认是单主模型)单主模型:从复制组中众多个MySQL节点中自动选举一个master节点,只有master节点可以写,其他节点自动设置为read only,当master节点故障时,会自动选举一个新的master节点,选举成功后,它将设置为可写,其他slave将指向这
2020-09-05 17:54:13
197
原创 企业级数据库集群[mysql]——————mysql的半同步复制
1. 了解mysql半同步复制1)半同步复制:一主多从模式下,有一个从节点返回成功,即成功,不必等待多个节点全部返回MySQL半同步,MySQL5.5由Google贡献的补丁才开始支持半同步复制(semi Replication)模式,该模式可以确保从服务器接收完主服务器发送的binlog日志文件并写入自己的中继日志(relay log)里,然后会给主服务器一个反馈,告诉对方已经接收到完毕,这时主库线程才返回当前session告知操作完成,当出现超时情况时,源主服务器会暂时切换到异步复制模式,直
2020-09-05 16:25:18
80
原创 企业级数据库集群[mysql]——————读写分离服务
文章目录1.了解读写分离服务2.实现读写分离设置2.1 配置proxy代理端2.2 测试读写分离1.了解读写分离服务1)我们为什么要实现读写分离?对于很多大型网站(pv值百万、千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作(新闻网站,插入一条新闻,查询操作)。剩下的则是写(insert、update、delete,只要能对MySQL的数据造成更改的操作都叫写操作)操作。在使用负载均衡集群之后,可以很大程度的提升网站的整体性能,但是最终的数据处理的压力还是会落
2020-09-05 15:34:58
184
原创 企业级数据库集群[Mysql]——————了解基于gtid的主从同步
文章目录1.了解基于gid的主从同步1.了解基于gid的主从同步从== MySQL 5.6.5 开始新增了==一种基于 GTID 的复制方式。1)为什么借助gtid进行复制:1、使用二进制复制,从库要告诉主库要从哪个偏移量开始同步,如果指定错误会造成数据的遗漏,最终数据不一致。2、借助GTID,在发生主备切换的情况下,MySQL的其它从库可以自动在新主库上找到正确的复制位置。3、基于GTID的复制可以忽略已经执行过的事务,减少了数据发生不一致的风险2)什么是GTID:GTID (Globa
2020-09-05 09:32:22
250
原创 企业级数据库集群[Mysql]——————mysql的异步复制(基于position的主从复制)
文章目录1. MYSQL的异步复制1. MYSQL的异步复制1)异步复制(主从复制)master节点不会关心slave节点的状态,只需要写自己的数据即可。能不能完成复制看slave节点的io线程和sql线程是否开启。2)主从复制的要求:(1)主库开启binlog日志(设置log-bin参数)(2)主从server-id不同(3)从库服务器能连同主库注:什么是二进制日志:log-bin日志:保存所有对数据库更改(增删改)的操作(create、drop、update)修改my.cnf配置
2020-09-03 16:08:58
142
原创 企业级mysql数据库[mariadb]—————数据库的备份还原、数据库的root管理密码修改、安装图形界面管理数据库
文章目录1. 数据库的备份还原1.1 备份数据库1.2 执行建库命令恢复数据库1.3 修改备份文件恢复数据库2.数据库的管理密码问题2.1 已知root密码修改root密码2.2 忘记root密码修改root密码3. 安装图形管理界面1. 数据库的备份还原1.1 备份数据库1)首先建立一个自己的数据库:MariaDB [(none)]> CREATE DATABASE song;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]>
2020-09-01 22:27:31
262
原创 企业级mysql数据库[mariadb]—————查询数据、建立删除数据库、建表删表、修改表的结构、修改表中数据、创建本地用户、建立远程登录用户、给予指定用户特定权限、删除权限、删除用户
文章目录1.mariadb数据库的管理1.1 查询数据1.2 建立删除数据库1.3 库中建表对表的修改1.4 修改表中数据1.5 修改表的结构2.数据库用户权限设定2.1 创建本地用户2.2 建立远程登录用户2.3 给予指定用户特定权限1.mariadb数据库的管理1.1 查询数据1)进入数据库:[root@mariadb ~]# mysql -uroot -p123456Welcome to the MariaDB monitor. Commands end with ; or \g.You
2020-09-01 20:49:37
367
原创 企业级mysql数据库[mariadb]——————了解数据库、了解mariadb与mysql的关系,安装一个安全的mariadb数据库
文章目录1.数据库的介绍1.1 数据是什么?1.2 帐号密码如何存储?1.3 什么是数据库?1.4 什么是mariadb数据库?2.安装安全的mariadb。2.1 安装2.2 安全初始化2.3 关闭网络端口1.数据库的介绍1.1 数据是什么?密码账户、图片、视频、数字,链接都是人类可以解除的数据。机器语言二进制语言是计算机了解的数据。1.2 帐号密码如何存储?如果将一个网站的文档存在一个普通文档中:可能被误删除,文件也不安全;大数据量的时候可能存储限制;查询用户也很麻烦。所以我们使用数据库管
2020-09-01 15:51:59
369
原创 linux集群服务[LVS负载均衡集群服务]——————理解LVS负载均衡集群、LVS的工作模式、LVS集群的负载均衡算法
文章目录1.arp协议2.LVS负载均衡集群2.1 搭建负载均衡的需求2.2 nginx与LVS负载均衡的区别!!!2.3 了解LVS1.arp协议地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。DNS是域名和ip之间的解析,需要配服务。ARP是ip来解析MAC地址的协议,不需要配服务。要求通讯双方必须在同一个物理网段。ARP工作在网络层。工作原理:1)发送方首先检查自己的ARP缓存(IP地址和MAC地址的解析记
2020-08-30 17:19:36
205
原创 linux网络服务[nginx]——————使用ssl模块配置https支持、实现图片压缩
文章目录1. 使用ssl模块配置https支持2.实现图片压缩1. 使用ssl模块配置https支持nginx进行编译,添加ssl模块:--with-http_ssl_module1)编译安装nginx:[root@nginx2 nginx]# lsnginx-1.15.9.tar.gz nginx-1.17.4 nginx-1.17.4.tar.gz[root@nginx2 nginx]# cd nginx-1.17.4/[root@nginx2 nginx-1.17.4]# ./con
2020-08-28 19:50:50
347
原创 linux网络服务[nginx]——————nginx的热部署(平滑升级)与版本回退、 日志切割、限制连接数
文章目录1.nginx的热部署(平滑升级)与版本回退1.1 安装旧版本1.2 开始热部署进入新版本1.3 退回旧版本2. 日志切割3. 限制连接数1.nginx的热部署(平滑升级)与版本回退所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。1.1 安装旧版本1)现在我们有两个版本的nginx安装包:[root@nginx2 nginx]# lsnginx-1.15.9.tar.gz nginx-1.17.4.tar.gz2)首先安装低版本的nginx:[root@ngi
2020-08-28 15:45:13
324
原创 linux网络服务[nginx]——————配置nginx实现负载均衡[轮询、weight权重策略、ip_hash、fair]
文章目录1.配置nginx实现负载均衡1.1 创建两台tomcat服务器1.2 nginx负载均衡配置1.配置nginx实现负载均衡实现效果:输入相同的地址,让他分发不同的tomcat服务器1.1 创建两台tomcat服务器1)开启后台tomcat1服务器:[root@tomcat ~]# cd tomcat8080/apache-tomcat-7.0.105/webapps/edu/[root@tomcat edu]# cat a.html 8080!!![root@tomcat edu]
2020-08-27 20:29:20
1114
原创 linux网络服务[nginx]——————nginx中常用命令、nginx的配置文件、nginx反向代理跳转到后端的tomcat、实现nginx 的反向代理不同访问路径跳转到不同后端端口
文章目录1.nginx中常用命令2. nginx的配置文件3. 实现nginx 的反向代理跳转到后端的tomcat3.1 安装后端tomcat服务器3.2 配置nginx反向代理服务器3.3 客户端进行测试4. 实现nginx 的反向代理不同路径跳转到不同端口4.1 tomcat服务器建立两个不同端口的服务4.2 配置反向代理4.3 客户端测试1.nginx中常用命令1)命令位置:[root@nginx ~]# cd /usr/local/nginx/sbin/[root@nginx sbin]#
2020-08-27 15:54:41
1050
原创 linux网络服务[Web服务器apache]——————共享php动态网页、cgi、wsgi
文章目录1. 共享php动态网页2. cgi3. wsgi我们知道我们此时安装的apache是只支持html静态网页的,而如果我们想分享动态网页就需要完成以下操作:1. 共享php动态网页PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。当我们要分享一个php页面时,apache默认不支持这种格式的文件,所以我们做
2020-08-26 16:56:05
264
原创 linux网络服务[Web服务器apache]——————用户访问权限、特定用户密码登陆、虚拟页面配置
文章目录1.用户访问权限2.特定用户密码登陆3.虚拟页面配置1.用户访问权限我们登陆了一个网站之后我们发现,有的用户可以登陆进一个会员专享页面,而非会员用户无法登陆,这时如何做到的呢,接下来我们进行演示:首先我们进入主配置文件进行修改:注意:/var/www/html永远都是他的默认发布目录,你要访问其下子目录时必须在ip后加上文件名。2.特定用户密码登陆虽然上一个实验我们已经能够使特定的人登陆,如果一旦有人更改自己的ip为允许登陆相同的ip,就不能挡住他,所以我们这时就出
2020-08-26 16:55:26
635
原创 linux网络服务[Web服务器apache]——————修改默认访问端口、修改默认文件访问顺序、修改默认发布目录路径
文章目录1.修改默认端口2.修改默认文件访问顺序3.修改默认发布目录路径1.修改默认端口http服务的默认端口为80,而https的默认服务端口是443,这个实验我们以http为例,修改80零端口为8080:必须服从tcp协议才能够进行网络传输2.修改默认文件访问顺序我们的配置文件中写着,默认先读index.html,我们希望他能读我们要求的文件我们就在配置文件中进行修改,最后测试查看:3.修改默认发布目录路径在主配置文件中清楚的记录着默认发布目录是/var/www/html
2020-08-26 16:54:42
1276
原创 linux网络服务[Web服务器apache]——————了解Apache、apache的三种工作模式、安装apache解读其配置文件、httpd帮助手册
文章目录1. 简介apache1. 简介apache
2020-08-26 16:53:59
207
原创 linux网络服务[samba信息服务块]——————虚拟用户、挂载网络驱动器
文章目录1. 虚拟用户2. 挂载网络驱动器2.1 临时挂载:2.2 永久挂载1. 虚拟用户1)修改别名用户配置文件:[root@smb-server ~]# vim /etc/samba/smbusersliu = l2)主配置文件调用这个文件:(最好写入全局配置中)[root@smb-server ~]# vim /etc/samba/smb.conf[global] workgroup = SAMBA security = user
2020-08-23 16:44:54
278
原创 linux网络服务[samba信息服务块]——————本地用户登录验证、部分用户登录samba服务器、部分用户对共享区域有可写权限、设置上传文件目录的权限
文章目录1. 本地用户登录验证2.合法用户访问共享区域2.1 部分用户登录samba服务器2.2 部分用户对共享区域有可写权限2.3 设置上传文件的权限1. 本地用户登录验证实验准备:在上一章的实验基础上继续实验。1)编辑服务端配置文件(新建一个共享):[root@smb-server ~]# vim /etc/samba/smb.conf[testsong] # 共享名 comment = share directory # 描述 path = /tes
2020-08-23 16:04:16
494
原创 linux网络服务[samba信息服务块]——————samba与ftp的区别、samba与cifs的关系、samba登录验证模式、samba常见配置参数、服务端简易配置、客户端登录连接方式
文章目录1.Samba概述1.1 为什么使用samba1.2 smb和cifs之间的关系2.samba服务详解1.Samba概述SMB(Server Messages Block,信息服务块)是一种在==局域网(默认)==上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型(c/s)协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。1.1 为什么使用samba1)ftp的优缺点:优点:文件传输、应用层
2020-08-23 14:05:41
978
原创 linux网络服务[VSFTP安全文件传输协议]——————虚拟用户验证实验、抓取ftp明文数据包、openssl+vsftpd 加密验证原理、以及加密验证过程
文章目录1.虚拟用户验证实验2.openssl+vsftpd 加密验证方式2.1 抓取没有加密的数据包2.2 openssl+vsftpd加密验证原理2.3 加密验证过程1.虚拟用户验证实验虚拟用户需要人为创建用户和密码,来代替匿名用户和本地账户。映射用户(真实)只是为了给虚拟用户一个登录目录。1)服务器建立虚拟用户密码文件:[root@vsftpd-server ~]# vim /etc/vsftpd/vsftpd.usera1 # 奇数行为用户123456 # 偶数行为密码a2123
2020-08-21 18:06:03
661
原创 linux网络服务[VSFTP安全文件传输协议]——————匿名用户验证详解、本地用户黑白名单、(部分)用户禁锢家目录、vsftpd被动工作模式配置
文章目录1.匿名用户验证实验1.1 匿名权限控制:1.2 实验内容1.2.1 实现上传1.2.2 实现上传文件可下载1.2.3 实现创建目录、文件其他操作1.2.4 目录提示2. 本地用户验证实验2.1 本地用户权限控制:2.2 实验原理2.2.1 用户禁锢在家目录2.2.2 将部分用户禁锢在自己的家目录下1.匿名用户验证实验1.1 匿名权限控制:anonymous_enable=YES启用匿名用户的功能anon_umask=022匿名用户所上传文件的权限掩码anon_ro
2020-08-21 12:03:27
525
原创 linux网络服务[VSFTP安全文件传输协议]——————vsftp工作原理、连接方式、登录验证模式、匿名登录测试、本地用户登录测试
文章目录1.VSFTP概述1.1 安全特性2.VSFTP连接方式3.工作方式4.VSFTP 传输模式5.VSFTP软件信息6.登录验证模式7.匿名用户登录vsftpd服务器8.本地用户登录1.VSFTP概述FTP是文件传输协议的英文简述,用于将网络服务器上的文件下载到本地,也可以将本地文件上传到网络服务器上。FTP具有一定的危险性,他是数据再因特网上是没有收到保护的明文传输方式。vsftp是常用的使用FTP协议的服务器软件,VerySecure FTP,他是解决了ftp传输的安全性问题(但依旧是明文
2020-08-21 10:07:18
956
原创 linux网络服务[DNS域名系统服务]——————DNS缓存服务器、智能DNS(分离解析)
文章目录1.DNS缓存服务器2.智能DNS(分离解析)2.1 实验原理1.DNS缓存服务器主从可以减轻主服务器的压力,但是解析效率还是一样的。某些网站的使用次数比较多,例如搜索引擎,这时我们最好将这些解析记录,写在前边,并且进行缓存,当有人来询问,就可以快速从缓存中找到对应的解析,而不用每次都访问解析库,从而提高效率。实验准备:一台虚拟机master-server,作为主dns服务器一台虚拟机cache-server,作为缓存dns服务器。一台虚拟机web-server,作为web服务器。
2020-08-20 01:46:43
967
原创 linux网络服务[DNS域名系统服务]——————简单的正反解析DNS服务器、主从DNS服务
文章目录1.简单的正反解析DNS服务器2.主从DNS服务1.简单的正反解析DNS服务器实验准备:一台虚拟机server,作为dns服务器一台虚拟机作为,web网页服务器。一台虚拟机进行测试。关闭防火墙和selinux1)web服务器安装httpd服务:[root@web-server ~]# yum install httpd -yInstalled: httpd.x86_64 0:2.4.6-45.el7
2020-08-20 00:35:05
223
原创 linux网络服务[DNS域名系统服务]——————DNS介绍、域名的组成和分类、域名解析过程、了解分布式DNS服务器、DNS软件信息、DNS配置文件解读
文章目录1. DNS介绍1.1 什么是域名?1.2 什么是DNS?1.3 域名的组成和分类2. 域名解析过程3.分布式DNS服务器4.DNS软件信息1. DNS介绍1.1 什么是域名?域名(Domain Name),简称域名、网域,是由一串用点作为分隔符隔开的一些字母数字组成的字符串。作用是在互联网上标识一台计算机或计算机组的名称,标识计算机的电子方位。IP地址记忆起来难记,没有记忆点,很麻烦,方便记忆发明了域名。就像小时候的电话本一样用来一一对应的查询,哪一个域名对应哪一个IP。域名是独一无
2020-08-19 19:49:28
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人