@jcasman thanks for asking this question. TBH, I was a bit confused about the product naming and features. There are actually 4 publishing services from Posit. The three you mentioned plus shinyapps.io
I have to go through the workflow in again from a clean install, but I think that Positron may connect to Posit Connect Cloud by default? I don't remember any confusion when I did the deployment of the Shiny for Python app.
However, if I look at the Posit web site, it does seem like there are multiple hosting services.
I'm going to check this again with a new Linux install in a VM, but I believe the deploy button does what is expected.
When you write the Python code, example, app.py, there's another button for deployment in the upper right of the code pane. If you have a chance, it would be great to hear your experience. I think I'm going to install Xubuntu minimal in a VM to check the deployment configuration steps. My memory is not so good, but I can't recall any problems. It's possible that the deploy to Posit Connect Cloud just worked with no hassles.
BTW, this is interesting topic for me right now as I have been thinking of focusing on a single deployment platform in teaching.
In my previous effort, I was platform-agnostic and covered Fly.io, Leapcell, Railway, GitHub Pages, and more. Recently, I've been thinking of a single workflow and using the single workflow as a way to teach common elements of deployment.
Example with Posit Cloud Connect
Log Inspection
All platforms have some type of log. By teaching log inspection, the skill can be applied to any platform.
Python Dependencies for Containers
Most systems use some type of container such as Docker. The Python dependencies are loaded by requirements.txt or less common right now, pyproject.toml. It's easy to export the pyproject.toml to requirements.txt. Some systems have uv support. I think Fly might? However, the underlying technology shouldn't matter as much as the general concept that the Python dependencies are loaded into the container automatically at time of deployment.
Status of Assessment
Posit Connect Cloud seems good enough so far and the deployment seems easier than Leapcell, my previous default. Leapcell does amazingly offer free tier PostgreSQL and an S3-like storage layer, but this is not a problem as there are other free-tier PostgreSQL database services, notably Supabase.
From what I can tell, Posit Cloud Connect does not support the following in production:
| Missing Feature |
Comment |
Planned Workaround |
| Storing Images |
Like many free-tier services, the files are ephemeral. |
Need to use S3 or similar, which is okay for the course. Might look into Leapcell Object Storage free tier as an option |
| SQL storage |
As the files are ephemeral, the SQL data file will be deleted on reboot |
Can connect to supabase free-tier or similar system for data persistence |
| Bi-directional web sockets |
I can find no free service for this. Also, this is not the focus of Posit Connect Cloud. |
If I cover this, can use Fly (pay as you go) |
Sources
Files written at runtime
For applications, additional files your application writes while it is running are only stored as long as users are visiting your application. When your app starts up or is republished, most1 files on disk are reset to match those found in your repository.
For content that renders static output files, those output files are persisted by Connect Cloud, but other files your code writes while it is running are not persisted.
Summary
I'm going forward with Posit Connect Cloud. It's simplicity and focus on a specific, narrow, use may be better for the course. Although Leapcell and Fly have more features, the complexity of Leapcell may weaken the course by making deployment more complex. The simpler feature set of Posit Connect Cloud may allow me to focus on a "General Deployment Workflow" specifically for data science.
At the current time, I don't plan on covering a machine learning pipeline with deployment. Even if I expand the course to SQL data extraction, data cleansing, transformation, vector databases, embedding, indexing, I was planning to run it locally.