Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

LKCPH's avatar
Level 1

Transitioning from Forge to Envoyer

Hi everyone,

I followed the steps in this video, and have tried getting this to work for several days now to no avail ;(

https://laracasts.com/series/server-management-with-forge/episodes/11

( Video about creating new Envoyer folder inside existing application folder, then changing the Meta > Web Directory in Forge to envoyer/current/public so you seamlessly can go from forge to Envoyer)

**Problem 1: **

In the tutorial a new Envoyer folder is created with its own new storage folder. This is not symlinked to the one in the root folder. So you aren't transitioning - but rather starting from scratch with an empty storage folder? Off course you could symlink the symlink, or create a hook that changes the symlink to point upwards one level, or copy the old storage folder, but it seems weird when the next part doesn't work either:

** Problem 2: **

No symlink to the storage folder is actually created in the current folder by Envoyer. This seems like an error right? I have tried deploying a few times and no storage symlinks gets created in the current folder. Shouldn't there be an error if the link wasn't created?

The storage symlink is also not in the releases folders ( obviously ).

Thank you in advance!

0 likes
4 replies
ejdelmonico's avatar
Level 53

Ok, as you are now aware, Envoyer uses a different folder structure than forge. So, yes, everything will be in a different place. What I have done in the past is copy over the files in storage to the new storage and make another after command to run php artisan storage:link. You only have to copy the files initially.

LKCPH's avatar
Level 1

Thanks for the answer @ejdelmonico, i will do it like that then, didn't know about that feature!

Regarding my other problem; that the storage directory symlink wasn't created on deployment in the current folder.

I feel like i am misunderstanding something crucial?

Taylor actually answered me in a Ticket on Envoyer (Pretty cool).

But his answer, and the logic confuses me.

He said that i need the storage directory in source control, because "Envoyer looks for it as an indicator to create the link."

Also the documentation says:

The storage directory, when deploying a Laravel project, contains the files stored by your application - this directory is automatically kept consistent across deployments so you do not lose its contents on each deploy.

But why would you have your storage directory in source control? I never had it when deploying to Forge. Also it contains server specifik files, you wouldn't upload test files to your server, and delete cache etc.

I feel like i am misunderstanding something!

Thanks in advance!

ejdelmonico's avatar

Yes. He means the /storage and the sym link is just a shell for access. So, what he is saying is if you deploy what is in your local storage folder, then each deploy will keep that up to date as well.

LKCPH's avatar
Level 1

Thanks for the answer. I got everything working now, though i think the documentation could be a bit better.

I still don't quite understand why Envoyer doesn't say "If no storage folder then create one and symlink to above directory". But i can kind of see the idea behind having version control for storage with custom directory structure that may need updates.

I ended up just adding the storage folder to git then put a .gitignore inside of it to ignore all content. This way Envoyer just makes the folder a symlink.

*
*/
!.gitignore

Please or to participate in this conversation.