Apache Subversion(简称SVN,svn)

因为某种原因我们需要用Nginx作为Subversion的http前端,但目前没有现成的Nginx+Subversion搭配方式。
而Subversion提供Apache的http处理模块。现在我们通过nginx反向代理给Apache的方式来实现Nginx+Subversion的组合方式。

构建Apache+Subversion的环境:

[root@nginx-apache-svn ~]# yum install httd subversion mod_dav_svn -y
#mod_dav_svn是Apache的svn模块

建立SVN库:

[root@nginx-apache-svn ~]# mkdir -p /home/svn
[root@nginx-apache-svn ~]# cd /home/svn/
[root@nginx-apache-svn svn]# svnadmin create work
[root@nginx-apache-svn svn]# chown -R apache.apache work
[root@nginx-apache-svn svn]# tree work/
work/
├── conf
│   ├── authz
│   ├── passwd
│   └── svnserve.conf
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── rep-cache.db
│   ├── revprops
│   │   └── 0
│   │   └── 0
│   ├── revs
│   │   └── 0
│   │   └── 0
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt 10 directories, 28 files

添加Subversion账号:(注意只是浏览项目的账户,并不能用它登录SVN)

[root@nginx-apache-svn svn]# htpasswd -c /home/svn/work/conf/passwdfile visitor
New password: visitor#用户名和密码都设为visitor
Re-type new password:visitor
Adding password for user visitor

修改/etc/httpd/conf.d/subversion.conf,内容如下:

<Location /svn/work>
DAV svn
SVNPath /home/svn/work
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /home/svn/work/conf/passwdfile#注意这里的用户,只是通过识证的,通过认证,只能是通过http://ip/svn/项目,去浏览项目,不能跟svn/work/conf/passwd里的svn用户混淆了!
AuthzSVNAccessFile /home/svn/work/conf/authz
Require valid-user
</Location>
AuthzSVNAccessFile /home/svn/work/conf/authz特别注意这里也要添加认证用户和权限(不然会认证失败,本文章中是visitor)

修改Apache的端口:

[root@nginx-apache-svn svn]# grep "^Listen" /etc/httpd/conf/httpd.conf
Listen 81
[root@nginx-apache-svn svn]# service iptables stop && setenforce 0
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@nginx-apache-svn svn]# getenforce
Permissive
[root@nginx-apache-svn svn]# /etc/init.d/httpd start
Starting httpd: [ OK ]
[root@nginx-apache-svn svn]# netstat -lnutp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1310/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1389/master
tcp 0 0 :::81 :::* LISTEN 1632/httpd
tcp 0 0 :::22 :::* LISTEN 1310/sshd
tcp 0 0 ::1:25 :::* LISTEN 1389/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1143/dhclient

使用Nginx反向代理

[root@nginx-apache-svn src]# wget http://nginx.org/download/nginx-0.8.55.tar.gz
[root@nginx-apache-svn src]# pwd
/usr/local/src
[root@nginx-apache-svn src]# ls
nginx-0.8.55.tar.gz
[root@nginx-apache-svn nginx-0.8.55]# tar -xzvf nginx-0.8.55.tar.gz && cd nginx-0.8.55

添加nginx账号:

[root@nginx-apache-svn nginx-0.8.55]# useradd -s /bin/false nginx
/bin/false是最严格的禁止login选项,一切服务都不能用。
/sbin/nologin只是不允许login系统

安装依赖包:

[root@nginx-apache-svn nginx-0.8.55]# yum install gcc  pcre-devel openssl-devel  -y
[root@nginx-apache-svn nginx-0.8.55]# ./configure --prefix=/app/server/nginx-0.8.55 \
--with-http_stub_status_module \
--with-http_gzip_static_module
[root@nginx-apache-svn nginx-0.8.55]# make && make install
[root@nginx-apache-svn nginx-0.8.55]# cd /app/server/
[root@nginx-apache-svn server]# ls
nginx-0.8.55
[root@nginx-apache-svn server]# ln -sf nginx-0.8.55/ nginx && cd -
[root@nginx-apache-svn nginx-0.8.55]# ll /app/server/
total 4
lrwxrwxrwx. 1 root root 13 Jul 25 09:36 nginx -> nginx-0.8.55/
drwxr-xr-x. 6 root root 4096 Jul 25 09:35 nginx-0.8.55

配置Nginx反向代理,修改/app/server/nginx/conf/nginx.conf:

server {
listen 80;
server_name localhost ; location /svn/work {
proxy_pass http://127.0.0.1:81/svn/work;
} location / {
return 404;
}
}

配置SNV:

