Linux - CentOS sistema 7.2 Nginx-1.10.2 implantação de ambiente web frasco quadro python

Texto do primeiro Prefácio

Na verdade, está apenas começando a aprender python, mas não tomar esse ambiente web passo, forçosamente tentou implantar ambiente web python, os resultados da última terça-feira tem agora! Post, vídeo, assisti inúmeras, é claro, também pisou em um monte de pit! Django nem sequer conhecer o início e o frasco é nada a ver com essa dor, confusa, muito doloroso, existem algumas vezes, vendo o sucesso em breve, como resultado, um passo para trás, atordoado por várias horas, uma variedade de solução de problemas, preencher o buraco, no entanto, sem ovos, MD, realmente, quer desistir muitas vezes, muitas vezes! Mas pense nisso, uma boa vergonha para desistir, ficar um pouco, stop and go, tropeçando, e, finalmente, sair! Hoje, nós simplesmente falar sobre a construção de etapas, o conhecimento não varrer (como estes lugares, realmente muito, uma pesquisa on-line é).

Versão de software

Linux 
CentOS 7.2 
Nginx-1.10.2 
Python-3.5.2

passos específicos

1, pronto para ambiente CentOS sistema 7.2, e criar um diretório base 
mkdir -p / Mina / Software
cd / Mina / Software
2, vá para o diretório de armazenamento de software, download de arquivo Python-3.5.2.tgz, descompactar, configurar, compilar, instalar 
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2. o tgz
o tar-3.5.2.tgz -zxvf o Python
CD do Python-3.5.2
./configure
a fazer
o make a instalação
configuração de python, compilar e instalar podem estar tentando chegar. Executar o make install [], o resultado final é sobre:
if test "xupgrade" != "xno"  ; then \
	case upgrade in \
		upgrade) ensurepip="--upgrade" ;; \
		install|*) ensurepip="" ;; \
	esac; \
	 ./python -E -m ensurepip \
		$ensurepip --root=/ ; \
fi
Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS
Aqui estão algumas dicas exigir SSL / TLS ambos os protocolos, por isso você tem que instalar sobre 
yum -y install OpenSSL-devel 
yum -y instalar zlib-devel
Se você esquecer esta etapa, quando você instalar Nginx, e, em seguida, executar a operação acima pode ocorrer
[root@iZm5e8dv3a3mevwweefuo2Z /]# yum install openssl-devel -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package 1:openssl-devel-1.0.2k-19.el7.x86_64 already installed and latest version
Nothing to do
[root@iZm5e8dv3a3mevwweefuo2Z /]# yum install zlib-devel -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package zlib-devel-1.2.7-18.el7.x86_64 already installed and latest version
Nothing to do
[root@iZm5e8dv3a3mevwweefuo2Z /]#
Aparece acima, que tem instalado, você não tem controle!
Python3 segue teste bem-sucedido:
[root@iZm5e8dv3a3mevwweefuo2Z nginx-1.10.2]# python3
Python 3.5.2 (default, Nov 19 2019, 11:09:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
3, baixar, instalar diretório especificado Nginx-1.10.2 para 
instalar dependências (qualquer caminho pode ser):
yum o GCC-Y-devel zlib zlib-devel PCRE instalar OpenSSL OpenSSL-devel
diretório: / Mina / Software /
CD / Mina / Software /
acesso aos recursos
wget http://nginx.org/download/nginx-1.10.2.tar.gz
extrair o
tar -zxvf nginx-1.10.2.tar.gz
criar o diretório de instalação:
mkdir / Mina / servir / nginx
para o arquivo diretório
cd nginx-1.10.2
configuração implantar o nginx
./configure --prefix = / Mina / servir / nginx
compilação montado
instalar make && make
Aqui, o tempo que a dependência pré-instalado, geralmente não anormal, ocorre um erro!
4, criar um diretório do projeto local, e digite 
mkdir -p / mina / www / mysite
digite
cd / minha / www /
5, usando python3 criar um diretório virtual 
local: / meu / www
criar um diretório virtual: python3 -m venv venv
Nota: este deve ser python3, ao invés de python
python3 criar um diretório virtual e vista, segue o sucesso:
[root@iZm5e8dv3a3mevwweefuo2Z www]# python3 -m venv venv
[root@iZm5e8dv3a3mevwweefuo2Z www]# ls
mysite  venv
6, ativar o ambiente virtual 
no olhar venv no diretório
cd / minha / www / venv /
saída diretório venv
cd ..
ativação
venv fonte / bin / activate
Ative o diretório virtual e visualizar, segue o sucesso:
[root@iZm5e8dv3a3mevwweefuo2Z www]# source venv/bin/activate
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]#
Aparece "(venv)" que entrar no ambiente virtual.
7, o uso pip instalar quadro frasco 
no qual diretório pode fazer isso
PIP3 instalar frasco
Nota: Não pode ser um poço, sugerindo -bash: PIP3: comando não encontrado
desta vez, você pode tentar pip instalar frasco
Aparecer como segue, indicando sucesso:
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]# pip install flask
Collecting flask
  Downloading http://mirrors.aliyun.com/pypi/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)
    100% |████████████████████████████████| 102kB 1.9MB/s
