Ubuntuの下でredmineの構築と最適化
5900 ワード
サーバの構築
前の会社はずっと使っていたJIRA、今会社を変えて、规模はそんなに大きくなくて、プロジェクトのBUGの管理に対してそんなに完备していないで、ずっと使っていたBUGFREE、最近会社はプロジェクトの総监に来て、大きい会社の规范と同じように、redmineのプロジェクトの管理サーバーを建てる必要があると思って、小さい会社は何人もなくて、私达のこのAndroidシステムの技师を探して见て、最后にこの任务は私の头の上に落ちて、最初はサーバーの構築について何の見当もつかず、徐々にネット上から解決策を見つけました.最初は構築が難しいと思っていたが、他人のソフトウェアをダウンロードして直接実行すればOKだったので、構築が簡単だった.https://bitnami.com/stack/redmine/installerウェブサイトのダウンロードはインストールして運行することができて、困難なのは後のメンテナンスで、このソフトウェアは私が書いたのではありませんて、どんな間違いが発生することに対してもちろん私のこの構築者の問題を探して、そこでこのredmineに対して最適化を行います. ポートオープンの問題
ローカルエリアネットワーク内のIPとポートへのアクセスを通じて、やはり翌日に1つの問題が発生して、アクセスできなくて、サーバーを再起動した後に本機でしかアクセスできなくて、pingを通じてサーバーにアクセスすることができて、しかしtelnetリンクポートがタイムアウトして、そこでサーバーポートの問題だと疑って、
POST
自分でも最適化して、電源を入れるたびにredmineサーバーのスクリプトを自分で起動する必要がなく、ネット上でも似たような案をたくさん検索して、crontabという方法を使うことにしました.
そこで自分でredmineを新築しました.cronファイル
サーバポートの検出
さらに最適化し、Pythonスクリプトを自分で書いてcrontabを利用してredmineサーバが稼働しているかどうか、ポートがオープンしているかどうかの問題をタイミングよく検出します. autotest.py
1、検査スクリプトを実行し、実行していない場合はサーバーを開く2、すでに実行している場合はサーバーのポートを検査する
プロファイルを読み込むpropertiesもあります.iniは起動した3つのサービスポート番号とpythonでポートを検出するインタフェースを取得し、もともと「telnet 127.0.0.1 port」コマンドでポートの状況を検出したいと思っていたが、pythonスクリプトで書く以上、「shell化」したくないと思った.ここでpython言語検出スクリプトは、上のコードに2つの方法があります.
再起動の最適化と同様にredmine.cronファイルに追加:
前の会社はずっと使っていたJIRA、今会社を変えて、规模はそんなに大きくなくて、プロジェクトのBUGの管理に対してそんなに完备していないで、ずっと使っていたBUGFREE、最近会社はプロジェクトの総监に来て、大きい会社の规范と同じように、redmineのプロジェクトの管理サーバーを建てる必要があると思って、小さい会社は何人もなくて、私达のこのAndroidシステムの技师を探して见て、最后にこの任务は私の头の上に落ちて、最初はサーバーの構築について何の見当もつかず、徐々にネット上から解決策を見つけました.
ローカルエリアネットワーク内のIPとポートへのアクセスを通じて、やはり翌日に1つの問題が発生して、アクセスできなくて、サーバーを再起動した後に本機でしかアクセスできなくて、pingを通じてサーバーにアクセスすることができて、しかしtelnetリンクポートがタイムアウトして、そこでサーバーポートの問題だと疑って、
sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
以上のコマンドでredmineサーバポート8081をオープンし、この問題は解決しましたが、一日が過ぎても同様の状況に遭遇し、サーバコンピュータは再起動していないことを知りません.sshリンクサーバでスクリプトで表示します./ctlscript.sh status、redmineはすでに実行されており、結果は以下の通りです.subversion already running
apache already running
mysql already running
しかし、アクセスできない(ローカルアクセスを除く)、redmineサーバを再起動して再びアクセスしますが、効果はありません.オープンポートコマンドを再実行し、正常に戻ります.そこで自分が起動したスクリプトに手足を作ろうと思ってctlscript.shこのshellスクリプトを見てみると、redmineサーバを再起動してもオープンポートがない以上、スクリプトが起動した後にオープンポートのコマンドを挿入し、サーバを起動するたびに自分でポートを開く必要がなくなります.APACHE_SCRIPT=$INSTALLDIR/apache2/scripts/ctl.sh
...
elif [ "x$2" = "xapache" ]; then
if test -x $APACHE_SCRIPT; then
$APACHE_SCRIPT start
APACHE_ERROR=$?
fi
elif
スクリプトの大部分は上のセグメントのようなもので、上のセグメントのスクリプトは、本当にサーバを起動するスクリプトが$INSTALLDIR/apache 2/scripts/ctlであることを知っています.shという経路.このシナリオを追跡して、他の場所を見てはいけません. start_apache() {
test_apache_config
is_apache_runniredmineng
RUNNING=$?
if [ $RUNNING -eq 1 ]; then
echo "$0 $ARG: httpd (pid $HTTPD_PID) already running"
else
cleanpid
if $HTTPD ; then
echo "$0 $ARG: httpd started at port 8080"
+echo '123' | sudo -S iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
+echo "8080 accept"
else
echo "$0 $ARG: httpd could not be started"
ERROR=3
fi
fi
}
+番号の後ろは自分で追加したもので、正常に起動した後にポートを開放し、印刷情報を端末に印刷することで、起動するたびにポートと一緒に開放できるはずです.POST
自分でも最適化して、電源を入れるたびにredmineサーバーのスクリプトを自分で起動する必要がなく、ネット上でも似たような案をたくさん検索して、crontabという方法を使うことにしました.
そこで自分でredmineを新築しました.cronファイル
@reboot nohup /home/tao/redmine-3.4.6-1/ctlscript.sh start >> /home/tao/crontablist/reboot.log 2>&1 &
crontab redmine.cronはシナリオを追加し、crontab-lでクエリーし、自分で検証し、logとサーバの状態を再起動します.サーバポートの検出
さらに最適化し、Pythonスクリプトを自分で書いてcrontabを利用してredmineサーバが稼働しているかどうか、ポートがオープンしているかどうかの問題をタイミングよく検出します.
##!/usr/bin/python
# -*- coding: UTF-8 -*-
import os,sys,ConfigParser,telnetlib,time
#import socket
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#redmine
redminePath = os.path.dirname(os.path.abspath(__file__))
redmineShell = redminePath + '/ctlscript.sh'
##shell
checkCmd = redmineShell + ' status'
stopCmd = redmineShell + ' stop'
restartCmd = redmineShell + ' restart'
fail = 'echo redmine '
#checkPort = 'telnet 127.0.0.1 port'
openPort = "echo '123' | sudo -S iptables -I INPUT -p tcp --dport port_id -j ACCEPT"
#Shell
class ShellUtils:
def __init__(self):
print "ShellUtils "
@classmethod
def getStrOut(cls,cmd):
f = os.popen(checkCmd,'r')
strout = f.read()
f.close()
return strout
@classmethod
def execute(cls,cmd):
id = os.system(cmd)
return id
#
class ConfigUtils:
def __init__(self):
pass
def addConfigParser(self,filename):
self.config = ConfigParser.ConfigParser()
self.config.read(filename)
def getValue(self,section,option):
return self.config.get(section,option)
#
def testconn( host , port ):
#sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#sk.settimeout(1)
server = telnetlib.Telnet()
try:
#sk.connect((host,port))
server.open(host,port)
return 1
except Exception:
return 0
finally:
server.close()
#sk.close()
#
configUtils = ConfigUtils()
configUtils.addConfigParser(redmineShell + '/properties.ini')
# redmine
strOut = ShellUtils.getStrOut(checkCmd)
#
for line in strOut.splitlines(False):
if "not running" in line:#
startid = ShellUtils.execute(restartCmd)
break
else:
port = 0
if "subversion" in line: #subversion ,
port = configUtils.getValue("Subversion","subversion_port")
elif "apache" in line:
port = configUtils.getValue("Apache","apache_server_port")
elif "mysql" in line:
port = configUtils.getValue("MySQL","mysql_port")
test_id = testconn("127.0.0.1",port)
if test_id == 0:
#
ShellUtils.execute(openPort.replace("port_id",port))
elif test_id == 1:
print (' {0} '.format(port))
このスクリプトは/home/tao/redmine-3.4.6-1サーバディレクトリの下に配置され、スクリプトロジックは簡単です.1、検査スクリプトを実行し、実行していない場合はサーバーを開く2、すでに実行している場合はサーバーのポートを検査する
プロファイルを読み込むpropertiesもあります.iniは起動した3つのサービスポート番号とpythonでポートを検出するインタフェースを取得し、もともと「telnet 127.0.0.1 port」コマンドでポートの状況を検出したいと思っていたが、pythonスクリプトで書く以上、「shell化」したくないと思った.ここでpython言語検出スクリプトは、上のコードに2つの方法があります.
再起動の最適化と同様にredmine.cronファイルに追加:
*/10 * * * * python /home/tao/redmine-3.4.6-1/autotest.py >> /home/tao/crontablist/autotest.log 2>&1 &
10分ごとにautotestを実行するという意味です.pyスクリプト.crontab redmine.cronはシナリオを追加します.