[root@nginx-apache-svn conf]# pwd
/home/svn/work/conf
[root@nginx-apache-svn conf]# egrep -v "^$|^#" svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = /home/svn/work/conf/passwd
authz-db = /home/svn/work/conf/authz
[root@nginx-apache-svn conf]# which svnserve
/usr/bin/svnserve
[root@nginx-apache-svn conf]# /usr/bin/svnserve -d -r /home/svn
[root@nginx-apache-svn conf]# netstat -lnutp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4806/svnserve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1744/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1389/master
tcp 0 0 :::81 :::* LISTEN 1632/httpd
tcp 0 0 :::22 :::* LISTEN 1744/sshd
tcp 0 0 ::1:25 :::* LISTEN 1389/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1143/dhclient
[root@nginx-apache-svn conf]# /app/server/nginx/sbin/nginx
[root@nginx-apache-svn conf]# netstat -lnutp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4806/svnserve
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4809/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1744/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1389/master
tcp 0 0 :::81 :::* LISTEN 1632/httpd
tcp 0 0 :::22 :::* LISTEN 1744/sshd
tcp 0 0 ::1:25 :::* LISTEN 1389/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1143/dhclient
[root@nginx-apache-svn work]# cat /home/svn/work/conf/authz
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
### - a single user,
### - a group of users defined in a special [groups] section,
### - an alias defined in a special [aliases] section,
### - all authenticated users, using the '$authenticated' token,
### - only anonymous users, using the '$anonymous' token,
### - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### (''). [aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average [groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe # [/foo/bar]
# harry = rw
# &joe = r
# * =
[/]
visitor=r
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
svnserve -d -r /home/svn#注意启动的时候,一定不要:svnserve -d -r /home/svn/work
svn co svn://192.168.1.98/work work01#注意略径

真对/home/svn/work/conf/passwd是明文的不安全因素,可以考虑用vim passwd +X去加密passwd文件。(经测试这种方法行不通,无法认别,所以无法用VIM加密passwd文件!!!)

特别要注意关掉selinux:(否则重启会出现认证失败!!!)

[root@NGINX-APACHE-SVN ~]# getenforce
Disabled

================================================

可以配置多个版本库:

