{"id":20260809,"url":"https://github.com/adrianlois/rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","last_synced_at":"2026-04-09T16:03:00.296Z","repository":{"id":60858760,"uuid":"278938937","full_name":"adrianlois/rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","owner":"adrianlois","description":"Configuration steps for RaspberryPi and deploy containers Docker: nginx, nginx-proxy, letsencrypt, duckddns and onwcloud","archived":false,"fork":false,"pushed_at":"2024-12-02T22:45:34.000Z","size":65,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-14T04:21:47.048Z","etag":null,"topics":["apache2","docker","docker-compose","duckdns","fail2ban","letsencrypt","nginx","nginx-proxy","owncloud","proftpd","raspberrypi","samba","ssh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrianlois.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":"2020-07-11T20:44:12.000Z","updated_at":"2024-12-02T22:45:39.000Z","dependencies_parsed_at":"2024-11-14T11:25:54.573Z","dependency_job_id":"a3157c0e-f00b-4cd8-b283-52797a6de3c7","html_url":"https://github.com/adrianlois/rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","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/adrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrianlois","download_url":"https://codeload.github.com/adrianlois/rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241721589,"owners_count":20009205,"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":["apache2","docker","docker-compose","duckdns","fail2ban","letsencrypt","nginx","nginx-proxy","owncloud","proftpd","raspberrypi","samba","ssh"],"created_at":"2024-11-14T11:22:26.849Z","updated_at":"2026-04-09T16:02:55.277Z","avatar_url":"https://github.com/adrianlois.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Configuration steps for my Raspberry Pi\n\nConfiguration steps for RaspberryPi and deploy containers Docker: nginx, nginx-proxy, letsencrypt, duckddns and onwcloud\n\n### Download image Ubuntu for RPI\n- https://ubuntu.com/download/raspberry-pi\n- https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#2-prepare-the-sd-card\n\n#### Add local user\n```bash\nuseradd -m -s /bin/bash USER\nusermod -G sudo USER\npasswd USER\n```\n#### Delete user by default RPI\n```bash\nuserdel -f ubuntu\n```\n#### Change hostname RPI\n```bash\necho \"rpi\" \u003e /etc/hostname\necho \"IP rpi\" \u003e\u003e /etc/hosts\n```\n\n#### nano editor config (.nanorc)\n```bash\nset tabsize 4\nset autoindent\nset smooth\nset linenumbers\nset nohelp\nset softwrap\n```\n\n#### Disable grace period sudo\n- /etc/sudoers\n```bash\necho \"Defaults timestamp_timeout=0\" \u003e\u003e /etc/sudoers\n```\n\n#### Packages installation and requirements\n```bash\napt update -y \u0026\u0026 apt install -y sysstat htop ncdu mlocate bat cifs-utils \\ \ntmux p7zip-full p7zip-rar zip unzip tree fail2ban \\ \napache2-utils firefox python3 \u0026\u0026 \\ \ncurl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \u0026\u0026 \\\npython get-pip.py \u0026\u0026 rm get-pip.py\n```\n\n#### Add aliases to my .bashrc\n```bash\necho \"alias cat='batcat'\" \u003e\u003e $HOME/.bashrc\n```\n\n#### SSH server config\n- /etc/ssh/sshd_config\n```bash\nPasswordAuthentication yes\nPubkeyAuthentication yes\nAuthorizedKeysFile  .ssh/authorized_keys\nAllowUsers USER\nAllowTcpForwarding yes\nGatewayPorts yes\nX11Forwarding yes\nAcceptEnv LANG LC_*\nSubsystem sftp  /usr/lib/openssh/sftp-server\n```\n```bash\nsystemctl enable ssh \u0026\u0026 systemctl restart ssh\n```\n\n#### SSH permission in directories and configure public key authentication\n```bash\nsu - USER\nmkdir -p -m 700 ~/.ssh\ntouch ~/.ssh/authorized_keys \u0026\u0026 chmod 600 ~/.ssh/authorized_keys\n(install -m 600 /dev/null ~/.ssh/authorized_keys)\n```\n\u003e set public key (ssh-rsa ...pubkey... rsa-key-xxxxxxxx)\n```bash\nUSER@rpi:~$ tree -pugah\n├── [drwx------ USER   USER   4.0K]  .ssh\n│   └── [-rw------- USER   USER    398]  authorized_keys\n└── [lrwxrwxrwx root     root       14]  sharedrpi -\u003e /mnt/sharedrpi\n```\n\n#### fail2ban config\n\n- /etc/fail2ban/jail.conf\n```bash\nignoreip = 127.0.0.1/8 ::1 \u003cMY_NETWORK_IP\u003e/\u003cCIDR\u003e\n[sshd]\nport     = ssh\nlogpath  = %(sshd_log)s\nbackend  = %(sshd_backend)s\nbantime  = 172800\nfindtime = 600\nmaxretry = 3\n```\n```bash\nsystemctl enable fail2ban \u0026\u0026 systemctl restart fail2ban\n```\n\n#### Create shared and scripts folder\n```bash\nmkdir /mnt/sharedrpi\nln -s /mnt/sharedrpi /home/USER/sharedrpi\n\nmkdir /scripts \u0026\u0026 cd /scripts\ngit clone https://github.com/adrianlois/rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud.git\nmv rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/* . \u0026\u0026 mv scripts/* . \u0026\u0026 mv scripts/.[!.]* .\nrm -rf rpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/ docker/nginx/htpasswd scripts/ LICENSE README.md\n\nchmod 600 .smbcredentials docker/.env\ncp -r docker/nginx/.nginx-error-pages /home/USER/sharedrpi/\n```\n\n#### Crontab config\n```bash\nchmod 700 /scripts/sharedrpi.sh\n```\n- /etc/crontab\n```bash\n# @reboot sleep 30 \u0026\u0026 /scripts/sharedrpi.sh\n*/1 * * * * root /scripts/sharedrpi.sh\n```\n\n#### htpasswd file for nginx or apache2\n```bash\nhtpasswd -c /scripts/docker/nginx/htpasswd USER\nchmod 644 /scripts/docker/nginx/htpasswd\n```\n\n#### External USB format ext4 and mount for ownCloud\n```bash\nmkdir -m 777 /media/owncloud\n\nfdisk -l\nmkfs.ext4 /dev/sdaX\n\nlsblk -o NAME,FSTYPE,SIZE /dev/sdaX\nblkid -o list\n(ls -l /dev/disk/by-uuid)\necho -e \"\\nUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /media/owncloud  ext4  defaults  0  0\" \u003e\u003e /etc/fstab\nmount -a\n```\n\n### Install Docker \u0026 Docker Compose\n- https://docs.docker.com/engine/install/ubuntu/\n- https://docs.docker.com/compose/install/\n```bash\ncurl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \u0026\u0026 sudo python3 get-pip.py\napt install -y python3-pip libffi-dev\ncurl -sSL https://get.docker.com | sh\npip3 install docker-compose\n```\n\n#### Running docker without sudo from another user\n```bash\nsudo usermod -aG docker ${USER}\nid -nG\n```\n\n#### Delay docker service startup at system boot\n\nStart nginx containers after mounting the sharedrpi sharedrpi share (crontab script sharedrpi.sh).\n\n```bash\nsudo systemctl edit docker.service\n\n[Service]\nExecStartPre=/bin/sleep 90\n```\n\n#### Deploy compatible docker containers for RaspberryPi\n\n```bash\ncd /scripts/docker\ndocker-compose up -d\n```\n\n*docker-compose.yaml*\n- duckdns\n- nginx\n- nginx-proxy (80)\n- owncloud (8080)\n- mariadb\n- redis\n\n*docker-compose2.yaml*\n- duckdns\n- nginx\n- nginx-proxy (80,443)\n- letsencrypt\n\n*docker-compose3.yaml*\n- duckdns\n- nginx\n- nginx-proxy (80)\n\n---\n\n## Optional configs services\n\n#### Samba config (optional)\n- /etc/samba/smb.conf\n```bash\n[global]\nworkgroup = WORKGROUP\nusershare allow guests = yes\n\n# Shared resource with anonymous access without password\n[sharedrpi]\n   comment = Shared rpi\n   path = /mnt/sharedrpi\n   browseable = Yes\n   writeable = Yes\n   public = yes\n\nsecurity = SHARE\n```\nThis service will be stopped.\n```bash\nsystemctl disable smbd\nsystemctl stop smbd\n```\n\n#### Apache2 config (optional)\n```bash\napt install -y apache2\n# Update latest version apache2\napt install --only-upgrade apache2\n```\n\nRequired modules.\n```bash\napache2 -M\nls /etc/apache2/mods-available/\na2enmod auth_basic\na2enmod authn_file\na2enmod authz_user\na2enmod authn_core\na2enmod authz_core\n```\n- vhost 000-default.conf\n```bash\nDocumentRoot /var/www/sharedrpi\n\u003cDirectory \"/var/www/sharedrpi\"\u003e\n        AuthType Basic\n        AuthName \"Restricted access\"\n        AuthUserFile /var/www/htpasswd\n        Require user USER\n\u003c/Directory\u003e\n```\n- /etc/apache/apache2.conf\n```bash\n# Hide Apache2 server info from Index Of /\nServerSignature Off\nServerTokens Prod\n```\n\n#### Proftpd config (optional)\n- /etc/proftpd/proftpd.conf\n```bash\nMaxInstances                    3\nUser                            proftpd\nGroup                           nogroup\nAllowOverwrite                  on\n\nServerName                      \"FTP Server\"\n\nDefaultRoot /mnt/sharedrpi\nInclude /etc/proftpd/conf.d/\n\n# Limit connection to only one user, jailed in their directory\nDefaultRoot /mnt/ftp\n\u003cLimit LOGIN\u003e\nAllowUser USER\nDenyAll\n\u003c/Limit\u003e\n```\n\n#### SFTP config (optional)\n```bash\nmkdir /var/sftpusers\ngroupadd sftp_users\nuseradd -d /var/sftpusers -G sftp_users sftpuser1\nchown -R root:sftp_users /var/sftpusers/\nchmod -R 770 /var/sftpusers/\n```\n\n- /etc/ssh/sshd_config\n```bash\n#Subsystem sftp /usr/libexec/openssh/sftp-server\nSubsystem sftp internal-sftp\nMatch Group sftp_users\nChrootDirectory /var/sftpusers\nForceCommand internal-sftp\nX11Forwarding no\nAllowTcpForwarding no\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianlois%2Frpi-config-nginx-proxy-letsencrypt-duckdns-owncloud/lists"}