Deploy Shopify Private App

via Freelancer ·

Budget / Salary£20–250
TypeFreelance project
LocationRemote
Posted1 hour ago
Job Brief — Deploy the Invoice Printer app
has had a custom Shopify app built that automatically generates PDF invoices when an order is paid, stores them for future reference, and prints them to two shop printers via PrintNode. The codebase is complete and has been supplied. This brief covers everything needed to take it from code to a live, working app on our own server and our own Shopify account.
Estimated effort: 4–8 hours for someone comfortable with Linux/Docker and Shopify app basics, assuming server and account access is provided up front. Charged as a fixed-scope job or hourly, as agreed.
What the app does
• Watches for orders being marked “paid” on the connected Shopify store.
• Generates a branded PDF invoice for that order: company name/address/logo, invoice number, itemised lines with SKU, VAT broken out by rate, any discount code applied, and a footer note.
• Stores every invoice permanently in the app so it can be found, downloaded, or re-printed later.
• Sends the invoice automatically to two printers via a PrintNode connection, configured per store.
• Writes a secure, unguessable download link onto the order so it can be shown in Shopify's own order confirmation email.
• Lets us edit our company details, logo, invoice number format, and PrintNode printers from inside the app — no code changes needed for day-to-day use.
What we'll provide the developer
• The app codebase (a zip file).
• SSH access to our VPS — Fasthosts VPS 4 Max, Ubuntu 26.04.
• Access to our Shopify Partners account (as a staff/collaborator, or we can create the app ourselves and hand over the Client ID/secret).
• A subdomain we control (e.g. invoices.hillsidecommerce.co.uk) and access to point its DNS at the VPS.
• A PrintNode account and API key for testing the print flow (or confirmation to test with a placeholder printer until ours is connected).
Scope of work
1. Create the app in Shopify Partners
• Create the app manually in Partners (not from a template).
• Set distribution to Custom distribution and select our store(s) — this app is not going on the public Shopify App Store.
• Note the Client ID and Client secret.
• Set the App URL and redirect URLs to our chosen subdomain (exact values are in the project's shopify.app.toml / README).
2. Prepare the VPS
• Install Docker and Docker Compose on the VPS.
• Open firewall ports 80 and 443.
• Point our subdomain's DNS A record at the VPS's IP address.
3. Deploy the app
• Copy the project files to the VPS (git clone or rsync).
• Copy .env.example to .env and fill in: Shopify Client ID/secret, the app URL, a database password, and a generated encryption key.
openssl rand -hex 32 # generates the ENCRYPTION_KEY value
• Run the stack:
docker compose up -d --build
• Confirm both containers (the app and its Postgres database) are healthy via docker compose logs -f app.
4. Put HTTPS in front of it
• Install nginx and certbot on the VPS.
• Use the nginx config template included in the project (deploy/nginx-invoice-app.conf) as the site config.
• Run certbot for our subdomain to issue a free TLS certificate (Shopify requires the app to be served over HTTPS).
5. Push the app's configuration to Shopify
• From a machine with Node.js and the Shopify CLI installed, run:
npm install -g @shopify/cli@latest
shopify app config link # links to the app created in step 1
shopify app deploy # pushes scopes, webhooks, and URLs
• This registers the app's webhooks (order paid, uninstall, GDPR topics) and the permission scopes it needs, including write_orders (used to attach the invoice link to the order for the confirmation email).
6. Install the app on our store
• Use the install link from Partners (or the link shown under Distribution) to install the app on our store.
• Accept the requested permissions when prompted.
7. One-time email template edit
• In our Shopify admin, go to Settings → Notifications → Order confirmation → Edit code.
• Paste in the Liquid snippet provided in the project's README (section “Showing the invoice link in the order confirmation email”) so a “Download your invoice” link appears in every confirmation email from then on.
8. Configure the store's details inside the app
• Open the app from the Shopify admin and fill in: Company details (name, address, VAT number, company number, logo, footer note).
• Choose the invoice numbering format (defaults to matching the Shopify order number).
• Connect PrintNode: paste the API key, fetch the printer list, and select our two printers.
9. Test end-to-end and sign off
• Place a test order and mark it paid (or use a real low-value order).
• Confirm an invoice appears in the app's Invoices list with the correct VAT breakdown, SKU, and any discount code applied.
• Confirm it printed automatically to both configured printers.
• Confirm the Print and Download buttons on the Invoices list both work.
• Confirm the “Download your invoice” link appears in the order confirmation email the customer receives, and that it opens the correct PDF.
• Restart the VPS (or just the Docker containers) and confirm the app comes back up and previously generated invoices are still there.
10. Handover
• Confirm where the .env file lives on the server and how to edit it.
• Make sure we have a secure backup of the ENCRYPTION_KEY value — losing it means every store's saved PrintNode key would need to be re-entered.
• A short written note (a few lines is fine) on how to redeploy after a code update, how to view logs, and how to restart the app if it ever needs it.

Reference: the supplied project includes a full README.md covering every command above in more detail, plus the exact Liquid snippet for step 7. The developer should treat that file as the primary source of truth for exact commands and file paths.
linux debugging shopify vps docker web development api shopify development api integration ssl
Apply on Freelancer →

Project sourced from Freelancer.com. Applications happen directly on the original platform — we never collect your data.