ssh git이 가능하도록 변경, cron 버그 수정, fpm timezone 수정

This commit is contained in:
2019-09-15 13:30:12 +00:00
parent 0d49729c63
commit af6353105b
12 changed files with 121 additions and 64 deletions
+15
View File
@@ -0,0 +1,15 @@
#MYSQL 비밀번호. (필수)
MYSQL_ROOT_PASSWORD=
MYSQL_USER=hidche
MYSQL_PASSWORD=
HIDCHE_DB_PREFIX=hidche
#운영자 계정, 비밀번호.
HIDCHE_ADMIN=
HIDCHE_PASSWORD=
#카카오 로그인을 위한 API
HIDCHE_KAKAO_REST_KEY=
HIDCHE_KAKAO_ADMIN_KEY=
+10 -2
View File
@@ -37,14 +37,22 @@ RUN { \
\ \
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \ echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
\ \
mkdir /var/www/data; \ mkdir -p /var/www/data; \
chown -R www-data:root /var/www; \ chown -R www-data:root /var/www; \
chmod -R g=u /var/www chmod -R g=u /var/www; \
mkdir -p /var/www/.ssh; \
chown www-data:www-data /var/www/.ssh; \
chmod 700 /var/www/.ssh
VOLUME /var/www/html VOLUME /var/www/html
ENV TZ=Asia/Seoul ENV TZ=Asia/Seoul
COPY entrypoint_hidche_app.sh /usr/local/bin/ COPY entrypoint_hidche_app.sh /usr/local/bin/
COPY id_ecdsa.key /var/www/.ssh/id_ecdsa
COPY known_hosts /var/www/.ssh/known_hosts
RUN \
chown www-data:www-data /var/www/.ssh/*; \
chmod 600 /var/www/.ssh/*;
ENTRYPOINT ["entrypoint_hidche_app.sh"] ENTRYPOINT ["entrypoint_hidche_app.sh"]
CMD ["php-fpm"] CMD ["php-fpm"]
+8 -10
View File
@@ -1,27 +1,25 @@
#!/bin/bash #!/bin/bash
set -euxo pipefail set -uxo pipefail
shopt -s nullglob shopt -s nullglob
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
printf "[PHP]\ndate.timezone = \"$TZ\"\n" > /usr/local/etc/php/conf.d/tzone.ini
wwwRoot="/var/www/html" wwwRoot="/var/www/html"
samRoot="$wwwRoot/sam" samRoot="$wwwRoot/sam"
imageRoot="$wwwRoot/image" imageRoot="$wwwRoot/image"
gameGitPath="https://storage.hided.net/gogs/devsam/core.git"
imgGitPath="https://storage.hided.net/gogs/devsam/image.git"
if [ ! -f "$wwwRoot/index.php" ]; then
echo "<?php header('location:sam',TRUE,301);" > $wwwRoot/index.php
chown www-data:www-data $wwwRoot/index.php
fi
if [ ! -f "$samRoot/index.php" ]; then if [ ! -f "$samRoot/index.php" ]; then
gosu www-data git clone $gameGitPath /var/www/html/sam gosu www-data git clone $gameGitPath /var/www/html/sam
fi fi
if [ $HIDCHE_IMAGE_USE_INTERNAL = "yes" ] && [ ! -d "$imageRoot" ]; then if [ $HIDCHE_IMAGE_USE_INTERNAL = "yes" ] && [ ! -d "$imageRoot" ]; then
if [[ "$imageRoot" =~ ^ssh ]]; then
query=`echo "<?php \\\$a=parse_url('$imageRoot');echo join(' ', [\\\$a['port']?'-p '.\\\$a['port']:'',\\\$a['host']]);" | php`
ssh-keyscan $query >> /var/www/.ssh/known_hosts 2>/dev/null;
chown www-data:www-data /var/www/.ssh/known_hosts
chmod 600 /var/www/.ssh/known_hosts
fi
gosu www-data git clone $imgGitPath /var/www/html/image gosu www-data git clone $imgGitPath /var/www/html/image
fi fi
+5
View File
@@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIFPwAmkXCRG4Q7RSUqL9uzi4SF09iXQGB785l3/Hbw0woAoGCCqGSM49
AwEHoUQDQgAEpGiOeQnFmPb3fecADT0jikWWO03WvJIGux5j4+kh/g3FXP2Fjb1V
4SI264WpBZFTdoSyLKXWvrLeQCXZsZwa2w==
-----END EC PRIVATE KEY-----
+3
View File
@@ -0,0 +1,3 @@
[storage.hided.net]:2525 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCb9BLlqXb8jsnho4Db6WTMQOnhjxC42lanowDicTjzaan7JgTrRxFbrLL8zUcqMhNpFBqD9oUxV2gKD00/BoVtXEbjKoa+GjKtDyU+RfejaAw4j+nVZjyjvXoIKMyzr6NqjA3mLdcd47KLZKtFQNKcOL00foMsqYJhmr75UM6scfCj8+KnjVLkNdlFtJ9fGlnA1FGmEoldHR+htN01E/Yx8teHQGo5W0hZ/tOvE+r7NWA2PXFqOrb+IXe3URVndDZb1idInQDuMRetrWgCEZSy4/sTIss030wkHkUdDuLCt2NnUvLEVlxvpQw72k9j/nRapkGthwN7x1L8yQYKY6iv|1|XTprP1yTMznxEkakYqFoyNVBs7A=|8wea12ZyJ0L/nHHQ3nEtWJHlikA= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCb9BLlqXb8jsnho4Db6WTMQOnhjxC42lanowDicTjzaan7JgTrRxFbrLL8zUcqMhNpFBqD9oUxV2gKD00/BoVtXEbjKoa+GjKtDyU+RfejaAw4j+nVZjyjvXoIKMyzr6NqjA3mLdcd47KLZKtFQNKcOL00foMsqYJhmr75UM6scfCj8+KnjVLkNdlFtJ9fGlnA1FGmEoldHR+htN01E/Yx8teHQGo5W0hZ/tOvE+r7NWA2PXFqOrb+IXe3URVndDZb1idInQDuMRetrWgCEZSy4/sTIss030wkHkUdDuLCt2NnUvLEVlxvpQw72k9j/nRapkGthwN7x1L8yQYKY6iv
|1|3UOicj4TheEV6TEnSfmHNKhpuWU=|EL7zXO8enUCmq5tmi4WlxuEp2BM= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCb9BLlqXb8jsnho4Db6WTMQOnhjxC42lanowDicTjzaan7JgTrRxFbrLL8zUcqMhNpFBqD9oUxV2gKD00/BoVtXEbjKoa+GjKtDyU+RfejaAw4j+nVZjyjvXoIKMyzr6NqjA3mLdcd47KLZKtFQNKcOL00foMsqYJhmr75UM6scfCj8+KnjVLkNdlFtJ9fGlnA1FGmEoldHR+htN01E/Yx8teHQGo5W0hZ/tOvE+r7NWA2PXFqOrb+IXe3URVndDZb1idInQDuMRetrWgCEZSy4/sTIss030wkHkUdDuLCt2NnUvLEVlxvpQw72k9j/nRapkGthwN7x1L8yQYKY6iv
|1|M8V56tJHA+xiw51scQfhSs5nZeE=|wIw/fQk0MR3l7Bo3Mqd0zR+S4rE= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCb9BLlqXb8jsnho4Db6WTMQOnhjxC42lanowDicTjzaan7JgTrRxFbrLL8zUcqMhNpFBqD9oUxV2gKD00/BoVtXEbjKoa+GjKtDyU+RfejaAw4j+nVZjyjvXoIKMyzr6NqjA3mLdcd47KLZKtFQNKcOL00foMsqYJhmr75UM6scfCj8+KnjVLkNdlFtJ9fGlnA1FGmEoldHR+htN01E/Yx8teHQGo5W0hZ/tOvE+r7NWA2PXFqOrb+IXe3URVndDZb1idInQDuMRetrWgCEZSy4/sTIss030wkHkUdDuLCt2NnUvLEVlxvpQw72k9j/nRapkGthwN7x1L8yQYKY6iv
+3 -3
View File
@@ -2,6 +2,6 @@ FROM python:3-alpine
#alpine + python3 + cron(from alpine) #alpine + python3 + cron(from alpine)
#only cron this #only cron this
RUN echo '* * * * * python3 /var/www/html/sam/src/run_daemon.py' > /etc/crontabs/root COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
CMD ["crond", "-l 2", "-f"] ENTRYPOINT ["/entrypoint.sh"]
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
set -e
echo '* * * * * python3 /var/www/html/sam/src/run_daemon.py' | crontab - && crond -f -L /dev/stdout
+11 -4
View File
@@ -58,7 +58,7 @@ _check_config() {
#modifed #modifed
file_env 'TZ' file_env 'TZ'
echo `ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone` ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#modifed #modifed
hidcheDBList=("root" "che" "kwe" "pwe" "twe" "nya" "pya" "hwe") hidcheDBList=("root" "che" "kwe" "pwe" "twe" "nya" "pya" "hwe")
@@ -171,7 +171,8 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
file_env 'HIDCHE_DB_PREFIX' file_env 'HIDCHE_DB_PREFIX'
if [ "$HIDCHE_DB_PREFIX" ]; then if [ "$HIDCHE_DB_PREFIX" ]; then
for dbName in "${hidcheDBList[@]}"; do for dbName in "${hidcheDBList[@]}"; do
echo "CREATE DATABASE IF NOT EXISTS \`${HIDCHE_DB_PREFIX}_${dbName}\` ;" | "${mysql[@]}" fullDBName="${HIDCHE_DB_PREFIX}_${dbName}"
echo "CREATE DATABASE IF NOT EXISTS \`$fullDBName\` ;" | "${mysql[@]}"
done done
mysql+=( "${HIDCHE_DB_PREFIX}_${hidcheDBList[0]}" ) mysql+=( "${HIDCHE_DB_PREFIX}_${hidcheDBList[0]}" )
@@ -185,8 +186,14 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
#modifed #modifed
if [ "$HIDCHE_DB_PREFIX" ]; then if [ "$HIDCHE_DB_PREFIX" ]; then
for dbName in "${hidcheDBList[@]}"; do for dbName in "${hidcheDBList[@]}"; do
echo "GRANT ALL ON \`${HIDCHE_DB_PREFIX}_${dbName}\`.* TO '$MYSQL_USER'@'%' ;" | "${mysql[@]}" fullDBName="${HIDCHE_DB_PREFIX}_${dbName}"
subPW=`echo -n ${dbName}${MYSQL_USER}${MYSQL_PASSWORD}${dbName} | shasum -a 512`
subPW=${subPW:0:32}
echo "CREATE USER '$fullDBName'@'%' IDENTIFIED BY '$subPW' ;" | "${mysql[@]}"
echo "GRANT ALL ON \`$fullDBName\`.* TO '$MYSQL_USER'@'%' ;" | "${mysql[@]}"
echo "GRANT ALL ON \`$fullDBName\`.* TO '$fullDBName'@'%' ;" | "${mysql[@]}"
done done
fi fi
fi fi
@@ -207,7 +214,7 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then
fi fi
echo echo
echo 'MySQL init process wid HIDCHE done. Ready for start up.' echo 'MySQL init process with HIDCHE done. Ready for start up.'
echo echo
fi fi
fi fi
+6 -6
View File
@@ -6,10 +6,9 @@ services:
restart: always restart: always
volumes: volumes:
- db:/var/lib/mysql - db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
env_file: env_file:
- setup.env - account.env
- game.env
web: web:
build: ./web build: ./web
@@ -25,7 +24,7 @@ services:
volumes: volumes:
- hidche:/var/www/html - hidche:/var/www/html
env_file: env_file:
- setup.env - game.env
depends_on: depends_on:
- db - db
- web - web
@@ -38,7 +37,8 @@ services:
environment: environment:
- MYSQL_HOST=db - MYSQL_HOST=db
env_file: env_file:
- setup.env - account.env
- game.env
depends_on: depends_on:
- app - app
- db - db
@@ -48,7 +48,7 @@ services:
build: ./cron build: ./cron
restart: always restart: always
volumes: volumes:
- hidche:/var/www/html:ro - hidche:/var/www/html
depends_on: depends_on:
- app - app
+19
View File
@@ -0,0 +1,19 @@
#서버 git 주소.
#만약 https:// 대신 ssh://로 시작하는 주소를 사용하는 경우 app/id_ecdsa.key, app/known_host 에 ecdsa 개인키와 ssh값을 추가할 것.
gameGitPath=ssh://git@storage.hided.net:2525/devsam/core.git
imgGitPath=ssh://git@storage.hided.net:2525/devsam/image.git
#게임 시간대.
TZ=Asia/Seoul
#서버 리스트. 구현 문제로 아래 서버들로 현재 고정. Dockercompose 값 수정 불가.
HIDCHE_SERVER_LIST=che,kwe,pwe,twe,nya,pya,hwe
#외부에서 접근 가능한(할) 경로로 지정.
HIDCHE_GAME_PATH=http://127.0.0.1:8080/sam
#게임 서버에서 이미지를 같이 처리할 것인지 여부.
HIDCHE_IMAGE_USE_INTERNAL=yes
#이미지 경로, HIDCHE_IMAGE_USE_INTERNAL이 yes인 경우 HIDCHE_GAME_PATH의 상대 경로. yes가 아닌 경우 전체 도메인 경로.
HIDCHE_IMAGE_PATH=../image
+38 -12
View File
@@ -16,11 +16,28 @@ def hash_password(globalSalt, password):
env = os.environ env = os.environ
wwwRoot = '/var/www/html' wwwRoot = '/var/www/html'
samRoot = '%s/sam'%wwwRoot samRoot = '%s/sam'%wwwRoot
imageRoot= '%s/image'%wwwRoot indexPHP = '%s/index.php'%wwwRoot
if os.path.exists('%s/hwe/d_setting/DB.php'): if os.path.exists('%s/hwe/d_setting/DB.php'):
exit(0) exit(0)
useWaitIndex = False
if not os.path.exists(indexPHP):
useWaitIndex = True
fp = open(indexPHP, 'wt', encoding='utf-8')
fp.write("""
<!doctype html>
<html>
<head>
<title>HIDCHE - Auto Install Process</title>
<meta http-equiv="refresh" content="5"/>
</head>
<body>
<h1>Please wait for installation.</h1>
</body>
</html>
""")
fp.close()
while True: while True:
try: try:
r = requests.head('http://web/sam/f_install/j_install_status.php') r = requests.head('http://web/sam/f_install/j_install_status.php')
@@ -40,19 +57,21 @@ while True:
session = requests.session() session = requests.session()
db_root_pw = hash_password('root', env['MYSQL_USER']+env['MYSQL_PASSWORD'])[:32]
db_root_name = '%s_root'%env['HIDCHE_DB_PREFIX']
setupDBResult = session.post('http://web/sam/f_install/j_setup_db.php', { setupDBResult = session.post('http://web/sam/f_install/j_setup_db.php', {
'db_host':'db', 'db_host':'db',
'db_port':3306, 'db_port':3306,
'db_id':env['MYSQL_USER'], 'db_id':db_root_name,
'db_pw':env['MYSQL_PASSWORD'], 'db_pw':db_root_pw,
'db_name':'%s_root'%env['HIDCHE_DB_PREFIX'], 'db_name':db_root_name,
'serv_host':env['HIDCHE_GAME_PATH'], 'serv_host':env['HIDCHE_GAME_PATH'],
'shared_icon_path':'%s/icons'%env['HIDCHE_IMAGE_PATH'], 'shared_icon_path':'%s/icons'%env['HIDCHE_IMAGE_PATH'],
'game_image_path':'%s/game'%env['HIDCHE_IMAGE_PATH'], 'game_image_path':'%s/game'%env['HIDCHE_IMAGE_PATH'],
'kakao_rest_key':env['HIDCHE_KAKAO_REST_KEY'], 'kakao_rest_key':env['HIDCHE_KAKAO_REST_KEY'],
'kakao_admin_key':env['HIDCHE_KAKAO_ADMIN_KEY'], 'kakao_admin_key':env['HIDCHE_KAKAO_ADMIN_KEY'],
}) })
setupDBJsonResult = json.loads(setupDBResult.text) setupDBJsonResult = json.loads(setupDBResult.text)
print(setupDBJsonResult) print(setupDBJsonResult)
@@ -65,12 +84,11 @@ query = {
'password':hashPassword, 'password':hashPassword,
'nickname':'운영자' 'nickname':'운영자'
} }
print(query)
setupAdminResult = session.post('http://web/sam/f_install/j_create_admin.php', query) setupAdminResult = session.post('http://web/sam/f_install/j_create_admin.php', query)
setupAdminJsonResult = json.loads(setupAdminResult.text) setupAdminJsonResult = json.loads(setupAdminResult.text)
print(setupAdminJsonResult) print(setupAdminJsonResult)
loginResult=session.post('http://web/sam/j_login.php', query) loginResult = session.post('http://web/sam/j_login.php', query)
print(loginResult.text) print(loginResult.text)
serverList = str(env['HIDCHE_SERVER_LIST']).split(',') serverList = str(env['HIDCHE_SERVER_LIST']).split(',')
@@ -82,13 +100,21 @@ for serverName in serverList:
}) })
print(serverName, updateResult.text) print(serverName, updateResult.text)
db_pw = hash_password(serverName, env['MYSQL_USER']+env['MYSQL_PASSWORD'])[:32]
db_name = '%s_%s'%(env['HIDCHE_DB_PREFIX'], serverName)
resetResult = session.post('http://web/sam/%s/j_install_db.php'%serverName, { resetResult = session.post('http://web/sam/%s/j_install_db.php'%serverName, {
'db_host':'db', 'db_host':'db',
'db_port':3306, 'db_port':3306,
'db_id':env['MYSQL_USER'], 'db_id':db_name,
'db_pw':env['MYSQL_PASSWORD'], 'db_pw':db_pw,
'db_name':'%s_%s'%(env['HIDCHE_DB_PREFIX'], serverName), 'db_name':db_name,
}) })
print(serverName, resetResult.text) print(serverName, resetResult.text)
print('Welcome to HIDCHE') if useWaitIndex:
fp = open(indexPHP, 'wt', encoding='utf-8')
fp.write("<?php header('location:sam',TRUE,301);")
fp.close()
os.chown(indexPHP, 33, 33)
print('Welcome to HIDCHE')
-27
View File
@@ -1,27 +0,0 @@
#서버 리스트. 구현 문제로 아래 서버들로 현재 고정. Dockercompose 값 수정 불가.
HIDCHE_SERVER_LIST=che,kwe,pwe,twe,nya,pya,hwe
#게임 시간대. 구현 문제로 아래 시간대로 고정. Dockercompose 값 수정 불가.
TZ=Asia/Seoul
#MYSQL 비밀번호. (필수)
MYSQL_USER=
MYSQL_PASSWORD=
HIDCHE_DB_PREFIX=hidche
#외부에서 접근 가능한(할) 경로로 지정. (필수)
HIDCHE_GAME_PATH=http://127.0.0.1:8080/sam
#게임 서버에서 이미지를 같이 처리할 것인지 여부.
HIDCHE_IMAGE_USE_INTERNAL=yes
#이미지 경로.
#HIDCHE_IMAGE_USE_INTERNAL이 yes인 경우 HIDCHE_GAME_PATH 기준 상대 경로
HIDCHE_IMAGE_PATH=../image
#운영자 계정, 비밀번호. (필수)
HIDCHE_ADMIN=
HIDCHE_PASSWORD=
#카카오 로그인을 위한 API (필수)
HIDCHE_KAKAO_REST_KEY=
HIDCHE_KAKAO_ADMIN_KEY=