forked from andonome/lk
		
	add radicale with nginx
This commit is contained in:
		
							
								
								
									
										126
									
								
								data/radicale.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								data/radicale.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| --- | ||||
| title: "radicale and nginx" | ||||
| tags: [ "data", "calendar" ] | ||||
| --- | ||||
|  | ||||
| Check before you start: | ||||
|  | ||||
| - you have a normally running site on nginx already. | ||||
| - your server has the directory `/etc/nginx/sites-enabled/` enabled in the nginx config. | ||||
|  | ||||
| ## Installation and Service | ||||
|  | ||||
| Install `radicale` through your package manager (not `pip`). | ||||
| The standard `radicale` package should come with a nice `systemd` service file. | ||||
|  | ||||
| If the service comes already-started, stop it immediately: | ||||
|  | ||||
| ```bash | ||||
| sudo systemctl stop radicale | ||||
| ``` | ||||
|  | ||||
| ## Set up Passwords | ||||
|  | ||||
| Edit `/etc/radicale/config`, changing the `[auth]` section from this: | ||||
|  | ||||
| ``` | ||||
| #type = none | ||||
| ``` | ||||
|  | ||||
| ...to this: | ||||
| ``` | ||||
| #type = htpasswd | ||||
| ``` | ||||
|  | ||||
| If the service is started, restart it to make sure nobody can sign in without a password. | ||||
|  | ||||
|  | ||||
| Next, find the `htpasswd` program. | ||||
| You might get it in the `apache` package or similar. | ||||
|  | ||||
| `htpasswd` allows you to generate passwords for users, and place them in `/etc/radicale/users`. | ||||
|  | ||||
| ```bash | ||||
| PASS="$(xkcdpass) | ||||
| htpasswd -nb $USER "$PASS" | sudo tee -a /etc/radicale/users | ||||
| echo "Your username is $USER" | ||||
| echo "Your password is $PASS" | ||||
| ``` | ||||
| Right now, you can't sign into the server except through the localhost, which is pointless. | ||||
| So now we add a subdomain to `nginx`. | ||||
|  | ||||
| ```nginx | ||||
|  | ||||
| echo ' | ||||
|  server { | ||||
|     if ($host = cal.DOMAIN) { | ||||
|         return 301 https://$host$request_uri; | ||||
|     } # managed by Certbot | ||||
|  | ||||
|  | ||||
|      listen 80; | ||||
|      server_name cal.DOMAIN; | ||||
|                                                                                          | ||||
|      location / { | ||||
|          proxy_pass http://localhost:5232; | ||||
|          proxy_set_header Host $host; | ||||
|          proxy_set_header X-Real-IP $remote_addr; | ||||
|          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|      } | ||||
|                                                                                          | ||||
|      return 301 https://$server_name$request_uri; | ||||
|   | ||||
|  | ||||
| } | ||||
|                                                                                          | ||||
|  server { | ||||
|      listen 443 ssl; | ||||
|      server_name cal.DOMAIN; | ||||
|     ssl_certificate /etc/letsencrypt/live/cal.DOMAIN/fullchain.pem; # managed by Certbot | ||||
|     ssl_certificate_key /etc/letsencrypt/live/cal.DOMAIN/privkey.pem; # managed by Certbot | ||||
|                                                                                          | ||||
|      location / { | ||||
|          proxy_pass http://localhost:5232; | ||||
|          proxy_set_header Host $host; | ||||
|          proxy_set_header X-Real-IP $remote_addr; | ||||
|          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|      } | ||||
|   | ||||
| } | ||||
| ' > /etc/nginx/sites-available/radicale | ||||
| sudo ln -s /etc/nginx/sites-available/radicale /etc/nginx/sites-enables/ | ||||
| ``` | ||||
|  | ||||
| Finally, replace the example `DOMAIN` with your actual domain name. | ||||
|  | ||||
| ```bash | ||||
| DOMAIN=whatever.com | ||||
| sudo sed -i "s/DOMAIN/$DOMAIN/g" /etc/nginx/sites-available/radicale  | ||||
|  | ||||
| ``` | ||||
|  | ||||
| (optional: replace that `cal.` prefix with anything else) | ||||
|  | ||||
| Check nginx is happy: | ||||
|  | ||||
|  | ||||
| ```bash | ||||
| sudo nginx -t | ||||
| ``` | ||||
| You will almost certainly need a new SSL certificate for the site: | ||||
|  | ||||
| ```bash | ||||
| sudo certbod -d cal.$DOMAIN | ||||
| ``` | ||||
|  | ||||
| Start or restart both services: | ||||
|  | ||||
|  | ||||
| ```bash | ||||
| sudo systemctl start radicale | ||||
| sudo systemctl restart nginx | ||||
| ``` | ||||
|  | ||||
| You should now be able to log into your calendar, and add it to a phone. | ||||
|  | ||||
| NB: you don't need the port number. | ||||
		Reference in New Issue
	
	Block a user