安装所需的软件
Python
首先安装 Python.
apt-get install python
安装 python-software-properties - 最简单的方式是加入PPA 🙂
apt-get install python-software-properties
安装完后,你可以通过下面的命令添加PPA.
add-apt-repository ppa:xxx/yyy
Mercurial
为最新版的 mercurial 添加第三方 PPA:
add-apt-repository ppa:mercurial-ppa/stable-snapshots apt-get update apt-get install mercurial
Nginx
从第三方 PPA 安装 Nginx.
add-apt-repository ppa:nginx/stable apt-get update apt-get install nginx
uwsgi-python
安装 uwsgi-python 为 python application server.
add-apt-repository ppa:uwsgi/release apt-get update apt-get install uwsgi-python
配置
安装完软件后进行下一步 - 配置.
首先, 查看一下本指南中使用的目录结构.
/var/www/hosts/hg.server.net/conf #配置文件 /var/www/hosts/hg.server.net/logs #日志目录 /var/www/hosts/hg.server.net/repos #版本库目录
Mercurial + uwsgi
创建 UWSGI-application/etc/uwsgi-python/apps-available/hgweb.xml:
hgweb.xml
<uwsgi> <socket>/var/run/uwsgi.hgweb.sock</socket> <master/> <workers>2</workers> <![CDATA[ import uwsgi import os os.environ["HGENCODING"] = "UTF-8" from mercurial import demandimport; demandimport.enable() from mercurial.hgweb.hgwebdir_mod import hgwebdir application = hgwebdir('/var/www/hosts/hg.server.net/conf/hgweb.config') ]]> </uwsgi>
需要注意的是,在第14行你需要修改hgweb config的路径.
创建文件/var/www/hosts/hg.server.net/conf/hgweb.config:
hgweb.config
[web] push_ssl = true allow_push = * style = gitweb allow_archive = gz, zip, bz2 [collections] /var/www/hosts/hg.server.net/repos/ = /var/www/hosts/hg.server.net/repos/
在最后一行,你需要修改版本库目录.
现在,我们可以查看uwsgi server如何工作. 为了测试, 将hgweb.xml文件中<socket>/var/run/uwsgi.hgweb.sock</socket>修改为<socket>127.0.0.1:3031</socket>并运行:
uwsgi-python -x /etc/uwsgi-python/apps-available/hgweb.xml
如果一切OK,可以访问http://127.0.0.1:3031/去查看版本库列表. 如果结果正确, 还原 hgweb.xml 并 创建软链接至/etc/uwsgi-python/apps-enabled:
ln -s /etc/uwsgi-python/apps-{available,enabled}/hgweb.xml
Nginx
用 htpasswd 工具创建 auth 认证文件
htpasswd -c /var/www/auth/.htpasswd <username>
创建 nginx 配置文件 /etc/nginx/sites-available/hg.server.net
hg.server.net
server { listen 443; listen 80; server_name hg.server.net; ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /var/www/hosts/hg.server.net/ssl/ssl_certificate.crt; ssl_certificate_key /var/www/hosts/hg.server.net/ssl/ssl_certificate.key; root /var/www/hosts/hg.server.net/www; access_log /var/www/hosts/hg.server.net/logs/access.log; error_log /var/www/hosts/hg.server.net/logs/error.log; # Need for very big files client_max_body_size 100m; if ( $scheme = "http" ) { rewrite ^/(.*)$ https://$host/$1 permanent; } location / { auth_basic "Mercurial Repository"; auth_basic_user_file /var/www/auth/.htpasswd; include uwsgi_params; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SCRIPT_NAME /; uwsgi_param AUTH_USER $remote_user; uwsgi_param REMOTE_USER $remote_user; uwsgi_pass hgweb; } location /static/ { rewrite /static/(.*) /$1 break; root /usr/share/mercurial/templates/static; expires 30d; } location ~ /\. { deny all; } } upstream hgweb { server unix:/var/run/uwsgi.hgweb.sock; }
在/etc/nginx/sites-enabled目录中给 config 配置文件创建软链接:
ln -s /etc/nginx/sites-{available,enabled}/hg.server.net
启动服务:
service uwsgi-python start service nginx start
在浏览器中打开http://hg.server.net/. 如果一切正常,你会看到版本库列表. 如果出现错误请检查设置.
现在我们可以设置所有服务自动启动.
在启动时自动启动服务
配置必须的服务在启动时自动运行:
update-rc.d uwsgi-python defaults update-rc.d nginx defaults
现在. 你可以重启并检查是否工作正常.