正式版SVN伺服器安裝記錄

孤劍發表於2013-04-01
國內私募機構九鼎控股打造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段亂會出現空行的問題啊,很麻煩啊,我來回搞了半天。


相關文章