添加docker实现

This commit is contained in:
伊昭荣 2022-02-23 16:58:50 +08:00
parent d87bb6edfe
commit 4a8f0fa227
10 changed files with 337 additions and 16 deletions

4
Dockerfile Normal file
View File

@ -0,0 +1,4 @@
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} /usr/share/intranet_app_manager.jar
ENTRYPOINT ["java","-jar","/usr/share/intranet_app_manager.jar"]

View File

@ -14,7 +14,7 @@ configurations {
runtimeClasspath {
extendsFrom developmentOnly
}
compileOnly {
implementationOnly {
extendsFrom annotationProcessor
}
}
@ -27,20 +27,20 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compile group: 'org.apache.shiro', name: 'shiro-spring-boot-web-starter', version: '1.5.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.10'
compile group: 'com.aliyun.oss', name: 'aliyun-sdk-oss', version: '3.1.0'
compile group: 'com.qiniu', name: 'qiniu-java-sdk', version: '7.2.28'
compile group: 'com.qcloud', name: 'cos_api', version: '5.6.15'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'
compile group: 'com.googlecode.plist', name: 'dd-plist', version: '1.21'
compile group: 'net.dongliu', name: 'apk-parser', version: '2.6.9'
compile group: 'com.google.zxing', name: 'javase', version: '3.4.0'
compile group: 'commons-io', name: 'commons-io', version: '2.6'
compile group: 'com.jcraft', name: 'jzlib', version: '1.1.3'
compile group: 'org.freemarker', name: 'freemarker', version: '2.3.28'
compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.0.1'
compile group: 'com.alibaba', name: 'fastjson', version: '1.2.59'
implementation group: 'org.apache.shiro', name: 'shiro-spring-boot-web-starter', version: '1.5.0'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.10'
implementation group: 'com.aliyun.oss', name: 'aliyun-sdk-oss', version: '3.1.0'
implementation group: 'com.qiniu', name: 'qiniu-java-sdk', version: '7.2.28'
implementation group: 'com.qcloud', name: 'cos_api', version: '5.6.15'
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'
implementation group: 'com.googlecode.plist', name: 'dd-plist', version: '1.21'
implementation group: 'net.dongliu', name: 'apk-parser', version: '2.6.9'
implementation group: 'com.google.zxing', name: 'javase', version: '3.4.0'
implementation group: 'commons-io', name: 'commons-io', version: '2.6'
implementation group: 'com.jcraft', name: 'jzlib', version: '1.1.3'
implementation group: 'org.freemarker', name: 'freemarker', version: '2.3.28'
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.0.1'
implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.59'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

108
deploy.sh Executable file
View File

@ -0,0 +1,108 @@
#!/bin/sh
dir=$(pwd)
configPath=$dir/src/main/resources/application.properties
caPath=$dir/src/main/resources/static/crt/ca.crt
p12Path=$dir/src/main/resources/server.pkcs12
sslConfigPath=$dir/openssl.cnf
param=$1
echo "$param"
getIpForMac(){
ifconfig | grep inet | grep -v inet6 | grep -v 127 | cut -d ' ' -f2
}
getIpForLinux(){
ip a | grep inet | grep -v inet6 | grep -v 127 | sed 's/^[ \t]*//g' | cut -d ' ' -f2
}
ip="127.0.0.1"
if [[ $(uname -a) =~ "Darwin" ]];then
ip=$(getIpForMac)
elif [[ $(uname -a) =~ "centos" ]];then
ip=$(getIpForLinux)
elif [[ $(uname -a) =~ "ubuntu" ]];then
ip=$(getIpForLinux)
fi
build(){
mysqlAddr='127.0.0.1'
if [[ $param =~ "docker" ]];then
mysqlAddr="docker_mysql"
fi
sed -i "" "s/\${ip}/$mysqlAddr/" "$configPath"
gradle clean
gradle build
cd "$dir/build/libs/"
mv intranet_app_manager*.jar intranet_app_manager.jar
cd "$dir"
sed -i "" "s/$mysqlAddr/\${ip}/" "$configPath"
}
createCert(){
cd "$dir"
rm -rf certs
mkdir -p certs/CA/{certs,crl,newcerts,private}
touch certs/CA/index.txt
touch certs/CA/certs.db
cp -rf "$sslConfigPath" certs/openssl.cnf
echo 00 > certs/CA/serial
sed -i "" "s/\${ip}/$ip/" "$dir/certs/openssl.cnf"
cd "$dir/certs"
echo "输入:123456"
openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cnf
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -config openssl.cnf
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12
cp -rf "$dir/certs/ca.crt" "$caPath"
cp -rf "$dir/certs/server.pkcs12" "$p12Path"
cd "$dir"
rm -rf certs
}
installAndStartMysql(){
brew install mysql
killall -9 mysqld
mysqld &
mysql -u root -p <"$dir/mysql/sql/init.sql"
}
startup(){
ps -efww | grep -w 'intranet_app_manager' | grep -v grep |awk '{print $2}'|xargs kill -9
if [[ $param =~ "docker" ]];then
killall -9 mysqld
docker-compose up -d
else
cd "$dir/build/libs"
java -jar intranet_app_manager.jar &
fi
}
openPage(){
address="http://$ip:8080/account/signin"
echo "$address"
if [[ $(uname -a) =~ "Darwin" ]];then
open "$address"
elif [[ $(uname -a) =~ "centos" ]];then
x-www-browser "$address"
elif [[ $(uname -a) =~ "ubuntu" ]];then
x-www-browser "$address"
fi
}
setup(){
createCert
build
if [[ $param =~ "docker" ]];then
docker-compose build
else
installAndStartMysql
fi
startup
openPage
}
setup

40
docker-compose.yml Normal file
View File

@ -0,0 +1,40 @@
version: '3'
services:
web:
build:
context: .
args:
JAR_FILE: build/libs/intranet_app_manager.jar
dockerfile: Dockerfile
container_name: web
networks:
- server
depends_on:
- mysql
ports:
- "8080:8080"
- "8443:443"
mysql:
build:
context: ./mysql
restart: always
container_name: docker_mysql
networks:
- server
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: app
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d/
- ./mysql/sql:/opt/sql
ports:
- '3306:3306'
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
networks:
server:
driver:
bridge

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip

2
mysql/dockerfile Normal file
View File

@ -0,0 +1,2 @@
FROM mysql:8.0.21
ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf

1
mysql/init/init.sql Normal file
View File

@ -0,0 +1 @@
source /opt/sql/init.sql;

111
mysql/mysqld.cnf Normal file
View File

@ -0,0 +1,111 @@
[client]
port=3306
socket = /var/run/mysqld/mysqld.sock
[mysql]
no-auto-rehash
auto-rehash
default-character-set=utf8mb4
[mysqld]
###basic settings
server-id = 2
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/lib/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server = utf8mb4
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
default-storage-engine=INNODB
transaction_isolation = READ-COMMITTED
auto_increment_offset = 1
connect_timeout = 20
max_connections = 3500
wait_timeout=604800
interactive_timeout=31536000
interactive_timeout = 31536000
log_bin_trust_function_creators = 1
wait_timeout = 7200
sort_buffer_size = 32M
join_buffer_size = 128M
max_allowed_packet = 1024M
tmp_table_size = 2097152
explicit_defaults_for_timestamp = 1
read_buffer_size = 16M
read_rnd_buffer_size = 32M
query_cache_type = 1
query_cache_size = 2M
table_open_cache = 1500
table_definition_cache = 1000
thread_cache_size = 768
back_log = 3000
open_files_limit = 65536
skip-name-resolve
########log settings########
log-output=FILE
general_log = ON
general_log_file=/var/lib/mysql/general.log
slow_query_log = ON
slow_query_log_file=/var/lib/mysql/slowquery.log
long_query_time=10
#log-error=/var/lib/mysql/error.log
log_queries_not_using_indexes = OFF
log_throttle_queries_not_using_indexes = 0
#expire_logs_days = 120
min_examined_row_limit = 100
########innodb settings########
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_buffer_pool_size = 6144M
innodb_file_per_table = on
innodb_buffer_pool_instances = 20
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_log_file_size = 300M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
#innodb_undo_log_truncate = 1
#innodb_max_undo_log_size = 2G
innodb_flush_method = O_DIRECT
innodb_flush_neighbors = 1
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 64M
innodb_flush_log_at_trx_commit=1
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=65536
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
#innodb_data_file_path=ibdata1:60M;ibdata2:60M;autoextend:max:1G
innodb_data_file_path = ibdata1:12M:autoextend
#innodb_temp_data_file_path = ibtmp1:500M:autoextend:max:20G
#innodb_buffer_pool_dump_pct = 40
#innodb_page_cleaners = 4
#innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
#log_timestamps=system
##############
delayed_insert_limit = 100
delayed_insert_timeout = 300
delayed_queue_size = 1000
delay_key_write = ON
disconnect_on_expired_password = ON
div_precision_increment = 4
end_markers_in_json = OFF
eq_range_index_dive_limit = 10
innodb_adaptive_flushing = ON
innodb_adaptive_hash_index = ON
innodb_adaptive_max_sleep_delay = 150000
#innodb_additional_mem_pool_size = 2097152
innodb_autoextend_increment = 64
innodb_autoinc_lock_mode = 1

9
mysql/sql/init.sql Normal file
View File

@ -0,0 +1,9 @@
# 创建库
drop database if exists app_manager;
drop user if exists 'app_manager'@'%';
-- 支持emoji需要mysql数据库参数 character_set_server=utf8mb4
create database app_manager default character set utf8mb4 collate utf8mb4_unicode_ci;
use app_manager;
create user 'app_manager'@'%' identified by 'app_manager123456';
grant all privileges on *.* to 'app_manager'@'%';
flush privileges;

46
openssl.cnf Normal file
View File

@ -0,0 +1,46 @@
[ req ]
distinguished_name=req_distinguished_name
req_extensions=v3_req
[ req_distinguished_name ]
countryName=Country Name (2 letter code)
countryName_default=CN
stateOrProvinceName=State or Province Name (full name)
stateOrProvinceName_default=ZheJiang
localityName=Locality Name (eg, city)
localityName_default=HangZhou
organizationalUnitName=Organizational Unit Name (eg, section)
organizationalUnitName_default=${ip}
commonName=Internet Widgits Ltd
commonName_default=${ip}
commonName_max=64
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = ${ip}
# section for the "default_ca" option
[ca]
default_ca=my_ca_default
# default section for "ca" command options
[my_ca_default]
new_certs_dir=./CA/certs
database=./CA/certs.db
default_md = sha256
policy=my_ca_policy
serial = ./CA/serial
default_days = 365
# section for DN field validation and order
[my_ca_policy]
commonName = ${ip}
countryName = CN
stateOrProvinceName = ZheJiang
localityName = HZ
organizationName = NE
organizationalUnitName = Music
emailAddress = app@163.com