Collecting Jinja2>=2.10.1 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)
    100% |████████████████████████████████| 133kB 6.0MB/s
Collecting click>=5.1 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
    100% |████████████████████████████████| 81kB 57.4MB/s
Collecting Werkzeug>=0.15 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)
    100% |████████████████████████████████| 327kB 66.5MB/s
Collecting itsdangerous>=0.24 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Requirement already satisfied: MarkupSafe>=0.23 in /usr/lib/python2.7/site-packages (from Jinja2>=2.10.1->flask)
Installing collected packages: Jinja2, click, Werkzeug, itsdangerous, flask
  Found existing installation: Jinja2 2.9.6
    Uninstalling Jinja2-2.9.6:
      Successfully uninstalled Jinja2-2.9.6
Successfully installed Jinja2-2.10.3 Werkzeug-0.16.0 click-7.0 flask-1.1.1 itsdangerous-1.1.0
You are using pip version 9.0.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
8, Nginx serviços de arquivo de configuração, configure 
Nota: configuração Nginx quando Xshell abrir uma nova janela, porque [7] no ambiente virtual
para o arquivo de configuração
cd / minha / servir / nginx /
configuração de backup de arquivos
cp nginx. conf nginx.conf.bak
criar um diretório de perfil
mkdir local habilitar
para modificar o arquivo de configuração
vi nginx.conf (pressione a tecla de inserção, ver o fundo aparece canto esquerdo "--insert" carácter, o modo de edição, direito, cole o seguinte e, em seguida, pressione a tecla Esc, mude para o modo de Inglês e, finalmente, entrar ": wq", ou seja, salvar)
Após o arquivo de configuração é modificada, como se segue
user  root;
worker_processes  auto;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    gzip            on;
    sendfile        on;

    keepalive_timeout  65;

    include sites-enabled/*.conf;
}
Para o diretório novo 
cd locais habilitado 
editor, criar um perfil 
mysite.conf vim
server {
        listen          80;
        server_name     36.139.25.678;
        charset         utf-8;
        access_log      /mine/log/nginx/mysite.access.log main;
        error_log       /mine/log/nginx/mysite.error.log  warn;

        location / {
                root    /mine/www/mysite;
                index   index.html index.htm;

                include         uwsgi_params;
                uwsgi_pass      127.0.0.1:8080;
                uwsgi_param     UWSGI_PYHOME    /mine/www/venv;
                uwsgi_param     UWSGI_CHDIR     /mine/www/mysite;
                uwsgi_param     PYTHONPATH      /mine/www/mysite;
                uwsgi_param     UWSGI_MODULE    run;
                uwsgi_param     UWSGI_CALLABLE  app;
        }
}
Criar um diretório de log ou o teste é Nginx, quando haverá um erro 
mkdir -p / mina / log / nginx
9, de volta para a janela do ambiente virtual, pronto para instalar o recipiente uwsgi
 
se a janela está fechada, pode reabri-lo para ativar o ambiente virtual, você pode entrar em um ambiente virtual
Digite o ambiente virtual
[root@iZm5e8dv3a3mevwweefuo2Z ~]# cd /mine/www/
[root@iZm5e8dv3a3mevwweefuo2Z www]# ls
mysite  venv
[root@iZm5e8dv3a3mevwweefuo2Z www]# source venv/bin/activate
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]#
Use PIP3 recipiente uwsgi instalação 
PIP3 instalar uwsgi 
se ocorrer o seguinte, você pode tentar mudar pip 
(Venv) [root @ iZm5e8dv3a3mevwweefuo2Z o WWW] # PIP3 instalar uwsgi 
-bash: PIP3: O comando não encontrado 

mudança para tentar pip 
pip instalar uwsgi 
se implementadas, mas a execução do programa "compilação terminada", representa uma compilação terminada. 
Em seguida, também pedir-lhe para atualizar pip, não é recomendado upgrade, mesmo se a atualização e, em seguida, instalar uwsgi sendo dado mais grave!
Como fazê-lo?
Re-configure, compilar, instalar python3.5! 

Sim, você leu certo, re-configurar, compilar e instalar o python3.5! (Este é um atalho! Não acredite, você pode tentar outras opções !!) 

A, você digite o download, descompacte o catálogo, configure, compilar, instalar 
cd /mine/software/Python-3.5.2 
./configure 
make 
instalar o make
O resultado final do caso, o seguinte conteúdo representa um bom presságio
Ignoring indexes: https://pypi.python.org/simple
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-8.1.1 setuptools-20.10.1
b, exclua o diretório virtual original, reconstruir, ativar 
entrar / mina / www diretório 
cd / minha / www 
excluir um diretório virtual 
rm -rf venv 

re-criar o diretório virtual 
python3 -m venv venv 
ativação 
Fonte Venv / bin / de uma ativar 

c, reinstalação a garrafa 
PIP3 instalar o Flask 
aparecem abaixo, indicando sucesso
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]# pip3 install flask
Collecting flask
  Downloading http://mirrors.aliyun.com/pypi/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)
    100% |████████████████████████████████| 102kB 2.1MB/s
Collecting itsdangerous>=0.24 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting Werkzeug>=0.15 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)
    100% |████████████████████████████████| 327kB 6.9MB/s
Collecting click>=5.1 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
    100% |████████████████████████████████| 81kB 75.9MB/s
Collecting Jinja2>=2.10.1 (from flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)
    100% |████████████████████████████████| 133kB 52.1MB/s
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10.1->flask)
  Downloading http://mirrors.aliyun.com/pypi/packages/6e/57/d40124076756c19ff2269678de7ae25a14ebbb3f6314eb5ce9477f191350/MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl
Installing collected packages: itsdangerous, Werkzeug, click, MarkupSafe, Jinja2, flask
Successfully installed Jinja2-2.10.3 MarkupSafe-1.1.1 Werkzeug-0.16.0 click-7.0 flask-1.1.1 itsdangerous-1.1.0
You are using pip version 8.1.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Os resultados acima com os resultados do acima [7] parece ter um olhar diferente de perto!
d, mais uma vez tentar instalar uwsgi, os resultados são os seguintes, indicando sucesso
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]# pip3 install uwsgi
Collecting uwsgi
  Downloading http://mirrors.aliyun.com/pypi/packages/e7/1e/3dcca007f974fe4eb369bf1b8629d5e342bb3055e2001b2e5340aaefae7a/uwsgi-2.0.18.tar.gz (801kB)
    100% |████████████████████████████████| 808kB 87.1MB/s
Installing collected packages: uwsgi
  Running setup.py install for uwsgi ... done
Successfully installed uwsgi-2.0.18
You are using pip version 8.1.1, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
10, uwsgi para criar um perfil 
para mudar para um diretório não-virtual, abrir uma nova janela. 
Para o diretório mysite
cd / minha / servir / mysite
para criar um perfil uwsgi.ini
vim uwsgi.ini
Ele diz o seguinte:
[uwsgi]
enable-threads=true
thunder-lock=true
vhost=true
socket=127.0.0.1:8080
master=true
workers=4
max-requests=128
11, teste de configuração, iniciar o serviço Nginx
 
para o diretório de programa de inicialização
cd / minha / servir / nginx /
teste Nginx
./nginx -t -c /mine/serve/nginx/conf/nginx.conf
[root@iZm5e8dv3a3mevwweefuo2Z sbin]# ./nginx -t -c /mine/serve/nginx/conf/nginx.conf
nginx: [emerg] unknown log format "main" in /mine/serve/nginx/conf/sites-enabled/mysite.conf:5
nginx: configuration file /mine/serve/nginx/conf/nginx.conf test failed
Há um erro! Vista, de linha de erro 
access_log /mine/log/nginx/mysite.access.log principal; 

não criar o diretório de log não pode ser escrita, então o erro, resolver, criar um diretório 
cd / Mina / 
log mkdir -p / nginx 

continuar testando serviços Nginx 
cd / mina / servi / nginx / sbin 
./nginx -t -c /mine/serve/nginx/conf/nginx.conf
resultados:
[root@iZm5e8dv3a3mevwweefuo2Z sbin]# ./nginx -t -c /mine/serve/nginx/conf/nginx.conf
nginx: the configuration file /mine/serve/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /mine/serve/nginx/conf/nginx.conf test is successful
Iniciar Nginx 
entrar / Mina / servir / nginx / sbin / 
./nginx -c /mine/serve/nginx/conf/nginx.conf
[root@iZm5e8dv3a3mevwweefuo2Z sbin]# ./nginx -c /mine/serve/nginx/conf/nginx.conf
[root@iZm5e8dv3a3mevwweefuo2Z sbin]#
Nenhum resultado, é o melhor resultado! Ela representa o lançamento bem sucedido! ! !
12, mude para outra janela do ambiente virtual, reinicie uwsgi 
no ambiente virtual CD / Mina / de wwww
uwsgi --ini o mysite / uwsgi.ini
Se a janela de serviço para parar a conexão, você pode voltar a entrar
[root@iZm5e8dv3a3mevwweefuo2Z ~]# cd /mine/www/
[root@iZm5e8dv3a3mevwweefuo2Z www]# ls
mysite  venv
[root@iZm5e8dv3a3mevwweefuo2Z www]# source venv/bin/activate
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]#
Depois de executar "uwsgi --ini mysite / uwsgi.ini", se você ver o seguinte, não entre em pânico, este não é um erro! ! ! Não! ! ! ! !
(venv) [root@iZm5e8dv3a3mevwweefuo2Z www]# uwsgi --ini mysite/uwsgi.ini
[uWSGI] getting INI configuration from mysite/uwsgi.ini
*** Starting uWSGI 2.0.18 (64bit) on [Tue Nov 19 14:28:30 2019] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-39) on 19 November 2019 05:47:02
os: Linux-3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017
nodename: iZm5e8dv3a3mevwweefuo2Z
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /mine/www
detected binary path: /mine/www/venv/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
your processes number limit is 3896
your memory page size is 4096 bytes
detected max file descriptor number: 65535
VirtualHosting mode enabled.
lock engine: pthread robust mutexes
thunder lock: enabled
uwsgi socket 0 bound to TCP address 127.0.0.1:8080 fd 3
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
Python version: 3.5.2 (default, Nov 19 2019, 13:31:56)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
Python main interpreter initialized at 0x1176090
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 364600 bytes (356 KB) for 4 cores
*** Operational MODE: preforking ***
*** no app loaded. going in full dynamic mode ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 17378)
spawned uWSGI worker 1 (pid: 17379, cores: 1)
spawned uWSGI worker 2 (pid: 17380, cores: 1)
spawned uWSGI worker 3 (pid: 17381, cores: 1)
spawned uWSGI worker 4 (pid: 17382, cores: 1)
início do serviço uwsgi!
13, criado diretório mysite arquivo run.py
 
cd / Mina / WWW / mysite
vim run.py
Ele diz o seguinte:
from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

    return "Hello Python! Happy LDR!  "


if __name__ == "__main__":

    app.run(host='0.0.0.0', port=8080)
14, no navegador digite seu ip, vista

Veja acima, representa um sucesso!
15, onde apenas ip, eu também pode ser acessado através da configuração de domínio
 
Primeiro de tudo, você tem que ter um nome de domínio. Estive aqui as compras líquidas milhão. 

Com nome de domínio (que você tem que colocar no registro, o registro foi por um longo tempo, Ali irá enviar-lhe um grande registro de azul e branco do papel, para que ficar na frente da câmera, e upload, e, em seguida, pede-lhe para vários dias para ser concluído. Basta dizer aqui seu caso foi arquivado concluído) resolução log Ali nuvem console, fazer logon no console, digite [nome de domínio] - "para entrar na lista de nomes de domínio [] -" na lista de nomes de domínio, encontrar o nome de domínio que deseja usar - "[operação] [coluna coluna clique resolvido] - "Se não há nenhum registro -" [Add ficha] - "uma camada de pop-up, você só precisa gravar em [hospedeiro] após o enchimento www, em seguida, escrever no [valor] gravar o seu IP público, como 23.156.22.789, OK, nós podemos enviar! 

Em seguida, modifique /nginx/sites-enabled/mysite.conf

em linha server_name, adicione seu nome de domínio, você pode
server {
        listen          80;
        server_name     www.idonknow.net;
        charset         utf-8;
        access_log      /mine/log/nginx/mysite.access.log;
        error_log       /mine/log/nginx/mysite.error.log  warn;

        location / {
                root    /mine/www/mysite;
                index   index.html index.htm;

                include         uwsgi_params;
                uwsgi_pass      127.0.0.1:8080;
                uwsgi_param     UWSGI_PYHOME    /mine/www/venv;
                uwsgi_param     UWSGI_CHDIR     /mine/www/mysite;
                uwsgi_param     PYTHONPATH      /mine/www/mysite;
                uwsgi_param     UWSGI_MODULE    run;
                uwsgi_param     UWSGI_CALLABLE  app;
        }
}
Após a conclusão da alteração de configuração, você deve se lembrar de reiniciar Nginx! 

No entanto, deve-se notar aqui, em primeiro lugar tem que parar o serviço uwsgi (ctrl + c para sair), em seguida, parar o serviço Nginx (./nginx -s sair)! 

Finalmente, reiniciar o serviço Nginx, serviço uwsgi restart 

[Nginx reinicialização] 
cd / Mina / servir / nginx / sbin 
./nginx -c /mine/serve/nginx/conf/nginx.conf 

[uwsgi restart] 
premissa: em um ambiente virtual 
uwsgi --ini mysite / uwsgi.ini 
ver 
*** uWSGI modo é executado em Interpreter *** múltipla 
Spawned Processo uWSGI master (PID: 17454) 
Spawned trabalhador uWSGI 1 (PID: 17455, Cores :. 1). 
trabalhador Spawned uWSGI 2 (PID : 17456, núcleos :. 1) 
. trabalhador uWSGI Gerado 3 (PID: 17457, núcleos :. 1) 
trabalhador uWSGI Gerado 4 (PID:. 17458, núcleos :. 1)
Finalmente, através de um navegador para acessar o nome de domínio, se, você imprimir o conteúdo parecem indicar sucesso! ! !

Fim! ! ! !

Escrito na última

Somando-se este post, eu cuidadosamente de volta para o pensamento por um momento, todo o processo, desde o entendimento, aprender novos conhecimentos, ao passo no pit, preencher o buraco, a broca meio de um monte de beco sem saída, sempre nessa Sike, e, finalmente, também não encontrou uma boa maneira de perder tempo, gastar seu espírito de luta, de fato, essa abordagem é errada! Problemas encontrados mais de uma hora fazê-lo funcionar, deixá-lo pensar, não é o caminho errado, o que não é o conhecimento não entendem, oportuno retirar-se da perspectiva global, pense sobre o conhecimento agregado, um novo começo, talvez, vai resolver o problema mais rápido!
Publicado 59 artigos originais · ganhou elogios 2 · Vistas 5566

Acho que você gosta

Origin blog.csdn.net/LDR1109/article/details/103144147
Recomendado
Clasificación