zoukankan      html  css  js  c++  java
  • 正式版SVN服务器安装记录

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
    内部邀请码:C8E245J (不写邀请码,没有现金送)
    国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。 
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

    原帖:http://my.oschina.net/janpoem/blog/118879

    请了一个系统管理员,明日上班,是我早年的好友。

    之前已经发过一次测试版服务器的安装记录,为我在本机安装的虚拟机的操作过程,之后为了应对正式版的服务器,我重新装了一次虚拟机,并且重新将每一步的操作记录明细。一者,为了方便我日后翻查记录,二者,接手工作的人,也可以有一个基本记录可参照。

    文本内容主要包含执行过的命令,项目的配置文件在此,增加了sshd和dropbox的配置,系统为CentOS 6.2。

    一、用户组管理

    1 groupadd www -g 900
    2 adduser -g 900 -u 9001 -M -s /sbin/nologin www
    3 adduser -g 900 -u 9002 -M -s /sbin/nologin svn
    4 adduser -g 900 -u 9001 www-user
    5 passwd www-user

    添加www用户组,www用户——主要为nginx和php的用户,svn用户——主要为Apache和SVN的用户。

    www-user为登陆ssh或sftp的操作者账号,禁止root用户直接登录。

    因为有别的用途,所以这里指定了gid和uid。

    二、准备目录

    以下为基础的目录准备,不过实际服务器上,很多目录有调整。

    01 cd /srv
    02 mkdir www
    03 mkdir svn
    04 mkdir backup
    05 chown svn:www svn -Rf
    06 chown www:www www -Rf
    07 chown www:www backup -Rf
    08 mkdir svn_conf
    09 cd svn_conf
    10 touch httpd_passwd && touch authz && touch passwd
    11 cd ..
    12 chown www:www svn_conf -Rf
    13 chmod g+w svn -Rf
    14 chmod g+w www -Rf
    15 mkdir log && mkdir log/httpd && mkdir log/php-fpm && mkdir log/nginx

    www目录为网站的根目录,访问者、写入者为www:www(PHP),svn为代码仓库目录,访问者、写入者为svn:www(Apache+SVN),svn_conf为SVN的配置,访问者为svn:www(Apache),写入者为www:www(PHP)。 

    三、httpd配置

    1 service iptables stop
    2 yum install -y httpd subversion.x86_64 mod_dav_svn.x86_64
    3 yum -y install policycoreutils-python

    httpd不使用80端口,修改为比较少用的端口号,CentOS本身对端口号的使用是有一定限制的,可以通过以下指令查询允许http的端口号:

    1 semanage port -l|grep http

    开放指定的端口号:

    1 semanage port -a -t http_port_t -p tcp 9097

    调整Apache的基础配置:

    1 rm /etc/httpd/conf.d/welcome.conf
    2 nano /etc/httpd/conf/httpd.conf
    3 nano /etc/httpd/conf.d/subversion.conf<span></span>

    删除welcome.conf是很必要的,否者他总是会显示首页。

    httpd.conf和subversion.conf的内容,参考:http://www.oschina.net/code/snippet_57579_19782,搜索:/etc/httpd/conf/httpd.conf和/etc/httpd/conf.d/subversion.conf。

    1 chcon -R -h -t httpd_sys_content_t /srv/svn
    2 chcon -R -h -t httpd_sys_content_t /srv/svn_conf
    3  
    4 service httpd start
    5 chkconfig httpd on

    三、编译安装Nginx

    01 yum install -y kernel-headers.x86_64 kernel.x86_64 kernel-devel.x86_64 gcc.x86_64 gcc automake autoconf libtool make
    02 yum install -y zlib-devel.x86_64 openssl-devel.x86_64 pcre-devel.x86_64 libaio-devel.x86_64 automake.noarch
    03 wget http://nginx.org/download/nginx-1.2.7.tar.gz
    04 tar zvxf nginx-1.2.7.tar.gz
    05 cd nginx-1.2.7
    06 ./configure \
    07 --prefix=/usr/local/nginx \
    08 --conf-path=/etc/nginx/nginx.conf \
    09 --with-poll_module \
    10 --with-file-aio \
    11 --with-http_ssl_module \
    12 --with-http_realip_module \
    13 --with-http_flv_module \
    14 --with-http_mp4_module \
    15 --with-http_gzip_static_module \
    16 --with-http_stub_status_module \
    17 --with-pcre
    18 make && make install
    19 mkdir /srv/log/nginx
    20 mkdir /etc/nginx/vhost
    21 mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

    配置nginx

    1 nano /etc/nginx/nginx.conf
    2 nano /etc/nginx/gzip.conf
    3 nano /etc/nginx/vhost/default.conf

    参考:http://www.oschina.net/code/snippet_57579_19782,搜索:/etc/nginx/nginx.conf、/etc/nginx/gzip.conf、/etc/nginx/vhost/default.conf。

    Nginx启动脚本

    1 nano /etc/init.d/nginx

    参考:http://www.oschina.net/code/snippet_57579_19782,搜索:/etc/init.d/nginx。

    启动nginx服务:

    1 chmod +x /etc/init.d/nginx
    2 service nginx start
    3 chkconfig nginx on

    四、编译安装PHP

    简单说明一下,PHP安装,直接朝/usr/local/php去安装,如果要更新版本,直接service php-fpm stop,并且mv这个版本,然后再编译新版本的php到/usr/local/php,配置就不用改了。

    01 yum install -y \
    02 gcc gcc-c++ glibc glibc-devel glib2 glib2-devel \
    03 autoconf \
    04 libmcrypt-devel \
    05 mhash-devel \
    06 pcre-devel \
    07 libjpeg-devel libpng-devel freetype-devel libXpm-devel.x86_64 gd.x86_64 \
    08 libxml2-devel libidn-devel \
    09 zlib-devel bzip2-devel \
    10 ncurses-devel \
    11 curl curl-devel \
    12 krb5-devel \
    13 openssl-devel \
    14 mysql-devel \
    15 libevent-devel.x86_64 libmemcached-devel.x86_64 \
    16 libtool-ltdl-devel.x86_64 \
    17 libicu-devel.x86_64
    18  
    19 wget http://cn2.php.net/distributions/php-5.4.12.tar.gz

    CentOS 6的源里面,移除了libmcrypt、mhash和mcrypt的更新源,所以需要自己手动下载编译。

    01 wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
    02 tar zvxf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8
    03 ./configure && make && make install && cd ..
    04  
    05 wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
    06 tar zvxf mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9
    07 ./configure && make && make install && cd ..
    08  
    09 wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
    10 tar zvxf mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8
    11 LD_LIBRARY_PATH=/usr/local/lib ./configure && make && make install && cd ..

    注意最后编译mcrypt有些不同。

    然后继续编译PHP

    01 tar zvxf php-5.4.12.tar.gz && cd php-5.4.12
    02  
    03 ./configure \
    04 --prefix=/usr/local/php \
    05 --enable-fpm \
    06 --with-fpm-user=www \
    07 --with-fpm-group=www \
    08 --with-openssl \
    09 --with-pcre-regex \
    10 --with-zlib \
    11 --enable-bcmath \
    12 --with-bz2 \
    13 --with-gd \
    14 --with-mcrypt \
    15 --with-jpeg-dir \
    16 --with-png-dir \
    17 --with-zlib-dir \
    18 --with-freetype-dir \
    19 --enable-gd-native-ttf \
    20 --with-mhash \
    21 --with-curl \
    22 --enable-intl \
    23 --enable-mbstring \
    24 --with-mysql \
    25 --with-mysql-sock \
    26 --with-mysqli \
    27 --with-pdo-mysql \
    28 --enable-shmop \
    29 --enable-soap \
    30 --enable-sockets \
    31 --enable-zip \
    32 --enable-calendar \
    33 --enable-mysqlnd \
    34 --with-pear
    35  
    36 make && make install

    检查一下PHP的版本,是否安装成功:

    1 /usr/local/php/bin/php -v

    php-fpm配置

    1 nano /usr/local/php/etc/php-fpm.conf

    参考: http://www.oschina.net/code/snippet_57579_19782 ,搜索:/usr/local/php/etc/php-fpm.conf。

    php-fpm启动脚本

    1 nano /etc/init.d/php-fpm

    参考: http://www.oschina.net/code/snippet_57579_19782 ,搜索:/etc/init.d/php-fpm。 

    1 mkdir /srv/log/php-fpm
    2 chmod +x php-fpm
    3 service php-fpm start
    4 chkconfig php-fpm on

    五、安装if.svnadmin

    1 wget http://waix.dl.sourceforge.net/project/ifsvnadmin/svnadmin-1.6.1.zip
    2 unzip svnadmin-1.6.1.zip
    3 mv mfreiholz-iF.SVNAdmin-8188a43 svnadmin
    4 rm svnadmin-1.6.1.zip
    5 nano svnadmin/data/config.tpl.ini

    参考: http://www.oschina.net/code/snippet_57579_19782 ,搜索:svnadmin/data/config.tpl.ini。

    六、配置服务器SSH登陆

    这里简单说明一下,服务器登陆使用证书登录,禁止root用户登录,禁止使用密码登录。登陆服务器的用户使用www-user用户,该用户只能操作web目录的上传、修改、删除。CentOS是禁止越权执行命令了,这点和Ubuntu不同,不允许sudo。需要执行su - root切换回root用户,而要切换回root用户时,则需要输入root用户的密码。

    因为是www-user登陆,所以要先将当前用户转换为www-user,生成ssh登陆证书。

    1 su - www-user
    2 ssh-keygen -t rsa
    3 cd .ssh
    4 cat id_rsa.pub >> authorized_keys
    5 chmod 400 authorized_keys

    下载id_rsa和id_rsa.pub到本机,并将这两个文件在服务器上删除。

    使用puttygen.exe读取(按那个Load按钮)id_rsa文件,并生成密钥(点Save private key),这个密钥将来是putth、sftp登陆服务器使用的。

    然后切换回root账号:

    1 su - root
    2 nano /etc/ssh/sshd_config

    以下为/etc/ssh/sshd_config关于登陆限制部分的配置:

    01 Protocol 2
    02 ServerKeyBits 1024
    03 PermitRootLogin no
    04  
    05 RSAAuthentication yes
    06 PubkeyAuthentication yes
    07 AuthorizedKeysFile    .ssh/authorized_keys
    08  
    09 PasswordAuthentication no
    10 PermitEmptyPasswords no

    注意,这里别急着切断服务器的连接(或者关闭了当前的putty窗口),先重启了sshd,并且,最好开一个console或者putty测试登陆,测试无误了,最后再关闭当前的窗口,不然……重装吧同学

    1 service sshd restart

    六、安装Dropbox同步

    使用Dropbox同步,因为咱本小,没钱搞多台服务器做备份了,所以打算集中web、svn目录使用dropbox同步,backup目录,也同步,主要用于备份SQL,而SQL的备份,主要定时执行脚本实现。

    国内关于linux服务器上使用dropbox的情况,介绍得乱七八糟的,找了半天资料。我最主要想搞清楚的一个问题是,我能不能在Dropbox开不同的目录,如Server1、Server2,而后指定不同的服务器备份同步到不同的目录中去。最后证明是可以的,后面后说明。

    切记切换回root用户。

    1 su - root
    2 cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" tar xzf -
    3 .dropbox-dist/dropboxd &

    这样就启动了dropboxd,第一启动的时候,命令行终端会不断提示如下信息:

    1 This client is not linked to any account...
    2 Please visit https://www.dropbox.com/cli_link?host_id=hashid to link this machine.

    打开该提示的link(注意我把hashid去掉了),他会提示你输入你的账号的登陆密码(你要先登录你在dropbox.com的账号),登陆成功后,你会看到命令行终端提示如下信息:

    1 Client successfully linked, Welcome XXXXX!

    这样既表示连接成功,此时他会将你在dropbox同步文件夹中的目录中的内容下载到/root/Dropbox中。你可以先强行杀掉所有dropbox进程。

    1 killall dropbox
    2 wget https://raw.github.com/madberry/dropbox.py/master/dropbox.py
    3 mv dropbox.py /usr/local/sbin/dropbox
    4 chmod +x /usr/local/sbin/dropbox

    dropbox.py是一个本地执行脚本,他的作用,类似windows上的dropbox图形化客户端,通过执行这个脚本,你可以启动\停止dropbox同步,exclude某些目录(/root/Dropbox目录里),检查当前dropbox的状态等等。

    dropbox并不会无限制的同步你本机的内容,只有进入到/root/Dropbox目录里的内容,才会是他同步的对象。所以,你想同步的目录,只要软连接到这个目录中即可了。

    而通过使用dropbox.py,可以检查同步的状态,排除/root/Dropbox中指定的目录到同步列表外(即不同步),使用起来比windows上使用dropbox还要简单。

    1 cd Dropbox/
    2 # 添加排除同步目录Photos
    3 dropbox exclude add Photos
    4 # 列出排除同步的目录
    5 dropbox exclude list

    他会列出已经被排除同步的目录:

    1 Excluded:
    2 photos

    开始指定你要备份的目录,使用软连接的方式实现:

    1 ln -s /srv/www /root/Dropbox/svn.agimvc.com/www
    2 ln -s /srv/svn /root/Dropbox/svn.agimvc.com/svn
    3 ln -s /srv/backup /root/Dropbox/svn.agimvc.com/backup
    4 dropbox status

    可以看到Dropbox正在同步的信息:

    1 Updating (159 files, 59 secs left)
    2 Uploading 159 files (202.8 kB/sec, 59 secs left)

    接着编辑dropbox的启动脚本, 参考: http://www.oschina.net/code/snippet_57579_19782 ,搜索:/etc/init.d/dropbox。

    1 nano /etc/sysconfig/dropbox
    1 # /etc/sysconfig/dropbox
    2 DROPBOX_USERS="root"

    启动dropbox服务:

    1 service dropbox start
    2 chkconfig dropbox on

    后记

    mixmedia几次重要的服务器更新换代,都是我进行基础安装,然后进行逐步调优的(嗯,如果有印象的,应该记得我以前发的几篇对比windows和linux服务器,Zend Server、Nginx、Lighttpd的对比测试结果,不过后来被我删博给删了,我也找不到备份了,霍霍)。

    服务器的管理,在于规范化,只是过往存在太多——不可抗力,这次,是我完全由我自己操作,我前后测试了三个云主机,Amazon EC2、DigitalOcean和国内某主机空间,国内云主机嘛,基本上各有各的不靠谱,哎。前后在我自己的电脑上也装了3次虚拟机做测试调整,最终留下这个正式服务器的安装记录。

    不过我始终认为,服务器是需要有专业的人操作负责的,我还是安心的写代码,比较靠谱,所以希望,这是最后一次,大规模的测试和部署服务器。

    顺便 @红薯 ,这个编辑器,处理大篇章的文章,p段乱会出现空行的问题啊,很麻烦啊,我来回搞了半天。

  • 相关阅读:
    Java的静态块与实例块(转)
    Programming Ability Test学习 1031. Hello World for U (20)
    Programming Ability Test学习 1011. World Cup Betting (20)
    Programming Ability Test学习 1027. Colors in Mars (20)
    Programming Ability Test学习 1064. Complete Binary Search Tree (30)
    Programming Ability Test学习 1008. Elevator (20)
    【maven详解-生命周期】Maven的生命周期和插件
    【maven详解-插件】maven插件学习之源码插件Source Xref
    $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
    你还没真的努力过,就轻易输给了懒惰
  • 原文地址:https://www.cnblogs.com/AloneSword/p/2993179.html
Copyright © 2011-2022 走看看