• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Instalar, iniciar e testar o servidor web

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Neste documento tem tópico especifico sobre algumas distro, em cada distribuição, muda alguns comandos e detalhes da configuração, procure neste documento pelo tópico especifico sobre sua distro e versão, quando não encontrar, tente fazer via Webmin, tem modulo de configuração do Apache, cofigura o servidor web em diversas distro, procure no menu do Webmin por;

Servers -> Apache Webserver

Pesquise também nas ferramentas de sua distro, algumas tem seu próprio configurador, como yast no SUSE, Drakconf no Mandriva e etc...

Não esqueça de pesquisar no melhor manual de todos Google....

Testar funcionamento do servidor apache, na propria maquina coloque na URL de algum navegador; http://localhost, ou http://ip-da-maquina, neste formato http://192.168.1.3, utilizando IP pode testar a partir de outra maquina da rede ou via internet com IP da internet, isto abre a página padrão em algumas distro ou lista o diretório vazio, caso falhe, então verifique se o servidor está rodando, se está ouvindo na porta 80, se tem regras de firewall liberando, considere que algumas operadores de ADSL bloqueiam a porta 80, alguns modem ADSL tem regras internas fazendo este bloqueio e muitos outros detalhes, portanto verifique o funcionamento na maquina local e depois tente localizar e isolar o probleam da conexão externa.

Obter informações do servidor, requer lynx instalado, execute no console uma das opções abaixo, pode ser na própria maquina ou outra qualquer da rede local, ou via web use o IP da internet ou dominio quando o servidor responde por um, execute neste formato;


lynx -dump -head http://localhost
lynx -dump -head http://192.168.1.2
lynx -dump -head entertainment
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Exemplo de resultado obtido na rede interna, resposta do server no OPENSUSE

suse64:~ # lynx -dump -head http://192.168.1.2
HTTP/1.1 200 OK
Date: Mon, 27 Mar 2006 02:11:20 GMT
Server: Apache/2.2.0 (Linux/SUSE)
Connection: close
Content-Type: text/html

Reinstalar o Apache, antes de qualquer ação, faça copia dos arquivos de confgiuração, salve em outro local, por segurança, faça também backup dos dados, para reinstalar precisa; parar o serviço, pelo gerenciador de pacotes remover e depois instalar, neste processo vai gravar os arquivos de configuração default, fazendo a copia antes, tem como voltar ou usar na comparação, na remoção do apache o gerenciador de pacotes não remove os diretórios de dados onde estão as páginas web ou apontando o link simbolico, pelo menos não removeu quando tetei, mas isto muda conforme o gerenciador de pacotes e distro, portanto um backup antes nunca é demais.

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
CentOS 5.0

Instalar servidor web (apache)

yum install httpd -y
yum install httpd-manual -y # documentação - opcional mas recomendado
service httpd start # iniciar somente agora.
chkconfig httpd on # iniciar automaticamente junto com boot


Veja também as dicas no tópico sobre FC5, são semelhantes e se aplicam também no CentOS 5.0
FC5 - Fedora core 5 arquitetura x86_64

Instalar e iniciar o servidor de páginas web - httpd-2.2.0-5.1.2@x86_64

Não testei em arquitetura ix86, acredito que não tem diferenças, pode seguir este tutorial também em instalações ix86, com cautela nos nomes dos pacotes que mudam de arquitetura, onde consta x86_64 deve ser algo entre i386 e i686, os arquivos de configuração e pacotes são os mesmos, muda somente a terminação do arquivo e mirrors (servidores de pacotes na internet)

Neste tópico não tive preocupação com segurança nem configuração de DNS, este servidor não está de cara para internet, funciona somente como servidor interno para FreeNX, webmail, web local, relatórios do SARG (Squid) e repositório local do smart para a rede interna (intranet).

Segue varias maneiras de instalar o servidor web, utilize somente uma delas;

Instalar via smart;

smart install httpd -y
smart install httpd-manual -y # documentação - opcional mas recomendado
service httpd start # iniciar somente agora.
chkconfig httpd on # iniciar automaticamente junto com boot

