15 Commits
Author SHA1 Message Date
Hide_D 40f15e7676 fix: api 로그인 호출 경로 수정 2023-02-20 01:43:56 +09:00
Hide_D 980cc41dfd misc: install 과정에서 에러시 출력 2023-02-20 01:26:40 +09:00
Hide_D 9fdf596463 fix: php zip, 7-zip 2023-02-20 00:23:02 +09:00
Hide_D d43b5e08e6 fix: example backup entrypoint 2023-02-20 00:22:48 +09:00
Hide_D 4980670450 fix: example. bbs->board 2023-02-20 00:15:11 +09:00
Hide_D 58b15e19b9 dep: php 8.2 2023-02-20 00:11:45 +09:00
Hide_D b73fc43e34 fix: pm.max_children 2022-08-17 01:53:38 +09:00
Hide_D b597377818 misc: max_children 증가 2022-08-17 01:27:37 +09:00
Hide_D 6ebe151858 docker compose에 백업 스크립트 구성 2022-07-25 00:14:46 +09:00
Hide_D afa45119e5 backup 스크립트 구성 2022-07-25 00:04:13 +09:00
Hide_D b6875f45ea DB 초기화 관련 설정 변경
- MariaDB 초기화시 Root host 지정
- 세부 DB 계정마다 생성된 비밀번호 안내
2022-06-03 22:26:21 +09:00
Hide_D 532c006fb4 override를 위해 기본 포트 제거 2022-06-03 21:48:19 +09:00
Hide_D 623ed878dc sysvmsg, sysvsem, sysvshm 추가 2022-05-15 03:14:36 +09:00
Hide_D 6f366e9592 php gd에 webp, jpg 누락 수정 2022-05-08 19:19:39 +09:00
Hide_D d3698fa2e4 memcached 설정, mcrypt 제거, ds 추가 2022-05-08 19:11:49 +09:00
12 changed files with 156 additions and 36 deletions
+2
View File
@@ -1,6 +1,8 @@
#MARIADB 비밀번호. (필수)
MARIADB_ROOT_PASSWORD=
#MARIADB ROOT 접근 주소(선택, 외부 접근 시 % 입력)
MARIADB_ROOT_HOST=
HIDCHE_PW_SALT=
HIDCHE_DB_PREFIX=hidche
+14 -6
View File
@@ -1,17 +1,17 @@
FROM php:8.1-fpm-bullseye
FROM php:8.2-fpm-bullseye
#debian
ENV LC_ALL=C.UTF-8
RUN apt -y update ;\
apt -y install \
bzip2 git rsync \
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
bzip2 zip unzip p7zip-full git rsync \
libmemcached-dev libcurl4-openssl-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-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-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr; \
docker-php-ext-configure gd --with-freetype --with-webp --with-avif --with-jpeg --with-png ; \
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,11 +19,14 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
gd \
intl \
opcache \
sysvmsg \
sysvsem \
sysvshm \
pcntl \
pdo_mysql \
mysqli \
zip;
RUN pecl install memcached mcrypt;
RUN pecl install memcached ds;
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt install -yq nodejs
@@ -58,5 +61,10 @@ 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"]
+3
View File
@@ -16,3 +16,6 @@ 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
@@ -0,0 +1,10 @@
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
@@ -0,0 +1,72 @@
#!/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())
+7 -19
View File
@@ -1,17 +1,17 @@
FROM php:7.4-fpm-bullseye
FROM php:8.2-fpm-bullseye
#debian
ENV LC_ALL=C.UTF-8
RUN apt -y update ;\
apt -y install \
bzip2 git rsync \
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
bzip2 zip unzip p7zip-full git rsync \
libmemcached-dev libcurl4-openssl-dev \
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-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-dir=/usr --with-png-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr; \
docker-php-ext-configure gd --with-freetype --with-webp --with-avif --with-jpeg --with-png ; \
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,21 +23,9 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
pdo_mysql \
mysqli \
zip;
RUN pecl install memcached mcrypt;
RUN pecl install memcached ds;
#from nextcloud setting
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; \
RUN mkdir -p /var/www/board; \
mkdir -p /var/www/.ssh;
COPY entrypoint.sh /usr/local/bin/
+1
View File
@@ -329,6 +329,7 @@ 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}" )
+22 -4
View File
@@ -9,12 +9,12 @@ services:
env_file:
- account.env
- game.env
web:
build: ./web
restart: always
ports:
- 8080:80
#ports:
# - 8080:80
volumes:
- hidche:/var/www/html:ro
- board:/var/www/board:ro
@@ -54,6 +54,23 @@ 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
@@ -65,4 +82,5 @@ services:
volumes:
db:
hidche:
board:
board:
backup:
+17 -1
View File
@@ -25,7 +25,7 @@ services:
target: /var/www/html
#For DEV. Set app path as local directory
- type: bind
source: ~/dev_sam/bbs
source: ~/dev_sam/board
target: /var/www/board
app:
@@ -66,3 +66,19 @@ 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,3 +19,6 @@ 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=
+3 -6
View File
@@ -81,6 +81,8 @@ 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)
@@ -99,13 +101,8 @@ 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', json=jsonQuery)
loginResult = session.post('http://web/sam/api.php?path=Login%2FLoginByID', json=query, headers=headers)
print(loginResult.text, flush=True)
serverList = str(env['HIDCHE_SERVER_LIST']).split(',')
+2
View File
@@ -25,6 +25,7 @@ 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;
}
}
@@ -36,6 +37,7 @@ 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;
}
}