1

専用のルートサーバーでサブドメインを設定しようとして何時間も経った後、助けを求めています。

目標:

  • サブドメインを作成してアクセスできる
  • hgwebを使用して、水銀リポジトリ用の独自のサブドメインを設定します

サーバーに関する情報:

  • Debian Linux、カーネル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ファイルには、HelloWorldが含まれています。サブドメインにアクセスできるかどうかを確認するためのhtml。

では、最初の質問に戻りましょう。ブラウザからhgreposサブドメインにアクセスできないのはなぜですか。

次に、を使用して、プライベートプロジェクト用にいくつかのMercurial(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

では、2番目の質問です。hgwebを機能させるにはどうすればよいですか?私の構成の実際の何が問題になっていますか?

ええと、これは多くのテキストですが、どの情報が必要でどれが必要でないのかよくわかりません。あなたが私を助けてくれることを願っています、どんなヒントも役に立ちます:)

4

1 に答える 1

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-file を次のように設定しました。

#!/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)

アパッチの再起動

/etc/init.d/apache2 restart

そして今、すべてがうまくいきます。

私の痛みを終わらせるのを本当に助けてくれたkrtekに再び大きな感謝を!私の一日を作りました:D

于 2011-11-20T17:43:37.760 に答える