Here is the full configuration of the app, you might need it :
module.exports = {
apps : [{
name : "shopify-client-app-prp",
cwd : "/srv/shopify-app-prp",
script : "npm run start",
env : {
"BASE_URL" : "https://appify-prp.powerling-tp.com/api",
"SHOPIFY_API_KEY" : "",
"SHOPIFY_API_SECRET" : "",
"SCOPES" : "read_products,read_locales,write_products,write_translations,write_locales,read_translations",
"PORT" : 8010,
"SHOPIFY_APP_URL" : "https://appify-connect-prp.powerling-tp.com"
}
}]
}
The BASE_URL env variable is for an other user in the app, it has nothing to do with the shopify config.
All the app is in the /srv/shopify-app-prp directory, and I run rpm run build before starting the app with pm2.
Here is the shopify.server.js. The ‘authenticate’ variable used to generate the session is exported in the file
import "@shopify/shopify-app-remix/adapters/node";
import '@shopify/shopify-api/adapters/node';
import {
AppDistribution,
DeliveryMethod,
shopifyApp,
LATEST_API_VERSION,
} from "@shopify/shopify-app-remix";
import { PrismaSessionStorage } from "@shopify/shopify-app-session-storage-prisma";
import { restResources } from "@shopify/shopify-api/rest/admin/2023-07";
import {shopifyApi, LATEST_API_VERSION as API_VERSION} from '@shopify/shopify-api';
import prisma from "./db.server";
export const apiShopify = shopifyApi({
apiKey: process.env.SHOPIFY_API_KEY,
apiSecretKey: process.env.SHOPIFY_API_SECRET || "",
scopes: process.env.SCOPES?.split(","),
apiVersion: API_VERSION,
hostName: process.env.HOST_NAME?.replace(/https?:\/\//, "") || "myshopify.com",
isEmbeddedApp: true,
})
const shopifyApplication = shopifyApp({
apiKey: process.env.SHOPIFY_API_KEY,
apiSecretKey: process.env.SHOPIFY_API_SECRET || "",
apiVersion: LATEST_API_VERSION,
scopes: process.env.SCOPES?.split(","),
appUrl: process.env.SHOPIFY_APP_URL || "",
authPathPrefix: "/auth",
sessionStorage: new PrismaSessionStorage(prisma),
distribution: AppDistribution.AppStore,
restResources,
webhooks: {
APP_UNINSTALLED: {
deliveryMethod: DeliveryMethod.Http,
callbackUrl: "/webhooks",
},
},
hooks: {
afterAuth: async ({ session }) => {
shopifyApplication.registerWebhooks({ session });
},
},
...(process.env.SHOP_CUSTOM_DOMAIN
? { customShopDomains: [process.env.SHOP_CUSTOM_DOMAIN] }
: {}),
});
export default shopifyApplication;
export const apiVersion = "2023-07";
export const addDocumentResponseHeaders = shopifyApplication.addDocumentResponseHeaders;
export const authenticate = shopifyApplication.authenticate;
export const login = shopifyApplication.login;
export const registerWebhooks = shopifyApplication.registerWebhooks;
export const sessionStorage = shopifyApplication.sessionStorage;