When I used to deploy my Umbraco 7 (and earlier versions of Umbraco),
I just opened ftp and copied the files. Of course I was also setup the database.
With 11 it's little confusing. Is there an easy way to do it ? (I don't want to use the dashboard deployment, Umbraco Deploy, etc. just something simple)
Here's what I did so far:
After migrated locally the database from 7 to 11, I imported the .bacpac to Azure and now I have the Umbraco 11 database in Azure.
So now I have the Database on Azure.
Then I started to migrate the code locally. It's almost finished - not 100%, but I'd say somewhat production ready (I guess I'll continue to ask here with the remaining code .. ;) ) , so I want to deploy now Umbraco 11 to my hosting (Azure) and then I'll push more updates and fixes to the code.
I also setup a git repository, so now all the local development is with git, so I can setup ci/cd with gitlab / azure, etc.
My understanding from the docs that the ci/cd is only for the code? (views , partial views, etc.)
But what about the other files (bin, umbraco, wwwroot, properties, etc.)?
How do I deploy the other stuff ?
Also, it says in the documentation:
The corresponding .uda file for this Document Type is now updated with the changes - the file is located in the /umbraco/Deploy/Revision folder.
You've also created a new Data Type that's used on the Document Type. This Data Type is stored as a new file in the /umbraco/Deploy/Revision folder as well.
I didn't find the .uda file and not the Deploy/Revision folder
I tried just to copy-paste my local Umbraco 11 folder (bin, umbraco, etc.) to the ftp but it didn't work. So I brought the Umbraco 7 again (I have now two databases in my Azure - the 7 and the 11).
So let's say I setup the ci/cd so I can manage the code with git bash, but what about the files, connecting the database I already imported to Azure, etc?
Yes its a little different with .net core sites than it was with Umbraco 7/8 but once you get your head around it its not to bad.
The Long answer ...
How it works
There are many ways to deploy a .net site but underneath they are all performing a dotnet publish on your site and then copying the resulting files to the webserver.
a dotnet publish builds your site does a couple of internal things and then copies the resulting files to a publish folder, which is the site. it looks a little weird when you are use to .net framework as all the dlls are in the root of the site ! .
at the simplest level you can then copy this folder to your webserver and your site startup.
tip - if you are using azure, and have visual studio there is a publish option when you right click on your site and you can do this on one step.*
DB Configuration
Your Database connection is configured in appsettings.json. If this is pointing to a local database you will need to update this before the files get onto the 'live' server.
the best way to do this is by using a appsettings.production.json file or similar.
.net will "merge" settings files based on the ASPNETCORE_ENVIRONMENT variable. locally this is usually 'development' and when you deploy to azure it will be set to 'production'
So while you are developing appsettings.json and appsettings.deveploment.json are merged and on live appsettings.json and appsettings.production.json are merged
tip: again there are otherways to set this, you can set an enviromental variable that replaces the appsetting, and vistual studio or CI/CD can set things as the site is deployed to the server
Umbraco bits.
As you have seen, the Umbraco docs alude to umbraco/deploy/revision folder for your document type changes, but unless you have Umbraco deploy installed you are not going to see that folder. however (shameless self promotion) the uSync package also does this and is free.
if you install uSync on your site it will create a uSync folder at the root of the site (and it will also be there when you publish). that forms part of the site deployment.
when the site runs up on the live server you can either configure it to import the settings as the site starts up or you can go to the usync dashboard and import everything off disk.
this will then mean any changes to datatypes,doctypes, etc will be imported onto your newly deployed site.
The "Simple" answer
If you are not using CI/CD - Visual Studio's 'Publish' menu option wraps quite a bit of this up for you and you can publish the site to an azure web app quite quickly.
use uSync if you want to sync datatypes, doctypes etc. as it will keep track of that stuff for you.
Thanks for the detailed answer.
So if I understand you correctly, in Umbraco 11 it’s kind of, for example, Angular app that you can’t just copy paste the folder, but first need to do ng build —prod? And only copy the dist folder to the ftp?
If the answer is yes, is there an option to build Umbraco 11 using the command line only and without VS? (Something like dotnet build, etc? You mentioned in your answer dotnet publish - is it the comparable of ng build —prod?)
“the best way to do this is by using a appsettings.production.json file or similar.” - if I create appsettings.production, then I don’t need on the ftp appsetting.json? Or do I need both?
on its own dotnet publish will build and then publish your site to a 'published' folder. by default this in in the bin folder and will probably be debug so you might want to change that;'
for example, to build in 'release' and to a folder one level up from your site:
dotnet publish -c release -o ../published
(and you can use the dotnet publish command to copy directly to azure if you supply it with the 'publish profile' - this is the file visual studio produces or indeed there is a vs code extension to create them too).
I have never tried it , so not sure how an FTP to azure will work but in theory it might, but you would need to know which folder all the things went in.
appsettings files
You don't need *(and infact shouldn't) delete the appsetting.json file. at runtime asp.net merges the appsettings.json and appsettings.production.json file into one, you site only sees one set of configuration.
so the "production" file only needs the differences, and indeed things that are in the production file will take precedence over what is in the appsettings.json file so you can use this to override default settings.
This creates the folder /publish-64 which contents I copy via FTP to the servers www folder.
That works, but there's a lot of files that needs to be uploaded. My last project was 18.000+ files!
I know I can edit and upload files directly from Views and wwwroot folder without building first.
But when I make a change to one of the .cs files in my local environment, is it then really necessary to upload all files again?
You can probably get away with only uploading files that are of a different size that the original. In most FTP clients (e.g FileZilla!) you should see an option like "Overwrite if diffrent size" and then only changed files will be written to the site.
and most files will not change between publishes,
if you change a cs file then the "sitename".dll files will change, and when you change views etc the views folder will change.
Deploy Umbraco 11
Hi,
When I used to deploy my Umbraco 7 (and earlier versions of Umbraco), I just opened ftp and copied the files. Of course I was also setup the database.
With 11 it's little confusing. Is there an easy way to do it ? (I don't want to use the dashboard deployment, Umbraco Deploy, etc. just something simple)
Here's what I did so far:
After migrated locally the database from 7 to 11, I imported the .bacpac to Azure and now I have the Umbraco 11 database in Azure.
So now I have the Database on Azure.
Then I started to migrate the code locally. It's almost finished - not 100%, but I'd say somewhat production ready (I guess I'll continue to ask here with the remaining code .. ;) ) , so I want to deploy now Umbraco 11 to my hosting (Azure) and then I'll push more updates and fixes to the code.
I also setup a git repository, so now all the local development is with git, so I can setup ci/cd with gitlab / azure, etc.
My understanding from the docs that the ci/cd is only for the code? (views , partial views, etc.) But what about the other files (bin, umbraco, wwwroot, properties, etc.)?
How do I deploy the other stuff ?
Also, it says in the documentation:
I didn't find the .uda file and not the Deploy/Revision folder
I tried just to copy-paste my local Umbraco 11 folder (bin, umbraco, etc.) to the ftp but it didn't work. So I brought the Umbraco 7 again (I have now two databases in my Azure - the 7 and the 11).
So let's say I setup the ci/cd so I can manage the code with git bash, but what about the files, connecting the database I already imported to Azure, etc?
Please advise.
Thanks.
Hi Meni,
Yes its a little different with .net core sites than it was with Umbraco 7/8 but once you get your head around it its not to bad.
The Long answer ...
How it works
There are many ways to deploy a .net site but underneath they are all performing a
dotnet publish
on your site and then copying the resulting files to the webserver.a dotnet publish builds your site does a couple of internal things and then copies the resulting files to a publish folder, which is the site. it looks a little weird when you are use to .net framework as all the dlls are in the root of the site ! .
at the simplest level you can then copy this folder to your webserver and your site startup.
tip - if you are using azure, and have visual studio there is a publish option when you right click on your site and you can do this on one step.*
DB Configuration
Your Database connection is configured in
appsettings.json
. If this is pointing to a local database you will need to update this before the files get onto the 'live' server.the best way to do this is by using a
appsettings.production.json
file or similar..net will "merge" settings files based on the
ASPNETCORE_ENVIRONMENT
variable. locally this is usually 'development' and when you deploy to azure it will be set to 'production'So while you are developing
appsettings.json
andappsettings.deveploment.json
are merged and on liveappsettings.json
andappsettings.production.json
are mergedtip: again there are otherways to set this, you can set an enviromental variable that replaces the appsetting, and vistual studio or CI/CD can set things as the site is deployed to the server
Umbraco bits.
As you have seen, the Umbraco docs alude to umbraco/deploy/revision folder for your document type changes, but unless you have Umbraco deploy installed you are not going to see that folder. however (shameless self promotion) the uSync package also does this and is free.
if you install uSync on your site it will create a uSync folder at the root of the site (and it will also be there when you publish). that forms part of the site deployment.
when the site runs up on the live server you can either configure it to import the settings as the site starts up or you can go to the usync dashboard and import everything off disk.
this will then mean any changes to datatypes,doctypes, etc will be imported onto your newly deployed site.
The "Simple" answer
If you are not using CI/CD - Visual Studio's 'Publish' menu option wraps quite a bit of this up for you and you can publish the site to an azure web app quite quickly.
use uSync if you want to sync datatypes, doctypes etc. as it will keep track of that stuff for you.
Thanks for the detailed answer. So if I understand you correctly, in Umbraco 11 it’s kind of, for example, Angular app that you can’t just copy paste the folder, but first need to do ng build —prod? And only copy the dist folder to the ftp?
If the answer is yes, is there an option to build Umbraco 11 using the command line only and without VS? (Something like dotnet build, etc? You mentioned in your answer dotnet publish - is it the comparable of ng build —prod?)
“the best way to do this is by using a appsettings.production.json file or similar.” - if I create appsettings.production, then I don’t need on the ftp appsetting.json? Or do I need both?
Thanks :)
from the command line you can do
dotnet publish
Yes,
As Huw says you can use
dontent publish
to create the publish folder.(docs https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-publish)
on its own
dotnet publish
will build and then publish your site to a 'published' folder. by default this in in the bin folder and will probably be debug so you might want to change that;'for example, to build in 'release' and to a folder one level up from your site:
(and you can use the dotnet publish command to copy directly to azure if you supply it with the 'publish profile' - this is the file visual studio produces or indeed there is a vs code extension to create them too).
I have never tried it , so not sure how an FTP to azure will work but in theory it might, but you would need to know which folder all the things went in.
appsettings files
You don't need *(and infact shouldn't) delete the appsetting.json file. at runtime asp.net merges the appsettings.json and appsettings.production.json file into one, you site only sees one set of configuration.
so the "production" file only needs the differences, and indeed things that are in the production file will take precedence over what is in the appsettings.json file so you can use this to override default settings.
Hi Kevin / Meni
Sorry if I'm hijacking this question, but I have a similar question regarding
dotnet publish
that could complement Menis question.Because i'm on a shared host, i'm using the command
This creates the folder
/publish-64
which contents I copy via FTP to the servers www folder.That works, but there's a lot of files that needs to be uploaded. My last project was 18.000+ files!
I know I can edit and upload files directly from
Views
andwwwroot
folder without building first. But when I make a change to one of the .cs files in my local environment, is it then really necessary to upload all files again?Partial view of files - there is a lot more
Hi,
You can probably get away with only uploading files that are of a different size that the original. In most FTP clients (e.g FileZilla!) you should see an option like "Overwrite if diffrent size" and then only changed files will be written to the site.
and most files will not change between publishes,
if you change a cs file then the "sitename".dll files will change, and when you change views etc the views folder will change.
Hi Kevin
That makes sense. Thanks! :)
is working on a reply...