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