Prontinho, acesse a partir da maquina local ou qualquer outra estação da rede, basta usar o IP do servidor na URL do navegador, acessa a página de teste "Fedora Core Test Page"

Crie diretórios abaixo de /var/www/html e disponibilize páginas para a rede interna, relatórios do Sarg e muito mais....

Faça mais um teste, crie um diretório e copie uma figura ou texto, exemplo, criar o diretório programas para disponibilizar programas aos usuários da rede internet,

mkdir /var/www/html/programas

cp arquivo.txt /var/www/html/programas

Na URL do navegador informe o IP mais o diretório, exemplo para servidor com IP 192.168.1.3, na URL fica assim;

192.168.1.3/programas

prontinho, vai acessar o texto "arquivo.txt" via navegador.

Criar sub-diretórios ou links para outros locais, crie abaixo de /var/www/html/ e para acessar, acrescente o nome do sub-diretório após o IP, neste formato;

http://IPouDominio/diretorio/

http://192.168.1.2/diretorio/

Disponibilizar outros diretórios, por exemplo o diretório /home/zago/guiaz, crie um link neste formato;

ln -s /caminho/origem/local /var/www/html/nome-do-local

ln -s /home/zago/guiaz /var/www/html/guiaz

Para acessar, na URL use este formato;

http://192.168.1.2/nome-do-local/

Arquivos de configuração ficam em /etc/httpd

O caminho default do servidor de páginas em /var/www/html/

Aproveite para instalar também a documentação, está no pacote httpd-manual, acesse; /var/www/manual/index.html, coloque na URL do konqueror ou navegue até lá, ou se preferir, crie um link para acessar também a partir de outras maquinas da rede

mkdir /var/www/html/manual

ln -s /var/www/manual/index.html /var/www/html/manual

Nas demais maquinas da rede, acrescente /manual/ após o IP na URL, neste formato;

http://192.168.1.2/manual/


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
SUSE 10
C

Instalar e iniciar o servidor de páginas web - Apache/2.0.54 (Linux/SUSE).

Neste tópico não tive preocupação com segurança nem configuração de DNS, este servidor não está de cara para internet, funciona somente como servidor interno para FreeNX, webmail, web local, relatórios do SARG (Squid) e repositório local do smart para a rede interna (intranet).

Segue varias maneiras de instalar o servidor web, utilize somente uma delas;

Instalar Apache2 via smart

smart install apache2 -y
sed -i "s/Options None/Options All/g" /etc/apache2/default-server.conf
chkconfig apache2 on
rcapache2 start
#documentação opcional...
smart install apache2-doc -y
smart install apache2-example-pages -y
smart install suselinux-manual_pt_BR -y


Instalar Apache2 via Yast

Instalar via yast em modo texto, simplesmente execute;


yast -i apache2
sed -i "s/Options None/Options All/g" /etc/apache2/default-server.conf
chkconfig apache2 on
rcapache2 start


Em ambiente gráfico, execute yast2, entre em "serviços de rede" -> "Servidor HTTP", tem muitas opções de configuração, tentei a configuração default, confirmei todos os serviços e pacotes, inclusive o bind, instalou sem mensagens de erro, parece tudo OK, mesmo assim falhou, nem iniciou uma página de testes, via Yast2 ou webmin não consegui liberar sub-diretórios para montar servidor web interno, tentei liberando acesso geral com chmod e outras opções nos .conf mas persiste no erro de leitura protegida.

A solução foi alterar em /etc/apache2/default-server.conf a diretiva (Options None) para (Options All), use seu editor preferido para editar;


/etc/apache2/default-server.conf

