Author SHA1 Message Date
Hide_D 7e7bde05b8 app에서 php,nodejs package를 사전 준비 2022-04-09 22:28:21 +09:00
13 changed files with 40 additions and 153 deletions
-2
View File
@@ -1,8 +1,6 @@
#MARIADB 비밀번호. (필수)
MARIADB_ROOT_PASSWORD=
#MARIADB ROOT 접근 주소(선택, 외부 접근 시 % 입력)
MARIADB_ROOT_HOST=
HIDCHE_PW_SALT=
HIDCHE_DB_PREFIX=hidche
+6 -14
View File
@@ -1,17 +1,17 @@
FROM php:8.2-fpm-bullseye
FROM php:8.1-fpm-bullseye
#debian
ENV LC_ALL=C.UTF-8
RUN apt -y update ;\
apt -y install \
bzip2 zip unzip p7zip-full git rsync \
libmemcached-dev libcurl4-openssl-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-dev libfreetype6-dev \
bzip2 git rsync \
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
docker-php-ext-configure gd --with-freetype --with-webp --with-avif --with-jpeg --with-png ; \
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr; \
docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd; \
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
docker-php-ext-install -j "$(nproc)" \
@@ -19,14 +19,11 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
gd \
intl \
opcache \
sysvmsg \
sysvsem \
sysvshm \
pcntl \
pdo_mysql \
mysqli \
zip;
RUN pecl install memcached ds;
RUN pecl install memcached mcrypt;
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt install -yq nodejs
@@ -61,10 +58,5 @@ RUN if [ "$UID" != 33 ]; then \
COPY sam_conf.ini /usr/local/etc/php/conf.d/sam_conf.ini
# SETUP PHP-FPM CONFIG SETTINGS (max_children / max_requests)
RUN echo 'pm.max_children = 15' >> /usr/local/etc/php-fpm.d/zz-docker.conf && \
echo 'pm.max_requests = 500' >> /usr/local/etc/php-fpm.d/zz-docker.conf && \
echo 'request_terminate_timeout = 600' >> /usr/local/etc/php-fpm.d/zz-docker.conf
ENTRYPOINT ["entrypoint.sh"]
CMD ["php-fpm"]
+6
View File
@@ -15,6 +15,12 @@ if [ ! -f "$samRoot/index.php" ]; then
chown -R www-data:www-data $wwwRoot
gosu www-data git clone $gameGitPath $samRoot
gosu www-data git checkout $gameGitBranch
pushd $samRoot
gosu www-data npm ci
gosu www-data npm run build -- --env target=gateway
gosu www-data php composer.phar install
popd
fi
if [ "$HIDCHE_IMAGE_USE_INTERNAL" = "yes" ] && [ ! -d "$imageRoot" ]; then
-3
View File
@@ -16,6 +16,3 @@ opcache.save_comments=1
opcache.revalidate_freq=1
opcache.file_cache="/var/www/opcache"
opcache.jit="function"
extension=ds.so
extension=memcached.so
-10
View File
@@ -1,10 +0,0 @@
FROM python:3-alpine
#alpine + python3 + cron(from alpine) + mariadb-client
RUN apk add --no-cache mariadb-client rsync
COPY run_backup.py /usr/local/bin/
RUN chmod +x /usr/local/bin/run_backup.py && \
echo '0 5 * * * python3 /usr/local/bin/run_backup.py' > /etc/crontabs/root
ENTRYPOINT []
CMD ["crond", "-f" , "-L", "/dev/stdout"]
-72
View File
@@ -1,72 +0,0 @@
#!/usr/bin/env python3
import os
import os.path
from subprocess import Popen, PIPE, run as subprocess_run
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
def backup_table(db_name, table_name, output_prefix):
sql_path = '{}/{}/{}.sql.gz'.format(output_prefix, db_name, table_name)
#print(sql_path)
with open(sql_path, 'wb') as sql_out:
sqldump = Popen(['mysqldump', '-f', '--skip-comments', '-h', 'db', '-u', 'root', '--password={}'.format(root_pw), db_name, table_name], stdout=PIPE)
gzdump = Popen(['gzip', '-c'], stdin=sqldump.stdout, stdout=sql_out)
sqldump.wait()
gzdump.wait()
os.chmod(sql_path, 0o644)
print('sql done {}, {}'.format(db_name, table_name))
def backup_files(src_path, output_path):
subprocess_run(['rsync', '-au', src_path, output_path])
print('file done {}'.format(src_path))
now = datetime.now()
print('> backup begin', now.isoformat())
weekday = now.weekday()
hour = now.hour
store_path = '/var/backup'
output_prefix = '{}/hidche_backup_w{}-{:02}'.format(store_path, weekday, hour)
os.makedirs(output_prefix, exist_ok=True)
db_prefix = os.environ['HIDCHE_DB_PREFIX']
server_list = os.environ['HIDCHE_SERVER_LIST'].strip(' ,').split(',')
server_list.append('root')
board_db_name = os.environ['HIDCHE_DB_BBS_USER']
server_list.append(board_db_name)
#print(server_list)
root_pw = os.environ['MARIADB_ROOT_PASSWORD']
board_files_path = os.environ.get('HIDCHE_BOARD_FILES_PATH', '/var/www/board/files')
with ThreadPool(4) as pool:
waiters = []
waiters.append(pool.apply_async(backup_files, ('/var/www/html/sam/d_pic', '{}/sam_image'.format(output_prefix))))
print(board_files_path)
if os.path.exists(board_files_path):
waiters.append(pool.apply_async(backup_files, (board_files_path, '{}/board_files'.format(output_prefix))))
for server_name in server_list:
db_name = '{}_{}'.format(db_prefix, server_name)
raw_tables = subprocess_run(['mysql', '-NBA' , '-h' ,'db', '-u', 'root' ,'--password={}'.format(root_pw), '-D', db_name, '-e', 'show tables'], stdout=PIPE)
raw_tables = raw_tables.stdout.decode('utf-8').strip(' \n\t')
if raw_tables == '':
continue
tables = raw_tables.split('\n')
d_setting_path = '/var/www/html/sam/{}/d_setting'.format(server_name)
if os.path.exists(d_setting_path):
waiters.append(pool.apply_async(backup_files, (d_setting_path, '{}/{}'.format(output_prefix, db_name))))
os.makedirs('{}/{}'.format(output_prefix, db_name), exist_ok=True)
for table_name in tables:
waiters.append(pool.apply_async(backup_table, (db_name, table_name, output_prefix)))
for waiter in waiters:
waiter.wait()
print('> backup finish', datetime.now().isoformat())
+19 -7
View File
@@ -1,17 +1,17 @@
FROM php:8.2-fpm-bullseye
FROM php:7.4-fpm-bullseye
#debian
ENV LC_ALL=C.UTF-8
RUN apt -y update ;\
apt -y install \
bzip2 zip unzip p7zip-full git rsync \
libmemcached-dev libcurl4-openssl-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-dev libfreetype6-dev \
bzip2 git rsync \
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
docker-php-ext-configure gd --with-freetype --with-webp --with-avif --with-jpeg --with-png ; \
docker-php-ext-configure gd --with-freetype-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr; \
docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd; \
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
docker-php-ext-install -j "$(nproc)" \
@@ -23,9 +23,21 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
pdo_mysql \
mysqli \
zip;
RUN pecl install memcached ds;
RUN pecl install memcached mcrypt;
#from nextcloud setting
RUN mkdir -p /var/www/board; \
RUN { \
echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=10000'; \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.save_comments=1'; \
echo 'opcache.revalidate_freq=1'; \
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
\
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
\
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
mkdir -p /var/www/board; \
mkdir -p /var/www/.ssh;
COPY entrypoint.sh /usr/local/bin/
-1
View File
@@ -329,7 +329,6 @@ docker_setup_db() {
mysql_note "Creating database ${fullDBName}"
subPW=`echo -n ${dbName}${HIDCHE_PW_SALT}${MARIADB_ROOT_PASSWORD}${dbName}${HIDCHE_PW_SALT} | shasum -a 512`
subPW=${subPW:0:32}
mysql_note "GENERATED ${fullDBName} PASSWORD: $subPW"
local userPasswordEscaped
userPasswordEscaped=$( docker_sql_escape_string_literal "${subPW}" )
+3 -20
View File
@@ -9,11 +9,12 @@ services:
env_file:
- account.env
- game.env
web:
build: ./web
restart: always
#ports:
# 기본 포트로 사용할 곳 지정. 아래와 같이 사용하면 8080
# - 8080:80
volumes:
- hidche:/var/www/html:ro
@@ -54,23 +55,6 @@ services:
- db
- web
backup:
build: ./backup
restart: "no"
#restart: always
command:
- echo 'backup is disabled'
#- crond -f -L /dev/stdout
volumes:
- hidche:/var/www/html:ro
- backup:/var/backup
env_file:
- account.env
- game.env
depends_on:
- app
- db
cron:
build: ./cron
restart: always
@@ -82,5 +66,4 @@ services:
volumes:
db:
hidche:
board:
backup:
board:
@@ -66,19 +66,3 @@ services:
target: /var/www/html
depends_on:
- app
backup:
restart: "no"
entrypoint: ["echo", "backup is disabled"]
volumes:
- type: bind
source: ~/dev_sam/backup
target: /var/backup
- type: bind
read_only: true
source: ~/dev_sam/app
target: /var/www/html
- type: bind
read_only: true
source: ~/dev_sam/board
target: /var/www/board
-3
View File
@@ -19,6 +19,3 @@ 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
#게시판 서버내 파일 백업 경로, /var/www/board/files 가 아니라면 직접 지정
#HIDCHE_BOARD_FILES_PATH=
+6 -3
View File
@@ -81,8 +81,6 @@ setupDBResult = session.post('http://web/sam/f_install/j_setup_db.php', {
'kakao_rest_key':env['HIDCHE_KAKAO_REST_KEY'],
'kakao_admin_key':env['HIDCHE_KAKAO_ADMIN_KEY'],
}, headers=headers)
if not setupDBResult.ok:
print(setupDBResult, flush=True)
setupDBJsonResult = json.loads(setupDBResult.text)
print(setupDBJsonResult, flush=True)
@@ -101,8 +99,13 @@ setupAdminResult = session.post('http://web/sam/f_install/j_create_admin.php', q
setupAdminJsonResult = json.loads(setupAdminResult.text)
print(setupAdminJsonResult, flush=True)
jsonQuery = {
"path": ["Login", "LoginByID"],
"args": query
}
print("Login Admin...", flush=True)
loginResult = session.post('http://web/sam/api.php?path=Login%2FLoginByID', json=query, headers=headers)
loginResult = session.post('http://web/sam/api.php', json=jsonQuery)
print(loginResult.text, flush=True)
serverList = str(env['HIDCHE_SERVER_LIST']).split(',')
-2
View File
@@ -25,7 +25,6 @@ server {
include fastcgi_params;
fastcgi_pass board:9000;
fastcgi_index index.php;
fastcgi_param REMOTE_ADDR $http_x_real_ip;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
@@ -37,7 +36,6 @@ server {
proxy_read_timeout 600;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param REMOTE_ADDR $http_x_real_ip;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}