@wjwjq/release-helper 0.2.95 → 0.2.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,18 @@
1
1
  #!/bin/bash
2
2
  # 获取脚本的父目录
3
- project_path=$(echo "$basepath" | sed -e "s/\/script//")
3
+ PROJECT_PATH=$(echo "$basepath" | sed -e "s/\/script//")
4
4
 
5
5
  # 请勿修改此处, 此处将在打包时自动替换
6
- app_name=__APP_NAME__
6
+ readonly APP_NAME=__APP_NAME__
7
7
 
8
8
  # 静态资源存放目录 eg: /opt/posidon-frontend/
9
- install_path=__INSTALL_PATH__
9
+ readonly INSTALL_PATH=__INSTALL_PATH__
10
10
  user=__USER__
11
11
  usergroup=__USER_GROUP__
12
+
12
13
  nginx_install_mode=__NGINX_INSTALL_MODE__
13
14
 
14
- execute_log_path="/var/log/${app_name}_script_execute_logs"
15
+ execute_log_path="/var/log/${APP_NAME}_script_execute_logs"
15
16
 
16
17
  log() {
17
18
  now=$(date "+%Y-%m-%d %H:%M:%S")
@@ -38,21 +39,17 @@ log_error() {
38
39
  echo "$now: [error] $1" >>"$execute_log_path"
39
40
  }
40
41
 
41
- log "-----------execute ${app_name} script-------------"
42
+ log "-----------execute ${APP_NAME} script-------------"
42
43
 
43
44
  source "$basepath"/prompt.sh
44
45
 
45
- if [[ $(whoami) != "root" ]]; then
46
- echo "user:root is required!"
47
- exit 1
48
- fi
49
46
 
50
- if [[ -z "${install_path}" ]]; then
47
+ if [[ -z "${INSTALL_PATH}" ]]; then
51
48
  echo "install path not found"
52
49
  exit 1
53
50
  fi
54
51
 
55
- echo "install_path: ${install_path}"
52
+ echo "INSTALL_PATH: ${INSTALL_PATH}"
56
53
 
57
54
  source "$basepath"/nginx.sh
58
55
 
@@ -92,8 +89,8 @@ else
92
89
  fi
93
90
 
94
91
  get_old_version() {
95
- if [ -f "$install_path""version" ]; then
96
- old_version=$(sed -n '1p' "$install_path""version")
92
+ if [ -f "$INSTALL_PATH""version" ]; then
93
+ old_version=$(sed -n '1p' "$INSTALL_PATH""version")
97
94
 
98
95
  echo "$old_version"
99
96
  fi
@@ -102,16 +99,16 @@ get_old_version() {
102
99
  install_assets() {
103
100
 
104
101
  # 拷贝静态资源
105
- cp -rf "${project_path}"/pkg/version "$install_path"
102
+ cp -rf "${PROJECT_PATH}"/pkg/version "$INSTALL_PATH"
106
103
 
107
- mkdir -p "$install_path"assets
104
+ mkdir -p "$INSTALL_PATH"assets
108
105
 
109
- cp -rf "${project_path}"/pkg/assets/* "$install_path"assets
106
+ cp -rf "${PROJECT_PATH}"/pkg/assets/* "$INSTALL_PATH"assets
110
107
 
111
108
  # # 对比行数并合并
112
109
  # if [ -f "${backup_path}/settings" ]; then
113
110
  # cat $backup_path/settings | sed '/^$/d' >>./settings
114
- # cat $install_path/settings | sed '/^$/d' >>./settings_new
111
+ # cat $INSTALL_PATH/settings | sed '/^$/d' >>./settings_new
115
112
 
116
113
  # diffLines=$(diff ./settings ./settings_new | awk 'END{print NR}')
117
114
 
@@ -129,14 +126,14 @@ install_assets() {
129
126
  # echo '---------- 合并后 ----------'
130
127
  # cat ./settings
131
128
 
132
- # mv -f ./settings $install_path
129
+ # mv -f ./settings $INSTALL_PATH
133
130
  # rm -rf ./settings_new
134
131
 
135
132
  # echo "$(tput setaf 2)"settings 已合并,注意检查"$(tput sgr0)"
136
133
  # fi
137
134
  # fi
138
135
 
139
- log_success "$install_path"assets/settings 已覆盖,请注意对比差异
136
+ log_success "$INSTALL_PATH"assets/settings 已覆盖,请注意对比差异
140
137
 
141
138
  }
142
139
 
@@ -145,22 +142,24 @@ time=$now
145
142
  old_version=$(get_old_version)
146
143
 
147
144
  backup(){
148
- source_type=$1
145
+ source_path=$1
149
146
 
150
147
  #备份整个服务 eg: /opt/posidon-frontend
151
148
  if [[ -n "${old_version}" ]]; then
152
- backup_dir="$install_path"backup
149
+ backup_dir="$INSTALL_PATH"backup
153
150
  mkdir -p $backup_dir
154
151
 
155
152
  # 分开备份nginx 和assets
156
153
  backup_path=$backup_dir"/"$old_version"_"$time
157
154
  mkdir -p "$backup_path"
158
155
 
159
- echo "${app_name} $source_type backup at: $backup_path"
160
- mv "$install_path$source_type" "$backup_path"
156
+ echo "[${APP_NAME}] $source_type backup at: $backup_path" >&2
157
+ mv $source_path "$backup_path"
158
+
159
+ echo "$backup_path/$source_type"
161
160
  fi
162
161
  }
163
-
162
+
164
163
 
165
164
  start() {
166
165
  callBy=$1
@@ -200,20 +199,20 @@ start() {
200
199
 
201
200
  # 创建用户
202
201
  create_user_csri
203
- mkdir -p "$install_path"
202
+ mkdir -p "$INSTALL_PATH"
204
203
 
205
204
 
206
205
  # 仅静态文件
207
206
  if [[ "${mode}" != 3 ]]; then
208
- if [ -f "${nginx_conf_path}" ]; then
207
+ if [ -f "${NGINX_CONF_PATH}" ]; then
209
208
  while true; do
210
209
  read -r -p "nginx.conf file already exists, update it?[Y/N]" yn
211
210
  case $yn in
212
211
  [Yy]*)
213
212
  # 备份nginx配置目录
214
- backup nginx;
213
+ backup "$INSTALL_PATH"nginx;
215
214
 
216
- copy_nginx_conf_and_write_verison
215
+ copy_nginx_conf_and_write_version
217
216
  add_nginx_service
218
217
  add_log_rotate
219
218
 
@@ -230,24 +229,32 @@ start() {
230
229
  esac
231
230
  done
232
231
  else
233
- copy_nginx_conf_and_write_verison
232
+ copy_nginx_conf_and_write_version
234
233
  add_nginx_service
235
234
  add_log_rotate
236
235
  fi
237
236
  fi
238
237
 
239
238
  # 备份静态资源目录
240
- backup assets;
239
+ backup_dir=$(backup $INSTALL_PATH/assets);
241
240
 
242
241
  install_assets
243
242
 
243
+ # 执行after.sh 脚本
244
+
245
+ # 如果backup_dir 不为空,且after.sh 脚本存在,则执行after.sh 脚本
246
+ if [[ -n "$backup_dir" && -f "$basepath/after.sh" ]]; then
247
+ source "$basepath/after.sh"
248
+ execute $backup_dir $INSTALL_PATH/assets $INSTALL_PATH
249
+ fi
250
+
244
251
  # 修改/etc/nginx 用户(组)
245
- chown -R $user:$usergroup "$nginx_binary_install_path"
246
- chmod 744 -R "$nginx_binary_install_path"
252
+ chown -R $user:$usergroup "$INSTALL_PATH"
253
+ chmod 744 -R "$INSTALL_PATH"
247
254
 
248
255
  # 修改所属用户
249
- chown -R $user:$usergroup "$install_path"
250
- chmod 744 -R "$install_path"
256
+ chown -R $user:$usergroup "$INSTALL_PATH"
257
+ chmod 744 -R "$INSTALL_PATH"
251
258
 
252
259
  if [[ $? == 0 ]]; then
253
260
  log_success "posidon-frontend deployed successfully"
@@ -1,15 +1,15 @@
1
1
  #!/bin/sh
2
2
 
3
- app_name=__APP_NAME__
3
+ APP_NAME=__APP_NAME__
4
4
  backup_dir=__DOCKER_BACKUP_DIR__
5
- install_path=__DOCKER_INSTALL_DIR__
5
+ INSTALL_PATH=__DOCKER_INSTALL_DIR__
6
6
 
7
7
  # 备份文件
8
8
  backup() {
9
- echo "---------- $install_path directory isExist,start backup"
9
+ echo "---------- $INSTALL_PATH directory isExist,start backup"
10
10
  filename=$(date +%Y%m%d)_$(date +%H%M%S)
11
11
  mkdir -p "${backup_dir}"-$filename
12
- mv "${install_path}"* "${backup_dir}"-$filename
12
+ mv "${INSTALL_PATH}"* "${backup_dir}"-$filename
13
13
  if [ $? -eq 0 ]; then
14
14
  echo "backup success"
15
15
  else
@@ -18,8 +18,8 @@ backup() {
18
18
  }
19
19
  # 复制文件
20
20
  copyFile() {
21
- echo "---------- cp ${app_name} to $install_path"
22
- cp -r ./../pkg/assets/* $install_path
21
+ echo "---------- cp ${APP_NAME} to $INSTALL_PATH"
22
+ cp -r ./../pkg/assets/* $INSTALL_PATH
23
23
  if [ $? -eq 0 ]; then
24
24
  echo "cp success"
25
25
  else
@@ -29,9 +29,9 @@ copyFile() {
29
29
 
30
30
  # 安装
31
31
  install() {
32
- mkdir -p $install_path
33
- if [ -z "$(ls -A $install_path)" ]; then
34
- echo "---------- $install_path directory isEmpty"
32
+ mkdir -p $INSTALL_PATH
33
+ if [ -z "$(ls -A $INSTALL_PATH)" ]; then
34
+ echo "---------- $INSTALL_PATH directory isEmpty"
35
35
  else
36
36
  backup
37
37
  fi
@@ -40,13 +40,13 @@ install() {
40
40
  }
41
41
  # 展示版本信息
42
42
  showVersion() {
43
- if [ -f "${install_path}version" ]; then
44
- echo "---------- old ${app_name} Version"
45
- cat "${install_path}"version
43
+ if [ -f "${INSTALL_PATH}version" ]; then
44
+ echo "---------- old ${APP_NAME} Version"
45
+ cat "${INSTALL_PATH}"version
46
46
  echo ""
47
47
  fi
48
48
 
49
- echo "---------- will install ${app_name} Version"
49
+ echo "---------- will install ${APP_NAME} Version"
50
50
  cat ./../pkg/version
51
51
  echo ""
52
52
  }
@@ -0,0 +1,159 @@
1
+ #!/bin/bash
2
+ # 自签名SSL证书生成脚本
3
+
4
+ set -e
5
+
6
+ # 颜色定义
7
+ RED='\033[0;31m'
8
+ GREEN='\033[0;32m'
9
+ YELLOW='\033[1;33m'
10
+ NC='\033[0m' # No Color
11
+
12
+ TARGET_DIR='.';
13
+
14
+ # 默认值
15
+ DOMAIN="${1:-example.com}"
16
+ DAYS="${2:-3650}"
17
+ KEY_SIZE="${3:-2048}"
18
+ ALT_DOMAINS="${4:-www.${DOMAIN}}"
19
+
20
+ # 函数:打印带颜色的消息
21
+ log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
22
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
23
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
24
+
25
+ # 检查参数
26
+ if [ $# -lt 1 ]; then
27
+ echo "用法: $0 <域名> [有效期天数] [密钥长度] [备用域名,逗号分隔]"
28
+ echo "示例: $0 example.com 365 2048 \"www.example.com,api.example.com\""
29
+ exit 1
30
+ fi
31
+
32
+ # 创建目录
33
+ log_info "创建目录结构..."
34
+ sudo mkdir -p "$TARGET_DIR"/{private,certs,ca}/"${DOMAIN}"
35
+ sudo chmod 700 "$TARGET_DIR"/private/"${DOMAIN}"
36
+ sudo chmod 755 "$TARGET_DIR"/certs/"${DOMAIN}" "$TARGET_DIR"/ca/"${DOMAIN}"
37
+
38
+ # 生成私钥
39
+ log_info "生成${KEY_SIZE}位RSA私钥..."
40
+ sudo openssl genrsa -out "$TARGET_DIR"/private/"${DOMAIN}"/"${DOMAIN}".key "${KEY_SIZE}"
41
+ sudo chmod 600 "$TARGET_DIR"/private/"${DOMAIN}"/"${DOMAIN}".key
42
+
43
+ # 创建CSR配置文件
44
+ log_info "创建CSR配置文件..."
45
+ sudo tee /tmp/"${DOMAIN}".csr.cnf > /dev/null << CSR_EOF
46
+ [req]
47
+ default_bits = ${KEY_SIZE}
48
+ prompt = no
49
+ default_md = sha256
50
+ distinguished_name = dn
51
+ req_extensions = req_ext
52
+
53
+ [dn]
54
+ C = CN
55
+ ST = Beijing
56
+ L = Beijing
57
+ O = ${DOMAIN} Corporation
58
+ OU = IT Department
59
+ CN = ${DOMAIN}
60
+ emailAddress = admin@${DOMAIN}
61
+
62
+ [req_ext]
63
+ subjectAltName = @alt_names
64
+
65
+ [alt_names]
66
+ DNS.1 = ${DOMAIN}
67
+ CSR_EOF
68
+
69
+ # 添加备用域名
70
+ IFS=',' read -ra ADDR <<< "${ALT_DOMAINS}"
71
+ i=2
72
+ for alt in "${ADDR[@]}"; do
73
+ echo "DNS.${i} = ${alt}" | sudo tee -a /tmp/"${DOMAIN}".csr.cnf > /dev/null
74
+ ((i++))
75
+ done
76
+
77
+ # 添加本地域名和IP
78
+ cat << LOCAL_EOF | sudo tee -a /tmp/"${DOMAIN}".csr.cnf > /dev/null
79
+ DNS.$i = localhost
80
+ DNS.$((i+1)) = localhost.localdomain
81
+ DNS.$((i+2)) = *.${DOMAIN}
82
+ IP.1 = 127.0.0.1
83
+ IP.2 = ::1
84
+ LOCAL_EOF
85
+
86
+ # 生成CSR
87
+ log_info "生成证书签名请求..."
88
+ sudo openssl req -new -sha256 \
89
+ -key "$TARGET_DIR"/private/"${DOMAIN}"/"${DOMAIN}".key \
90
+ -out "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".csr \
91
+ -config /tmp/"${DOMAIN}".csr.cnf
92
+
93
+ # 创建证书扩展文件
94
+ log_info "创建证书扩展文件..."
95
+ sudo tee /tmp/"${DOMAIN}".ext.cnf > /dev/null << EXT_EOF
96
+ authorityKeyIdentifier = keyid,issuer:always
97
+ basicConstraints = CA:FALSE
98
+ keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
99
+ extendedKeyUsage = serverAuth, clientAuth
100
+ subjectAltName = @alt_names
101
+ subjectKeyIdentifier = hash
102
+ nsComment = "Generated by SSL Certificate Script"
103
+ EXT_EOF
104
+
105
+ # 复制SAN信息
106
+ grep -A 20 "\[alt_names\]" /tmp/"${DOMAIN}".csr.cnf | sudo tee -a /tmp/"${DOMAIN}".ext.cnf > /dev/null
107
+
108
+ # 生成自签名证书
109
+ log_info "生成自签名证书(有效期${DAYS}天)..."
110
+ sudo openssl x509 -req -sha256 -days "${DAYS}" \
111
+ -in "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".csr \
112
+ -signkey "$TARGET_DIR"/private/"${DOMAIN}"/"${DOMAIN}".key \
113
+ -out "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".crt \
114
+ -extfile /tmp/"${DOMAIN}".ext.cnf
115
+
116
+ # 设置权限
117
+ sudo chmod 644 "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".crt
118
+
119
+ # 创建证书链文件
120
+ log_info "创建证书链文件..."
121
+ sudo cat "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".crt > \
122
+ "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}"-chain.crt
123
+ sudo chmod 644 "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}"-chain.crt
124
+
125
+ # 验证证书
126
+ log_info "验证生成的证书..."
127
+ sudo openssl x509 -in "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".crt \
128
+ -text -noout | grep -E "Subject:|Not After|Subject Alternative Name"
129
+
130
+ # 生成摘要
131
+ log_info "生成密钥摘要..."
132
+ KEY_MD5=$(sudo openssl rsa -noout -modulus -in "$TARGET_DIR"/private/"${DOMAIN}"/"${DOMAIN}".key | openssl md5 | awk '{print $2}')
133
+ CERT_MD5=$(sudo openssl x509 -noout -modulus -in "$TARGET_DIR"/certs/"${DOMAIN}"/"${DOMAIN}".crt | openssl md5 | awk '{print $2}')
134
+
135
+ if [ "$KEY_MD5" = "$CERT_MD5" ]; then
136
+ log_info "✓ 私钥和证书匹配"
137
+ else
138
+ log_error "✗ 私钥和证书不匹配"
139
+ fi
140
+
141
+ # 输出信息
142
+ echo -e "\n${GREEN}证书生成完成!${NC}"
143
+ echo "=========================================="
144
+ echo "域名: ${DOMAIN}"
145
+ echo "备用域名: ${ALT_DOMAINS}"
146
+ echo "有效期: ${DAYS} 天"
147
+ echo "密钥长度: ${KEY_SIZE} 位"
148
+ echo ""
149
+ echo "文件位置:"
150
+ echo "私钥: $TARGET_DIR/private/${DOMAIN}/${DOMAIN}.key"
151
+ echo "证书: $TARGET_DIR/certs/${DOMAIN}/${DOMAIN}.crt"
152
+ echo "证书链: $TARGET_DIR/certs/${DOMAIN}/${DOMAIN}-chain.crt"
153
+ echo "CSR: $TARGET_DIR/certs/${DOMAIN}/${DOMAIN}.csr"
154
+ echo "=========================================="
155
+
156
+ # 清理临时文件
157
+ rm -f /tmp/"${DOMAIN}".csr.cnf /tmp/"${DOMAIN}".ext.cnf
158
+
159
+ log_info "完成!"