The answers were picked from the Discord discussions we have in the community
(FOR INSPIRATION ONLY)
[SOURCE https://twitter.com/aisolopreneur]
I have always thought that the animal was the inspiration for medusa naming, not the mythological figure
No need to change the actual logo imo, it can have many diffrents geometrical interpretations
Node/NPM
Yarn
TypeScript
TypeORM
SQLite
PostGresSQL
Redis
Docker
React
Next
TailWind
Ubuntu
Git/GitHub
UPDATE 20230612
- Node/NPM
- Yarn
- TypeScript
- TypeORM
SQLite- PostGreSQL 👉 create a db, create a user, pgAdmin4?
- Redis
Docker- Next 👉 the STARTER
- React 👉 the ADMIN
- TailWind 👉 the STARTER and ADMIN
- Ubuntu 👉 other platforms like Dokku, Coolify, Digital Ocean buckets or even Railways
- Git/GitHub
- probably svelte with Pevey
And of course the plugins, Stripe, PayPal, Meilisearch, ...
A headless solution is decoupled from your frontend so that you can leverage whichever framework you're using. Medusa gives you the engine plus some js tools to interact with it. What you'll do with is up to you. You most likely don't want to use full url linking. In such cases you're losing the benefit of client side routing. Full url linking means a full website refresh.
I don't know what kind of framework you are using but you most likely will use something like Next.js, Remix, Astro or whatever Then you can and should leverage its router and tools. You might use Remix nested routes: https://remix.run/docs/en/v1/guides/routing Maybe Next.js static generation with client side routing. Or the new nested layouts routing. In all those cases you want to use the handle property of the product object and use it for your routing. You can check out nextjs medusa starter for inspiration.
GO CHECK products.md
Try sales channel
Use the same domain for the three instances
If you want to sell soemthing, you probably own a domain. So you should point that domain to your deployments. yourdomain.com to storefront. admin.yourdomain.com to admin. api.yourdomain.com to your backend deployment.
Still storefront and admin can be on Vercel or Netlify
Be aware that Vercel doesn't allow commercial use for free. Netlify does
pm2 start npm --name "medusa-server" -- run start
app_name: medusa-server
script_name: start (from package.json)
other way
pm2 start "NODE_ENV=production npm run start"
in our case
cd my-medusa-store
pm2 start npm --name "medusa-server" -- run start
cd my-medusa-storefront
pm2 start npm --name "medusa-storefront" -- run dev
cd medusa-admin
pm2 start npm --name "medusa-admin" -- run dev
Little shell script
sudo service postgressql start
sudo service redis-server start
cd <path-to-store>/my-medusa-store
pm2 start npm –name “medusa-server” – run start
cd <path-to-store>/medusa-admin
pm2 start npm –name “medusa-admin” – run dev
cd <path-to-store>/my-mdusa-storefront
pm2 start npm –name “medusa-storefront” – run dev
Go to https://github.com/medusajs/admin/blob/819a4acc89b21fabef7ca03dfc6ebac174c7619f/src/services/config.js and add
//const medusaUrl = __MEDUSA_BACKEND_URL__ || "http://localhost:9000"
const medusaUrl = __MEDUSA_BACKEND_URL__ || "https://api.instant-market.com"
export { medusaUrl }
When using extender
"start:prod": "npm run build && NODE_ENV=production node dist/main"
The nextjs is more up to date now. And AFAIK only this one will get future updates. For me next.js is far more superior then Gatsby.
I would advise to not use vercel.app ,netlify.app domains
They are on the public suffix list, and because of that the server can't set the cookies needed for authentication, if the user accessing the site from most modern browsers such as Chrome, Firefox, etc.
Public suffix list: https://publicsuffix.org/list/public_suffix_list.dat
CONTRADICTION https://custom-search-engine-fashion-demo.netlify.app/ works with Heroku
- Install Medusa and seed the database with
--seed
- Install Admin
- CORS
- Check that you are using the right url
- If it's localhost use the right PORT
- If you are using a domain name use the subdomains
- Check that you are using https
- Cookies are set by the Admin and you can inspect that in the Dev Tools
There is not only one solution to host Medusa
- First solution
I deploy on AWS and Azure but find it would be easier in Digital Ocean for beginners to deploy [00:48] My simplest environment is:
Medusajs server: Redis + EC2 (server hosting) + Postgres DB
Frontend: Nextjs : deployed on Vercel
Admin: Vite + React : deployed on Netlify or Vercel
for commercial use see this
- Second solution
1vcpu, 2GB RAM server with a swap file should handle medusa stack with no problem. Though I still would recommend at least 2 cores and 4GB RAM. Then scale up if needed.
Using Digital Ocean Spaces for hosting images but again you could spin up a MInio app in Dokku or Coolify in few minutes.
Using Dokku but Coolify works fine too
There's a opinion that databases, storage should be hosted elsewhere on managed instances (Managed Postgres, Redis, S3, Spaces). But many companies are actually hosting all of those by themselves. It is actually very common to host everything on premise. One thing I do is offsite database backups which I sync either to Digital Ocean Spaces or AWS S3.
- More tips
If you want to deploy Nextjs on your own VPS, here's your guide: https://github.com/serverless-stack/open-next/blob/main/README.md
The Image Optimisation in Nextjs just works, there's nothing to it. One thing you could do if you want to preserve the cached images during build deploys, is bind /.next/cache/images to a docker volume. Which is also easy as hell in Coolify and Dokku.
Project https://nomodo.io/medusajs
Start by login with postman
POST request to http://localhost:9000/admin/auth
{ "email": "admin@medusa-test.com", "password": "supersecret" }
the GET request to http://localhost:9000/admin/products
remove the authorization TOKEN
I could see the migrations runs and the database updated with the new table. I followed just the same steps. create an entity, created a repository, make migration file for the new table, updated the up and down functions in migration file, npm run build and medusa migrations run command.
I used the following command while creating them manually.
npx typeorm migration:create -n Post --dir src/migrations
I used the following command while using medusa-extender
medex generate --module --entity --repository --migration Post
I need to understand things about Medusa (and its MedusaExtender package)
Theoretically, if I want to modify my back-end to add custom fields, I need to first :
-
Create a new entity that extends the Medusa one The extended entity will contains all the custom fields and the new relationships
-
Create a migration linked to the addition of the new fields Migrations let you update tables with the up function, the down function is maybe used if I want to revert the migration ?
-
Create a new repository that extends the Medusa one and that returns the previously created entity Also this is where you can override existings methods, like a method to find an entity with the id or to save a new entity, you also pass your CustomEntity previously created
-
Inject the custom repository in a custom service and override its retrieve function with the new entity (I don't know why yet) What is the purpose of a service ? a set of business logic that is using the previously created CustomRepository ?
-
Create a module that imports the Entity, the repository, the service and the different migrations The CustomModule will imports all your extended classes and will be imported in the main.ts file at the root of the src folder
-
Load all the modules inside the load function inside the main.ts
Is that correct ?
Just clear the Cookies, cache
the step to troobleshoot this issue (which is why Meilisearch doesn't display products) are :
- check if the postgresDB is installed
- check if the database has been seeded
- check if redis is installed
- check if redis-cli ping, PONGs
- check if redis uses a password (to be verified)
- check if the storefront is correctly configured
"scripts": {
"dev": "medusa develop --port 9001",<----------
"seed": "medusa seed -f ./data/seed.json",
"build": "babel src -d dist --extensions \".ts,.js\"",
"start": "medusa develop"
},
Docker was actually never officially supported. There's a repository with Dockerfiles that offers a good starting point, though they have not been updated for a while and are not actively maintained
Hey, no plans for updating the starter in the foreseeable future. We are focussed on shipping new features for the core. I will upgrade the starter to Next 13, once the app directory is out of beta, but until then it is staying on 12 🙂
The default port is 9000, if you want to run the server on a custom port update medusa-config.js as follows:
module.exports = {
/* ... */
serverConfig:{
port: <PORT_NUMBER>
}
/* ... */
};
You don't have to use the extender to change the port, you can just use medusa start -p
Well I'll tell you how we do it. We use the Medusa file s3 plugin to upload files for products, etc. Then in our storefront react code, we built a custom Image component that integrates with imgproxy. It allows us to take any image url and send that to imgproxy requesting a smaller or more web optimized image format.
twicpics imageproxy is open source bynny https://plaiceholder.co/docs https://images.weserv.nl/docs/
export const ImgProxyImage: FC<ImgHTMLAttributes<HTMLImageElement>> = ({ src, ...props }) => {
const proxiedSrc = getProxySrc(src); // function that builds the URL, based on docs here: https://docs.imgproxy.net/generating_the_url
return <img src={proxiedSrc} {...props} />;
};
<img src="//wsrv.nl/?url=wsrv.nl/lichtenstein.jpg&w=300&h=300">