2 months ago
Hi, I'm not a dev, but am fine with cli etc. I am using an AI agent to help me, and I'm not sure it fully understands Railway.
Problem Description
I have deployed Remark42 using the Railway template. The service shows as "Active" and the deployment logs indicate successful startup, but the service is not accessible via HTTP and the mounted volume is not accessible to the container.
Subject
Remark42 Service Returning 404 on All Endpoints; Volume Mount Not Accessible
Project Details
•Project Name: gracious-rebirth
•Service Name: remark42
•Service ID: 84b25024
•Deployment Region: europe-west4-drams3a
•Public URL: https://remark42-production-de86.up.railway.app
•Docker Image: ghcr.io/umputun/remark42:latest
Issue 1: HTTP 404 on All Endpoints
Observed Behavior:
•All HTTP requests to the service return "404 page not found"
•This includes the root path /, admin panel /admin, and API endpoints /api/
•The HTTP logs show consistent 404 responses
Expected Behavior:
•The Remark42 web interface should be accessible at /admin
•The API should respond at /api/ endpoints
•The root path should serve the Remark42 UI
Evidence:
•HTTP request to / returns 404 (140ms response time )
•HTTP request to /admin returns 404 (140ms response time)
•HTTP request to /favicon.ico returns 404 (140ms response time)
•Service status shows "Active" and deployment was "successful"
Issue 2: Volume Mount Not Accessible
Observed Behavior:
•The volume "remark42-volume" is configured to mount at /srv/var in the Remark42 service
•However, when attempting to write files to /srv/var/ from within the container, the operation fails with "No such file or directory"
•The directory /srv/ does not exist in the container filesystem
Expected Behavior:
•The volume should be mounted and accessible at /srv/var/
•Files written to /srv/var/ should persist on the volume
Evidence:
•Attempted to create file: curl -o /srv/var/remark42_import.jsonl https://...
•Error: "Failed to open the file /srv/var/remark42_import.jsonl: No such file or directory"
•Directory listing shows /srv/ does not exist in the container
Issue 3: Deployment Logs Show Successful Startup
Relevant Log Entries:
Plain Text
2025/12/12 18:04:38.139 [INFO] start server on port :8080 2025/12/12 18:04:38.139 [INFO] make data store, type=bolt 2025/12/12 18:04:38.150 [INFO] run file server from ./web from the disk 2025/12/12 18:04:38.147 [INFO] activate http rest server on :8080
The logs indicate:
•Remark42 is listening on port 8080
•BoltDB data store is initialized
•File server is running
•HTTP REST server is active
However, the service is not responding to HTTP requests on the public URL.
Service Configuration
Environment Variables
Plain Text
DEBUG: false REMARK_URL: https://remark42-production-de86.up.railway.app SECRET: [configured] SITE_ID: WriterSite AWS_ACCESS_KEY_ID: [configured] AWS_SECRET_ACCESS_KEY: [configured] AWS_DEFAULT_REGION: [configured] AWS_ENDPOINT_URL: [configured] AWS_S3_BUCKET_NAME: [configured]
Volume Configuration
•Volume Name: remark42-volume
•Mount Path: /srv/var
•Size: 5.00 GB
Networking
•Public Domain: remark42-production-de86.up.railway.app
•Metal Edge: Yes (as shown in deployment details )
Questions for Support
1.HTTP Routing Issue: Why are all HTTP requests returning 404 when the service logs show the HTTP server is active on port 8080? Is there a routing configuration issue with Railway's Metal Edge proxy?
2.Volume Mount Issue: Why is the volume not accessible at /srv/var/ inside the container, despite being configured to mount there? Is there a known issue with volume mounts on Railway Metal?
3.File Server Issue: The logs show "run file server from ./web from the disk", but the web files appear to be served correctly (based on the directory listing in the logs). Why might the HTTP server not be responding to requests?
4.Container Filesystem: Is there a way to verify the actual mount path of the volume inside the container? The UI shows /srv/var, but the container doesn't seem to have this path.
Steps Already Taken
1.
Deployed Remark42 from Railway template
2.
Configured all required environment variables
3.
Attached volume to service
4.
Verified deployment was successful
5.
Checked HTTP logs (all showing 404)
6.
Reviewed deployment logs (show successful startup)
7.
Attempted to access service via public URL (404)
8.
Attempted to access service via admin panel (404)
Attachments
•Deployment logs (full output available)
•HTTP logs (showing 404 responses)
•Service configuration screenshots
•Volume mount configuration screenshot
Desired Outcome
I would like to:
1.Get the Remark42 service responding to HTTP requests
2.Verify the volume is properly mounted and accessible
3.Be able to import 413 comment records into the Remark42 database
Pinned Solution
2 months ago
Going to https://remark42-production-de86.up.railway.app/api/v1/ping, https://remark42-production-de86.up.railway.app/api/v1/find and https://remark42-production-de86.up.railway.app/web/ seem to resolve correctly and seem to be responding to HTTP requests.
If your image does not contain /srv/ then Railway won't be able to mount to it. A good choice is to mount the volume onto a directory that already exists (e.g. /data or /var/lib/remark42).
You'd then need to change the mount path inside Railway and also the STORE_BOLT_PATH variable.
If you have to use /srv/var, then you can run the command mkdir -p /srv/var && /remark42 - this works, but if you want a cleaner option then the first one I provided should work best.
8 Replies
2 months ago
I've tried deploying without Metal, tried restarting, tried with Metal again - all result in 404 response to http requests.
2 months ago
Going to https://remark42-production-de86.up.railway.app/api/v1/ping, https://remark42-production-de86.up.railway.app/api/v1/find and https://remark42-production-de86.up.railway.app/web/ seem to resolve correctly and seem to be responding to HTTP requests.
If your image does not contain /srv/ then Railway won't be able to mount to it. A good choice is to mount the volume onto a directory that already exists (e.g. /data or /var/lib/remark42).
You'd then need to change the mount path inside Railway and also the STORE_BOLT_PATH variable.
If you have to use /srv/var, then you can run the command mkdir -p /srv/var && /remark42 - this works, but if you want a cleaner option then the first one I provided should work best.
2 months ago
I'll see where this gets me - promise I'll come back and accept the solution if it helps even a bit!
2 months ago
Thank you, best of luck!
2 months ago
looking at this thread it seems like @jqcktalks got you sorted with the volume mount issue. the 404s were probably happening because remark42 couldnt write to the bolt db since the mount path didnt exist in the container
just wanted to add a bit more context in case it helps - when railway mounts a volume it needs the directory to already exist in the docker image. if the path isnt there the mount just fails silently and your app cant access it. this is pretty common with images that dont have certain paths baked in
the fix @jqcktalks mentioned is solid - either:
option 1 (cleaner): mount to a path that exists like /data or /tmp and update your STORE_BOLT_PATH env var to match
option 2: add mkdir -p /srv/var && /remark42 to your start command which creates the directory before remark42 starts
since you said youre working with an ai agent you might want to double check what paths exist in the ghcr.io/umputun/remark42:latest image. you can do this by looking at the dockerfile or running the image locally with docker run -it ghcr.io/umputun/remark42:latest ls -la / to see the root directory structure
also fyi the /api/v1/ping and /api/v1/find endpoints working means your http routing is fine - the app was just broken because it couldnt initialize the database without proper storage access
hope that helps clarify things a bit. let us know if you run into any other issues after fixing the volume mount
2 months ago
Hey - did this help you at all?
jqcktalks
Hey - did this help you at all?
2 months ago
Accepted - it says it's doing some checking. Thank you!
Status changed to Solved noahd • about 2 months ago


