ubuntu14.04配置apache2 svn服务器(提供https访问)

一. 安装PHP

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-curl php5-imagick php5-cli

二. 安装svn

输入安装命令:

sudo apt-get install subversion

(由于阿里云远程链接服务器时默认登陆管理员账号,所以sudo可以不用)
(如果无法下载软件,可能是由于阿里云可能把更新源的位置改了,运行apt-get update就行)

之后选择SVN服务文件及配置文件的放置位置。我放在了/srv下的svn目录。

sudo mkdir /srv/svn(版本仓库test)

目录建好后,创建版本仓库

sudo svnadmin create /srv/svn/test

执行之后test下文件结构如下:

三. 配置svn

跳转到配置文件

sudo cd /srv/svn/test/conf

1.修改svnserver.conf

sudo vi svnserve.conf
[general]
#匿名用户不可读
anon-access = none
#权限用户可写
auth-access = write
#密码文件为passwd
password-db = passwd
#权限文件为authz
authz-db = authz

这里修改时要顶格,不然要报错

2.authz 制定管理员组
即admin组的用户为admin,admin组对test有rw(读写权限)

[groups]
admin=admin       ##可以admin=admin,admin2,admin3

[test:/]
@admin=rw       ##admin组对test下的文件有读写权限

[:/项目/目录] #是以项目名作为第一个单位。不写版本库可以省略‘:’,即写成[/]
权限主体可以是用户组、用户或,用户组在前面加@,表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。

3.编制passwd文件,设定用户密码

[users]
admin=admin       ##用户名=密码

(注意等号两边不要留空格)

4.启动svn服务器

sudo svnserve -d -r /srv/svn/ --listen-port 3690

(这里启动服务时务必以管理员权限启动,否则用户拉取、提交文件时会提示权限不够)

-d 以守护模式启动

-r 制定svn版本库根目录,这样是便于客户端不用输入全路径,就可以访问版本库了

–listen-port 3690 监听3690端口,默认就是3690。。。所以不输也可以

5.访问代码库

svn://your ip/test
(查看IP地址:ifconfig)

注:到这里位置就可以通过svn访问了,通过https访问在后面

四. 安装apache2

输入安装命令:

sudo apt-get install apache2 apache2-utils libapache2-svn
sudo a2enmod ssl 开启SSL模块
sudo a2ensite default-ssl 启用SSL站点支持
sudo a2enmod rewrite 启用rewrite模块

1.配置/etc/apach2/apache2.conf

sudo vi /etc/apache2/apache2.conf

增加对.htaccess的支持:将www目录的AllowOverride参数修改为ALL
防止访问目录:将Options中的Indexes删除

2.重启apache服务

sudo /etc/init.d/apache2 restart

Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了

  • 默认站点: /var/www/
  • 配置目录: /etc/apache2/
  • 日志目录: /var/log/apache/
  • 启动脚本: /etc/init.d/apache2

五. 配置自动更新

这里配置自动更新用的是svn的钩子,脚本是shell,也可以用其他的脚本比如python
钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作
实现原理:当用户提交commit动作发生都让另外一处project马上从仓库中进行代码checkout一份出来!

1.在Web目录迁出代码

sudo svn co svn://127.0.0.1/test /var/www/html --username admin --password admin

2.添加脚本

在svn项目的hooks文件夹中的post-commit文件中添加脚本:用vi命令编辑一个新的post-commit(看清楚没有后缀名)千万不要用hooks文件夹里自带的post-commit文件,那是模板。

sudo vi /srv/svn/test/hooks/post-commit

在文件中添加如下内容:

#!/bin/sh
WEB=/var/www/html   #web服务器下的项目不能有空格。
#说明:post-commit会接受两个参数  #/srv/svn/test  表示svn仓库的绝对路径值  #表示最新的一个版本号。最后一个版本号
export LANG=en_US.UTF-8
svn update $WEB --username admin --password admin  #相当客户端的update操作
exit 0

如果不能判断自己写的shell脚本是否有错,可以现在hooks目录下运行./post-commit试一下

六. 配置https访问

1.安装OpenSSL

sudo apt-get install openssl

2.创建证书

sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999

创建证书有两种方式:一种是自签名证书,一种是第三方CA机构签名证书。由于我们这里的证书只是保证传输数据安全性,因此我们使用自签名证书。

命令执行成功后会在当前目录生成一个apache.pem的证书,将这个文件复制到apache的配置目录/etc/apache2/ssl。

sudo mkdir /etc/apache2/ssl
sudo cp apache.pem /etc/apache2/ssl/

3.配置站点证书

sudo vi /etc/apache2/sites-available/default-ssl.conf
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
    #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

注意: SSLCertificateKeyFile前需要加#

如果配置没有问题,那么我们通过https协议就可以访问该IP地址了。

4.4配置apache服务器

/etc/apache2/mods-available/dav_svn.conf #加在文件最后面即可

DAV svn
#SVNPath /srv/svn/test
SVNParentPath /srv/svn
SVNListParentPath On
AuthType Basic
AuthName "welcome to subversion repository"
AuthUserFile /srv/svn/test/conf/passwd
AuthzSVNAccessFile /srv/svn/test/conf/authz
#
Require valid-user
SSLRequireSSL #(https,否则取消)
#

5.添加新用户或修改老用户密码

htpasswd -c /etc/subversion/passwd 用户名 //第一次设置用户时使用-c表示新建一个用户文件,之后取消-c.
回车后输入用户密码

6.重启Apache

sudo service apache2 restart
标签:SVNUbuntuApache 发布于:2019-10-01 02:04:35