# c_deploy

#### Colin Fay

#### 2023-06-05

## About the `run_app()` function

When launching the app, you might have noticed that the `dev/run_dev.R` function calls `run_app()`, which has the following structure:

    run_app <- function(...) {
      with_golem_options(
        app = shinyApp(
          ui = app_ui,
          server = app_server
        ),
        golem_opts = list(...)
      )
    }

This function might looks a little bit weird, but there’s a long story behind it, and you can read more about it there.

But long story short, this combination of `with_golem_options` & `golem_opts = list(...)` allows you to pass argument to the function to be used inside the application, from UI or from server side, which you can get with `get_golem_options()`.

    run_app(this = "that")
    # And in the app
    this <- get_golem_options("this")

The idea is to provide more flexibility for deployment on each platform you want to run your app on.

## Deploying Apps with `{golem}`

The `dev/03_deploy.R` file contains function for deploying on various platforms.

### RStudio Products

    golem::add_rstudioconnect_file()
    golem::add_shinyappsio_file()
    golem::add_shinyserver_file()

### Docker

#### without using {renv}

    # If you want to deploy via a generic Dockerfile
    golem::add_dockerfile()

    # If you want to deploy to ShinyProxy
    golem::add_dockerfile_shinyproxy()

    # If you want to deploy to Heroku
    golem::add_dockerfile_heroku()

#### using {renv}

#### CASE 1 : you didn’t use renv during developpment process

> this functions will create a “deploy” folder containing :

    deploy/
    +-- Dockerfile
    +-- Dockerfile_base
    +-- yourgolem_0.0.0.9000.tar.gz
    +-- README
    \-- renv.lock.prod

then follow the README file

    # If you want to deploy via a generic Dockerfile
    golem::add_dockerfile_with_renv(output_dir = "deploy")

    # If you want to deploy to ShinyProxy
    golem::add_dockerfile_with_renv_shinyproxy(output_dir = "deploy")

If you would like to use {renv} during developpement, you can init a renv.lock file with

    attachment::create_renv_for_dev(dev_pkg = c(
      "renv",
      "devtools",
      "roxygen2",
      "usethis",
      "pkgload",
      "testthat",
      "remotes",
      "covr",
      "attachment",
      "pak",
      "dockerfiler",
      "golem"
    ))

an activate {renv} with

    renv::activate()

#### CASE 2 : you already have a renv.lock file for your project

    # If you want to deploy via a generic Dockerfile
    golem::add_dockerfile_with_renv(output_dir = "deploy", lockfile = "renv.lock")

    # If you want to deploy to ShinyProxy
    golem::add_dockerfile_with_renv_shinyproxy(output_dir = "deploy", lockfile = "renv.lock")

> this functions will create a “deploy” folder containing :

    deploy/
    +-- Dockerfile
    +-- Dockerfile_base
    +-- yourgolem_0.0.0.9000.tar.gz
    +-- README
    \-- renv.lock.prod

then follow the README file