{"id":21997513,"url":"https://github.com/stephane-klein/poc-bash-ssh-docker-deployement-example","last_synced_at":"2026-04-09T02:31:54.930Z","repository":{"id":177826807,"uuid":"660967655","full_name":"stephane-klein/poc-bash-ssh-docker-deployement-example","owner":"stephane-klein","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-06T16:32:54.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T04:44:46.003Z","etag":null,"topics":["deployment","docker","docker-compose","poc","scaleway","ssh","terraform"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stephane-klein.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-01T11:18:05.000Z","updated_at":"2025-03-06T16:32:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"6dc1d277-09c3-4c92-b5b7-b25812a3088a","html_url":"https://github.com/stephane-klein/poc-bash-ssh-docker-deployement-example","commit_stats":null,"previous_names":["stephane-klein/poc-bash-ssh-docker-deployement-example"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stephane-klein/poc-bash-ssh-docker-deployement-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-klein%2Fpoc-bash-ssh-docker-deployement-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-klein%2Fpoc-bash-ssh-docker-deployement-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-klein%2Fpoc-bash-ssh-docker-deployement-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-klein%2Fpoc-bash-ssh-docker-deployement-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephane-klein","download_url":"https://codeload.github.com/stephane-klein/poc-bash-ssh-docker-deployement-example/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephane-klein%2Fpoc-bash-ssh-docker-deployement-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31582632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployment","docker","docker-compose","poc","scaleway","ssh","terraform"],"created_at":"2024-11-29T22:16:48.203Z","updated_at":"2026-04-09T02:31:54.904Z","avatar_url":"https://github.com/stephane-klein.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# POC deployment based on ssh and bash\n\nRoot issue: https://github.com/stephane-klein/backlog/issues/250\n\nPrerequisites:\n\n- https://mise.jdx.dev/\n\nInitialize *Mise*:\n\n```sh\n$ mise trust\n$ mise install\n```\n\n```sh\n$ cp .secret.skel .secret\n```\n\nUpdate `.secret` and `.envrc` with your personnal access key, secret key…\n\nLoad variable env:\n\n```sh\n$ source .envrc\n```\n\n## Part 1: deploy the server\n\nYou can use this command to choose the type of server to install, depending on your financial constraints and resource requirements:\n\n```\n$ scw instance server-type list\nNAME              HOURLY PRICE  LOCAL VOLUME MAX SIZE  CPU  GPU  RAM      ARCH    AVAILABILITY\nDEV1-S            € 0.014       20 GB                  2    0    2.0 GiB  x86_64  available\nDEV1-M            € 0.026       40 GB                  3    0    4.0 GiB  x86_64  available\nDEV1-L            € 0.05        80 GB                  4    0    8.0 GiB  x86_64  available\nDEV1-XL           € 0.073       120 GB                 4    0    12 GiB   x86_64  available\nENT1-XXS          € 0.073       0 B                    2    0    8.0 GiB  x86_64  available\nENT1-XS           € 0.147       0 B                    4    0    16 GiB   x86_64  available\nENT1-S            € 0.29        0 B                    8    0    32 GiB   x86_64  available\nENT1-M            € 0.59        0 B                    16   0    64 GiB   x86_64  available\nENT1-L            € 1.18        0 B                    32   0    128 GiB  x86_64  available\nENT1-XL           € 2.35        0 B                    64   0    256 GiB  x86_64  available\nENT1-2XL          € 3.53        0 B                    96   0    384 GiB  x86_64  out of stock\nGP1-VIZ           € 0.10        300 GB                 8    0    32 GiB   x86_64  available\nGP1-XS            € 0.102       150 GB                 4    0    16 GiB   x86_64  available\nGP1-S             € 0.204       300 GB                 8    0    32 GiB   x86_64  available\nGP1-M             € 0.406       600 GB                 16   0    64 GiB   x86_64  available\nGP1-L             € 0.789       600 GB                 32   0    128 GiB  x86_64  available\nGP1-XL            € 1.671       600 GB                 48   0    256 GiB  x86_64  available\nPLAY2-PICO        € 0.014       0 B                    1    0    2.0 GiB  x86_64  available\nPLAY2-NANO        € 0.027       0 B                    2    0    4.0 GiB  x86_64  available\nPLAY2-MICRO       € 0.054       0 B                    4    0    8.0 GiB  x86_64  available\nPOP2-HC-2C-4G     € 0.053       0 B                    2    0    4.0 GiB  x86_64  available\nPOP2-2C-8G        € 0.073       0 B                    2    0    8.0 GiB  x86_64  available\nPOP2-HM-2C-16G    € 0.103       0 B                    2    0    16 GiB   x86_64  available\nPOP2-HC-4C-8G     € 0.106       0 B                    4    0    8.0 GiB  x86_64  available\nPOP2-4C-16G       € 0.147       0 B                    4    0    16 GiB   x86_64  available\nPOP2-HM-4C-32G    € 0.206       0 B                    4    0    32 GiB   x86_64  available\nPOP2-HC-8C-16G    € 0.213       0 B                    8    0    16 GiB   x86_64  available\nPOP2-8C-32G       € 0.29        0 B                    8    0    32 GiB   x86_64  available\nPOP2-HM-8C-64G    € 0.412       0 B                    8    0    64 GiB   x86_64  available\nPOP2-HC-16C-32G   € 0.426       0 B                    16   0    32 GiB   x86_64  available\nPOP2-16C-64G      € 0.59        0 B                    16   0    64 GiB   x86_64  available\nPOP2-HM-16C-128G  € 0.824       0 B                    16   0    128 GiB  x86_64  available\nPOP2-HC-32C-64G   € 0.851       0 B                    32   0    64 GiB   x86_64  available\nPOP2-32C-128G     € 1.18        0 B                    32   0    128 GiB  x86_64  available\nPOP2-HM-32C-256G  € 1.648       0 B                    32   0    256 GiB  x86_64  available\nPOP2-HC-64C-128G  € 1.702       0 B                    64   0    128 GiB  x86_64  available\nPOP2-64C-256G     € 2.35        0 B                    64   0    256 GiB  x86_64  available\nPOP2-HM-64C-512G  € 3.296       0 B                    64   0    512 GiB  x86_64  available\nPRO2-XXS          € 0.055       0 B                    2    0    8.0 GiB  x86_64  available\nPRO2-XS           € 0.11        0 B                    4    0    16 GiB   x86_64  available\nPRO2-S            € 0.219       0 B                    8    0    32 GiB   x86_64  available\nPRO2-M            € 0.438       0 B                    16   0    64 GiB   x86_64  available\nPRO2-L            € 0.877       0 B                    32   0    128 GiB  x86_64  available\nRENDER-S          € 1.243       400 GB                 10   1    42 GiB   x86_64  available\nSTARDUST1-S       € 0.005       10 GB                  1    0    1.0 GiB  x86_64  out of stock\n```\n\n```sh\n$ terraform init --upgrade\n```\n\n```sh\n$ terraform plan\n\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\n  + create\n\nTerraform will perform the following actions:\n\n  # scaleway_instance_ip.server1_public_ip will be created\n  + resource \"scaleway_instance_ip\" \"server1_public_ip\" {\n      + address         = (known after apply)\n      + id              = (known after apply)\n      + organization_id = (known after apply)\n      + project_id      = (known after apply)\n      + reverse         = (known after apply)\n      + server_id       = (known after apply)\n      + zone            = (known after apply)\n    }\n\n  # scaleway_instance_server.server1 will be created\n  + resource \"scaleway_instance_server\" \"server1\" {\n      + boot_type                        = \"local\"\n      + bootscript_id                    = (known after apply)\n      + cloud_init                       = (known after apply)\n      + enable_dynamic_ip                = false\n      + enable_ipv6                      = false\n      + id                               = (known after apply)\n      + image                            = \"ubuntu_jammy\"\n      + ip_id                            = (known after apply)\n      + ipv6_address                     = (known after apply)\n      + ipv6_gateway                     = (known after apply)\n      + ipv6_prefix_length               = (known after apply)\n      + name                             = (known after apply)\n      + organization_id                  = (known after apply)\n      + placement_group_policy_respected = (known after apply)\n      + private_ip                       = (known after apply)\n      + project_id                       = (known after apply)\n      + public_ip                        = (known after apply)\n      + security_group_id                = (known after apply)\n      + state                            = \"started\"\n      + type                             = \"DEV1-S\"\n      + user_data                        = (known after apply)\n      + zone                             = (known after apply)\n\n      + root_volume {\n          + boot                  = false\n          + delete_on_termination = true\n          + name                  = (known after apply)\n          + size_in_gb            = 10\n          + volume_id             = (known after apply)\n          + volume_type           = (known after apply)\n        }\n    }\n\nPlan: 2 to add, 0 to change, 0 to destroy.\n```\n\n```sh\n$ terraform apply\n\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\n  + create\n\nTerraform will perform the following actions:\n\n  # scaleway_account_ssh_key.stephane-klein-public-ssh-key will be created\n  + resource \"scaleway_account_ssh_key\" \"stephane-klein-public-ssh-key\" {\n      + created_at      = (known after apply)\n      + disabled        = false\n      + fingerprint     = (known after apply)\n      + id              = (known after apply)\n      + name            = \"stephane-klein-public-ssh-key\"\n      + organization_id = (known after apply)\n      + project_id      = (known after apply)\n      + public_key      = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEzyNFlEuHIlewK0B8B0uAc9Q3JKjzi7myUMhvtB3JmA2BqHfVHyGimuAajSkaemjvIlWZ3IFddf0UibjOfmQH57/faxcNEino+6uPRjs0pFH8sNKWAaPX1qYqOFhB3m+om0hZDeQCyZ1x1R6m+B0VJHWQ3pxFaxQvL/K+454AmIWB0b87MMHHX0UzUja5D6sHYscHo57rzJI1fc66+AFz4fcRd/z+sUsDlLSIOWfVNuzXuGpKYuG+VW9moiMTUo8gTE9Nam6V2uFwv2w3NaOs/2KL+PpbY662v+iIB2Yyl4EP1JgczShOoZkLatnw823nD1muC8tYODxVq7Xf7pM/NSCf3GPCXtxoOEqxprLapIet0uBSB4oNZhC9h7K/1MEaBGbU+E2J5/5hURYDmYXy6KZWqrK/OEf4raGqx1bsaWcONOfIVXbj3zXTUobsqSkyCkkR3hJbf39JZ8/6ONAJS/3O+wFZknFJYmaRPuaWiLZxRj5/gw01vkNVMrogOIkQtzNDB6fh2q27ghSRkAkM8EVqkW21WkpB7y16Vzva4KSZgQcFcyxUTqG414fP+/V38aCopGpqB6XjnvyRorPHXjm2ViVWbjxmBSQ9aK0+2MeKA9WmHN0QoBMVRPrN6NBa3z20z1kMQ/qlRXiDFOEkuW4C1n2KTVNd6IOGE8AufQ== contact@stephane-klein.info\"\n      + updated_at      = (known after apply)\n    }\n\n  # scaleway_instance_ip.server1_public_ip will be created\n  + resource \"scaleway_instance_ip\" \"server1_public_ip\" {\n      + address         = (known after apply)\n      + id              = (known after apply)\n      + organization_id = (known after apply)\n      + project_id      = (known after apply)\n      + reverse         = (known after apply)\n      + server_id       = (known after apply)\n      + zone            = (known after apply)\n    }\n\n  # scaleway_instance_server.server1 will be created\n  + resource \"scaleway_instance_server\" \"server1\" {\n      + boot_type                        = \"local\"\n      + bootscript_id                    = (known after apply)\n      + cloud_init                       = (known after apply)\n      + enable_dynamic_ip                = false\n      + enable_ipv6                      = false\n      + id                               = (known after apply)\n      + image                            = \"ubuntu_jammy\"\n      + ip_id                            = (known after apply)\n      + ipv6_address                     = (known after apply)\n      + ipv6_gateway                     = (known after apply)\n      + ipv6_prefix_length               = (known after apply)\n      + name                             = (known after apply)\n      + organization_id                  = (known after apply)\n      + placement_group_policy_respected = (known after apply)\n      + private_ip                       = (known after apply)\n      + project_id                       = (known after apply)\n      + public_ip                        = (known after apply)\n      + security_group_id                = (known after apply)\n      + state                            = \"started\"\n      + type                             = \"DEV1-S\"\n      + user_data                        = (known after apply)\n      + zone                             = (known after apply)\n\n      + root_volume {\n          + boot                  = false\n          + delete_on_termination = true\n          + name                  = (known after apply)\n          + size_in_gb            = 10\n          + volume_id             = (known after apply)\n          + volume_type           = (known after apply)\n        }\n    }\n\nPlan: 3 to add, 0 to change, 0 to destroy.\n\nDo you want to perform these actions?\n  Terraform will perform the actions described above.\n  Only 'yes' will be accepted to approve.\n\n  Enter a value: yes\n\nscaleway_account_ssh_key.stephane-klein-public-ssh-key: Creating...\nscaleway_instance_ip.server1_public_ip: Creating...\nscaleway_account_ssh_key.stephane-klein-public-ssh-key: Creation complete after 0s [id=9f74bc84-5b4d-4769-a3f0-eb83304aaf57]\nscaleway_instance_ip.server1_public_ip: Creation complete after 1s [id=fr-par-1/3b9b6220-798c-4907-8c24-e71bee80c94f]\nscaleway_instance_server.server1: Creating...\nscaleway_instance_server.server1: Still creating... [10s elapsed]\nscaleway_instance_server.server1: Still creating... [20s elapsed]\nscaleway_instance_server.server1: Creation complete after 24s [id=fr-par-1/b17673c5-2b8c-4f36-8d4d-a6bbd933b4c6]\n\nApply complete! Resources: 3 added, 0 changed, 0 destroyed.\n```\n\n```\n$ scw instance server list\nID                                    NAME                   TYPE    STATE    ZONE      PUBLIC IP     PRIVATE IP   TAGS  IMAGE NAME\nb17673c5-2b8c-4f36-8d4d-a6bbd933b4c6  tf-srv-frosty-dewdney  DEV1-S  running  fr-par-1  51.15.192.91  10.68.40.41  []    Ubuntu 22.04 Jammy Jellyfish\n```\n\nFetch public ip:\n\n```\n$ scw instance server list name=server1 -o json | jq -r \".[0].public_ip.address\"\n```\n\nor:\n\n```sh\n$ source .envrc\n$ echo $SERVER1_IP\n51.158.119.141\n```\n\nAdd server fingerprint to you `known_hosts`:\n\n```\n$ ssh -o \"StrictHostKeyChecking no\" root@$SERVER1_IP\n# exit\n```\n\n```\n$ ./scripts/install_basic_server_configuration.sh\n```\n\n## Part 2: deploy Miniflux application\n\n```sh\n$ ./scripts/deploy_miniflux.sh\n$ echo \"Go to http://$SERVER1_IP:8080\"\nGo to http://51.158.119.141:8080\n```\n\n- Login: `johndoe`\n- Password: see password in `.secret`\n\n\n## Part 3: destroy the server\n\n```sh\n$ terraform destroy\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephane-klein%2Fpoc-bash-ssh-docker-deployement-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephane-klein%2Fpoc-bash-ssh-docker-deployement-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephane-klein%2Fpoc-bash-ssh-docker-deployement-example/lists"}