Atulizações de pacotes e instalação de libs que serão utilizadas pela vps.
sudo apt update && sudo apt upgrade -y
sudo apt-get install -y libgbm-dev wget unzip fontconfig locales gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils git
sudo apt-get install build-essential
fail2ban serve para evitar acessos a vps por força bruta, quando um ip tenta acessar a vps e erra a senha varias vezes esse pacote joga o ip para uma black list
sudo apt install fail2ban -y && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Ative o firewall da vps para entrada e saida de informações controladas.
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Ao usar o Node 20 é necessario ajustar o script do packege.json do frontend, ajuste o script start para:
"start": "react-scripts --openssl-legacy-provider start",
"build": "react-scripts --openssl-legacy-provider build",
sudo apt install redis
sudo systemctl enable redis-server
sudo systemctl start redis-server
sudo apt-get install postgresql postgresql-contrib -y
sudo systemctl start postgresql.service
sudo passwd postgres
crie-uma-senha
sudo su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'minha-senha'"
createdb nome-do-banco-de-dados;
exit
sudo apt install nginx -y
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/backend
substitua meubackend.com.br pelo dominio do seu backend
server {
server_name meubackend.com.br;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
sudo nano /etc/nginx/sites-available/frontend
substitua meufrontend.com.br pelo dominio do seu frontend
server {
server_name meufrontend.com.br;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
sudo ln -s /etc/nginx/sites-available/backend /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/frontend /etc/nginx/sites-enabled
sudo nano /etc/nginx/nginx.conf
client_max_body_size 20M; // pode alterar para mais MB se desejar
sudo nginx -t
sudo service nginx restart
sudo apt install snapd -y
sudo snap install --classic certbot
sudo apt update
sudo npm install -g pm2
sudo pm2 startup ubuntu -u 'root' // se etiver logado via ssh com outro usuario substirua root pelo usuario logado
Envie os arquivos do seu projeto via SFTP ou via git clone, em seguida navegue ate a pasta de destino do backend e rode o seguinte comando
npm install
sudo nano .env
NODE_ENV=
BACKEND_URL=http://localhost
FRONTEND_URL=http://localhost:3000
PROXY_PORT=443
PORT=8080
DB_DIALECT=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=user
DB_PASS=senha
DB_NAME=db_name
JWT_SECRET=kZaOTd+YZpjRUyyuQUpigJaEMk4vcW4YOymKPZX0Ts8=
JWT_REFRESH_SECRET=dBSXqFg9TaNUEDXVp6fhMTRLBysP+j2DSqf7+raxD3A=
REDIS_URI=redis://:[email protected]:6379
REDIS_OPT_LIMITER_MAX=1
REDIS_OPT_LIMITER_DURATION=3000
USER_LIMIT=10000
CONNECTIONS_LIMIT=100000
CLOSED_SEND_BY_ME=true
GERENCIANET_SANDBOX=false
GERENCIANET_CLIENT_ID=Client_Id_Gerencianet
GERENCIANET_CLIENT_SECRET=Client_Secret_Gerencianet
GERENCIANET_PIX_CERT=certificado-Gerencianet
GERENCIANET_PIX_KEY=chave pix gerencianet
VERIFY_TOKEN=whaticket
FACEBOOK_APP_ID=
FACEBOOK_APP_SECRET=
npm run build
npx sequelize db:migrate
npx sequelize db:seed:all
pm2 start dist/server.js --name backend --max-memory-restart 400M
sudo pm2 save
cd ../frontend
npm install
sudo nano .env
REACT_APP_BACKEND_URL=
REACT_APP_HOURS_CLOSE_TICKETS_AUTO = 24
REACT_APP_FACEBOOK_APP_ID=
Realize o build do frontend
npm run build
pm2 start server.js --name frontend --max-memory-restart 400M
sudo pm2 save
sudo certbot --nginx