mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 02:02:25 -05:00 
			
		
		
		
	[documentation] Add section for systemd service and nginx to installation guide (#353)
* add nginx and systemd section * fix typso * fix mkdoc and dots in config guide * specify port * Update nginx.md * add section about configuring gts to nginx docs * Update nginx.md Co-authored-by: zoe <z8V54gHftevp7LeRVyys$8@DosKq^FeQKUWU!WGpTyiLaxGojNdgnWkaWiv673Twg$aPm&hU>
This commit is contained in:
		
					parent
					
						
							
								a01b178467
							
						
					
				
			
			
				commit
				
					
						14c472c1ab
					
				
			
		
					 3 changed files with 157 additions and 7 deletions
				
			
		|  | @ -46,12 +46,12 @@ cp ./example/config.yaml . | |||
| 
 | ||||
| Now open the file in your text editor of choice so that you can set some important configuration values. Change the following settings: | ||||
| 
 | ||||
| * Set `host` to whatever hostname you're going to be running the server on (eg., `example.org`). | ||||
| * Set `port` to `443`. | ||||
| * Set `db-type` to `sqlite`. | ||||
| * Set `db-address` to `sqlite.db`. | ||||
| * Set `storage-local-base-path` to the storage directory you created above (eg., `/gotosocial/storage`). | ||||
| * Set `letsencrypt-cert-dir` to the certificate storage directory you created above (eg., `/gotosocial/storage/certs`). | ||||
| - Set `host` to whatever hostname you're going to be running the server on (eg., `example.org`). | ||||
| - Set `port` to `443`. | ||||
| - Set `db-type` to `sqlite`. | ||||
| - Set `db-address` to `sqlite.db`. | ||||
| - Set `storage-local-base-path` to the storage directory you created above (eg., `/gotosocial/storage`). | ||||
| - Set `letsencrypt-cert-dir` to the certificate storage directory you created above (eg., `/gotosocial/storage/certs`). | ||||
| 
 | ||||
| The above options assume you're using SQLite as your database. If you want to use Postgres instead, see [here](../configuration/database.md) for the config options. | ||||
| 
 | ||||
|  | @ -101,6 +101,42 @@ Replace `some_username` with the username of the account you just created. | |||
| 
 | ||||
| You should now be able to log in to your instance using the email address and password of the account you just created. We recommend using [Pinafore](https://pinafore.social) or [Tusky](https://tusky.app) for this. | ||||
| 
 | ||||
| ## 7. Install the Admin Control Panel (optional) | ||||
| ## 7. Enable the systemd service | ||||
| 
 | ||||
| If you don't like manually starting GoToSocial on every boot you might want to create a systemd service that does that for you. | ||||
| First create a new user and group for your gotosocial installation. | ||||
| 
 | ||||
| ```bash | ||||
| sudo useradd -r gotosocial | ||||
| sudo groupadd gotosocial | ||||
| sudo usermod -a -G gotosocial gotosocial | ||||
| ``` | ||||
| 
 | ||||
| Then make them the owner of your GoToSocial installation since they will need to read and write in it. | ||||
| 
 | ||||
| ```bash | ||||
| sudo chown -R gotosocial:gotosocial /gotosocial | ||||
| ``` | ||||
| 
 | ||||
| You can find a `gotosocial.service` file in the `example` folder on [github](https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/example/gotosocial.service) or your installation. | ||||
| Copy it to `/etc/systemd/system/gotosocial.service`. | ||||
| 
 | ||||
| ```bash | ||||
| sudo cp /gotosocial/example/gotosocial.service /etc/systemd/system/ | ||||
| ``` | ||||
| 
 | ||||
| Then use `sudoedit /etc/systemd/system/gotosocial.service` to change the `ExecStart=` and `WorkingDirectory=` lines according to your installation. | ||||
| If you have been following this guide word for word the defaults should be fine. | ||||
| After you're done enable the service. | ||||
| 
 | ||||
| ```bash | ||||
| sudo systemctl enable --now gotosocial.service | ||||
| ``` | ||||
| 
 | ||||
| ## 8. Install the Admin Control Panel (optional) | ||||
| 
 | ||||
| At some point you'll likely want to do things like change instance information, and block domains you don't want to interact with. See the [admin panel](../admin/admin_panel.md) instructions for this. | ||||
| 
 | ||||
| ## 9. Reverse proxy with nginx (optional) | ||||
| 
 | ||||
| If you want to run other webservers on port 433 or simply want to add an additional layer of security you might want to [use nginx as a reverse proxy](./nginx.md). | ||||
|  |  | |||
							
								
								
									
										113
									
								
								docs/installation_guide/nginx.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								docs/installation_guide/nginx.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,113 @@ | |||
| # Reverse proxy with nginx | ||||
| 
 | ||||
| ## Requirements | ||||
| 
 | ||||
| For this you will need certbot, the certbot nginx plugin and of course nginx. | ||||
| These are popular packages so your distro will probably have them. | ||||
| 
 | ||||
| ### Ubuntu | ||||
| 
 | ||||
| ```bash | ||||
| sudo apt install certbot python3-certbot-nginx nginx | ||||
| ``` | ||||
| 
 | ||||
| ### Arch | ||||
| 
 | ||||
| ```bash | ||||
| sudo pacman -S certbot certbot-nginx nginx | ||||
| ``` | ||||
| 
 | ||||
| ### OpenSuse | ||||
| 
 | ||||
| ```bash | ||||
| sudo zypper install nginx python3-certbot python3-certbot-nginx | ||||
| ``` | ||||
| 
 | ||||
| ## Configure GoToSocial | ||||
| 
 | ||||
| In your GoToSocial config turn off letsencrypt. | ||||
| First open the file in your text editor. | ||||
| 
 | ||||
| ```bash | ||||
| sudoedit /gotosocial/config.yaml | ||||
| ``` | ||||
| 
 | ||||
| Then set `letsencrypt-enabled: false`. | ||||
| 
 | ||||
| If GoToSocial is already running, restart it. | ||||
| 
 | ||||
| ```bash | ||||
| sudo systemctl restart gotosocial.service | ||||
| ``` | ||||
| 
 | ||||
| Or if you don't have a systemd service just restart it manually. | ||||
| 
 | ||||
| ## Set up nginx | ||||
| 
 | ||||
| First we will set up nginx to serve GoToSocial as unsecured http and then later use certbot to automatically upgrade to https. | ||||
| Please do not try to use it until that's done or you'll be transmitting passwords over clear text. | ||||
| 
 | ||||
| First we'll write a configuration for nginx and put it in `/etc/nginx/sites-available`. | ||||
| 
 | ||||
| ```bash | ||||
| sudo mkdir /etc/nginx/sites-available/ | ||||
| sudoedit /etc/nginx/sites-available/yourgotosocial.url.conf | ||||
| ``` | ||||
| 
 | ||||
| The file you're about to create should look a bit like this: | ||||
| 
 | ||||
| ```nginx.conf | ||||
| server { | ||||
|   listen 80; | ||||
|   server_name example.com; | ||||
|   location / { | ||||
|     proxy_pass http://localhost:8080; | ||||
|     proxy_set_header Host $host; | ||||
|   } | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Change `proxy_pass` to the ip and port that you're actually serving GoToSocial on and change `server_name` to your own domain name. | ||||
| If your domain name is `gotosocial.example.com` then `server_name gotosocial.example.com;` would be the correct value. | ||||
| If you're running GoToSocial on another machine with the local ip of 192.168.178.69 and on port 8080 then `proxy_pass http://192.168.178.69:8080;` would be the correct value. | ||||
| 
 | ||||
| Next we'll need to link the file we just created to the folder that nginx reads configurations for active sites from. | ||||
| 
 | ||||
| ```bash | ||||
| sudo mkdir /etc/nginx/sites-enabled | ||||
| sudo ln -s /etc/nginx/sites-available/yourgotosocial.url.conf /etc/nginx/sites-enabled/ | ||||
| ``` | ||||
| 
 | ||||
| Now check for configuration errors. | ||||
| 
 | ||||
| ```bash | ||||
| sudo nginx -t | ||||
| ``` | ||||
| 
 | ||||
| If everything is fine you should get this as output: | ||||
| 
 | ||||
| ``` | ||||
| nginx: the configuration file /etc/nginx/nginx.conf syntax is ok | ||||
| nginx: configuration file /etc/nginx/nginx.conf test is successful | ||||
| ``` | ||||
| 
 | ||||
| Everything working? Great! Then restart nginx to load your new config file. | ||||
| 
 | ||||
| ```bash | ||||
| sudo systemctl restart nginx | ||||
| ``` | ||||
| 
 | ||||
| ## Setting up SSL with certbot | ||||
| 
 | ||||
| You should now be able to run certbot and it will guide you through the steps required to enable https for your instance. | ||||
| 
 | ||||
| ```bash | ||||
| sudo certbot --nginx | ||||
| ``` | ||||
| 
 | ||||
| After you do, it should have automatically edited your configuration file to enable https. | ||||
| Just reload it one last time and after that you should be good to go! | ||||
| 
 | ||||
| ```bash | ||||
| sudo systemctl restart nginx | ||||
| ``` | ||||
|  | @ -17,6 +17,7 @@ nav: | |||
|     - "installation_guide/index.md" | ||||
|     - "installation_guide/binary.md" | ||||
|     - "installation_guide/docker.md" | ||||
|     - "installation_guide/nginx.md" | ||||
|   - "Configuration": | ||||
|     - "configuration/index.md" | ||||
|     - "configuration/general.md" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue