博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正式版SVN服务器安装记录
阅读量:7092 次
发布时间:2019-06-28

本文共 8081 字,大约阅读时间需要 26 分钟。

hot3.png

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

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

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

一、用户组管理

groupadd www -g 900adduser -g 900 -u 9001 -M -s /sbin/nologin wwwadduser -g 900 -u 9002 -M -s /sbin/nologin svnadduser -g 900 -u 9001 www-userpasswd www-user

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

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

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

二、准备目录

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

cd /srvmkdir wwwmkdir svnmkdir backupchown svn:www svn -Rfchown www:www www -Rfchown www:www backup -Rfmkdir svn_confcd svn_conftouch httpd_passwd && touch authz && touch passwdcd ..chown www:www svn_conf -Rfchmod g+w svn -Rfchmod g+w www -Rfmkdir 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配置

service iptables stopyum install -y httpd subversion.x86_64 mod_dav_svn.x86_64yum -y install policycoreutils-python

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

semanage port -l|grep http

开放指定的端口号:

semanage port -a -t http_port_t -p tcp 9097
调整Apache的基础配置:

rm /etc/httpd/conf.d/welcome.confnano /etc/httpd/conf/httpd.confnano /etc/httpd/conf.d/subversion.conf

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

httpd.conf和subversion.conf的内容,参考:,搜索:/etc/httpd/conf/httpd.conf和/etc/httpd/conf.d/subversion.conf。

chcon -R -h -t httpd_sys_content_t /srv/svnchcon -R -h -t httpd_sys_content_t /srv/svn_confservice httpd startchkconfig httpd on

三、编译安装Nginx

yum install -y kernel-headers.x86_64 kernel.x86_64 kernel-devel.x86_64 gcc.x86_64 gcc automake autoconf libtool makeyum install -y zlib-devel.x86_64 openssl-devel.x86_64 pcre-devel.x86_64 libaio-devel.x86_64 automake.noarchwget http://nginx.org/download/nginx-1.2.7.tar.gztar zvxf nginx-1.2.7.tar.gzcd nginx-1.2.7./configure \--prefix=/usr/local/nginx \--conf-path=/etc/nginx/nginx.conf \--with-poll_module \--with-file-aio \--with-http_ssl_module \--with-http_realip_module \--with-http_flv_module \--with-http_mp4_module \--with-http_gzip_static_module \--with-http_stub_status_module \--with-pcremake && make installmkdir /srv/log/nginxmkdir /etc/nginx/vhostmv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

配置nginx

nano /etc/nginx/nginx.conf nano /etc/nginx/gzip.confnano /etc/nginx/vhost/default.conf

参考:,搜索:/etc/nginx/nginx.conf、/etc/nginx/gzip.conf、/etc/nginx/vhost/default.conf。

Nginx启动脚本

nano /etc/init.d/nginx

参考:,搜索:/etc/init.d/nginx。

启动nginx服务:

chmod +x /etc/init.d/nginxservice nginx startchkconfig nginx on

四、编译安装PHP

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

yum install -y \gcc gcc-c++ glibc glibc-devel glib2 glib2-devel \autoconf \libmcrypt-devel \mhash-devel \pcre-devel \libjpeg-devel libpng-devel freetype-devel libXpm-devel.x86_64 gd.x86_64 \libxml2-devel libidn-devel \zlib-devel bzip2-devel \ncurses-devel \curl curl-devel \krb5-devel \openssl-devel \mysql-devel \libevent-devel.x86_64 libmemcached-devel.x86_64 \libtool-ltdl-devel.x86_64 \libicu-devel.x86_64wget http://cn2.php.net/distributions/php-5.4.12.tar.gz
CentOS 6的源里面,移除了libmcrypt、mhash和mcrypt的更新源,所以需要自己手动下载编译。
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gztar zvxf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8./configure && make && make install && cd ..wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gztar zvxf mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9./configure && make && make install && cd ..wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gztar zvxf mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8LD_LIBRARY_PATH=/usr/local/lib ./configure && make && make install && cd ..

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

然后继续编译PHP

tar zvxf php-5.4.12.tar.gz && cd php-5.4.12./configure \--prefix=/usr/local/php \--enable-fpm \--with-fpm-user=www \--with-fpm-group=www \--with-openssl \--with-pcre-regex \--with-zlib \--enable-bcmath \--with-bz2 \--with-gd \--with-mcrypt \--with-jpeg-dir \--with-png-dir \--with-zlib-dir \--with-freetype-dir \--enable-gd-native-ttf \--with-mhash \--with-curl \--enable-intl \--enable-mbstring \--with-mysql \--with-mysql-sock \--with-mysqli \--with-pdo-mysql \--enable-shmop \--enable-soap \--enable-sockets \--enable-zip \--enable-calendar \--enable-mysqlnd \--with-pearmake && make install
检查一下PHP的版本,是否安装成功:
/usr/local/php/bin/php -v

