diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ff49172 --- /dev/null +++ b/Dockerfile @@ -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"] diff --git a/build.gradle b/build.gradle index f9e8155..fd431e1 100644 --- a/build.gradle +++ b/build.gradle @@ -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' } diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..3bcf8bf --- /dev/null +++ b/deploy.sh @@ -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 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1fa372b --- /dev/null +++ b/docker-compose.yml @@ -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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b6c7887..3b24cab 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/mysql/dockerfile b/mysql/dockerfile new file mode 100644 index 0000000..3f9dccb --- /dev/null +++ b/mysql/dockerfile @@ -0,0 +1,2 @@ +FROM mysql:8.0.21 +ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf \ No newline at end of file diff --git a/mysql/init/init.sql b/mysql/init/init.sql new file mode 100644 index 0000000..5db9888 --- /dev/null +++ b/mysql/init/init.sql @@ -0,0 +1 @@ +source /opt/sql/init.sql; \ No newline at end of file diff --git a/mysql/mysqld.cnf b/mysql/mysqld.cnf new file mode 100644 index 0000000..8cdd310 --- /dev/null +++ b/mysql/mysqld.cnf @@ -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 \ No newline at end of file diff --git a/mysql/sql/init.sql b/mysql/sql/init.sql new file mode 100644 index 0000000..6822ad3 --- /dev/null +++ b/mysql/sql/init.sql @@ -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; \ No newline at end of file diff --git a/openssl.cnf b/openssl.cnf new file mode 100644 index 0000000..3785155 --- /dev/null +++ b/openssl.cnf @@ -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 \ No newline at end of file