1
+ provider "alicloud" {
2
+ region = var. region_id
3
+ }
4
+ resource "random_id" "suffix" {
5
+ byte_length = 8
6
+ }
7
+
8
+ locals {
9
+ common_zones = tolist (setintersection (
10
+ data. alicloud_zones . ecs_zones . ids ,
11
+ data. alicloud_db_zones . rds_zones . ids
12
+ ))
13
+ common_name = random_id. suffix . id
14
+ ecs_command = << SHELL
15
+ #!/bin/bash
16
+ cat << INNER_EOF >> ~/.bash_profile
17
+ export DB_NAME=${ var . db_name }
18
+ export DB_USERNAME=${ var . db_user }
19
+ export DB_PASSWORD=${ var . db_password }
20
+ export DB_CONNECTION=${ alicloud_db_instance . rds_db_instance . connection_string }
21
+ export ROS_DEPLOY=true
22
+ INNER_EOF
23
+
24
+ source ~/.bash_profile
25
+
26
+ curl -fsSL https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/install-script/develop-your-wechat-mini-program-in-10-minutes/install.sh|bash
27
+
28
+ ## 调整db连接配置
29
+ sed -i 's/localhost/${ alicloud_db_instance . rds_db_instance . connection_string } /' /var/www/html/wp-config.php
30
+ sed -i 's/username_here/${ var . db_user } /' /var/www/html/wp-config.php
31
+ sed -i 's/password_here/${ var . db_password } /' /var/www/html/wp-config.php
32
+ sed -i 's/database_name_here/${ var . db_name } /' /var/www/html/wp-config.php
33
+
34
+ cd /var/www/html
35
+ sudo cat << INNER_EOF > .htaccess
36
+ # BEGIN WordPress
37
+ <IfModule mod_rewrite.c>
38
+ RewriteEngine On
39
+ RewriteCond \%\{HTTP:Authorization\} ^(.*)
40
+ RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
41
+ RewriteBase /
42
+ RewriteRule ^index\.php$ - [L]
43
+ RewriteCond \%\{REQUEST_FILENAME\} !-f
44
+ RewriteCond \%\{REQUEST_FILENAME\} !-d
45
+ RewriteRule . /index.php [L]
46
+ </IfModule>
47
+ # END WordPress
48
+ INNER_EOF
49
+ sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf
50
+
51
+ wget https://downloads.wordpress.org/plugin/jwt-authentication-for-wp-rest-api.zip
52
+ yum -y install unzip
53
+ unzip jwt-authentication-for-wp-rest-api.zip -d jwt-authentication-for-wp-rest-api
54
+ cp -r ./jwt-authentication-for-wp-rest-api/jwt-authentication-for-wp-rest-api /var/www/html/wp-content/plugins
55
+ rm -rf jwt-authentication-for-wp-rest-api.zip
56
+ rm -rf jwt-authentication-for-wp-rest-api
57
+ wget https://gitee.com/qin-yangming/open-tools/raw/master/wp-cli.phar
58
+ chmod +x wp-cli.phar
59
+ mv wp-cli.phar /usr/local/bin/wp
60
+
61
+ SECRET_KEY=$(openssl rand -base64 32) && sed -i "/Database settings/i define('JWT_AUTH_SECRET_KEY', '$SECRET_KEY');\ndefine('JWT_AUTH_CORS_ENABLE', true);\n" /var/www/html/wp-config.php
62
+ sed -i 's/\r$//' /var/www/html/wp-config.php
63
+ wp core install --url=${ alicloud_instance . ecs_instance . public_ip } --title="Hello World" --admin_user=${ var . word_press_user_name } --admin_password=${ var . word_press_password } --admin_email=${ var . word_press_user_email } --skip-email --allow-root
64
+
65
+ wp plugin activate jwt-authentication-for-wp-rest-api --allow-root --path=/var/www/html
66
+
67
+ systemctl restart httpd
68
+ SHELL
69
+ }
70
+
71
+ data "alicloud_db_zones" "rds_zones" {
72
+ engine = " MySQL"
73
+ engine_version = " 8.0"
74
+ instance_charge_type = " PostPaid"
75
+ category = " Basic"
76
+ db_instance_storage_type = " cloud_essd"
77
+ }
78
+
79
+ data "alicloud_zones" "ecs_zones" {
80
+ available_resource_creation = " Instance"
81
+ available_instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
82
+ }
83
+
84
+ data "alicloud_instance_types" "default" {
85
+ system_disk_category = " cloud_essd"
86
+ image_id = data. alicloud_images . default . images [0 ]. id
87
+ instance_type_family = " ecs.c6"
88
+ }
89
+
90
+ data "alicloud_images" "default" {
91
+ name_regex = " ^centos_7_9_x64_20G_alibase_*"
92
+ most_recent = true
93
+ owners = " system"
94
+ }
95
+
96
+ data "alicloud_db_instance_classes" "example" {
97
+ zone_id = local. common_zones [0 ]
98
+ engine = data. alicloud_db_zones . rds_zones . engine
99
+ engine_version = data. alicloud_db_zones . rds_zones . engine_version
100
+ category = data. alicloud_db_zones . rds_zones . category
101
+ db_instance_storage_type = data. alicloud_db_zones . rds_zones . db_instance_storage_type
102
+ instance_charge_type = data. alicloud_db_zones . rds_zones . instance_charge_type
103
+ }
104
+
105
+ resource "alicloud_vpc" "vpc" {
106
+ vpc_name = " vpc"
107
+ cidr_block = var. vpc_cidr_block
108
+ }
109
+
110
+ resource "alicloud_vswitch" "vswitch" {
111
+ vpc_id = alicloud_vpc. vpc . id
112
+ cidr_block = var. vswitch_cidr_block
113
+ zone_id = local. common_zones [0 ]
114
+ vswitch_name = " vsw"
115
+ }
116
+
117
+ # Security Group
118
+ resource "alicloud_security_group" "security_group" {
119
+ vpc_id = alicloud_vpc. vpc . id
120
+ security_group_name = " sg"
121
+ security_group_type = " normal"
122
+ }
123
+
124
+ resource "alicloud_security_group_rule" "http" {
125
+ type = " ingress"
126
+ ip_protocol = " tcp"
127
+ port_range = " 80/80"
128
+ cidr_ip = " 0.0.0.0/0"
129
+ security_group_id = alicloud_security_group. security_group . id
130
+ }
131
+
132
+ resource "alicloud_security_group_rule" "https" {
133
+ type = " ingress"
134
+ ip_protocol = " tcp"
135
+ port_range = " 22/22"
136
+ cidr_ip = " 0.0.0.0/0"
137
+ security_group_id = alicloud_security_group. security_group . id
138
+ }
139
+
140
+ # RDS Resources
141
+ resource "alicloud_db_instance" "rds_db_instance" {
142
+ engine = data. alicloud_db_instance_classes . example . engine
143
+ engine_version = data. alicloud_db_instance_classes . example . engine_version
144
+ instance_type = data. alicloud_db_instance_classes . example . instance_classes [0 ]. instance_class
145
+ instance_storage = data. alicloud_db_instance_classes . example . instance_classes [0 ]. storage_range . min
146
+ db_instance_storage_type = data. alicloud_db_instance_classes . example . db_instance_storage_type
147
+ vswitch_id = alicloud_vswitch. vswitch . id
148
+ zone_id = local. common_zones [0 ]
149
+ security_group_ids = [alicloud_security_group . security_group . id ]
150
+ }
151
+
152
+ resource "alicloud_db_database" "rds_database" {
153
+ instance_id = alicloud_db_instance. rds_db_instance . id
154
+ name = var. db_name
155
+ character_set = " utf8mb4"
156
+ }
157
+
158
+ resource "alicloud_db_account" "rds_account" {
159
+ db_instance_id = alicloud_db_instance. rds_db_instance . id
160
+ account_name = var. db_user
161
+ account_type = " Normal"
162
+ account_password = var. db_password
163
+ }
164
+
165
+ resource "alicloud_db_account_privilege" "rds_account_privilege" {
166
+ instance_id = alicloud_db_instance. rds_db_instance . id
167
+ account_name = alicloud_db_account. rds_account . account_name
168
+ db_names = [alicloud_db_database . rds_database . name ]
169
+ privilege = " ReadWrite"
170
+ }
171
+
172
+ # ECS Resources
173
+ resource "alicloud_instance" "ecs_instance" {
174
+ instance_name = " ecs-${ local . common_name } "
175
+ system_disk_category = data. alicloud_instance_types . default . system_disk_category
176
+ image_id = data. alicloud_images . default . images [0 ]. id
177
+ vswitch_id = alicloud_vswitch. vswitch . id
178
+ password = var. ecs_instance_password
179
+ instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
180
+ internet_max_bandwidth_out = 5
181
+ security_groups = [alicloud_security_group . security_group . id ]
182
+ }
183
+
184
+ resource "alicloud_ecs_command" "run_command" {
185
+ name = " commond_install"
186
+ description = " commond_install_description"
187
+ enable_parameter = false
188
+ type = " RunShellScript"
189
+ command_content = base64encode (local. ecs_command )
190
+ timeout = 3600
191
+ working_dir = " /root"
192
+ }
193
+
194
+ resource "alicloud_ecs_invocation" "run_command" {
195
+ instance_id = [alicloud_instance . ecs_instance . id ]
196
+ command_id = alicloud_ecs_command. run_command . id
197
+ timeouts {
198
+ create = " 10m"
199
+ }
200
+ }
0 commit comments