Создание поддоменов с Apache на Debian; создание субдомена hgweb в качестве второго шага
После нескольких часов попыток настроить субдомены на моем выделенном корневом сервере, я прошу вас о помощи.
Цель:
- возможность создавать и получать доступ к поддоменам
- настроить собственный поддомен для ртутных репозиториев, используя hgweb
Информация о сервере:
- Debian Linux, Kernel 2.6.32-028stab094.3
- Apache / 2.2.16 (Debian)
- Mercurial 1.6.4
- libapache2-mod-wsgi-py3 установлен
Первый вопрос: что не так с моей конфигурацией apache, что я не могу получить доступ к своим поддоменам через браузер?
На самом деле, я могу получить доступ к корневому домену и сайтам, которые там установлены.
Моя конфигурация: / etc / apache2 / sites-available / default
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName mydomain.tld
ServerAlias www.mydomain.tld
DocumentRoot /var/www/forum
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/forum>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
/etc/apache2/sites-available/hgrepos.domainname.tld
<VirtualHost *>
ServerName hgrepos.domainname.tld
ServerAlias www.hgrepos.domainname.tld
DocumentRoot /var/www/hgrepos/htdocs
# WSGIScriptAliasMatch ^(.*)$ /var/www/hgrepos/cgi-bin/hgweb.wsgi$1
WSGIScriptAlias / /var/www/hgrepos/cgi-bin/hgweb.wsgi
# To enable "daemon" mode, uncomment following lines. (Read mod_wsgi docs for more info)
# WSGIDaemonProcess hgrepos.domainname.tld user=USER group=GROUP threads=1 processes=15 maximum-requests=1000
WSGIDaemonProcess hgrepos.domainname.tld threads=1 processes=15 maximum-requests=1000
# some more interesting options (tested on mod_wsgi 2.0):
# umask=0007 display-name=wsgi-hg.example.net inactivity-timeout=300
# WSGIProcessGroup hg.example.net
<Directory /var/www/hgrepos/htdocs>
Options FollowSymlinks
DirectoryIndex index.html
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/hgrepos/cgi-bin>
Options ExecCGI FollowSymlinks
AddHandler wsgi-script .wsgi
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Мой файл /etc/apache2/httpd.conf пуст.
Я включил файл субдомена через a2ensite subdomain.domainname.tld
,
regine@diddi:/etc/apache2/sites-available# ll ../sites-enabled/
lrwxrwxrwx 1 root root 26 Oct 29 22:33 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 48 Nov 17 00:41 hgrepos.domainname.tld -> ../sites-available/hgrepos.domainname.tld
Я использовал оба, /etc/init.d/apache2 reload
а также /etc/init.d/apache2 restart
, Apache не сказал мне, что я пытался загрузить некорректную конфигурацию.
Сайты для корневого домена находятся под /var/www/forum
и доступно.
Моя структура папок для / var / www / hgrepos выглядит следующим образом:
hgrepos
+- drwxr-xr-x www-data www-data cgi-bin
|--- -rwxr-xr-x www-data www-data hgweb.config
|--- -rwxr-xr-x www-data www-data hgweb.wsgi
+-- drwxr-xr-x htdocs
|--- -rw-r--r-- www-data www-data index.html
|--- drwxr-xr-x www-data www-data myFirstHgRep
index.html
Файл просто содержит Hello World! HTML, чтобы увидеть, доступен ли поддомен.
Итак, вернемся к моему первому вопросу: почему я не могу получить доступ к поддомену hgrepos через мой браузер?
Теперь, во-вторых, я хочу использовать некоторые ртутные (hg) репозитории для моих частных проектов, используя hgweb
, Я следовал этим инструкциям:
https://www.mercurial-scm.org/wiki/modwsgi
https://www.mercurial-scm.org/wiki/HgWebDirStepByStepFtpOnly
Вот мои конфигурационные файлы в / var / www / hgrepos / cgi-bin /:
hgweb.wsgi
#!/usr/bin/env python
#
# An example hgweb CGI script, edit as necessary
# See also https://www.mercurial-scm.org/wiki/PublishingRepositories
# Path to repo or hgweb config to serve (see 'hg help hgweb')
# config = "hgweb.config"
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb; cgitb.enable()
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb("hgweb.config")
#wsgicgi.launch(application)
hgweb.config
[web]
style = coal
baseurl =
[paths]
/ = /var/www/hgrepos/htdocs/*
Права на файлы:
regine@diddi:/var/www/hgrepos/cgi-bin# ll
-rwxr-xr-x 1 www-data www-data 68 Nov 17 01:16 hgweb.config
-rwxr-xr-x 1 www-data www-data 621 Nov 17 01:24 hgweb.wsgi
Итак, теперь мой второй вопрос: как я могу заставить работать hgweb? Что на самом деле не так с моей конфигурацией?
Что ж, это много текста, но я не совсем уверен, какая информация нужна, а какая нет. Надеюсь, вы можете помочь мне, любой намек полезен:)
1 ответ
Что ж, хорошие новости - я исправил свои проблемы.
Первым шагом было удаление libapache-mod-wsgi-py3 и установка libapache-mod-wsgi (во время моих попыток я несколько раз переустанавливал wsgi-py3-package, похоже, моя последняя переустановка исправила это как-то...)
apt-get remove libapache2-mod-wsgi-py3
apt-get install libapach2-mod-wsgi-py3
apt-get autoremove
После этого при перезапуске apache я получил следующее в error.log:
mod_wsgi (pid=16349): Target WSGI script '/var/www/hgrepos/cgi-bin/hgweb.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=16349): Exception occurred processing WSGI script '/var/www/hgrepos/cgi-bin/hgweb.wsgi'.
Traceback (most recent call last):
File "/var/www/hgrepos/cgi-bin/hgweb.wsgi", line 20, in <module>
application = hgweb("/var/www/hgrepos/cgi-bin/hgweb.config")
File "/usr/lib/pymodules/python2.6/mercurial/hgweb/hgweb_mod.py", line 32, in __init__
self.repo = hg.repository(u, repo)
File "/usr/lib/pymodules/python2.6/mercurial/hg.py", line 94, in repository
repo = _lookup(path).instance(ui, path, create)
File "/usr/lib/pymodules/python2.6/mercurial/bundlerepo.py", line 305, in instance
return bundlerepository(ui, repopath, bundlename)
File "/usr/lib/pymodules/python2.6/mercurial/bundlerepo.py", line 177, in __init__
raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
Abort: /var/www/hgrepos/cgi-bin/hgweb.config: not a Mercurial bundle file
После этого я настроил свой hgweb.wsgi-файл так:
#!/usr/bin/env python
#
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/usr/lib/pymodules/python2.6")
# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb; cgitb.enable()
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/var/www/hgrepos/cgi-bin/hgweb.config"
application = hgweb(config)
Перезапуск Apache
/etc/init.d/apache2 restart
и теперь у меня все работает.
Еще раз большое СПАСИБО Кртеку, который действительно помог прекратить мою боль! Сделал мой день:D