创建 WebLogic 12.2.1.3 的 Docker 镜像

开场白

我们将创建一个 WebLogic 12.2.1.3 的 Docker 容器。因为要用作 intra-mart 的验证,所以我们预先进行了 intra-mart 所需的配置,在 intra-mart Accel Platform 设置指南(WebLogic 篇)中有详细说明。通过这个配置,与 Oracle 官方的 Docker 镜像不同,我们可以立即创建一个可用于验证的 WebLogic 环境,而不需要考虑任何其他事情。

Docker 基础镜像(CentOS 6.10)

我会像平常一样从基础映像开始制作。
我将使用CentOS 6.10 Final。

FROM centos:centos6

EXPOSE 22

# yum
RUN yum -y update \
 && yum provides -y '*/applydeltarpm' \
 && yum groupinstall -y 'Development Tools' \
 && yum install -y --enablerepo centosplus wget curl vim emacs tar unzip mlocate perl ssh openssh-server openssl-devel \
 && rm -rf /var/cache/yum/* \
 && yum clean all

# locale
RUN yum reinstall -y glibc-common \
 && localedef -i ja_JP -f UTF-8 ja_JP.utf8 \
 && touch /etc/sysconfig/i18n \
 && echo 'LANG="ja_JP.UTF-8"' >> /etc/sysconfig/i18n
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja

# timezone
RUN yum install -y tzdata \
 && echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock \
 && echo 'UTC=false' >> /etc/sysconfig/clock \
 && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# root passwd
RUN bash -c 'echo "root:password" | chpasswd'

# ssh
RUN sed -i -e "s/#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config \
 && sed -i -e "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config \
 && sed -i -e "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config

RUN updatedb

CMD /etc/init.d/sshd restart && /bin/bash

我会建造。(wǒ huì

docker build -t mycentos:6.10 .

根据已创建的基础镜像,再创建一个基础镜像。
考虑到准备另外一个数据库也很麻烦,我们将在启动时一并安装好PostgreSQL 和Cassandra,以便立即使用。

FROM mycentos:6.10

EXPOSE 22 5432 8983 9160

# yum
RUN yum -y update \
 && yum -y upgrade && yum -y update \
 && yum localinstall -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm \
 && yum install -y postgresql96-server \
 && yum install -y --setopt=protected_multilib=false epel-release ld-linux.so.2 libstdc++.so.6 libpng12 nc \
 && rm -rf /var/cache/yum/* \
 && yum clean all

# JDK
COPY setup_jdk.sh /setup_jdk.sh
RUN chmod +x /setup_jdk.sh \
 && /setup_jdk.sh \
 && rm -f /setup_jdk.sh \
 && echo 'JAVA_HOME=/usr/local/java/jdk' >> /root/.bashrc \
 && echo 'PATH=$PATH:/usr/local/java/jdk/bin' >> /root/.bashrc
ENV JAVA_HOME /usr/local/java/jdk
ENV PATH /usr/local/java/jdk/bin:$PATH

# PostgreSQL
COPY setup_postgresql.sh /setup_postgresql.sh
RUN chmod +x /setup_postgresql.sh \
 && /setup_postgresql.sh \
 && rm -f /setup_postgresql.sh

# JDBC Driver
RUN mkdir -p /opt/jdbc
COPY postgresql-42.2.5.jar /opt/jdbc/postgresql.jar
COPY db2jcc4.jar /opt/jdbc/db2.jar
COPY ojdbc8.jar /opt/jdbc/oracle.jar
COPY mssql-jdbc-7.0.0.jre8.jar /opt/jdbc/sqlserver.jar
COPY ngdbc.jar /opt/jdbc/ngdbc.jar

# Cassandra
COPY setup_cassandra.sh /setup_cassandra.sh
RUN chmod +x /setup_cassandra.sh \
 && /setup_cassandra.sh \
 && rm -f /setup_cassandra.sh \
 && echo 'PATH=$PATH:/usr/local/apache-cassandra/apache-cassandra/bin' >> /root/.bashrc
ENV PATH $PATH:/usr/local/apache-cassandra/apache-cassandra/bin

# Solr
COPY setup_solr.sh /setup_solr.sh
RUN chmod +x /setup_solr.sh \
 && /setup_solr.sh \
 && rm -f /setup_solr.sh

# wkhtmltopdf
COPY setup_wkhtmltopdf.sh /setup_wkhtmltopdf.sh
RUN chmod +x /setup_wkhtmltopdf.sh \
 && /setup_wkhtmltopdf.sh \
 && rm -f /setup_wkhtmltopdf.sh

RUN updatedb
#!/bin/sh

curl -L -C - -O https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar -Jxvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
rm -f wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

mv wkhtmltox /usr/local/wkhtmltox
ln -s /usr/local/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf

yum install -y vlgothic-fonts

安装PostgreSQL。安装完成后,创建以下用户。

    • postgres/postgres (ユーザ/パスワード)

 

    imart/imart (ユーザ/パスワード)

另外,我们将创建以下的数据库。

    • imart

 

    • iap_db

 

    default

另外,我们还会创建acceldocuments模式。

由于默认的max_connections和shared_buffers太小,我们将它们适当增加一些,以消除一些担忧。

#!/bin/bash

service postgresql-9.6 initdb

echo "listen_addresses = '*'" >> /var/lib/pgsql/9.6/data/postgresql.conf
sed -i -e "s/ident$/trust/g" /var/lib/pgsql/9.6/data/pg_hba.conf
sed -i -e "s/127\.0\.0\.1\/32/0\.0\.0\.0\/0/g" /var/lib/pgsql/9.6/data/pg_hba.conf

sed -i -e "s/max_connections = 100/max_connections = 200/g" /var/lib/pgsql/9.6/data/postgresql.conf
sed -i -e "s/shared_buffers = 128MB/shared_buffers = 512MB/g" /var/lib/pgsql/9.6/data/postgresql.conf

echo "postgres:postgres" | chpasswd

service postgresql-9.6 start
sleep 1

su postgres -c "psql -c \"ALTER USER postgres WITH PASSWORD 'postgres'\""
su postgres -c "psql -c \"CREATE ROLE imart WITH LOGIN PASSWORD 'imart'\""
su postgres -c "psql -c \"CREATE DATABASE imart OWNER=imart encoding 'utf8' TEMPLATE template0\""
su postgres -c "psql -c \"CREATE DATABASE iap_db OWNER=imart encoding 'utf8' TEMPLATE template0\""
su postgres -c "psql -c \"CREATE DATABASE \\\"default\\\" OWNER=imart encoding 'utf8' TEMPLATE template0\""
su postgres -c "psql -d imart -c \"CREATE SCHEMA acceldocuments AUTHORIZATION imart\""
su postgres -c "psql -d iap_db -c \"CREATE SCHEMA acceldocuments AUTHORIZATION imart\""
su postgres -c "psql -d default -c \"CREATE SCHEMA acceldocuments AUTHORIZATION imart\""

service postgresql-9.6 stop

接下来是JDK的下载,如果最新版本是8u191,则可以通过以下curl命令进行下载。
如果8u191不再是最新版本,则需要根据新的URL进行修改才能下载。如果觉得麻烦的话,也可以通过浏览器下载JDK,并将其COPY到Dockerfile中,将其放置在根目录下,并使用此COPY命令来使用已放置的JDK,也没有问题。

#!/bin/sh

curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz
tar zxvf jdk-8u191-linux-x64.tar.gz
rm -f jdk-8u191-linux-x64.tar.gz

mkdir -p /usr/local/java
mv jdk1.8.0_191 /usr/local/java/jdk1.8.0_191
ln -s /usr/local/java/jdk1.8.0_191 /usr/local/java/jdk
#!/bin/sh

curl -L -C - -O https://archive.apache.org/dist/cassandra/1.1.12/apache-cassandra-1.1.12-bin.tar.gz
tar -zxvf apache-cassandra-1.1.12-bin.tar.gz
rm apache-cassandra-1.1.12-bin.tar.gz

mkdir -p /usr/local/apache-cassandra
mv apache-cassandra-1.1.12 /usr/local/apache-cassandra/apache-cassandra-1.1.12
ln -s /usr/local/apache-cassandra/apache-cassandra-1.1.12 /usr/local/apache-cassandra/apache-cassandra

sed -i -e "s/Xss180k/Xss228k/g" /usr/local/apache-cassandra/apache-cassandra/conf/cassandra-env.sh

Solr的设置如下,为了使用curl获取设置材料,请预先准备好从myserver下载solr_setup.zip文件。如果这也很麻烦,可以通过浏览器下载solr_setup.zip文件,并将其COPY到Dockerfile中并放置在/目录下,然后可以停止使用以下的curl方法,而是使用通过COPY放置的solr_setup.zip文件。

#!/bin/sh

curl -L -C - -O http://myserver/solr_setup.zip
unzip solr_setup.zip -d solr_setup
rm solr_setup.zip

cd solr_setup
chmod u+x ./setup.sh
./setup.sh jetty

mkdir -p /usr/local/solr
mv dist/jetty/jetty /usr/local/solr/jetty

cd ..
rm -rf solr_setup

我将进行构建工作。

docker build -t mywls_base .

Docker中的WebLogic版本为12.2.1.3。

现在我们来谈谈 WebLogic 12.2.1.3 的 Docker。
我们将使用之前提到的 mywls_base 作为基础镜像。

除了 Dockerfile 之外,还需要准备以下文件。

    • run_server.sh

 

    • setup_wls.sh

 

    Dockerfile

首先从 Dockerfile 开始。

FROM mywls_base

EXPOSE 22 5432 7001 9009 40608

# yum
RUN yum -y update \
 && yum -y upgrade && yum -y update \
 && yum install -y multitail ncurses-devel ncurses-static ncurses-term \
 && rm -rf /var/cache/yum/* \
 && yum clean all

# https://www.cyberz.org/blog/2014/10/31/weblogic-12c-very-slow-domain-creation/
ENV CONFIG_JVM_ARGS -Djava.security.egd=file:/dev/./urandom

# setup_wls
COPY setup_wls.sh /opt/setup_wls.sh
RUN chmod +x /opt/setup_wls.sh \
 && /opt/setup_wls.sh \
 && rm -f /opt/setup_wls.sh

COPY run_server.sh /opt/run_server.sh
RUN chmod +x /opt/run_server.sh \
 && sed -i -e "s/BUILD_TIME_HOSTNAME_FIXME/`hostname`/g" /opt/run_server.sh

RUN ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/startWebLogic.sh /startWebLogic.sh \
 && ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/bin/stopWebLogic.sh /stopWebLogic.sh \
 && ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/startWebLogic.sh /opt/startWebLogic.sh \
 && ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/bin/stopWebLogic.sh /opt/stopWebLogic.sh \
 && ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/startWebLogic.sh /root/startWebLogic.sh \
 && ln -s /opt/oracle/weblogic/user_projects/domains/mydomain/bin/stopWebLogic.sh /root/stopWebLogic.sh \
 && ln -s /opt/run_server.sh /run_server.sh \
 && ln -s /opt/run_server.sh /root/run_server.sh

# COPY setDomainEnv.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/setDomainEnv.sh
# COPY startWebLogic.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/startWebLogic.sh
# COPY commExtEnv.sh /opt/oracle/oracle_common/common/bin/commExtEnv.sh
# COPY config.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/config.xml
# COPY PostgreSQL-8300-jdbc.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/jdbc/PostgreSQL-8300-jdbc.xml

RUN chmod +x /opt/oracle/weblogic/user_projects/domains/mydomain/bin/setDomainEnv.sh \
 && chmod +x /opt/oracle/weblogic/user_projects/domains/mydomain/bin/startWebLogic.sh \
 && chmod +x /opt/oracle/oracle_common/common/bin/commExtEnv.sh
 && updatedb

CMD ["/opt/run_server.sh"]

这里注释掉的 COPY 5 行将在稍后使用。现在保持注释状态即可。
在注释的状态下,执行一次docker build,docker run,并通过WebLogic的管理界面进行intra-mart的配置(如-Xmx,事务超时,数据源等)。
由于这些配置会反映到被注释的路径上(通过比较/opt/oracle文件夹在配置反映之前和之后的差异,可以确定),在获取配置反映后的上述路径文件后,取消注释(打开注释),然后再次执行docker build。
通过这样做,可以创建一个具有intra-mart配置的WebLogic Docker镜像。

接下来是WebLogic 12.2.1.3 的设置。

为了获取设备安装资料,通过curl设置如下,请提前准备好从myserver下载资料的条件。
如果这样太麻烦的话,可以通过浏览器下载设备安装资料,并通过Dockerfile中的COPY命令将其放置在/opt目录下,也可以使用COPY命令代替curl来使用已放置的设备安装资料,没有问题。

您可以从以下位置下载安装资料。

    • WebLogic 12.2.1.3

 

    https://www.oracle.com/technetwork/jp/middleware/weblogic/downloads/index.html
#!/bin/bash

echo "Oracle WebLogic 12.2.1.3.0 install script"

# create user
useradd weblogic
echo 'weblogic:password' | chpasswd

mkdir -p /opt/oracle
chown -R weblogic /opt/oracle
cd /opt/oracle

# download repository
echo "Downloading installer..."
WLS_REPOSITORY_BASE_URL="http://myserver"
curl -L -C - -O "${WLS_REPOSITORY_BASE_URL}/fmw_12.2.1.3.0_wls_quick_Disk1_1of1.zip"

echo "Unpacking installer..."
unzip -q fmw_12.2.1.3.0_wls_quick_Disk1_1of1.zip
rm -f *.zip *.txt *.htm

# install weblogic
echo "Installing WebLogic..."
su weblogic -c "java -jar fmw_12.2.1.3.0_wls_quick.jar -force -ignoreSysPrereqs ORACLE_HOME=/opt/oracle"
rm -f fmw_12.2.1.3.0_wls_quick.jar

# create domain
echo "Creating domain..."
su weblogic -c "mkdir -p /opt/oracle/weblogic/user_projects/domains/mydomain"

export WL_HOME=/opt/oracle/wlserver
export CONFIG_JVM_ARGS=-Djava.security.egd=file:/dev/urandom
export PATH=$PATH:/opt/oracle/oracle_common/common/bin # wlst.sh へのパス
source /opt/oracle/oracle_common/common/bin/commEnv.sh

touch create_domain.py
echo '#!/usr/bin/python' >> create_domain.py
echo "import os, sys" >> create_domain.py
echo "selectTemplate('Basic WebLogic Server Domain')" >> create_domain.py
echo "loadTemplates()" >> create_domain.py
echo "cd('Servers/AdminServer')" >> create_domain.py
echo "set('Name', 'myserver')" >> create_domain.py
echo "set('ListenAddress', '')" >> create_domain.py
echo "set('ListenPort', 7001)" >> create_domain.py
echo "create('AdminServer', 'SSL')" >> create_domain.py
echo "cd('SSL/AdminServer')" >> create_domain.py
echo "set('Enabled', 'True')" >> create_domain.py
echo "set('ListenPort', 7002)" >> create_domain.py
echo "cd('/')" >> create_domain.py
echo "cd('Security/base_domain/User/weblogic')" >> create_domain.py
echo 'cmo.setPassword('\''password'\'')' >> create_domain.py
echo "setOption('OverwriteDomain', 'true')" >> create_domain.py
echo "writeDomain('/opt/oracle/weblogic/user_projects/domains/mydomain')" >> create_domain.py
echo "closeTemplate()" >> create_domain.py
echo "exit()" >> create_domain.py
wlst.sh create_domain.py
rm -f create_domain.py

# jdbc
ln -s /opt/jdbc/postgresql.jar /opt/oracle/wlserver/server/lib/postgresql.jar
ln -s /opt/jdbc/ngdbc.jar /opt/oracle/wlserver/server/lib/ngdbc.jar

正在静默安装WebLogic 12.2.1.3。
如果你想更改详细设置,请在上述shell脚本中修改create_domain.py文件的内容。

接下来是在运行docker命令时执行的WebLogic启动脚本。
还会启动sshd、PostgreSQL、Cassandra和Solr。
为了显示两个日志文件(myserver.log和startWebLogic.log),如果可用,我们会使用multitail来输出日志。
如果环境不允许使用multitail,我们将使用tail来输出日志。

#!/bin/bash

originalTerm="${TERM}"
if [ ${originalTerm} != "xterm" ]; then
    export TERM=xterm
fi

/etc/init.d/sshd start
service postgresql-9.6 restart
sleep 1

cassandra &
cd /usr/local/solr/jetty
./startup.sh &

# docker build 時のホスト(BUILD_TIME_HOSTNAME_FIXME) がスクリプトや設定ファイルに書き込まれているため、Docker イメージ実行時のホストに書き換える
host=`hostname`
sed -i -e "s/BUILD_TIME_HOSTNAME_FIXME/${host}/g" /opt/oracle/weblogic/user_projects/domains/mydomain/init-info/tokenValue.properties
sed -i -e "s/BUILD_TIME_HOSTNAME_FIXME/${host}/g" /opt/oracle/weblogic/user_projects/domains/mydomain/init-info/startscript.xml
sed -i -e "s/BUILD_TIME_HOSTNAME_FIXME/${host}/g" /opt/oracle/weblogic/user_projects/domains/mydomain/bin/stopWebLogic.sh
sed -i -e "s/BUILD_TIME_HOSTNAME_FIXME/${host}/g" /opt/oracle/weblogic/user_projects/domains/mydomain/bin/stopManagedWebLogic.sh

mkdir -p /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs
nohup /opt/oracle/weblogic/user_projects/domains/mydomain/startWebLogic.sh </dev/null >/opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/startWebLogic.log 2>&1 &

while [ ! -r /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/myserver.log ]
do
    sleep 1
done
while [ ! -r /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/startWebLogic.log ]
do
    sleep 1
done

if [ ${originalTerm} = "xterm" ]; then
    multitail -M 0 --follow-all --retry-all /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/myserver.log -I /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/startWebLogic.log
else
    tail -F /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/myserver.log /opt/oracle/weblogic/user_projects/domains/mydomain/servers/myserver/logs/startWebLogic.log
fi

如果到达这个地步,就先进行一次编译,然后执行。

docker build -t mywls:12.2.1.3 .
docker run -it --rm -p 7001:7001 -p 7002:7002 -p 40608:40608 -p 5432:5432 -p 2222:22 -p 9009:9009 -p 7091:7091 mywls:12.2.1.3

完成操作后,请使用ssh登录到容器中(可以使用root/password进行登录)。

zip -r oracle.zip /opt/oracle

执行并保存设置之前的状态 (oracle.zip)。保存后,进行intra-mart Accel Platform设置指南(WebLogic篇)的配置。

在設定反映後,使用ssh登入容器。

zip -r oracle2.zip /opt/oracle

执行操作,并保存在进行设置后的状态(oracle2.zip)。
使用WinMerge等工具比较oracle.zip和oracle2.zip的内容。
很可能在以下5个文件上检测到差异(日志文件也可能有差异,但可以忽略)。

    • /opt/oracle/weblogic/user_projects/domains/mydomain/bin/setDomainEnv.sh

 

    • /opt/oracle/weblogic/user_projects/domains/mydomain/bin/startWebLogic.sh

 

    • /opt/oracle/oracle_common/common/bin/commExtEnv.sh

 

    • /opt/oracle/weblogic/user_projects/domains/mydomain/config/config.xml

 

    /opt/oracle/weblogic/user_projects/domains/mydomain/config/jdbc/PostgreSQL-8300-jdbc.xml

取得上述的5个文件后,取消Dockerfile中以下被注释掉的地方的注释(取消注释)。

# COPY setDomainEnv.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/setDomainEnv.sh
# COPY startWebLogic.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/startWebLogic.sh
# COPY commExtEnv.sh /opt/oracle/oracle_common/common/bin/commExtEnv.sh
# COPY config.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/config.xml
# COPY PostgreSQL-8300-jdbc.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/jdbc/PostgreSQL-8300-jdbc.xml

请将以下内容改写为中文,只需要一种选项:

COPY setDomainEnv.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/setDomainEnv.sh
COPY startWebLogic.sh /opt/oracle/weblogic/user_projects/domains/mydomain/bin/startWebLogic.sh
COPY commExtEnv.sh /opt/oracle/oracle_common/common/bin/commExtEnv.sh
COPY config.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/config.xml
COPY PostgreSQL-8300-jdbc.xml /opt/oracle/weblogic/user_projects/domains/mydomain/config/jdbc/PostgreSQL-8300-jdbc.xml

完成更改后,再次执行 docker build。

docker build -t mywls:12.2.1.3 .

经过注释的5个COPY命令的执行后,应该从先前构建的镜像进行增量构建(而不是从头开始构建),从注释的COPY命令的行开始构建(因此,在构建时,主机名也应与执行注释的COPY命令之前相同)。

也许,在 Dockerfile 的开头

ENV HOSTNAME weblogic

使用该选项,可以使 docker build 时的主机名始终保持相同,从而减少可能出现的问题。

运行

docker run -it -p 7001:7001 -p 7002:7002 -p 40608:40608 -p 5432:5432 -p 2222:22 -p 9009:9009 -p 7091:7091 mywls:12.2.1.3

由于已经安装了PostgreSQL、Solr和Cassandra,您只需部署war文件即可立即进行验证。

Secure Shell (SSH) 是一種網絡通信協議,用於在不安全的網絡上遠程管理設備。

ssh -p 2222 root@localhost

当在执行docker run命令时,使用-p 2222:22选项,其中2222是ssh端口。
您可以使用root/password进行登录。
请将localhost替换为运行docker run的机器的IP地址。

部署

请根据以下内容,部署war。
请参考 intra-mart Accel Platform 设置指南(WebLogic版本)来部署war文件。

网址

    • WebLogic 管理画面

http://localhost:7001/console (weblogic/password)
war デプロイ後の一般ユーザログイン画面
http://localhost:7001/imart/login
war デプロイ後のシステムユーザログイン画面
http://localhost:7001/imart/system/login

请将localhost替换为正在运行Docker的机器的IP地址。

因此,以下是对WebLogic 12.2.1.3 intra-mart用已配置的Docker的简要介绍。

广告
将在 10 秒后关闭
bannerAds