主要是两个文件:/var/http/conf.d/subversion.conf  和 /app/server/nginx/conf/nginx.conf
[root@NGINX-APACHE-SVN ~]# egrep -v "(^$|^#)" /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/pro>#(注意通过http:xxx.xxx.xxx.xxx/xxx访问多个代码库的时候,关键是配置下面的参数)
DAV svn
SVNPath /var/www/html/svn/pro
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/www/html/svn/pro/conf/passwdfile #可以对不同的项目以不同的配置文件,设不同的密码,达到不同的代码组,不能看对方的代码
AuthzSVNAccessFile /var/www/html/svn/pro/conf/authz
Require valid-user
</Location>
<Location /svn/app01>
DAV svn
SVNPath /var/www/html/svn/app01
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /var/www/html/svn/pro/conf/passwdfile
AuthzSVNAccessFile /var/www/html/svn/pro/conf/authz
Require valid-user
</Location>
多一个版本库就添加一个[Location].......[/Location]
vi /app/server/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
}
location /svn/pro {
proxy_pass http://127.0.0.1:81/svn/pro;
}
location /svn/app01 {
proxy_pass http://127.0.0.1:81/svn/app01;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#多一个版本库 就多添加一个location /svn/xxxx {.......}

所有的版本库的svnserver.conf都用相同的这样更于管理:

[root@NGINX-APACHE-SVN ~]# egrep -v "(^$|^#)" /var/www/html/svn/pro/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = /var/www/html/svn/pro/conf/passwd
authz-db = /var/www/html/svn/pro/conf/authz
[sasl]
=============================================================================
[root@NGINX-APACHE-SVN ~]# egrep -v "(^$|^#)" /var/www/html/svn/app01/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = /var/www/html/svn/pro/conf/passwd
authz-db = /var/www/html/svn/pro/conf/authz
[sasl]
[root@NGINX-APACHE-SVN ~]#

这样就OK了可以对于不能的版库,有可以设不同的密码在各自的passwd中。

CentOS搭建Nginx+Subversion环境(包括多个版本库的配置)的更多相关文章

  1. 搭建Nginx+JAVA环境

    搭建Nginx+JAVA环境 Apache对Java的支持很灵活,他们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用的支持.Apache一般采用一个 ...

  2. 树莓派 Learning 002 装机后的必要操作 --- 05 给树莓派搭建“x86 + pi”环境 -- 安装**32位运行库** -- 解决`E:未发现软件包 xxx` 问题

    树莓派 装机后的必要操作 - 给树莓派搭建"x86 + pi"环境 – 安装32位运行库 – 解决E:未发现软件包 xxx 问题 我的树莓派型号:Raspberry Pi 2 Mo ...

  3. 基于centos搭建nginx+uwsgi运行django环境

    环境: CentOS 7 nginx/1.9.12 Python 2.7.5 一:安装依赖包5 yum install zlib-devel bzip2-devel pcre-devel openss ...

  4. Centos搭建nginx环境,编译,添加服务,开机启动。

    首先安装所需的安装库,yum -y install gcc gcc-c++ autoconf libtool* openssl openssl-devel 编译的时候,若有提示错误,提示缺少某个库,y ...

  5. 【svn】Centos搭建svn服务器环境

    1.需求描述 在Centos系统中搭建svn服务器环境 2.搭建过程 2.1 yum安装svn [root@localhost /]# yum install svn  2.2 新建目录存储svn目录 ...

  6. docker一键搭建Nginx+PHP环境(含自动部署命令)

    文章的主要部分是一步一步的教程,文章的最后是我整理好的一键安装命令,自动下载并安装docker,构建镜像,启动容器集群(压缩包内注释覆盖范围达到80%) 大家可以看完教程亲自尝试下,也可以直接执行一键 ...

  7. 使用docker快速搭建nginx+php环境

    在朋友的强烈推荐下,走上了docker之路.经过了繁琐的docker环境安装,看了下镜像/容器的简单使用,开始进行nginx+php环境的搭建,本文记录一下在安装过程中的笔记. 原文地址:代码汇个人博 ...

  8. 基于Centos搭建 Mono 开发环境

    系统要求: CentOS 7.2 64 位操作系统 安装 Mono 安装前的准备 yum install yum-utils 执行命令添加安装包仓库 rpm --import "http:/ ...

  9. PHP-Windows下搭建Nginx+PHP环境

    项目中光用Nginx了, 由于有运维人员, 很少搭建Nginx服务器, 开发也就用用Apache, 搭过几次Nginx也忘的快, 每次都去翻别人博客, 今天重搭特此记录, 装前最好了解下FastCGI ...

随机推荐

  1. JAVA常见算法题(三十一)---冒泡排序

    package com.jege.spring.boot.hello.world; /** * java算法之冒泡排序<br> * 将数组按照从大到小的顺序排列<br> * * ...

  2. python的threading.Thread线程的start、run、join、setDaemon

    Pycharm整体看下Thread类的内容:模拟的是Java的线程模型 表示方法method,上面的锁头表示这个是类内部的方法,从方法名字命名规范可以看出,都是_和__开头的,一个下划线表示是子类可以 ...

  3. JS 与Flex交互:html中的js 与flex中的actionScript通信

    Flex与JavaScript交互的问题,这里和大家分享一下,主要包括Flex调用JavaScript中的函数和JavaScript调用Flex中的函数两大部分内容. Flex 与JavaScript ...

  4. 使用BeyondCompare比较文件夹下的文件时,相同的文件内容,但显示为不相同

    主要原因是: 两个文件行尾标题不一致而导致的,一个是PC,一个是Unix 解决办法: 随便比较文件夹中的两个文件,点击规则,去掉比较行尾(pc/mac/unix)选项,点击确认,回到文件夹比较界面,刷 ...

  5. DevExpressComponents-14.2.5 破解过程,正在编写,未完

    首先,批评一下cnblogs,在win10的环境下,需要加入到兼容视图列表方可正常编辑内容, 声明,本人在14.2.3 的源代码环境下,编译未通过,相关功能报错,索性选择破解,在此,只是学习测试使用, ...

  6. UNIX网络编程读书笔记:poll函数

    poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息. poll函数原型 #include <poll.h> int poll(struct pollfd * ...

  7. 环境变量之执行文件路径的变量PATH

    当我们执行一个命令时,系统会依据PATH的设置去PATH定义的每个目录下查寻该命令的可执行文件,如果在PATH定义的目录中含有多个文件名为我们要执行的命令的可执行文件时,那么先查询到的同名命令先被执行 ...

  8. Linux 监测CPU常用的工具sar iostat vmstat top uptime

    sar -u 1 2 iostat -c 1 2 vmstat 1 2 top uptime Linux监控CPU整体性能常用的工具有: # mpstat: mpstat 不但能查看所有CPU的平均信 ...

  9. react-router-dom Link search 传参

    <Link> 和之前版本没太大区别,重点看下组件属性: to(string/object):要跳转的路径或地址: replace(bool):为 true 时,点击链接后将使用新地址替换掉 ...

  10. Android-PullToRefresh(一)

    先讲下这篇写啥东西,也就是这家伙(chrisbanes)写的一个上拉下拉刷新的Demo,连接https://github.com/fengcunhan/Android-PullToRefresh 东西 ...