-
Notifications
You must be signed in to change notification settings - Fork 7
/
AWS.txt
340 lines (250 loc) · 11.7 KB
/
AWS.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
####################################
Dicas para instalar o Node na AWS
Com MySQL ou MongoDB
Assista a Playlist no Youtube:
https://www.youtube.com/playlist?list=PLHxzZicfj0JtWFqeqbb7aMJMcyTsZWwjk
####################################
---------------------------------------------
1) SSH
---------------------------------------------
chmod 400 chave.pem
ssh -i livronode.pem ec2-user@18.231.184.20
Depois de entrar na máquina atualize os pacotes:
sudo yum update -y
---------------------------------------------
2) Instalar o Node NVM (Node Version Manager)
---------------------------------------------
Tutorial da AWS:
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html
https://github.com/creationix/nvm
// Download
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
// Precisa reiniciar o bash ou fazer logout/login no ssh
source ~/.bashrc
// Instala a versão 9 do node
nvm install 9
// Verifica o que está instalado.
nvm ls
// Verifica a versão do node
node --version
---------------------------------------------
3) Baixar o projeto node do github
---------------------------------------------
// Instala o git
sudo yum install -y git
// Cria a pasta carros para baixar o projeto do github
mkdir carros
cd carros
// Baixa os fontes do github
git clone https://github.com/livronode/1ed
// Entra na pasta do projeto
cd 1ed/cap16-extras/carros-mysql
// Atualmente estamos nesta pasta
/home/ec2-user/carros/1ed/cap16-extras/carros-mysql
// Baixar as dependências
npm install
// Executa o projeto
node app.js
// Neste momento o server node está no ar
http://54.233.178.179:3000
*** Para funcionar, no EC2 em Security Groups libere as portas 80 e 3000
// *** A API De carros não vai funcionar pois ainda vamos configurar o MySQL
http://54.233.178.179:3000/api/carros
// Para parar o servidor é Ctrl+C
// Se quiser mover para backgroud é Ctrl+Z e depois digite bg %1
---------------------------------------------
4) Instalar o servidor web Nginx
---------------------------------------------
// Instala o nginx
sudo yum install -y nginx
// Iniciar o nginx
sudo service nginx start
// Configura o nginx para iniciar automaticamente
sudo chkconfig nginx on
// Vamos editar o arquivo de configuração
// Para criar uma regra de proxy reverso
// Assim o nginx recebe os dados na porta 80 e redireciona ao node na porta 3000
cd /etc/nginx/
sudo vim nginx.conf
// No arquivo encontre a configuração do servidor em server { }
// Depois encontre a configuração location { } que está vazia
// E substitua por isso para criar a regra para redirecionar a porta 80 para 3000.
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000;
}
// Depois disso salve o arquivo
// Reiniciar o nginx
sudo service nginx restart
// Acesso o servidor na porta 80 e o node estará no ar
http://54.233.238.30/
http://54.233.238.30/api/carros
---------------------------------------------
5) MySQL
---------------------------------------------
// O node deve estar dando erro pois não conseguiu se conectar ao MySQL
// Error: connect ECONNREFUSED 127.0.0.1:3306
// Ao invés de instalar o servidor do MySQL na máquina vamos usar o RDS
https://sa-east-1.console.aws.amazon.com/rds/
*** Crie um servidor do RDS
tipo: Dev/Test, db.t2.micro
instance: livro
master user: livro
master password: livro123
database name: livro123
// Pare o node
killall node
// Volte para a raiz do usuario ec2-user (pois vamos baxiar alguns arquivos)
// Digite "cd + espaço
cd
// Instale apenas o client do MySQL para testar a conexão e importar o dump
sudo yum install -y mysql
// Baixe o dump do banco de dados
wget https://raw.githubusercontent.com/livronode/1ed/master/backup_carros.sql
*** No EC2 em Security Groups encontre o grupo de segurança que foi criado para o RDS
*** De permissão para o grupo do EC2 acessar o MySQL
// Altere o endereço (endpoint) do RDS e digite o seguinte comando
mysql -h livro.c6zmdwouvkyo.sa-east-1.rds.amazonaws.com -u livro -p livro < backup_carros.sql
Enter password: digite a senha.
// Entre no mysql e verifique se a tabela carro está preenchida no banco livro
mysql -h livro.c6zmdwouvkyo.sa-east-1.rds.amazonaws.com -u livro -p livro
select id,tipo,nome from carro;
+----+------------+------------------------------+
| id | tipo | nome |
+----+------------+------------------------------+
| 1 | classicos | Tucker 1948 |
| 2 | classicos | Chevrolet Corvette |
| 3 | classicos | Chevrolet Impala Coupe |
| 4 | classicos | Cadillac Deville Convertible |
| 5 | classicos | Chevrolet Bel-Air |
| 6 | classicos | Cadillac Eldorado |
| 7 | classicos | Ferrari 250 GTO |
| 8 | classicos | Dodge Challenger |
| 9 | classicos | Camaro SS 1969 |
| 10 | classicos | Ford Mustang 1976 |
| 11 | esportivos | Ferrari FF |
| 12 | esportivos | AUDI GT Spyder |
| 13 | esportivos | Porsche Panamera |
| 14 | esportivos | Lamborghini Aventador |
| 15 | esportivos | Chevrolet Corvette Z06 |
| 16 | esportivos | BMW M5 |
| 17 | esportivos | Renault Megane RS Trophy |
| 18 | esportivos | Maserati Grancabrio Sport |
| 19 | esportivos | McLAREN MP4-12C |
| 20 | esportivos | MERCEDES-BENZ C63 AMG |
| 21 | luxo | Bugatti Veyron |
| 22 | luxo | Ferrari Enzo |
| 23 | luxo | Lamborghini Reventon |
| 24 | luxo | Leblanc Mirabeau |
| 25 | luxo | Shelby Supercars Ultimate |
| 26 | luxo | Pagani Zonda |
| 27 | luxo | Koenigsegg CCX |
| 28 | luxo | Mercedes SLR McLaren |
| 29 | luxo | Rolls Royce Phantom |
| 30 | luxo | Lexus LFA |
+----+------------+------------------------------+
// Digite exit no prompt do MySQL para sair.
* Testando o servidor em Node com MySQL
// Entre na pasta do projeto com MySQL
cd /home/ec2-user/carros/1ed/cap16-extras/carros-mysql
// Edite o arquivo de config
vim config/default.json
// No lugar de localhost no servidor do MySQL, coloque o endpoint do RDS.
// Ao terminar, salve o arquivo e execute o node novamente.
node app.js
// Feito isso a API dos carros estará no ar
http://54.233.238.30/api/carros
-------------------------------------------------------------
6) Manter o node executando depois que reiniciar o servidor
-------------------------------------------------------------
// Encerre os processos node se existir
Ctrl + C
ou
killall node
// Instala o pm2 (https://www.npmjs.com/package/pm2)
npm install pm2 -g
// Inicie o node novamente, mas desta vez com o comando pm2 start"
pm2 start app.js
// Digite este comando
pm2 startup
*** O resultado do comando startup, copie e digite no terminal
// Salve as configurações
pm2 save
// Lista as configurações
pm2 list
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┼──────────┤
│ app │ 0 │ fork │ 2716 │ online │ 0 │ 3m │ 0% │ 40.5 MB │ ec2-user │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┴──────────┘
pm2 show 0
// Pode reiniciar o computador para testar
sudo shutdown -r now
// Ou pela Amazon fazendo restart da instância
// ** Cuidado se fizer Stop/Start a instância pode mudar de IP
// A não ser que tenha alocado um Elastic IP como é ensinado no livro de AWS
--
-----------------------------------------------------------
7) Desinstalar o server node pois vamos testar com mongo
-----------------------------------------------------------
pm2 list
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┼──────────┤
│ app │ 0 │ fork │ 2716 │ online │ 0 │ 3m │ 0% │ 40.5 MB │ ec2-user │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┴──────────┘
// Deleta o app 0
pm2 delete 0
---------------------------------------------
8) Instalar o MongoDB
---------------------------------------------
// Seguindo os docs da AWS
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/
// Cria um repositório do yum para MongoDB
sudo vim /etc/yum.repos.d/mongodb-org-3.6.repo
// Digite isso no arquivo e salve
[mongodb-org-3.4]
name=MongoDB 3.4 Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/
gpgcheck=0
enabled=1
// Instale o mongo
sudo yum install -y mongodb-org
// Iniciar o mongo e configurar para iniciar automaticamente
sudo service mongod start
sudo chkconfig mongod on
// Ver logs do mongo
sudo tail -f /var/log/mongodb/mongod.log
// Vamos entrar no client do mongo e adicionar 3 documentos
// Digite isso para conectar no mongo e selecionar o banco livro
mongo
use livro
// Adicione 3 documentos
db.carros.insert({"nome":"Carro 1","tipo":"esportivos"})
db.carros.insert({"nome":"Carro 2","tipo":"esportivos"})
db.carros.insert({"nome":"Carro 3","tipo":"esportivos"})
// Liste a coleção de carros
db.carros.find().pretty()
// Sair
exit
---------------------------------------------
9) Testando o servidor em Node com MongoDB
---------------------------------------------
// Pronto o mongo está no ar
// Vamos executar o projeto
// Entre na pasta do projeto com MongoDB
cd /home/ec2-user/carros/1ed/cap16-extras/carros-mongo
// As configs de conexão estão no arquivo config/default.json
// Mas não precisa alterar pois instalamos o mongo no localhost
// Instala as dependências do projeto
npm install
// Executa o server em node
node app.js
// Acesse o servidor (deve mostrar o json dos carros do mongodb)
http://54.233.178.179/api/carros
-----------------------------------------------------------
10) Configurar o server node para iniciar automaticamente
-----------------------------------------------------------
Repita o passo 8.
Ao invés de iniciar com o node utilize o pm2