{"id":23786613,"url":"https://github.com/seabbs/personal-server","last_synced_at":"2026-04-29T23:31:36.720Z","repository":{"id":99745041,"uuid":"130842703","full_name":"seabbs/personal-server","owner":"seabbs","description":"Setup for my personal server","archived":false,"fork":false,"pushed_at":"2018-08-21T13:04:25.000Z","size":109,"stargazers_count":4,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-19T15:40:23.546Z","etag":null,"topics":["docker","docker-compose","google-cloud","nginx","rstats","rstudio","shinyproxy"],"latest_commit_sha":null,"homepage":"https://www.samabbott.co.uk/#projects","language":"Shell","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/seabbs.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":"2018-04-24T11:20:17.000Z","updated_at":"2021-11-30T07:30:45.000Z","dependencies_parsed_at":"2023-07-31T19:45:58.029Z","dependency_job_id":null,"html_url":"https://github.com/seabbs/personal-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seabbs/personal-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seabbs%2Fpersonal-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seabbs%2Fpersonal-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seabbs%2Fpersonal-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seabbs%2Fpersonal-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seabbs","download_url":"https://codeload.github.com/seabbs/personal-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seabbs%2Fpersonal-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32448356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","docker-compose","google-cloud","nginx","rstats","rstudio","shinyproxy"],"created_at":"2025-01-01T14:27:23.567Z","updated_at":"2026-04-29T23:31:36.699Z","avatar_url":"https://github.com/seabbs.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal Server\n\nThis repository contains the docker containers and `docker-compose.yml`'s required to launch my personal server. Applications hosted by this server can be found at [apps.samabbott.co.uk](https://apps.samabbott.co.uk), although the server is designed to serve users from [samabbott.co.uk/#projects](https://www.samabbott.co.uk/#projects). It makes use of the following services,\n\n- [Shinyproxy](https://www.shinyproxy.io)\n- [Rstudio server (via rocker)](https://hub.docker.com/r/rocker/tidyverse/)\n- [Jenkins](https://jenkins.io)\n- [Nginx](http://nginx.org)\n- [LetsEncrypt](https://letsencrypt.org)\n- [Watchtower](https://github.com/v2tec/watchtower)\n\nModification to another use case should be straightforward. Any suggestions for improvements are welcome.\n\n## Set-up\n\nThe server can be launched using the following `bash` commands (implemented in the `set-up-server.sh` bash script) once the secrets folder has been setup as required.\n\n- Clone this repository into a docker and docker-compose enabled environment.\n\n```bash\ngit clone https://github.com/seabbs/personal-server.git\n```\n-  Add required secrets to the `secrets` folder. Subdirectories are named based on the container they provide secrets for. Required container secrets are listed in `containers/docker-compose.yml`\n\n- Add docker network\n\n```bash\ndocker network create shinyproxy-net\n```\n\n- Pull all images.\n\n```bash\n docker-compose -f containers/docker-compose.yml pull --ignore-pull-failures\n```\n\n- Build all images.\n\n```bash\n docker-compose -f containers/docker-compose.yml build\n```\n\n- Change permissions for Jenkins\n\n```bash\nsudo chown -R 1000:1000 secrets/jenkins\n```\n\n- Launch all services\n\n```bash\n docker-compose up -d\n```\n\nThere should now be a shinyproxy instance at `8080` , a jenkins instance at `9090`, and an Rstudio instance at `8888`.\n\n\n## Scheduled jobs\n\nThe Jenkins instance (found at `localhost:9090`) is used to run scheduled docker containers. Currently these jobs are;\n\n- Run the [`h2o` StackOverflow Twitter bot](https://github.com/seabbs/h2o_tweets) every 15 minutes (`H/15 * * * *`) with,\n\n```bash\ncd ../../..\nsudo docker-compose -f personal-server/containers/docker-compose.yml run h2o_tweets bash bin/run_h2o_bot.sh\n```\n\n- Run the second [summary `h2o` StackOverflow Twitter bot](https://github.com/seabbs/h2o_tweets) every month (`H 0 01 * *`) with,\n\n```bash\ncd ../../..\nsudo docker-compose -f personal-server/containers/docker-compose.yml run h2o_tweets bash bin/run_h2o_monthly_bot.sh\n```\n\n- Run the [Rstudio Cheatsheet Twitter Bot](https://github.com/seabbs/TweetRstudioCheatsheets) once a day (`H 0 * * *`) with,\n\n```bash\ncd ../../..\nsudo docker-compose -f personal-server/containers/docker-compose.yml run tweetrstudiocheatsheets Rscript bot.R\n```\n\n- Back up the server storage once a day (`H 1 * * *`) to a Google bucket with,\n\n```bash\ncd ../../..\nsudo bash personal-server/push_to_bucket.sh\n```\n\n## Connecting to the server\n\nIf properly configured the Shinyproxy instance can be found at [apps.samabbott.co.uk](http://apps.samabbott.co.uk), with the Rstudio instance at [rstudio.samabbott.co.uk](https://rstudio.samabbott.co.uk) (password controlled via `secrets`). In order to access the Jenkins server connect over ssh, forwarding `9090`. Similarly both the ShinyProxy instance and the Rstudio instance may also be accessed using port forwarding (`8080` and `8888` respectively).\n\n## Updating\n\nTo update containers use `docker-compose -f containers/docker-compose.yml pull \u003ccontainer-name\u003e` to update built images and `docker-compose -f containers/docker-compose.yml build \u003ccontainer-name\u003e` to update container builds. Then bring down the running container using `docker-compose down \u003ccontainer-name\u003e` and relaunch it using `docker-compose up \u003ccontainer-name\u003e`. Alternatively a [Watchtower container](https://github.com/v2tec/watchtower) is monitoring the available images and every hour will refresh the running images with any newly available images. Before updating the Jenkins container be sure to back up the jenkins folder using `bash push_to_bucket.sh`.\n\n## Future developments\n\nSee the [GitHub issues](https://github.com/seabbs/personal-server/issues) for planned bug fixes and enhancements. Any suggestions or bug reports are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseabbs%2Fpersonal-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseabbs%2Fpersonal-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseabbs%2Fpersonal-server/lists"}