diff --git a/_reference/dropletSetup.md b/_reference/dropletSetup.md index 345313552..3defa2be8 100644 --- a/_reference/dropletSetup.md +++ b/_reference/dropletSetup.md @@ -5,22 +5,21 @@ ssh-keygen -t rsa -C "your_email@example.com" Copy the new key to clipboard: * Windows: clip < id_rsa.pub * Linux: sudo apt-get install xclip -xclip -sel clip < ~/.ssh/id_rsa.pub + xclip -sel clip < ~/.ssh/id_rsa.pub * Mac: pbcopy < ~/.ssh/id_rsa.pub * Manual Copy: cat ~/.ssh/id_rsa.pub Add the SSH key to the drop creation screen. - 1. Create a new user to replace root user - 1. # adduser bob - 2. # usermod -aG sudo bob - 3. # su - bob + 1. # adduser imex + 2. # usermod -aG sudo imex + 3. # su - imex 4. $ mkdir ~/.ssh 5. $ chmod 700 ~/.ssh 6. $ nano ~/.ssh/authorized_keys 7. Add the copied SSH key and save. - 8. $ chmod 600 ~/.ssh/authorized_keys #Restrict access to authroized keys. + 8. $ chmod 600 ~/.ssh/authorized_keys #Restrict access to authorized keys. 2. Setup the Firewall 1. $ sudo ufw allow OpenSSH. 2. $ sudo ufw enable @@ -43,20 +42,20 @@ Add the SSH key to the drop creation screen. 8. Setup PM2 1. $ npm install pm2 -g 2. copy the environment variables to the local .env file. - 3. $ pm2 start server.js + 3. $ pm2 start ecosystem.config.js 4. $ pm2 startup ubuntu //Ensure it starts when server does. 9. Alter Nginx config - 1. sudo nano /etc/nginx/sites-available/default - 2. Add Appropriate server names to the file. www. and non-www. - 3. Add the following inside the location block: - proxy_pass http://localhost:{{YOUR-APP-PORT-IN-YOUR-CODE}}; + 1. sudo nano /etc/nginx/sites-available/default + 2. //Add Appropriate server names to the file. www. and non-www. + 3. Add the following inside the location of the server block: + proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; 9. Install Certbot - 1. $ sudo add-apt-repository ppa:certbot/certbot + 1. $ sudo add-apt-repository ppa:certbot/certbot //Potential issue on ubuntu 20.04 2. $ sudo apt-get update 3. $ sudo apt install python-certbot-nginx 4. $ sudo nano /etc/nginx/sites-available/default @@ -70,3 +69,8 @@ Add the SSH key to the drop creation screen. 1. $ sudo certbot --nginx -d example.com -d www.example.com //Follow prompts. 2. $ sudo certbot renew --dry-run //Dry run to test auto renewal. + +ADding Yarn +curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - + echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list + sudo apt-get update && sudo apt-get install yarn \ No newline at end of file diff --git a/bodyshop-dev-firebase-adminsdk.json b/bodyshop-dev-firebase-adminsdk.json deleted file mode 100644 index 55e3ba5ce..000000000 --- a/bodyshop-dev-firebase-adminsdk.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "bodyshop-dev-b1cb6", - "private_key_id": "68cbb23486745271eb9ebd19b544f4f0ffff208f", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCkw6wLHLibOjc2\npCoHqZ2pc1AbrecocNWVnVF8W7j8Zkc/oacwNVD/EMZ7dDjlT9vcmf71Yw2mDWOO\njQaXSlOASkDYE0jDYyMyYflonaGyGmAemyirRqXV78g9hliAMcS+HL6wL7HpZ8Y3\nGVp9pYn792aJnCrXJOZvRFqx+eOBztLADBmBpMH4u9FFM6ZdLuWjmgKJwx5u/jYx\nFIxJuEA1Zo1ZPT9D5amgYzmI4Tjvj8b5WzlsFA7HEkAV96f3AY4cnIWqlz6Vm2qR\nXvroDueqzM6QbzqXI5iHKkcJfH1DQpjUyLX82+5nnTEoaYSqzy7ja2ILpBrY+Noh\nAWLsxq7bAgMBAAECggEAKlaPmIFmXJj+hB92H2bx+Q+FF7+9pRItiBcXT83gAJel\nmk/HPueMayab4jBQyHgXZp35uoOcB73sBb7uYST7xP0PoZZ+/Zo1eqZbaQsMeFA3\nv9WeAzkRtyI5AbpKdpKTXEjVpT90R6ZfdFwi+SN3DBScOCM1jPhR8GiPp6kvUXTy\n4DsYkcvTYBvzyKHqq4S1EhAaQT8ISznqEUywIS2ZyZiD7hY+kWgmQZVwIG8HlqXl\nXJZmMsBHD14f9h/vSxr9qp1Kwo/smh05DWzf7xXLOd/ZWb+N+VJPgdDJd/iEe6Xt\nm5GihwduIEsXoQu/8dEYc9mhwQnjpwmjO4B3AJTj1QKBgQDXGuN5/WuoMyUQzmEn\nrRS2oq4FsWD655s/cHWPMq9tW/7TxAEUxAyKNdP8kHvYSUg4XuKBGVIWbhsIlnwC\nG4ElHKktESRy2nQx8In+HQyDGhVbXjg2FqvvylF7eQJi4JLHroGA4zjmVsyHkd+F\nVozMG/VZwDEYppClVtP8HItltwKBgQDEFrbEbWB6N+n7O043Aab+R2Kw4sq/N9l0\nZ4ONFIPfTchp0cO4+vQp4vHHQoQRpRgTPnAia2Ra19WMVV50agLH/+nHWBwbaKw9\nK9XLmBiiqxMkRr70AphYSDeEyFHXvWUqmEr9ufO0B1ddGY/rIgxe+selu8ko7moG\nuizBZ94f/QKBgHQbiHP9jZHh4Xz72UdgTpDyqLpb73wfbhZFLr+X3UdLY/aMkwTR\nee9UdNOcbazmiXwcA2kp8Lw4vJDbIZ7Fl+UfXlX8Lc9tCVE3hFTM+0b82lBSQEc5\n3570dx0NyXLzw2bTVAXtIHZ8nbQD0kIX4LH/2WSTsCydI/CLOKuaAMhrAoGAUWFX\n4ve95ZtVCUZYtK2D395CkETffjKwlgXr695KyJ9ggMJk512HfebJDziE1UneTwZH\nxZEqaiVPZFl9xPTGSLjmDix8JcfwS8boiQGLn98+J30Q/PYiweje2cXFabMZzG6+\nGMVW5i1xzZqxRxWvaq/LsfXYi5s+96HGt1HjNwUCgYAkzxJFrSs6Jksw5Zj1G2AP\nTCNJv3jne9V66tNXpSjyTtFX0LDHcDKTafyS80Noz4SsxF9mAqTrueWfsOsDO8ul\nqdlM0Gj6K7V76Ldf59fYGzhaqq4RJADaWjxZ5DP97xTx5mMtVl5TBpAYFvxW9E9h\n4mMvZOe/P8k5MPlPoXrt1Q==\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-8mboc@bodyshop-dev-b1cb6.iam.gserviceaccount.com", - "client_id": "106919386910689150709", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-8mboc%40bodyshop-dev-b1cb6.iam.gserviceaccount.com" -} diff --git a/ecosystem.config.js b/ecosystem.config.js index f82d6bc4f..672cc8b67 100644 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -3,6 +3,7 @@ module.exports = { { name: "ImEX Online API", script: "./server.js", + watch: true, env: { NODE_ENV: "production", }, diff --git a/sendemail.js b/sendemail.js index 4ae843181..7c94cb589 100644 --- a/sendemail.js +++ b/sendemail.js @@ -1,5 +1,7 @@ var nodemailer = require("nodemailer"); -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || 'development'}`) }); + var transporter = nodemailer.createTransport({ host: process.env.email_server, diff --git a/server.js b/server.js index 14a0dfb45..1b93a0c79 100644 --- a/server.js +++ b/server.js @@ -5,7 +5,8 @@ const path = require("path"); const compression = require("compression"); const twilio = require("twilio"); //var enforce = require("express-sslify"); -if (process.env.NODE_ENV !== "production") require("dotenv").config(); + +require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || 'development'}`) }); const https = require("https"); const fs = require("fs"); diff --git a/server/firebase/firebase-handler.js b/server/firebase/firebase-handler.js index 42fd0796c..3d26d0090 100644 --- a/server/firebase/firebase-handler.js +++ b/server/firebase/firebase-handler.js @@ -1,7 +1,10 @@ var admin = require("firebase-admin"); +const path = require("path"); +require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || 'development'}`) }); console.log( "Found Firebase AdminSDK JSON", + process.env.NODE_ENV, !!process.env.FIREBASE_ADMINSDK_JSON ); diff --git a/server/graphql-client/graphql-client.js b/server/graphql-client/graphql-client.js index 2307187e7..90b3ceb78 100644 --- a/server/graphql-client/graphql-client.js +++ b/server/graphql-client/graphql-client.js @@ -1,5 +1,6 @@ const GraphQLClient = require("graphql-request").GraphQLClient; -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || 'development'}`) }); //TODO May need to use a different client that includes caching of resources. exports.client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, { diff --git a/server/media/media.js b/server/media/media.js index 7fa9ae259..824a9d364 100644 --- a/server/media/media.js +++ b/server/media/media.js @@ -1,4 +1,10 @@ -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); var cloudinary = require("cloudinary").v2; cloudinary.config(process.env.CLOUDINARY_URL); diff --git a/server/render/renderHandlebars.js b/server/render/renderHandlebars.js index db1a381c5..fbe6c52e9 100644 --- a/server/render/renderHandlebars.js +++ b/server/render/renderHandlebars.js @@ -1,4 +1,11 @@ -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); + const Handlebars = require("handlebars"); exports.render = (req, res) => { diff --git a/server/sms/receive.js b/server/sms/receive.js index b26300ca4..1bcb5ff7c 100644 --- a/server/sms/receive.js +++ b/server/sms/receive.js @@ -1,4 +1,11 @@ -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); + const client = require("../graphql-client/graphql-client").client; const queries = require("../graphql-client/queries"); const phone = require("phone"); diff --git a/server/sms/send.js b/server/sms/send.js index 51d418980..cc3841864 100644 --- a/server/sms/send.js +++ b/server/sms/send.js @@ -1,4 +1,11 @@ -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); + const twilio = require("twilio"); const phone = require("phone"); const queries = require("../graphql-client/queries"); @@ -17,27 +24,27 @@ exports.send = (req, res) => { .create({ body: body, messagingServiceSid: messagingServiceSid, - to: phone(to)[0] + to: phone(to)[0], }) - .then(message => { + .then((message) => { let newMessage = { msid: message.sid, text: body, conversationid, - isoutbound: true + isoutbound: true, }; gqlClient .request(queries.INSERT_MESSAGE, { msg: newMessage }) - .then(r2 => { + .then((r2) => { console.log("Responding GQL Message ID", JSON.stringify(r2)); res.sendStatus(200); }) - .catch(e2 => { + .catch((e2) => { console.log("e2", e2); //res.json({ success: false, message: e2 }); }); }) - .catch(e1 => { + .catch((e1) => { //res.json({ success: false, message: error }); console.log("e1", e1); }); diff --git a/server/sms/status.js b/server/sms/status.js index 8522f5e2d..3822c6d93 100644 --- a/server/sms/status.js +++ b/server/sms/status.js @@ -1,4 +1,11 @@ -require("dotenv").config(); +const path = require("path"); +require("dotenv").config({ + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), +}); + const client = require("../graphql-client/graphql-client").client; const queries = require("../graphql-client/queries"); const phone = require("phone"); @@ -8,12 +15,12 @@ exports.status = (req, res) => { client .request(queries.UPDATE_MESSAGE_STATUS, { msid: SmsSid, - fields: { status: SmsStatus } + fields: { status: SmsStatus }, }) - .then(response => { + .then((response) => { console.log("Message Updated"); }) - .catch(error => { + .catch((error) => { console.log("Error updating message status", error); }); res.sendStatus(200);