Localize (#Options None), remova o comentario e altere de None para All como neste exemplo;

#Options None
Options All


Ou em uma tacada só, copiar e colar, altera também as linhas comentadas, faça copia do arquivo antes da alteração, execute;

cp /etc/apache2/default-server.conf /etc/apache2/original-default-server.conf

sed -i "s/Options None/Options All/g" /etc/apache2/default-server.conf

Iniciar o servidor web (apache 2), sempre que alterar alguma diretiva de confiuguração precisa reinicar o servidor Apache, execute, rcapache2 restart

Pronto para acessar, use o IP da maquina na URL, quando vazio exibe a lista de arquivos e diretórios, crie ou copie sua página em /srv/www/htdocs/, ou instale a página de exemplo;

smart install apache2-example-pages -y

Este exemplo é muito simples, instala o index.html e robots.txt, quando acessa o raiz exibe a mensagem It works!, edite esta mensagem em /srv/www/htdocs/index.html, se quiser as páginas indexadas nos mecanismos de busca, edite ou remova o robot.txt

Crie links para outros locais, ou crie sub-diretórios abaixo de /srv/www/htdocs/ e para acessar, acrescente o nome do sub-diretório após o IP, neste formato;

http://IPouDominio/diretorio/

http://192.168.1.2/diretorio/

Quando instalar a documentação, localize os index.html com find, (find / -name index.html), depois acesse via navegador local.

/usr/share/doc/manual/suselinux-manual_pt_BR/manual/index.html

/usr/share/doc/packages/



;
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Pode criar link para acessar via navegador na maquina local ou a partir de qualquer maquina da rede, informando o IP mais o diretório ou arquivo, em meus testas acusava erro na troca de página, removi estas linhas de comando temporariamente, somente até descobrir a solução, caso queira tentar, serve como referencia as dicas abaixo.

Disponibilizar páginas e documentação no servidor Apache local, pode ser outros diretórios já existentes na maquina, como páginas do manual ou outros arquivos, por exemplo o diretório /home/zago/guiaz, pode criar um link no raiz ou criar criar sub-diretório como nome-do-local, crie também link neste formato;

mkdir /srv/www/htdocs/nome-do-local

ln -s /caminho/origem/local /srv/www/htdocs/nome-do-local

ln -s /home/zago/guiaz /srv/www/htdocs/nome-do-local

Para acessar, na URL use este formato;

http://192.168.1.2/nome-do-local/


Prontinho, vai cair no diretório para onde criou o link, abrindo index.html, caso ele não exista, então listará os arquivos e diretórios no mesmo formato quando acessa o raiz deste site.

Quando falhar, siga esta dica.

Mensagen de erro quando tenta acessar páginas antes de alterar para a diretiva "Options All", ao tentar acesso por outra maquina da rede, retorna esta mensagem no browser


Access forbidden!


You don't have permission to access the requested directory. There is either no index document or the directory is read-protected.


If you think this is a server error, please contact the webmaster.


Error 403

192.168.1.240
Sun Oct 23 22:45:28 2005
Apache/2.0.54 (Linux/SUSE)


Nos logs registra este erro;

linux:/var/log/apache2 # tail access_log
192.168.1.53 - - [23/Oct/2005:22:31:05 -0200] "GET / HTTP/1.1" 403 1018 "-" "Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)"

linux:/var/log/apache2 # cat error_log
[Sun Oct 23 22:30:57 2005] [notice] mod_python: Creating 32 session mutexes based on 150 max processes and 0 max threads.
[Sun Oct 23 22:30:58 2005] [notice] Apache/2.0.54 (Linux/SUSE) configured -- resuming normal operations
[Sun Oct 23 22:31:05 2005] [error] [client 192.168.1.53] Directory index forbidden by rule: /srv/www/htdocs/


Arquivos de configuração em /etc/apache2

Caminho do servidor de páginas /srv/www/htdocs

Esta configuração foi testada depois de configurado pelo Yast2, ainda não tentei instalar usando somente comandos do smart.

Configurando via webmin 1.240 retorna esta mensagem;

O arquivo executável /usr/sbin/httpd2-worker do servidor Apache não existe. Se o apache está instalado, ajuste a configuração do módulo para usar o caminho correto.

Clique na parte que der foco na mensagem acima e altere a diretiva "Caminho do executável httpd", preencha com "/usr/sbin/httpd2-prefork", pode salvar que abre nas configurações do servidor httpd.

Aproveite para instalar também a documentação e página de exemplo (apache2-doc e apache2-example-pages), acesse acrescentando /manual/ após o IP na URL, neste formato;

http://192.168.1.2/manual/

















 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
SUSE 10 e 10.1 - Diretório com senha - página protegida




Ambiente; SUSE 10 ou OPENSUSE 10.1, rodando apache2 sem problemas, outras maquinas da rede ou web acessando páginas ou diretórios.

Proteger diretórios no servidor web, pedir login e senha para liberar acesso a diretórios do servidor apache2.

Exemplo de como pedir login e senha para acessar um diretório, proteger o diretório /srv/www/htdocs/livros

criar diretório e chamar editor "vi";

mkdir /srv/www/htdocs/livros
cd /srv/www/htdocs/livros
vi .htaccess # ou seu editor preferido


segue copia do meu .htpasswd, ajuste somente o diretório a proteger.

opensuse101:~ # cat /srv/www/htdocs/livros/.htaccess

AuthUserFile /etc/apache2/.htpasswd
AuthGroupFile /dev/null
AuthName "Aceso Restrito"
AuthType Basic

Options All
<Limit GET POST>
require valid-user
</Limit>

Editar /etc/apache2/httpd.conf, inserir após a última linha o texto abaixo:


#primeiro diretorio a proteger
<Directory "/srv/www/htdocs/livros">
AllowOverride All
</Directory>

Criar usuário e senha, pode e deve ser diferente do usuário do sistema

htpasswd2 -c -b -m /etc/apache2/.htpasswd usuario senha

htpasswd2 -c -b -m /etc/apache2/.htpasswd zago minhasenha

Reiniciar o servidor web; rcapache2 restart

-c cria novo arquivo de senhas, remove usuários já existentes, para adicionar novos usuários mantendo os já existentes, elimine a diretiva -c, para adicionar novos usuários, use neste formato.

htpasswd2 -b -m /etc/apache2/.htpasswd zago minhasenha

Pronto, teste o acesso, informando na URL o IP mais o diretório;

http://192.168.1.53/livros/

Quando OK abre a tela de login e senha, (user e passwd), quando falhar reveja a configuração.

Atenção...

Depois de qualquer alteração, antes de efetuar novo teste de conexão, no servidor tem que reiniciar o apache, no cliente tem que fechar o navegador e abrir novamente.

Trocar senha;

htpasswd2 -b -m /etc/apache2/.htpasswd zago novasenha

Criar novos usuários;

htpasswd2 -b -m /etc/apache2/.htpasswd novouser umasenha

Para meu uso na rede interna está muito bom, em micros de cara para internet requer uma pesquisa sobre segurança, senha forte e outras formas de controle/autenticação.

Existem outras maneiras de controlar o acesso e autenticação, como exemplo segue o link sobre PAM com modulo para Apache;



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
SUSE 10.1 - i386



Instalar e iniciar o servidor de páginas web - Apache/2.2.0 (Linux/SUSE).

Neste tópico não tive preocupação com segurança nem configuração de DNS, este servidor não está de cara para internet, funciona somente como servidor interno para FreeNX, webmail, web local, relatórios do SARG (Squid) e repositório local do smart para a rede interna (intranet).

Segue as linhas de comando para instalar o servidor web Apache2 via smart;

smart install apache2 -y
sed -i "s/Options None/Options All/g" /etc/apache2/default-server.conf
chkconfig apache2 on
rcapache2 start
#documentação opcional...
smart install apache2-doc -y
smart install apache2-example-pages -y
smart install suselinux-manual_pt_BR -y


No comando "rcapache2 start" deve retornar mensagem semelhante a esta;


opensuse101:/home/zago # chkconfig apache2 on
opensuse101:/home/zago # rcapache2 start
Starting httpd2 (worker) done


OK, servidor apache no AR, crie links, diretórios ou páginas a partir de /srv/www/htdocs/, exemplo para criar o diretório com estas mensagens do FAQ.

mkdir /srv/www/htdocs/zago/

Copiar os textos para este diretório e acessar de qualquer maquina, informe o IP e diretório


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Conectiva 10




No Conectiva o Apache - servidor web - já vem configurado com página padrão de exemplo, colocar esta página no ar é muito simples, basta executar:

apt-get install apache
service apache start

Prontinho, servidor web rodando, faça o teste, na própria maquina abra o navegador e digite na URL o próprio IP da maquina, ou simplesmente localhost, acessar a partir de outra maquina da rede, na URL coloque o IP da maquina que está rodando o apache para acessar a página padrão, veja um exemplo desta página, acesse 200.204.198.164.

Aproveite e instale também a documentação para acessar a partir da página padrão.

apt-get install apache-doc

Esta página padrão fica em /srv/www/default/html, pode substitui-la ou criar diretórios, veja o exemplo para a documentação, quando instalada fica no sub-diretório manual.

Iniciar o servidor junto com o boot da maquina, toda vez que ligar o micro inicia também o servidor web; chkonfig apache on

Conferir se está rodando; service apache status

Acompanhe o log do apache

tail -f /var/log/httpd/access_log

veja também:

/var/log/httpd/error_log

Criar repositório de programas, considere usar o servidor como um servidor web interno, com acesso somente pelas estações da rede, pode instalar quantos servidor quiser pela rede.

Exemplo para criar o diretório programas para disponibilizar programas para as demais estações rede, Firefox, OpenOffice, anti-virus e outros utilitários, basta criar o diretório, tornar um usuário como dono para salvar os arquivos e prontinho, veja estes comandos para criar o diretório programas e tornar o usuário zago o dono do diretório para dar manutenção, salvar e remover progrmas no diretório;

mkdir /srv/www/default/html/programas
chown zago /srv/www/default/html/programas

Acessar este diretório, na URL dos navegadores das maquinas da rede, use o IP do servidor mais o diretório, neste formato;

http://192.168.1.3/programas/

Observe que o acesso via linha de comando é diferente da indicação na URL, o local é o mesmo, a diferença está forma de acesso, via browser o diretório raiz é o html que fica em /srv/www/default/html.

Manutenção neste diretório, em ambiente gráfico faça remotamente via konqueror com fish ou via ssh -X, com outros serviços como; mount (NFS), Freenx, winscp, scp, acesse via ssh e baixe via wget, tem muitas maneiras...

Este servidor interno tem muitas vantagens, faz o download uma única vez, economiza banda, agiliza o download, evita perda de tempo dos usuários procurando na net pelo pacote e outras vantagens.

OBS., CL10 instalado com CD upd1 vem com apache 2.0.49, o httpd.conf default desta versão do apache no CL10 não mostra os diretórios abaixo de /srv/www/default/html ou retornar no navegador a mensagem de acesso negado.

Solução; altere em /etc/apache/conf/httpd.conf, procure pela diretiva Options None, altera para Options All, depois reinicie o apache service apache restart e prontinho, pode acessar os diretórios criados abaixo de html sem problemas, utilizo este recurso em servidores exclusivo para rede interna, em servidor de cara para internet pesquise sobre segurança e outros cuidados como criar link para o diretório onde está a página.

Colinha do zago (faz a alteração indicada acima, basta copiar e colar);

sed -i "s/Options None/Options All/g" /etc/apache/conf/httpd.conf

service apache restart

Falha ao iniciar o Apache, quando obter o resultado abaixo.

service apache start

Iniciando Apache web server (httpd): httpd: Could not determine the server's
fully qualified domain name, using 127.0.0.1 for ServerName
[FALHOU]


Isto indica erro no nome da maquina, alterou depois da instalação do CL10 ou está usando menos de 3 termos na identificação, tem que corrigir para algo no formato.

server.zago.eti.br, maquina.dominio.net, maquina.dominio.com.br e etc.. não pode usar menos que 3 palavras nesta identificação, procure fazer esta alteração pelo linuxconf, basta instalar o linux e entrar na configuração de rede, procure o local onde aparece o nome da maquina e dominio, faça a alteração que deverá funcionar sem problemas, caso queira tentar pelo modo manual, altere em /etc/hosts e nas configurações da placa de rede que estão abaixo de /etc/sysconfig.





























 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
CL10 - Diretório com senha - página protegida

Ambiente; Conectiva 10 rodando servidor web, considerando o uso com as configurações default da instalação, proteger diretório contra acesso indesejado, criar diretório squid com acesso exclusivo de um usuário, por segurança deve alterar user e senha deste exemplo, também deve ser diferente de usuários do sistema.

Neste exemplo a seguir, usuário = squid e senha = minhasenha.

criar diretório squid e dentro dele o arquivo de cotrole .htaccess.

mkdir /srv/www/default/html/squid

use seu editor preferido ou vi /srv/www/default/html/squid/.htaccess crie o arquivo /srv/www/default/html/squid/.htaccess com este conteúdo.

AuthUserFile /etc/.htpasswd
AuthGroupFile /dev/null
AuthName "Area Squid"
AuthType Basic
<Limit GET>
require user squid
</Limit>


use seu editor preferido ou vi /etc/apache/conf/httpd.conf edite o /etc/apache/conf/httpd.conf para incluir as linhas abaixo no final dele.

<Directory /srv/www/default/html/squid>
require user squid
AuthType Basic
AuthName squid
AuthUserFile /etc/.htpasswd
</Directory>

crie o arquivo de senhas, neste exemplo; login=squid, senha=minhasenhacd /etc

Execute a linha de comando dentro do diretório que deseja proteger e onde criou o arquivo .htaccess, neste exemplo o caminho é este.

cd /srv/www/default/html/squid/

htpasswd -cb /etc/.htpasswd squid minhasenha

reinicie o serviço apache

``service apache restart ``

No navegador da maquina ou de outra da rede, na URL use IP/squid, exemplo;

http://192.168.1.3/squid/

Na tela de autenticação informe em usuário=squid senha=minhasenha
















 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
kubuntu 6.06




Instale o pacote apache2, via seu gerenciador de pacotes, ou execute no konsole do root

aptitude install apache2

Prontinho, apache instalado e rodando, para acessar a página default, use o IP do servidor apache na URL do navegador, pode ser na própria maquina ou outra qualquer da rede, isto acessa o diretório raiz e mostra o diretório da página default, também mostra a versão (Apache/2.0.55 (Ubuntu)). Caso falhe, verifique se não ocorreu erros durante a intalação, se não tem restrição no firewall ou outro problema na rede.

O raiz do servidor web fica em /var/www/, faça test com copia de algum arquivo texto ou página web, ou crie diretórios, exemplo para criar diretório programas,

mkdir /var/www/programas



Copie algum arquivo texto ou páginas em HTML e acesse via navegador, acrescente /programas depois do IP, neste formato.

192.168.1.2/programas
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Debian (Sarge 3.1)





Como root em linha de comando;

aptitude install apache

Após o dialogo, Servidor web instalado e iniciado automaticamente,

Exemplo para criar o diretório programas para disponibilizar programas para as demais estações rede, Firefox, OpenOffice, anti-virus e outros utilitários, basta criar o diretório, tornar um usuário como dono para salvar os arquivos e prontinho, veja estes comandos para criar o diretório programas e tornar o usuário zago o dono do diretório para dar manutenção, salvar e remover programas no diretório;

mkdir /var/www/programas
chown zago /var/www/programas


Acessar este diretório, na URL dos navegadores das maquinas da rede, use o IP do servidor mais o diretório, neste formato;

http://192.168.1.3/programas/

Observe que o acesso via linha de comando é diferente da indicação na URL, o local é o mesmo, a diferença está na forma de acesso, via browser o diretório raiz é o www que fica em /var/www.

Acompanhe o log em;

tail -f /var/log/apache/access.log















 
Topo