php-fpm配置

nano /usr/local/php/etc/php-fpm.conf
参考: ,搜索:/usr/local/php/etc/php-fpm.conf。

php-fpm启动脚本

nano /etc/init.d/php-fpm
参考: ,搜索:/etc/init.d/php-fpm。

mkdir /srv/log/php-fpmchmod +x php-fpmservice php-fpm startchkconfig php-fpm on

五、安装if.svnadmin

wget http://waix.dl.sourceforge.net/project/ifsvnadmin/svnadmin-1.6.1.zipunzip svnadmin-1.6.1.zipmv mfreiholz-iF.SVNAdmin-8188a43 svnadminrm svnadmin-1.6.1.zipnano svnadmin/data/config.tpl.ini
参考: ,搜索:svnadmin/data/config.tpl.ini。

六、配置服务器SSH登陆

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

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

su - www-userssh-keygen -t rsacd .sshcat id_rsa.pub >> authorized_keyschmod 400 authorized_keys

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

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

然后切换回root账号:

su - rootnano /etc/ssh/sshd_config
以下为/etc/ssh/sshd_config关于登陆限制部分的配置:
Protocol 2ServerKeyBits 1024PermitRootLogin noRSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile    .ssh/authorized_keysPasswordAuthentication noPermitEmptyPasswords no

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

service sshd restart

六、安装Dropbox同步

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

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

切记切换回root用户。
su - rootcd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -.dropbox-dist/dropboxd &
这样就启动了dropboxd,第一启动的时候,命令行终端会不断提示如下信息:
This client is not linked to any account...Please visit https://www.dropbox.com/cli_link?host_id=hashid to link this machine.
打开该提示的link(注意我把hashid去掉了),他会提示你输入你的账号的登陆密码(你要先登录你在dropbox.com的账号),登陆成功后,你会看到命令行终端提示如下信息:
Client successfully linked, Welcome XXXXX!
这样既表示连接成功,此时他会将你在dropbox同步文件夹中的目录中的内容下载到/root/Dropbox中。你可以先强行杀掉所有dropbox进程。
killall dropboxwget https://raw.github.com/madberry/dropbox.py/master/dropbox.pymv dropbox.py /usr/local/sbin/dropboxchmod +x /usr/local/sbin/dropbox

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

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

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

cd Dropbox/# 添加排除同步目录Photosdropbox exclude add Photos# 列出排除同步的目录dropbox exclude list

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

Excluded:photos
开始指定你要备份的目录,使用软连接的方式实现:
ln -s /srv/www /root/Dropbox/svn.agimvc.com/wwwln -s /srv/svn /root/Dropbox/svn.agimvc.com/svnln -s /srv/backup /root/Dropbox/svn.agimvc.com/backupdropbox status
可以看到Dropbox正在同步的信息:
Updating (159 files, 59 secs left)Uploading 159 files (202.8 kB/sec, 59 secs left)
接着编辑dropbox的启动脚本, 参考: ,搜索:/etc/init.d/dropbox。

nano /etc/sysconfig/dropbox
# /etc/sysconfig/dropboxDROPBOX_USERS="root"
启动dropbox服务:
service dropbox startchkconfig dropbox on

后记

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

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

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

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

转载于:https://my.oschina.net/janpoem/blog/118879

你可能感兴趣的文章
asp.net mvc 如何在执行完某任务后返回原来页面
查看>>
Oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
查看>>
ASP.NET 中 GridView(网格视图)的使用前台绑定
查看>>
Windows的本地时间(LocalTime)、系统时间(SystemTime)、格林威治时间(UTC-Time)、文件时间(FileTime)之间的转换...
查看>>
[转]XBRL应用软件分类
查看>>
C++ 文件的复制、删除、重命名
查看>>
Oracle Patch Set Update and Critical Patch Update April 2011 Released
查看>>
hdu 2189
查看>>
std::map, std::multimap, std::tr1::unordered_map 区别 - 笔记本 - 博客频道 - CSDN.NET
查看>>
/usr/bin/ld: cannot find -lxxx问题总结
查看>>
C 语言 restrict 关键字的使用
查看>>
ASP.NET 自定义成员资格提供程序 Part.4(使用自定义提供程序类)
查看>>
ASP.NET调用V3版本的Google Maps API
查看>>
苹果面试8大难题及答案
查看>>
运行 tomcat 错误 : java.lang.Exception: Socket bind failed: [730048] 解决方法:
查看>>
并行接口和串行接口
查看>>
Adding a nested ESXi on 5.1
查看>>
检查管理员exception is java.sql.SQLException: 无效的列索引
查看>>
类型函数C语言void关键字
查看>>
数字频率计的verilog实现
查看>>