Compare commits
15
Commits
pre-package
...
for_v0.33
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40f15e7676
|
||
|
|
980cc41dfd
|
||
|
|
9fdf596463 | ||
|
|
d43b5e08e6 | ||
|
|
4980670450 | ||
|
|
58b15e19b9 | ||
|
|
b73fc43e34
|
||
|
|
b597377818
|
||
|
|
6ebe151858 | ||
|
|
afa45119e5 | ||
|
|
b6875f45ea | ||
|
|
532c006fb4 | ||
|
|
623ed878dc | ||
|
|
6f366e9592 | ||
|
|
d3698fa2e4 |
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
#MARIADB 비밀번호. (필수)
|
#MARIADB 비밀번호. (필수)
|
||||||
MARIADB_ROOT_PASSWORD=
|
MARIADB_ROOT_PASSWORD=
|
||||||
|
#MARIADB ROOT 접근 주소(선택, 외부 접근 시 % 입력)
|
||||||
|
MARIADB_ROOT_HOST=
|
||||||
HIDCHE_PW_SALT=
|
HIDCHE_PW_SALT=
|
||||||
HIDCHE_DB_PREFIX=hidche
|
HIDCHE_DB_PREFIX=hidche
|
||||||
|
|
||||||
|
|||||||
+14
-6
@@ -1,17 +1,17 @@
|
|||||||
FROM php:8.1-fpm-bullseye
|
FROM php:8.2-fpm-bullseye
|
||||||
#debian
|
#debian
|
||||||
|
|
||||||
ENV LC_ALL=C.UTF-8
|
ENV LC_ALL=C.UTF-8
|
||||||
|
|
||||||
RUN apt -y update ;\
|
RUN apt -y update ;\
|
||||||
apt -y install \
|
apt -y install \
|
||||||
bzip2 git rsync \
|
bzip2 zip unzip p7zip-full git rsync \
|
||||||
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
|
libmemcached-dev libcurl4-openssl-dev \
|
||||||
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
|
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-dev libfreetype6-dev \
|
||||||
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
|
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
|
||||||
|
|
||||||
RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
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 pdo_mysql --with-pdo-mysql=mysqlnd; \
|
||||||
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
|
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
|
||||||
docker-php-ext-install -j "$(nproc)" \
|
docker-php-ext-install -j "$(nproc)" \
|
||||||
@@ -19,11 +19,14 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
|||||||
gd \
|
gd \
|
||||||
intl \
|
intl \
|
||||||
opcache \
|
opcache \
|
||||||
|
sysvmsg \
|
||||||
|
sysvsem \
|
||||||
|
sysvshm \
|
||||||
pcntl \
|
pcntl \
|
||||||
pdo_mysql \
|
pdo_mysql \
|
||||||
mysqli \
|
mysqli \
|
||||||
zip;
|
zip;
|
||||||
RUN pecl install memcached mcrypt;
|
RUN pecl install memcached ds;
|
||||||
|
|
||||||
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
|
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
|
||||||
apt install -yq nodejs
|
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
|
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"]
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
CMD ["php-fpm"]
|
CMD ["php-fpm"]
|
||||||
@@ -16,3 +16,6 @@ opcache.save_comments=1
|
|||||||
opcache.revalidate_freq=1
|
opcache.revalidate_freq=1
|
||||||
opcache.file_cache="/var/www/opcache"
|
opcache.file_cache="/var/www/opcache"
|
||||||
opcache.jit="function"
|
opcache.jit="function"
|
||||||
|
|
||||||
|
extension=ds.so
|
||||||
|
extension=memcached.so
|
||||||
@@ -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"]
|
||||||
@@ -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
@@ -1,17 +1,17 @@
|
|||||||
FROM php:7.4-fpm-bullseye
|
FROM php:8.2-fpm-bullseye
|
||||||
#debian
|
#debian
|
||||||
|
|
||||||
ENV LC_ALL=C.UTF-8
|
ENV LC_ALL=C.UTF-8
|
||||||
|
|
||||||
RUN apt -y update ;\
|
RUN apt -y update ;\
|
||||||
apt -y install \
|
apt -y install \
|
||||||
bzip2 git rsync \
|
bzip2 zip unzip p7zip-full git rsync \
|
||||||
libmemcached-dev libcurl4-openssl-dev libmcrypt-dev \
|
libmemcached-dev libcurl4-openssl-dev \
|
||||||
libicu-dev libjpeg-dev libpng-dev libwebp-dev libfreetype6-dev \
|
libicu-dev libjpeg-dev libpng-dev libwebp-dev libavif-dev libfreetype6-dev \
|
||||||
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
|
libzip-dev libxml2-dev libsqlite3-dev gosu build-essential;
|
||||||
|
|
||||||
RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
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 pdo_mysql --with-pdo-mysql=mysqlnd; \
|
||||||
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
|
docker-php-ext-configure mysqli --with-mysqli=mysqlnd; \
|
||||||
docker-php-ext-install -j "$(nproc)" \
|
docker-php-ext-install -j "$(nproc)" \
|
||||||
@@ -23,21 +23,9 @@ RUN debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
|||||||
pdo_mysql \
|
pdo_mysql \
|
||||||
mysqli \
|
mysqli \
|
||||||
zip;
|
zip;
|
||||||
RUN pecl install memcached mcrypt;
|
RUN pecl install memcached ds;
|
||||||
#from nextcloud setting
|
#from nextcloud setting
|
||||||
RUN { \
|
RUN mkdir -p /var/www/board; \
|
||||||
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;
|
mkdir -p /var/www/.ssh;
|
||||||
|
|
||||||
COPY entrypoint.sh /usr/local/bin/
|
COPY entrypoint.sh /usr/local/bin/
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ docker_setup_db() {
|
|||||||
mysql_note "Creating database ${fullDBName}"
|
mysql_note "Creating database ${fullDBName}"
|
||||||
subPW=`echo -n ${dbName}${HIDCHE_PW_SALT}${MARIADB_ROOT_PASSWORD}${dbName}${HIDCHE_PW_SALT} | shasum -a 512`
|
subPW=`echo -n ${dbName}${HIDCHE_PW_SALT}${MARIADB_ROOT_PASSWORD}${dbName}${HIDCHE_PW_SALT} | shasum -a 512`
|
||||||
subPW=${subPW:0:32}
|
subPW=${subPW:0:32}
|
||||||
|
mysql_note "GENERATED ${fullDBName} PASSWORD: $subPW"
|
||||||
local userPasswordEscaped
|
local userPasswordEscaped
|
||||||
userPasswordEscaped=$( docker_sql_escape_string_literal "${subPW}" )
|
userPasswordEscaped=$( docker_sql_escape_string_literal "${subPW}" )
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- account.env
|
- account.env
|
||||||
- game.env
|
- game.env
|
||||||
|
|
||||||
web:
|
web:
|
||||||
build: ./web
|
build: ./web
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
#ports:
|
||||||
- 8080:80
|
# - 8080:80
|
||||||
volumes:
|
volumes:
|
||||||
- hidche:/var/www/html:ro
|
- hidche:/var/www/html:ro
|
||||||
- board:/var/www/board:ro
|
- board:/var/www/board:ro
|
||||||
@@ -54,6 +54,23 @@ services:
|
|||||||
- db
|
- db
|
||||||
- web
|
- 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:
|
cron:
|
||||||
build: ./cron
|
build: ./cron
|
||||||
restart: always
|
restart: always
|
||||||
@@ -65,4 +82,5 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
db:
|
db:
|
||||||
hidche:
|
hidche:
|
||||||
board:
|
board:
|
||||||
|
backup:
|
||||||
@@ -25,7 +25,7 @@ services:
|
|||||||
target: /var/www/html
|
target: /var/www/html
|
||||||
#For DEV. Set app path as local directory
|
#For DEV. Set app path as local directory
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ~/dev_sam/bbs
|
source: ~/dev_sam/board
|
||||||
target: /var/www/board
|
target: /var/www/board
|
||||||
|
|
||||||
app:
|
app:
|
||||||
@@ -66,3 +66,19 @@ services:
|
|||||||
target: /var/www/html
|
target: /var/www/html
|
||||||
depends_on:
|
depends_on:
|
||||||
- app
|
- 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
|
||||||
|
|||||||
@@ -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_IMAGE_USE_INTERNAL이 yes인 경우 HIDCHE_GAME_PATH의 상대 경로. yes가 아닌 경우 전체 도메인 경로.
|
#이미지 경로, HIDCHE_IMAGE_USE_INTERNAL이 yes인 경우 HIDCHE_GAME_PATH의 상대 경로. yes가 아닌 경우 전체 도메인 경로.
|
||||||
HIDCHE_IMAGE_PATH=../image
|
HIDCHE_IMAGE_PATH=../image
|
||||||
|
|
||||||
|
#게시판 서버내 파일 백업 경로, /var/www/board/files 가 아니라면 직접 지정
|
||||||
|
#HIDCHE_BOARD_FILES_PATH=
|
||||||
@@ -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_rest_key':env['HIDCHE_KAKAO_REST_KEY'],
|
||||||
'kakao_admin_key':env['HIDCHE_KAKAO_ADMIN_KEY'],
|
'kakao_admin_key':env['HIDCHE_KAKAO_ADMIN_KEY'],
|
||||||
}, headers=headers)
|
}, headers=headers)
|
||||||
|
if not setupDBResult.ok:
|
||||||
|
print(setupDBResult, flush=True)
|
||||||
setupDBJsonResult = json.loads(setupDBResult.text)
|
setupDBJsonResult = json.loads(setupDBResult.text)
|
||||||
print(setupDBJsonResult, flush=True)
|
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)
|
setupAdminJsonResult = json.loads(setupAdminResult.text)
|
||||||
print(setupAdminJsonResult, flush=True)
|
print(setupAdminJsonResult, flush=True)
|
||||||
|
|
||||||
jsonQuery = {
|
|
||||||
"path": ["Login", "LoginByID"],
|
|
||||||
"args": query
|
|
||||||
}
|
|
||||||
|
|
||||||
print("Login Admin...", flush=True)
|
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)
|
print(loginResult.text, flush=True)
|
||||||
|
|
||||||
serverList = str(env['HIDCHE_SERVER_LIST']).split(',')
|
serverList = str(env['HIDCHE_SERVER_LIST']).split(',')
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ server {
|
|||||||
include fastcgi_params;
|
include fastcgi_params;
|
||||||
fastcgi_pass board:9000;
|
fastcgi_pass board:9000;
|
||||||
fastcgi_index index.php;
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param REMOTE_ADDR $http_x_real_ip;
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,6 +37,7 @@ server {
|
|||||||
proxy_read_timeout 600;
|
proxy_read_timeout 600;
|
||||||
fastcgi_pass app:9000;
|
fastcgi_pass app:9000;
|
||||||
fastcgi_index index.php;
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param REMOTE_ADDR $http_x_real_ip;
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user