9 months ago
Hello everyone,
I've been trying desperately since yesterday to deploy a strapi that doesn't come from the official Railway template and to be able to communicate from a Next.js project (with the fetch function) also deployed on Railway on the private network.
I made the necessary changes in config/server.ts
to replicate the same thing as in the template:
export default ({ env }) => ({
host: env("HOST", "0.0.0.0"),
port: env.int("PORT", 1337),
app: {
keys: env.array("APP_KEYS"),
},
webhooks: {
populateRelations: env.bool("WEBHOOKS_POPULATE_RELATIONS", false),
},
url: env("URL"),
proxy: true,
});
In Strapi's env variables, I set this on Railway :
HOST
with ::
URL
with http://${{RAILWAY_PRIVATE_DOMAIN}}
The service starts up with the following log:
Welcome back!
To manage your project 🚀, go to the administration panel at:
http://strapi-portfolio.railway.internal/admin
To access the server ⚡️, go to:
http://strapi-portfolio.railway.internal
However Next.js at build time is unable to fetch
Strapi via the RAILWAY_PRIVATE_DOMAIN
… here's the error I get :
[cause]: Error: getaddrinfo ENOTFOUND strapi-portfolio.railway.internal
However, I've configured STRAPI_BASE_URL
in my Next.js project for :
http://strapi-portfolio.railway.internal/api
Would it be totally impossible to communicate via Railway's private network with Strapi, or am I missing something?
Thank you in advance.
ⓘ Deployment information is only viewable by project members and Railway employees.
12 Replies
9 months ago
Oh dear, so I have to make my Strapi address public?
Isn't there an alternative to use only the private network with Next.js in the build?
9 months ago
Using the New Builder solved the problem.
Don't forget to add ::
to HOST and remove URL
env variable if you plan to use only private networking.
9 months ago
Please know that we can not currently provide support when using the new builder, it's in an unmaintained Beta state right now.
We strongly recommend you not to use it, simply do not call a private domain during build, do it during runtime.
9 months ago
Thanks for your reply. But with NextJS we need to fetch at build time for static generation.
We don’t want to made our api public, how could we fix this without the new builder ? Do you have a workaround ?
The new builder is in beta, but do you think it will be out of beta soon?
9 months ago
I've configured my Strapi to be publicly accessible only via Cloudflare Tunnels (Zero-Trust) to get around this New Builder problem.
I created a Service Token
on Cloudflare Tunnels that I add to my Next.js fetch function to allow only calls from my Next.js application to Strapi and nothing else. I'm always in favor of privatizing an application and making it accessible only on a private network when there's no need for public use.
I think I've found a way to change environment variables dynamically at buildtime and runtime on Next.js.
For example, with the env variable NEXT_PHASE
, which is given to me natively by Next.js, the env lets me know which phase I'm in (buildtime or runtime), here's an example:
import {
PHASE_PRODUCTION_BUILD,
} from “next/constants”;
console.log(
"Building Next app now ?",
process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD,
);
Depending on the NEXT_PHASE
, I can then switch between the Public Strapi URL via Cloudflare Tunnel at buildtime, and the Private Strapi URL at runtime to avoid Network Egress fees with Railway.
Perhaps it would be interesting to document this usecase in the official Railway doc, as I think quite a few of us have this use case with Next.js building scenario ?
9 months ago
Personally I think this solution is far more complex than it needs to be, simply don't call strapi at build time, call it during runtime before starting the app.
9 months ago
Personally I think this solution is far more complex than it needs to be, simply don't call strapi at build time, call it during runtime before starting the app.
Yes, but I need to generate static pages at build time... so Next.js call strapi at build because my app pages have strapi calls
I can't remove the main feature of Next.js for just Railway 🥹
9 months ago
9 months ago
did you have a tutorial for that ?
9 months ago
It wouldn't be specific to the Railway platform so we don't have a tutorial.