{"id":17683220,"url":"https://github.com/nemanjam/dokku-deployment","last_synced_at":"2026-01-08T12:32:59.686Z","repository":{"id":89338517,"uuid":"605755484","full_name":"nemanjam/dokku-deployment","owner":"nemanjam","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-01T11:51:11.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-05T22:46:47.788Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nemanjam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-02-23T20:44:15.000Z","updated_at":"2023-02-23T21:46:16.000Z","dependencies_parsed_at":"2023-03-13T18:12:27.021Z","dependency_job_id":null,"html_url":"https://github.com/nemanjam/dokku-deployment","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nemanjam%2Fdokku-deployment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nemanjam%2Fdokku-deployment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nemanjam%2Fdokku-deployment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nemanjam%2Fdokku-deployment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nemanjam","download_url":"https://codeload.github.com/nemanjam/dokku-deployment/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246372501,"owners_count":20766627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-24T09:44:42.414Z","updated_at":"2026-01-08T12:32:59.661Z","avatar_url":"https://github.com/nemanjam.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Dokku routed through Traefik\n\n- Dokku dns setup [docs](https://dokku.com/docs/networking/dns/)\n- `docker-compose.yml` [example1](https://gist.github.com/GegeDesembri/9e5a49b4c49f6136e2b5b3e7af373c8e), [example2](https://gist.github.com/joshghent/39fa894630b55bd32aabf2bd09544ba3)\n- generate ssh keys [tutorial](https://linuxize.com/post/how-to-set-up-ssh-keys-on-ubuntu-20-04/)\n- Dokku Docker installation [docs](https://dokku.com/docs/getting-started/install/docker/)\n- Dokku install on host [freecodecamp](https://www.freecodecamp.org/news/how-to-build-your-on-heroku-with-dokku/)\n\n### Generate key at /home/username/.ssh/id_rsa (on Desktop, for Git)\n\n```bash\n\nssh-keygen -t rsa -b 4096 -C \"your_email@domain.com\"\n\n# move to (chmod 600):\n~/.ssh/oracle_amd1/dokku_docker_amd1__id_rsa\n~/.ssh/oracle_amd1/dokku_docker_amd1__id_rsa.pub\n```\n\n#### add to ~/.ssh/config\n\n```bash\n# Dokku docker amd1\nHost dokku.localhost3000.live\n    HostName dokku.localhost3000.live\n    PreferredAuthentications publickey\n    IdentityFile ~/.ssh/oracle_amd1/dokku_docker_amd1__id_rsa\n    Port 3022\n```\n\n- open 3022 (as destination port) on server\n\n### Add public key to dokku container (on server)\n\n```bash\n# on desktop\n# temp copy pub key to server to home folder\nscp ~/.ssh/oracle_amd1/dokku_docker_amd1__id_rsa.pub ubuntu@amd1:/home/ubuntu/dokku_docker_amd1__id_rsa.pub\n\n# on server\n# prefix to exec commands in container (no need to enter container)\ndocker exec -it dokku bash\n\n# list keys\ndocker exec -it dokku bash dokku ssh-keys:list\n\n# copy key in /tmp in container (maybe add shared volume)\n# container id changes every time\ndocker cp /home/ubuntu/dokku_docker_amd1__id_rsa.pub d0b2477737d5:/tmp/\n\n\n# check if copied\n# enter container\ndocker exec -it dokku bash\n# list /tmp/\nls -la\n\n# add SSH key from container to Dokku\ndocker exec -it dokku bash dokku ssh-keys:add admin /tmp/dokku_docker_amd1__id_rsa.pub\n\n# list keys\ndocker exec -it dokku bash dokku ssh-keys:list\n\n# delete temp key\ndocker exec -it dokku bash\nrm -rf ./dokku_docker_amd1__id_rsa.pub\nls -la\n\n```\n\n### Deploy an app from src (this builds image on server - needs RAM)\n\n- deploy app [docs](https://dokku.com/docs/deployment/application-deployment/)\n\n```bash\n# 1. without database\n\n# on server (in dokku container)\n# for url: lure-shop-react.dokku.localhost3000.live\ndocker exec -it dokku bash dokku apps:create lure-shop-react\n\n# add remote (in local app git repo)\ngit remote add dokku dokku@dokku.localhost3000.live:lure-shop-react\ngit push dokku master:master\n\n\n```\n\n### Deploy app from Docker image\n\n- [docs](https://dokku.com/docs/deployment/methods/git/#initializing-an-app-repository-from-a-docker-image)\n\n---\n\n#### Aliases\n\n```\nnano ~/.bashrc\n\n# exec dokku in container\nalias dokkuc=\"docker exec -it dokku bash dokku\"\n\n# docker compose up/down\nalias dcdown=\"docker compose down\"\nalias dcup=\"docker compose up -d\"\n\n# reload shell to apply\nsource ~/.bashrc\n```\n\n## Add public key to dokku container (on server) - simpler way\n\n### Reset Dokku container\n\n```bash\n# remove dokku container\nssh ubuntu@arm1 \"\ncd ~/dokku-deployment \u0026\u0026\ndocker compose down\n\"\n\n# delete dokku volume\nssh ubuntu@arm1 \"\nsudo rm -rf ~/dokku-deployment/dokku-data \u0026\u0026\nls -la ~/dokku-deployment\n\"\n\n# start dokku container\nssh ubuntu@arm1 \"\ncd ~/dokku-deployment \u0026\u0026\ndocker compose up -d\n\"\n```\n\n#### Oneliner set local key to remote container\n\n```bash\n# set key, works multiline, container must run\nscp ~/.ssh/oracle/dokku_docker__id_rsa.pub ubuntu@arm1:/tmp/ \u0026\u0026 \\\nssh ubuntu@arm1 \" \\\n  docker exec -i dokku bash dokku ssh-keys:add admin \u003c /tmp/dokku_docker__id_rsa.pub \u0026\u0026 \\\n  rm /tmp/dokku_docker__id_rsa.pub \\\n\"\n\n# remove key\nssh ubuntu@arm1 \"docker exec dokku bash dokku ssh-keys:remove admin\"\n\n# list keys\nssh ubuntu@arm1 \"docker exec dokku bash dokku ssh-keys:list\"\n\n```\n\n# Prepare ARM server for buildpacks - IMPORTANT\n\n```bash\ndocker run --privileged --rm tonistiigi/binfmt --install all\n```\n\n# Attach all app containers to traefik and dokku external network - IMPORTANT (only for Nginx)\n\n```bash\n# this attaches to Nginx but detaches from traefik\ndokku network:set --global initial-network dokku-external\n\n# this exposes app to host without proxy, 0.0.0.0:32770:5000, host:container\n# i dont need this\n dokku network:set --global bind-all-interfaces true\n```\n\n### Add remote, create app and push\n\n```bash\n# add remote\ngit remote add dokku dokku@dokku.arm1.localhost3002.live:nextjs-app\n\n# create app\ndokku apps:create nextjs-app\n\n# list all apps\ndokku apps:list\n\n# check app networks\ndokku network:report nextjs-app\n\n# list all networks\ndokku network:list\n\n# push\ngit push dokku main:main\n```\n\n### Setup Lets Encrypt\n\n```bash\n# lista all installed plugins\ndokku plugin:list\n\n# check if letsencrypt is installed, doesnt work\n# it is included in apps/dokku/dokku-data/plugin-list\ndokku plugin:installed letsencrypt\n\n# if not installed already\ndokku plugin:install https://github.com/dokku/dokku-letsencrypt.git\ndokku plugin:install https://github.com/dokku/dokku-letsencrypt.git --committish 0.17.0\n\ndokku plugin:install https://github.com/dokku/dokku-letsencrypt.git --committish 0.19.0\n\n# uninstall\ndokku plugin:uninstall letsencrypt\n\n# set global email for all apps\n# cant be set per app...\ndokku config:set --global DOKKU_LETSENCRYPT_EMAIL=miroljub.petrovic.acc@gmail.com\n\n# it prints i have to set email like this\ndokku letsencrypt:set nextjs-app email miroljub.petrovic.acc@gmail.com\n\n# enable for app\ndokku letsencrypt:enable nextjs-app\n\n# check for app\ndokku letsencrypt:active nextjs-app\n\n# enable auto-renewal\ndokku letsencrypt:cron-job --add\n```\n\n### Start, stop, rebuild app\n\n```bash\n# enter container\ndocker exec -it dokku bash\n\n# debug all config\ndokku config:show nextjs-app\n\n# debug processes\ndokku ps:report\n\n# debug ports\ndokku proxy:ports nextjs-app\n\n# stop\ndokku ps:stop nextjs-app\n\n# start\ndokku ps:start nextjs-app\n\n# rebuild, redeploy app\ndokku ps:rebuild nextjs-app\n\n# test https, -v\ncurl http://nextjs-app.dokku.arm1.localhost3002.live\ncurl https://nextjs-app.dokku.arm1.localhost3002.live\n\n# disable hsts nginx\ndokku nginx:set --global hsts false\n\n# debug domains, .env file\ndokku domains:report --global\ndokku domains:report nextjs-app\n\n# debug nginx - default proxy\ndokku nginx:show-config\n\n\n# verbose, complete\n# print everything about app\ndokku report nextjs-app\ndokku ps:inspect $APP\nsudo apt install tree\ntree -da .\n```\n\n### Volume and env var must match - ${PWD}/dokku-data\n\n```yaml\n# DOKKU_HOST_ROOT = path on host, volume path + /home/dokku\n\nenvironment:\n  - DOKKU_HOST_ROOT=${PWD}/dokku-data/home/dokku\nvolumes:\n  - ${PWD}/dokku-data:/mnt/dokku\n  - ${PWD}/plugin-list:/mnt/dokku/plugin-list\n```\n\n### Set custom buildpacks\n\n```bash\n# pack installed in Dockerfile\n\n# report\ndokku buildpacks:report\n\n# set globally\ndokku buildpacks:set-property --global stack paketobuildpacks/builder:base\n\n# unset globally, reset to default gliderlabs/herokuish:latest\ndokku buildpacks:set-property --global stack\n\n# possible buildpack options\n# must run in js app folder\nubuntu@arm1:~/NODE-JS-APP$ pack builder suggest\nSuggested builders:\nGoogle:                gcr.io/buildpacks/builder:v1\nHeroku:                heroku/builder:22\nHeroku:                heroku/buildpacks:20\nPaketo Buildpacks:     paketobuildpacks/builder:base\nPaketo Buildpacks:     paketobuildpacks/builder:full\nPaketo Buildpacks:     paketobuildpacks/builder:tiny\n```\n\n### Steps\n\n1. set ssh key\n2. attach all aps to external network\n3. create app, add remote\n4. push and deploy\n5. letsencript ssl\n6.\n\n### Dokku is behind Traefik, this isn't the problem\n\nOvo je fora, mora da bude dostupan https i http, a ne iza traefik, ovde reko\n\nhttps://github.com/dokku/dokku-letsencrypt#dockerfile-and-image-based-deploys\n\n### Run Dokku in http hsts mode - wrong, wont work\n\nTraefik can set it too...\n\n```bash\n# remove containers\n\n# print options\ndokku nginx:report nextjs-app\n\n# disable hsts check, default is true\ndokku nginx:set --global hsts false\n\n# rebuild proxy after edit\ndokku proxy:build-config nextjs-app\n\n# create and run containers\n```\n\n### Switch to Traefik proxy for Lets encrypt, because Nginx letsencrypt is broken\n\n```bash\n# create app\ndokku apps:create nextjs-app\n\n# switch to treafik, set this before push to avoid rebuild\ndokku proxy:set nextjs-app traefik\n\n# rebuild app, not just proxy, only if pushed already\ndokku ps:rebuild nextjs-app\n\n# start/stop treafik\n# problem: this container is on separate network from app and dokku containers\n# must disable 80 on dokku container to free it for traefik, nginx goes through dokku, wtf\ndokku traefik:start\n\n# enable letsencrypt for traefik globally\n# must rebuild apps and restart traefik, damn\ndokku traefik:set --global letsencrypt-email miroljub.petrovic.acc@gmail.com\n\n# report\ndokku traefik:report\n```\n\n## Setup dokku-deployment\n\n```bash\n# create global network\ndocker network create dokku-external\n\n# create .env\ncp .env.example .env\n\n# open 9433 destination port on server\n\n# attach to network, global\ndokku network:set --global initial-network dokku-external\n\n# attach app to network\ndokku network:set nextjs-app initial-network dokku-external\n\n# switch to traefik\n\n\n```\n\n### Access Portainer\n\nhttps://arm1.localhost3002.live:9443\n\nprobaj ovo\n\nhttps://github.com/dokku/dokku-letsencrypt/issues/274\nsudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git --committish 0.17.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemanjam%2Fdokku-deployment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnemanjam%2Fdokku-deployment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemanjam%2Fdokku-deployment/lists"}